diff --git a/plans/erlang-on-sx.md b/plans/erlang-on-sx.md index cc068a23..9f4e1351 100644 --- a/plans/erlang-on-sx.md +++ b/plans/erlang-on-sx.md @@ -131,4 +131,18 @@ _Newest first._ ## Blockers -- _(none yet)_ +- **RESOLVED (2026-05-18) — SX runtime now exposes the platform + primitives Phase 8 BIFs need.** Delivered by `loops/fed-prims` + (see `plans/fed-sx-host-primitives.md` Handoff). Pure-OCaml, + WASM-safe except `http-listen` (native only). Wire Phase 8 BIFs: + - `crypto:hash/2` → `crypto-sha256` / `crypto-sha512` / + `crypto-sha3-256` (each `(bytes) -> hex-string`). + - `cid:from_bytes/1` → `cid-from-bytes` `(codec mh-bytes)`; + `cid:to_string/1` / canonical CID → `cid-from-sx` `(value)`; + dag-cbor via `cbor-encode` / `cbor-decode`. + - signature verify → `ed25519-verify` `(pk msg sig)` and + `rsa-sha256-verify` `(spki msg sig)` — both total (→ false). + - `file:list_dir/1` → `file-list-dir` `(path) -> (list string)`. + - fed-sx transport → `http-listen` `(port handler)` (native only). + Still deferred (leave blocked): `httpc` (HTTP client, v2) and + `sqlite-*` (v2 indexes) — not provided by fed-prims. diff --git a/plans/fed-sx-host-primitives.md b/plans/fed-sx-host-primitives.md index 014356ce..6869d666 100644 --- a/plans/fed-sx-host-primitives.md +++ b/plans/fed-sx-host-primitives.md @@ -145,7 +145,7 @@ check** → tests → commit → tick box → Progress-log line → push. - **Acceptance:** curl test script green; WASM build untouched (prim not in lib). Satisfies fed-sx Step 8 transport. -### Phase I — handoff +### Phase I — handoff ✅ DONE - Flip the `plans/erlang-on-sx.md` Blockers entry "SX runtime lacks platform primitives …" to **RESOLVED**, listing the exact SX primitive names so the Erlang loop can one-line-wire its blocked Phase 8 BIFs (`crypto:hash/2`, @@ -201,10 +201,38 @@ printf '(epoch 1)\n(crypto-sha256 "abc")\n' | \ | `file-list-dir` | `file:list_dir/1` | | `http-listen` | fed-sx kernel `http:listen/2` (Milestone 1 Step 8) | +**Status: DELIVERED (Phases A–H, 2026-05-18).** All primitives are +registered and reachable from SX (`(eval "(crypto-sha256 \"abc\")")` +via the epoch protocol). Signatures the Erlang loop can one-line-wire: + +- `(crypto-sha256 bytes) -> hex-string` — also `crypto-sha512`, + `crypto-sha3-256`. lib (`Sx_sha2`/`Sx_sha3`), WASM-safe. +- `(cbor-encode value) -> bytes` / `(cbor-decode bytes) -> value` — + deterministic dag-cbor, lib (`Sx_cbor`), WASM-safe. +- `(cid-from-bytes codec mh-bytes) -> cid-string` / + `(cid-from-sx value) -> cid-string` — lib (`Sx_cid`), WASM-safe. +- `(ed25519-verify pk msg sig) -> bool` / + `(rsa-sha256-verify spki msg sig) -> bool` — total (bad input → + false), lib (`Sx_ed25519`/`Sx_rsa`), WASM-safe. +- `(file-list-dir path) -> (list string)` — sorted, lib, WASM-stubbed. +- `(http-listen port handler) -> never` — **NATIVE ONLY** + (`bin/sx_server.ml`); absent from the WASM kernel by design. + +Still **deferred** (not Milestone 1, not provided here): `httpc-request` +(HTTP client / federation v2), `sqlite-*` (v2 indexes). The Erlang loop +should leave `httpc`/`sqlite` BIFs blocked with that note. + ## Progress log _Newest first._ +- 2026-05-18 — Phase I: handoff. `erlang-on-sx.md` Blockers gained one + RESOLVED entry (no "SX runtime lacks…" entry pre-existed; it read + "_(none yet)_") mapping every delivered primitive → its Phase 8 BIF, + with httpc/sqlite explicitly left deferred. Handoff section here + filled with signatures + native/WASM notes. Doc-only (no lib/erlang/ + edits); Erlang 530/530 unchanged. **fed-sx Milestone 1 Steps 1-3 + 8 + prerequisites all green — plan complete (Phases A–I done).** - 2026-05-18 — Phase H: `http-listen` primitive in `bin/sx_server.ml` (NATIVE ONLY — Unix sockets + Thread per connection, Mutex around the shared-runtime handler call; HTTP/1.1, Connection: close;