Skip to content

Commit 1c3656a

Browse files
hyperpolymathclaude
andcommitted
docs(adr-0005): T5 = document-the-bound — access-typing boundary + extraction path (owner-ratified)
Owner ratified T5 approach (c): document the bound now, name extraction as the future collapse. Extends ADR-0005 (which predated T5a) to the L2 access-typing pass: - MkTypedAccessFixture is the access-typing analogue of MkTrustedFixture; the named hypothesis is decode-faithfulness. - Adds a 3rd supersession path: extraction from the now-decidable AccessTypingSpec.decAccessTypingClean (collapses typing-logic trust; relocates the residual to byte->operator decode). - Addendum spells out the determine-vs-bound rationale: SiteWellTyped is the determinable side (holds by construction); a verifier's own soundness is inherently a bound conditional on a checker outside the spec's sight, so naming it is principled, not a stopgap. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent fdeeebb commit 1c3656a

1 file changed

Lines changed: 45 additions & 5 deletions

File tree

docs/decisions/0005-trustedfixture-audit-boundary.adoc

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ voids `I2` and therefore voids the `MkTrustedFixture`.
237237

238238
## Future work — when this ADR is superseded
239239

240-
The two paths that would supersede this ADR by collapsing the audit
240+
The three paths that would supersede this ADR by collapsing the audit
241241
boundary into a constructive proof:
242242

243243
. **WasmCert-Isabelle tie-back** — port the Rust verifier's
@@ -252,10 +252,50 @@ boundary into a constructive proof:
252252
be checked in the same CI run. The Idris2 side would then receive
253253
the verifier-soundness theorem and absorb the differential
254254
constructor into `VAStructural`.
255-
256-
Either upgrade would land its own ADR that supersedes this one. Until
257-
then, the audit boundary is `MkTrustedFixture` and the inspection
258-
invariants are I1/I2/I3.
255+
. **Extraction from the decidable spec** — the access-typing spec is
256+
now *decidable* (`AccessTypingSpec.decAccessTypingClean`, a
257+
correct-by-construction checker; see the addendum below). Extracting
258+
that decision procedure to the running checker would make the
259+
*running* verifier the verified one, collapsing all typing-**logic**
260+
trust. Note this **relocates** rather than eliminates the boundary:
261+
the residual trust becomes the byte→operator *decode* faithfulness
262+
(which is then the named bound, and where path 1's WasmCert tie-back
263+
would attach). Owner-ratified 2026-06-16 as the named future collapse
264+
for the L2 access-typing pass; this ADR remains the trusted base until
265+
it lands.
266+
267+
Any of these upgrades would land its own ADR that supersedes this one.
268+
Until then, the audit boundary is `MkTrustedFixture` (ownership) /
269+
`MkTypedAccessFixture` (access typing) and the inspection invariants are
270+
I1/I2/I3.
271+
272+
## Addendum 2026-06-16 — the access-typing boundary and determine-vs-bound
273+
274+
This ADR (2026-06-02) predates the L2 access-*typing* verifier pass
275+
(`verify_access_typing_from_module`) and its spec-of-record
276+
link:../../src/abi/TypedWasm/ABI/AccessTypingSpec.idr[`AccessTypingSpec.idr`]
277+
(T5a). The same audit-boundary design extends to it, unchanged in spirit:
278+
279+
* **`MkTypedAccessFixture` is the access-typing analogue of
280+
`MkTrustedFixture`.** Constructing one is the trust-injection moment for
281+
the access-typing pass; grep `MkTypedAccessFixture` to enumerate them.
282+
* **The named hypothesis is _decode-faithfulness_:** that the Rust
283+
verifier decodes the wasm operator stream the way the Idris model
284+
reasons about it. The Idris spec cannot see the bytes, so this is named
285+
here, not proven.
286+
287+
**Why naming the bound is principled, not a deferral of convenience
288+
(determine-vs-bound).** The spec predicate `SiteWellTyped` is the
289+
*determinable* side — fixed entirely by the schema (op kind, width,
290+
packed offset, in-region), and it holds *by construction*. A verifier's
291+
own *soundness*, by contrast, depends on a checker that sits *outside the
292+
spec's sight*, so it can only ever be a *bound conditional on that
293+
checker*. Extraction (path 3) does not remove that asymmetry; it *moves*
294+
the checker inside the spec's sight and exposes a new frontier one step
295+
further out (the decode). Naming the bound crisply is therefore the
296+
correct stance for the trusted base, not a stopgap — and the spec being
297+
*decidable* is exactly what makes the eventual extraction collapse
298+
available.
259299

260300
## Cross-references
261301

0 commit comments

Comments
 (0)