# spikes/wasm-phase0 — WASM-PROPOSAL Phase 0 (toolchain & runtime spike)

Validates the dynamic-linking foundation for the WASM unit runtime:
wasi-sdk PIC side modules + a host loader linking a core module and a unit
module at runtime with shared memory/table. **Exit criterion passed; runtime
selected: Wasmtime.** See `FINDINGS.md` for results and `realunit-report.md`
for the real-generated-unit compile log.

Everything builds and runs **on k-uce** (toolchains under `/opt`, artifacts
under `/tmp/uce/wasm-phase0`):

```
bash spikes/wasm-phase0/build_modules.sh   # core.wasm + unit.wasm (wasi-sdk)
bash spikes/wasm-phase0/build_loader.sh    # loader (Wasmtime C API)
/tmp/uce/wasm-phase0/loader                # expect: PHASE0 EXIT CRITERION: PASS
```

Files:

- `core.cpp` — core-module stand-in: owns memory/allocator/libc++, exports
  everything; includes the guest-side GOT.func resolver pattern
- `unit.cpp` — unit stand-in: PIC, imports allocator/runtime, exercises GOT,
  cross-module C++ objects, function pointers, lambdas
- `loader.cpp` — minimal runtime linker (standard wasm-c-api): dylink.0
  parsing, base allocation, GOT resolution, init sequencing
- `wasm_inspect.py` — dumps imports/exports/dylink.0 of a module
- `FINDINGS.md` — toolchain pins, WAMR rejection evidence, flag recipe,
  Phase 2/3 implications
- `realunit-report.md` — `collections.uce.cpp`/`hello.uce.cpp` compiled as
  side modules (worker-agent log)
