Skip to content

Commit 6d9b74c

Browse files
docs: Pillar E in-repo close-out + Gate 2 Rev 5 + Lane 4/5 scope/scaffold (#121)
## Summary In-repo close-out work across all four currently-open lanes per `roadmap.adoc`. Stacked on PR #118 (consolidation); merges into that branch and will land on `main` together when #118 squashes. - **Lane 1 (Pillar E in-repo).** Status NOTE in `paper.adoc` + `types-abstract.adoc` declaring tags 1/2/3 cleared; tag 4 (ordinal appendix) is gated on Bachmann–Howard per `roadmap.adoc` §Lane 3 — not a missing deliverable for the in-repo half of Pillar E. Honest about the offline boundary (venue choice, Zenodo DOI, library packaging, outreach). - **Lane 2 (Gate 2 re-audit).** `docs/characteristic.adoc` Revision 5: re-checks 4/4 surviving against everything post-Rev-4 (EI-2 termination via PATH B, `characteristic.NonTruncatable` Q2.1 PARTIALLY REDUCIBLE caveat, deliberately-broken `characteristic.N5Falsifier`). Comfortable threshold (≥3/4) met by margin of one. Candidate N5 remains unadopted on the same logic as Rev 4. Closes the Lane 2 close-out criterion (3). - **Lane 4 [PARKED] (bridges-CI scope).** `docs/echo-types/decisions/lane-4-bridges-ci-scope.adoc` adopts option A (separate `echo-bridges-ci` repo with submodules) over option B (in-tree submodules). Three load-bearing reasons; three override triggers; unpark-time playbook. Lane stays PARKED. - **Lane 5 [PARKED] (tutorial track).** `tutorial/README.adoc` scaffolds three walkthroughs at design-doc level: (1) certified region-exit audit tied to ephapax L3 = killer-app candidate; (2) epistemic erasure with the in-memory-bytes-vs-type-level disclosure as the opening sentence; (3) provenance/debugging echo. No Agda lands. Lane stays PARKED. - **`roadmap.adoc`**: Lane 2 close-out item (3) marked LANDED; Lane 4 + Lane 5 sections gain pre-resolved-decision/scaffold pointers. Build invariant held: `agda All.agda` + `agda Smoke.agda` both exit 0 under `--safe --without-K`, zero postulates / escape pragmas / funext (no Agda touched in this commit). ## Test plan - [x] `agda --library-file=/tmp/agda-libs -i proofs/agda proofs/agda/All.agda` → exit 0 - [x] `agda --library-file=/tmp/agda-libs -i proofs/agda proofs/agda/Smoke.agda` → exit 0 - [x] No new postulates / escape pragmas (docs-only commit) - [x] GPG-signed - [ ] CI: governance + Hypatia + agda jobs green - [ ] Auto-merge enabled (squash, delete branch) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 7234a8b commit 6d9b74c

6 files changed

Lines changed: 516 additions & 8 deletions

File tree

docs/characteristic.adoc

Lines changed: 119 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@ Gate 2 of the identity claim. It audits the nominees against the gate's
1111
falsifier — "naturally echo-shaped, not reducible to generic sigma/fiber
1212
lemmas" — and reports the threshold outcome.
1313

14-
This is *Revision 4*. It adds a fourth nominee (`EchoLinear.degradeMode-compose`),
15-
introduces a new construction in this lane (`characteristic.RoleGraded`)
16-
that closes the open recommendation from the handoff's Observation E,
17-
and proposes a candidate fifth nominee. See §<<revision,Revision notes>>
18-
for the diff.
14+
This is *Revision 5* (2026-05-26). It is the close-out re-audit
15+
required by `roadmap.adoc` §Lane 2: it re-checks that the
16+
Revision-4 nominee table still clears the *comfortable* threshold
17+
(≥ 3 of 4 surviving) under everything that has landed in this
18+
lane since then. Verdict: still 4/4 surviving; comfortable
19+
threshold met by margin of one. The Revision-5 substance is in
20+
§<<revision-5,Revision-5 re-audit (2026-05-26)>>; the per-nominee
21+
audits below are unchanged from Revision 4. See §<<revision,Revision
22+
notes>> for the full diff.
1923

2024
toc::[]
2125

@@ -518,7 +522,117 @@ withdrawn lemma can be left in place as a historical signpost.
518522
| 3 | Amendment to `roadmap-gates.adoc` adopted. Nominee list: `degrade-via-join`, `degrade-compose`, `applyChoreo-compose`. 3/3 surviving across two modules. Recommended further work: genuine integration theorem; fourth nominee for diversification.
519523

520524
| 4 | Added `EchoLinear.degradeMode-compose` as N4 (per the Revision-3 recommendation; user-explicit). Built `characteristic.RoleGraded` and `choreo-grade-commute` (closes handoff Observation E). 4/4 surviving across three modules. Proposed adding `choreo-grade-commute` as N5 (left to integrator's discretion).
525+
526+
| 5 (2026-05-26) | Close-out re-audit per `roadmap.adoc` §Lane 2: re-checks the Revision-4 nominee table against everything that has landed since (EI-2 terminated negative; `characteristic.NonTruncatable` for Q2.1 received-`y` form is PARTIALLY REDUCIBLE; the broken `characteristic.N5Falsifier` is ledgered, not silently dropped). Verdict: 4/4 still surviving, *comfortable* threshold (≥3/4) met by margin of one. Candidate N5 (`choreo-grade-commute`) remains unadopted: the post-Rev-4 EI-2 termination shows its non-trivial content is the same single `(c⊑s, keep≤keep)` cell as before, so nominating it would not strengthen the count beyond cosmetic.
527+
|===
528+
529+
[[revision-5]]
530+
== Revision-5 re-audit (2026-05-26)
531+
532+
This section is the close-out audit named in `roadmap.adoc` §Lane 2
533+
close-out criterion (3). It re-checks the Revision-4 nominee table
534+
against everything that has landed in the characteristic / Gate-2
535+
lane since Revision 4. Three categories of evidence were considered;
536+
none weakens the Revision-4 verdict.
537+
538+
=== Bar being checked
539+
540+
`roadmap.adoc` §Lane 2 distinguishes two thresholds (taken from
541+
`roadmap-gates.adoc` Gate 2): the *honest minimum* (≥ 2 of 4
542+
surviving) and the *comfortable* threshold (≥ 3 of 4 surviving).
543+
Revision 4 reported 4/4. Lane 2 close-out asks: under everything
544+
this lane has produced since, does that still hold by the
545+
comfortable bar?
546+
547+
=== Evidence reviewed since Revision 4
548+
549+
. *EI-2 terminated — negative verdict, PATH B* (`docs/EI2_REPORT.adoc`,
550+
authoritative). Eight investigation phases, seven data points
551+
(sibling 2D constructions `characteristic.RoleMode`,
552+
`characteristic.ModeGraded`, 3D `characteristic.RoleModeGrade`
553+
with three pairwise commutations + a triple, self-pairing
554+
`characteristic.RoleRole`), plus the formal exhibit
555+
`characteristic.ChoreoInjective` for the non-loss-only criterion
556+
and the partial generic `characteristic.RecipeTheorem`. The
557+
termination finding is that the integration recipe with the
558+
existing five named axes does *not* carry substantive simultaneous
559+
cross-axis content — every "non-trivial" cell carries one-axis-at-
560+
a-time content. The five doc locations enumerated in EI2_REPORT
561+
§"Documentation cascade" have all been updated accordingly.
562+
. *Q2.1 / `characteristic.NonTruncatable`.* The general statement of
563+
`echo-not-prop` for `(f, y)` with two distinct preimages is
564+
re-exported under the Q2.1 name; the received-`y` form is
565+
*PARTIALLY REDUCIBLE* per the module's own Gate-2 falsifier audit
566+
(proof factors through generic Σ; echo-specific content is in the
567+
statement only). The constructed-`y` form, which builds `y` from
568+
bare non-injectivity, carries echo-specific content but is not on
569+
the Revision-4 nominee table — it is closer to a Gate-3 example
570+
obligation than a Gate-2 nominee.
571+
. *`characteristic.N5Falsifier` — KNOWN BROKEN, DELIBERATELY EXCLUDED*
572+
from `characteristic/All.agda` and from any CI green closure
573+
(`UnsolvedConstraints` + `UnsolvedMetaVariables`). Status disclosed
574+
in the module's own broken banner and at
575+
`docs/echo-types/earn-back-plan.adoc` item C/N5; monitored by an
576+
expected-failure CI gate. *Crucially: nothing in N5Falsifier is
577+
cited as evidence in this audit, and its broken status does not
578+
count against any nominee. The fact that an attempted falsifier
579+
for N5 (= `choreo-grade-commute`) is not mechanised is exactly why
580+
N5 itself is not adopted in this revision.*
581+
582+
=== Per-nominee re-check
583+
584+
[cols="1,2,2,3", options="header"]
521585
|===
586+
| Nominee | Module | Status as of Rev 5 | Reason
587+
588+
| N1 | `EchoGraded.degrade-via-join` | SURVIVES (unchanged from Rev 4) | The lemma is on the loss-grade lattice's join, not on any integration claim. EI-2 termination does not touch it. No falsifier attempted since Rev 4.
589+
| N2 | `EchoGraded.degrade-compose` | SURVIVES (unchanged from Rev 4) | As N1: single-decoration lemma; EI-2 termination is orthogonal. No falsifier attempted since Rev 4.
590+
| N3 | `EchoChoreo.applyChoreo-compose` | SURVIVES (unchanged from Rev 4) | Single-decoration role-reachability lemma; the `client-to-server` content this lemma factors through is the very content EI-2 traced as the one load-bearing non-trivial cell across 2D pairings — that is independent evidence the lemma is non-vacuous, not a weakening.
591+
| N4 | `EchoLinear.degradeMode-compose` | SURVIVES (unchanged from Rev 4) | Single-decoration mode lemma with the specific `weaken` content (`no-section-collapse-to-residue` attached); EI-2 termination is orthogonal.
592+
|===
593+
594+
=== Verdict
595+
596+
Survivors: N1, N2, N3, N4. Count: 4. Honest threshold (≥ 2): met.
597+
Comfortable threshold (≥ 3): met by margin of one. The Lane 2
598+
close-out criterion in `roadmap.adoc` is satisfied.
599+
600+
=== What the re-audit explicitly does NOT do
601+
602+
. *Does not nominate N5.* The candidate fifth nominee
603+
(`characteristic.RoleGraded.choreo-grade-commute`) remains a
604+
candidate. EI-2's termination shows the protocol-pass-but-narrow
605+
reading from Rev 4 was correct: the only non-trivial cell of the
606+
2D family's commutation is `(c⊑s, keep≤keep)`, reducing to
607+
`client-to-server e` — the same Choreo content N3 already carries.
608+
Nominating it would push the count to 5/5, but the marginal
609+
evidence is the same `client-to-server` content already credited
610+
to N3, so nominating it would be cosmetic. Left unadopted on the
611+
same logic as Rev 4.
612+
. *Does not retroactively retract any Rev-4 verdict.* No nominee's
613+
falsifier was attempted and *failed*; the absence of attempts is
614+
carried forward as a Rev-4 honest qualification (§<<qualifications,
615+
Honest qualifications>> item 3), not a Rev-5 finding.
616+
. *Does not promote `characteristic.NonTruncatable.Q2-1` to the
617+
nominee table.* Its own broken-Gate-2 audit (PARTIALLY REDUCIBLE)
618+
was applied honestly; the lemma remains useful as a Gate-3
619+
signpost, not as a Gate-2 survivor.
620+
621+
=== Pointer additions since Rev 4
622+
623+
* `proofs/agda/characteristic/RoleMode.agda`,
624+
`RoleModeGrade.agda`, `RoleRole.agda`, `ModeGraded.agda`,
625+
`ChoreoInjective.agda`, `RecipeNonTriviality.agda`,
626+
`RecipeSpec.agda`, `RecipeTheorem.agda`, `InteractionTest.agda` —
627+
EI-2 investigation lane. Not Gate-2 nominees; supply the
628+
EI-2-termination evidence the §"Evidence reviewed" item 1 cites.
629+
* `proofs/agda/characteristic/NonTruncatable.agda` — Q2.1, see
630+
§"Evidence reviewed" item 2.
631+
* `proofs/agda/characteristic/N5Falsifier.agda` —
632+
*KNOWN BROKEN, NOT IN CI CLOSURE*; see §"Evidence reviewed"
633+
item 3.
634+
* `docs/EI2_REPORT.adoc` — authoritative EI-2 verdict.
635+
* `proofs/agda/characteristic/All.agda` — the lane-local CI seam.
522636

523637
== Cross-lane observations
524638

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
= Lane 4 scope decision: bridges-CI architecture
2+
:toc: macro
3+
:toclevels: 2
4+
:sectnums:
5+
:icons: font
6+
7+
[.lead]
8+
Decision document for `roadmap.adoc` §"Lane 4 [PARKED] — Bridges-CI".
9+
This file resolves the scope question that the parked-lane line
10+
asked, while keeping the lane formally parked until its unblocking
11+
condition (Lane 1 close-out) is met. Author: Claude session,
12+
2026-05-26.
13+
14+
toc::[]
15+
16+
== The question this document answers
17+
18+
`roadmap.adoc` §"Lane 4 [PARKED]" records:
19+
20+
[quote]
21+
End-to-end verified bridges to Janus, Tropical, CNO, etc.
22+
currently sit as in-tree modules (`EchoJanusBridge.agda`,
23+
`EchoTropical.agda`, `EchoCNOBridge.agda`, `DyadicEchoBridge.agda`)
24+
without CI-verified round-trips against the target codebases. Two
25+
architectural options when unparking: …
26+
27+
This document picks one of those two architectures and pins the
28+
choice so a future session unparking Lane 4 does not re-litigate it.
29+
It does *not* re-open Lane 4 — the unblocking condition (Lane 1
30+
closes) still gates activation.
31+
32+
== Decision
33+
34+
*Adopt option A: a separate `echo-bridges-ci` repository pulling
35+
echo-types and each target as submodules.*
36+
37+
The roadmap line already states this is preferred unless broader
38+
research-plan priorities favour tighter integration. As of
39+
2026-05-26 there is no such preference on file; this document
40+
ratifies the preferred reading as the *decision* rather than the
41+
default.
42+
43+
== Why option A
44+
45+
Three load-bearing reasons, in priority order.
46+
47+
. *`--safe --without-K` discipline stays inside echo-types.* Every
48+
in-tree bridge module today (`EchoJanusBridge`, `EchoTropical`,
49+
`EchoCNOBridge`, `DyadicEchoBridge`) typechecks under
50+
`--safe --without-K` with zero postulates because the target
51+
codebase's content is *encoded structurally* (e.g. `EchoJanusBridge`
52+
mirrors januskey's eight-variant `OpKind` as a local Agda
53+
inductive). Pulling the actual target codebases in-tree would
54+
drag their build invariants into this repo's CI, several of which
55+
(Rust / SPARK / Idris2 / TypeScript) cannot be `--safe --without-K`
56+
by construction. Option B silently degrades the single invariant
57+
this repo is currently strict about.
58+
. *Bridge instability does not propagate.* The targets evolve on
59+
their own cadence; a verified-translation lemma that breaks
60+
because the target's API moved should land as a *bridge-CI
61+
failure*, not as a red echo-types build. The blast radius of
62+
bridge churn must stay outside the load-bearing repo (Lane 1).
63+
. *Lane 1 is the load-bearing lane.* `roadmap.adoc` §Lanes lists
64+
Lane 1 first by priority for a reason: the paper / external
65+
recognition. Anything that risks Lane 1's CI cleanliness for
66+
Lane 4's content is the wrong trade-off as long as Lane 1 is
67+
load-bearing.
68+
69+
== When option B (in-tree submodules) would override
70+
71+
Three concrete triggers, all of which must hold simultaneously,
72+
would re-open this decision:
73+
74+
. The user's stated priorities shift to favour tighter integration
75+
with one specific target codebase to the extent that bridge churn
76+
*should* fail the echo-types build.
77+
. The target codebase in question is itself `--safe --without-K`
78+
compatible (in practice: Agda or Idris2-with-totality-checked
79+
modules), so option B does not degrade the invariant.
80+
. Lane 1 has *fully closed* (not merely close-out-met) — i.e. the
81+
paper is published or accepted, and external-recognition pressure
82+
on CI cleanliness has lifted.
83+
84+
Absent all three, option A stands.
85+
86+
== What option A looks like at unpark time
87+
88+
When Lane 1 closes and Lane 4 is unparked, the work expands to:
89+
90+
. *New repository `hyperpolymath/echo-bridges-ci`* under the same
91+
org. Same licence policy (MPL-2.0 per the recent estate sweep).
92+
. *Submodule layout* under `bridges/`:
93+
+
94+
[source,text]
95+
----
96+
bridges/
97+
echo-types/ → submodule pinning hyperpolymath/echo-types
98+
januskey/ → submodule pinning hyperpolymath/januskey
99+
cno/ → submodule pinning hyperpolymath/cnocode (or wherever absolute-zero lives)
100+
ephapax/ → submodule pinning hyperpolymath/ephapax
101+
...
102+
----
103+
. *Per-bridge verified-translation lemmas* land in
104+
`bridges/<target>/verify.agda` (or `.idr`/`.lean` as the target's
105+
proof assistant requires). Each lemma states the round-trip
106+
property between the echo-types in-tree mirror (e.g.
107+
`EchoJanusBridge.OpKind`) and the live target type (e.g.
108+
januskey's `src/abi/Types.idr` `OpKind`). The CI seam is *this
109+
lemma typechecking*, not the targets themselves typechecking
110+
against echo-types.
111+
. *CI matrix* per bridge: a build job that bumps the submodule
112+
pin, runs the verify lemma, and reports green/red. Red is a
113+
bridge-CI signal, not a target-repo signal — neither this repo
114+
nor any target is gated on bridge-CI green.
115+
116+
== What stays in echo-types after option A is built
117+
118+
The current in-tree bridge modules
119+
(`EchoJanusBridge.agda`, `EchoTropical.agda`, `EchoCNOBridge.agda`,
120+
`DyadicEchoBridge.agda`) *stay where they are*. They are the local
121+
structural mirrors that the bridge-CI verified-translation lemmas
122+
target on the echo-types side. Deleting them would break the
123+
bridge-CI lemmas without strengthening this repo. The roadmap
124+
should reflect: "in-tree mirrors are the canonical Agda statement
125+
of the bridge interface; round-trip verification against the live
126+
target is in `echo-bridges-ci`."
127+
128+
== Open question this decision deliberately leaves
129+
130+
The Tropical bridge does not point at a single canonical target
131+
repo today (the tropical decoration is a mathematical pattern, not
132+
a codebase). When Lane 4 unparks, the Tropical bridge either (a)
133+
finds a concrete consumer to verify against, or (b) stays as the
134+
in-tree `EchoTropical.agda` plus `AntiEchoTropical.agda` /
135+
`AntiEchoTropicalGeneric.agda` and is *not* migrated into
136+
`echo-bridges-ci`. Option (b) is the honest default; option (a)
137+
requires a named consumer.
138+
139+
== Status
140+
141+
Decision: *option A adopted as of 2026-05-26*.
142+
143+
Lane 4 status: still *PARKED*. This document does not unpark it.
144+
The unblocking condition (Lane 1 closes per `roadmap.adoc` Lane 1
145+
close-out criterion) is unchanged.
146+
147+
When Lane 4 unparks, the first three actions are:
148+
149+
. Create `hyperpolymath/echo-bridges-ci` per §"What option A looks
150+
like at unpark time".
151+
. Migrate the JanusBridge round-trip from a structural mirror to a
152+
verified-translation lemma against the live januskey
153+
`src/abi/Types.idr` `OpKind`.
154+
. Migrate the CNO bridge analogously.
155+
156+
That sequence is *not* started in this session; recording it here
157+
saves the next session from re-deriving the unpark plan.
158+
159+
== References
160+
161+
* `roadmap.adoc` §"Lane 4 [PARKED] — Bridges-CI"
162+
* `docs/bridges/cross-repo-bridge-status.md` — current per-bridge status
163+
* `proofs/agda/EchoJanusBridge.agda`, `EchoTropical.agda`,
164+
`EchoCNOBridge.agda`, `DyadicEchoBridge.agda` — in-tree mirrors
165+
* `CLAUDE.md` §"Ecosystem context" — list of adjacent target repos

docs/echo-types/paper.adoc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@ abstract
1919
(`types-abstract.adoc`) is the short, already-submission-ready
2020
companion; this is the full CPP/ITP-style mechanised-metatheory
2121
paper it grows into.
22+
23+
*Pillar E in-repo close-out (2026-05-26).* Of the four `[EXPAND]`
24+
tags originally on this paper: tag 1 (background / notation primer)
25+
cleared in PR #73; tag 2 (related work — Granule / QTT,
26+
Uustalu–Vene comonads, coeffects, lens/optic vs witness-transport
27+
leg) cleared in PR #120, with the single-page reviewer companion at
28+
`docs/echo-types/comparators.adoc` shipping the axis-by-axis
29+
summary; tag 3 (evaluation — proof-size / cost table, honest
30+
account of the common-upper-bound idiom) cleared earlier in PR #84
31+
(see §"Evaluation and discussion"). Tag 4 (ordinal consumer-evidence
32+
appendix) is the only one remaining open, and it is *gated* on the
33+
ordinal-track milestone per `roadmap.adoc` §Lane 3 — not a missing
34+
deliverable for the in-repo half of Pillar E. Everything else
35+
(venue choice, Zenodo DOI, library packaging, outreach) is
36+
author-driven and is flagged but not auto-run.
2237
====
2338

2439
toc::[]

docs/echo-types/types-abstract.adoc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,14 @@ Submission logistics (venue deadline, TYPES-template formatting,
185185
author metadata, Zenodo DOI, arXiv cross-post) remain offline and
186186
author-driven; they are downstream of, not a substitute for, the
187187
re-review.
188+
189+
NOTE: *In-repo Pillar E status (2026-05-26).* The full `paper.adoc`
190+
has cleared all `[EXPAND]` tags except the ordinal consumer-evidence
191+
appendix (gated on Bachmann–Howard per `roadmap.adoc` §Lane 3). Any
192+
further re-review of this abstract should treat the full paper as
193+
the canonical reference for narrowed claims; this abstract is the
194+
2-page condensation of it. The single-page reviewer companion
195+
`docs/echo-types/comparators.adoc` carries the axis-by-axis
196+
comparison against Granule, QTT, choreographic types, and Linear
197+
Haskell. See `roadmap.adoc` §"Pillar status" for the lane-level
198+
view.

roadmap.adoc

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,14 @@ gate cross-links) landed in-session. Tracks B + C remain.
169169
headline example (parser, provenance, abs-int) with the small
170170
Σ-misuse it blocks. Builds clean under `--safe --without-K`;
171171
pinned in `Smoke.agda` under own `using` block.
172-
. The Gate 2 nominee list is re-audited and crosses the *comfortable*
173-
threshold (≥ 3 of 4 surviving), not merely the honest minimum.
174-
*(Remaining open item for Lane 2 close-out.)*
172+
. *LANDED 2026-05-26.* The Gate 2 nominee list is re-audited (Rev 5,
173+
`docs/characteristic.adoc` §"Revision-5 re-audit (2026-05-26)") and
174+
still crosses the *comfortable* threshold: 4/4 surviving, margin of
175+
one above the comfortable bar (≥ 3 of 4). The re-audit explicitly
176+
re-checks the post-Rev-4 evidence (EI-2 termination,
177+
`characteristic.NonTruncatable` Q2.1, the deliberately broken
178+
`characteristic.N5Falsifier`) and finds none of it weakens any
179+
surviving nominee.
175180

