@@ -30,8 +30,8 @@ Three repositories are in scope. "Verification" means something different in eac
3030| Docs/Interface harvest only — core is deleted, not proven.
3131
3232| `svalinn`
33- | ReScript edge gateway → migrating to AffineScript + Ephapax. Type-safety and
34- schema/property tests, not dependent types.
33+ | ReScript edge gateway → migrating to * Ephapax* (replaces all ReScript).
34+ Type-safety and schema/property tests, not dependent types.
3535| *No — disposed* to a delegated session (see Disposed Tracks). Specs tracked here.
3636|===
3737
@@ -57,11 +57,13 @@ Three repositories are in scope. "Verification" means something different in eac
5757
5858| *D3 — svalinn: migrate before proving*
5959| Prove where the language is final; migrate-then-prove where it is changing.
60- svalinn migrates ReScript → *AffineScript* (gateway bulk; affine boundary
61- decoders eliminate `Obj.magic`) + *Ephapax* linear tokens (surgical: JWT/JTI
62- single-use & revocation, OAuth nonce/PKCE, session/container lifecycle). Its
63- *specifications* are captured now (Disposed Tracks); its *proofs* come after
64- migration. Proving the about-to-be-deleted ReScript is waste.
60+ svalinn migrates ReScript → *Ephapax* — Ephapax replaces *all* the ReScript.
61+ Its linear/exactly-once types make JWT/JTI single-use & revocation, OAuth
62+ nonce/PKCE, and session/container lifecycle *compile-time* guarantees, and typed
63+ boundary decoders eliminate the 20+ `Obj.magic`. Its *specifications* are
64+ captured now (Disposed Tracks); its *proofs* come after migration. Proving the
65+ about-to-be-deleted ReScript is waste. (AffineScript is *not* the target — it
66+ surfaced only as a format exemplar for the migration map.)
6567|===
6668
6769== Current proof state (ochrance, canonical)
@@ -153,18 +155,26 @@ documented, never faked), disposed tracks handed off, PRs landed.
153155These are *not* this thread's work. Each is a brief for a delegated session,
154156disposed at Compaction 1. Specs live here so nothing is lost.
155157
156- === svalinn — migrate (AffineScript + Ephapax) , then verify [model: Sonnet]
158+ === svalinn — migrate ReScript → Ephapax, then verify [model: Sonnet]
157159
158- PRECONDITION: language migration precedes proof (Decision D3).
160+ PRECONDITION: language migration precedes proof (Decision D3). The *first*
161+ deliverable is a migration map (the critical chain of blockers) — handed to an
162+ offline Claude with `hyperpolymath/ephapax` access, targeting
163+ `svalinn/docs/ephapax-migration/BLOCKER-LINEAGE.adoc`. ROOT of that chain, and the
164+ one thing this session could not settle (ephapax is out of scope here): whether
165+ Ephapax is yet an implementable application language (compiler, runtime,
166+ HTTP/async I/O, JSON, fetch, crypto, FFI) or still a proof-level calculus.
159167
160- . *Migrate* ReScript → AffineScript (gateway, auth, policy, MCP, vörðr, compose).
161- Affine boundary-decoders replace the *20+ `Obj.magic`* casts in security paths.
168+ . *Migrate* ReScript → Ephapax (gateway, auth, policy, validation, MCP, vörðr,
169+ compose; ~27 `src/` modules + the `ui/` ReScript frontend). Typed boundary
170+ decoders make the *20+ `Obj.magic`* casts in security paths impossible.
162171. *Ephapax linear tokens* for exactly-once resources: JWT/JTI single-use + the
163172 revocation ledger (fixes the `hasRevocationList = false // TODO` hazard by
164- construction), OAuth nonce/PKCE, session/container lifecycle.
173+ construction), OAuth nonce/PKCE, session/container lifecycle, vörðr delegation .
165174. *Unblock CI*: the 53 ReScript unit/security tests don't execute under Deno
166175 (`@rescript/core` resolution) — they vanish with the migration; ensure the
167- AffineScript suite runs in CI.
176+ Ephapax suite runs in CI. (svalinn `main` CI is currently red on pre-existing
177+ ReScript breakage — do not fix it in ReScript; it is being replaced.)
168178. *Specs to discharge after migration* (language-agnostic): policy determinism;
169179 `allow ∩ deny` composition + monotonicity; JWT single-use & revocation;
170180 no unchecked boundary casts; JSON-Schema conformance of all 9 gateway types.
@@ -173,6 +183,10 @@ PRECONDITION: language migration precedes proof (Decision D3).
173183+
174184DEPENDENCY: Ephapax has *3 Admitted* (Coq) — svalinn's linear guarantees inherit
175185those holes until closed. Track upstream.
186+ +
187+ DISCHARGES: svalinn security issue #13 (19 Critical/High panic-attack findings —
188+ `decodeJwt()` without `jwtVerify()`, `JSON.parseExn`) is addressed structurally by
189+ this migration (verified JWT + typed deserialisation), not by patching ReScript.
176190
177191=== ochrance-framework — retire core, harvest Interface, keep docs [model: Sonnet]
178192
@@ -206,7 +220,7 @@ Keep PR #32 (combiner generalisation) shepherded to green; it is subscribed.
206220 novel theorem or structural-wall reasoning.
207221| *Sonnet 4.6*
208222| Proof *mechanisation* (known shape), refactors, tests, and the disposed-track
209- application work (svalinn AffineScript , framework, ABI).
223+ application work (svalinn Ephapax migration , framework, ABI).
210224| *Haiku 4.5*
211225| Grunt sweeps — suites, grep, SPDX/format, CI watch.
212226|===
0 commit comments