176181
*Artefacts (landed today).* `core/skepticisms/is-this-just-sigma-types.md`
177182
(canonical answer doc, 5-section structure mirroring the demands);
@@ -218,6 +223,16 @@ subtree. Per-session ledger in CLAUDE.md §"Session arc 2026-05-20".
218223

219224
*Unblocking condition.* Lane 1 closes.
220225

226+
*Scope decision (pre-resolved 2026-05-26).*
227+
`docs/echo-types/decisions/lane-4-bridges-ci-scope.adoc` adopts
228+
**option A** (separate `echo-bridges-ci` repository pulling
229+
echo-types and each target as submodules) per the recommendation
230+
this section already carried. The decision document also names the
231+
three triggers that would override the choice (all three must hold
232+
simultaneously) and lays out what option A looks like at unpark
233+
time, so an unparking session does not re-derive the architecture.
234+
Lane 4 itself remains PARKED.
235+
221236
*Scope question to resolve when unparking.* End-to-end verified
222237
bridges to Janus, Tropical, CNO, etc. currently sit as in-tree
223238
modules (`EchoJanusBridge.agda`, `EchoTropical.agda`, `EchoCNOBridge.agda`,
@@ -253,6 +268,14 @@ in-memory bytes are zeroed — conflating these is a category error a
253268
sceptic will catch); (3) provenance / debugging echo over a small
254269
state-reconstruction example.
255270

271+
*Scaffold (pre-resolved 2026-05-26).* `tutorial/README.adoc` lands
272+
the three walkthroughs at design-doc level with their target file
273+
layouts, honest-bound disclosures, the per-walkthrough Smoke pin
274+
discipline, and the killer-app-candidate close-out check on
275+
Walkthrough 1. No Agda lands at this stage; the scaffold exists so
276+
an unparking session lands Agda directly rather than re-deriving
277+
the pedagogy. Lane 5 itself remains PARKED.
278+
256279
== Closed lanes
257280

258281
(none yet — populated when a lane closes per its close-out criterion).

0 commit comments

Comments
 (0)