💳 Fund Autonomy Ledgernot signed in🔑 Sign in

Interventions · countable events

When a commit leaves its lane, extra work triggers — automatically

Every commit here gets a deterministic, LLM-free drift receipt (the mechanism). When a receipt lands out of lane (off-lane share above the 15% threshold), that is one countable event — and it triggers an intervention: a sensemaking pass explains the drift, the fixes get checklisted, and the story is published here. Countable events are what make a lane priceable; this page is the count. Each entry is a structural alert, not a scolding — a diagnosis, not a verdict — and the ledger you are reading is a loss ratio, published by the house that carries it. Stated exceptions are what surplus looks like in print.

Out-of-lane receipts per day

2026-10-13
27 · 🧪 ☕ 📐 🎩 🧭 🔨 🎤
2026-10-11
5 · 📐 🎩 🧪
2026-10-10
10 · 📐 🔨 ☕ 🧪
2026-09-30
35 · 🧪 📐 🔨 🧭 🔒
2026-09-29
75 · ☕ 🔨 🧪 🎤 📐 🧭 🎩 steer-worker 🤖
2026-09-24
47 · 🧪 🔨 📐 🧭 ☕ 🎤
2026-09-23
88 · 🧭 📐 🧪 🔨 ☕ 🎤 🎩
2026-09-22
19 · 🔨 🧭 ☕ 📐 🧪 🎩
2026-09-21
66 · 🧭 🧪 🔨 📐 ☕
2026-09-20
49 · 🧪 🧭 📐 🎩 🔨 🔧 📣
2026-09-19
61 · 🧪 📐 🔨 🎤 🎩 🧭 ☕
2026-09-18
103 · 🧪 ☕ 🎩 📐 🧭 🔨
2026-09-17
71 · 🎩 🧪 🔨 📐 🧭 🎤 ☕
2026-09-16
52 · 🧪 🎤 🔨 🧭 🎩 📐 ☕

The interventions — why · fix · checklist

  1. 2026-09-20 · 🧪 laboratory · offPct 28

    feat(vna): C102a THE KEYS LAND IN THE EXTENSION — 💳 runs vna.notariseTape (device flow from the extension → /notarise?fp&h&code → the entitlement into SecretStorage by the poll), door-audit 0 DISAGREE

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  2. 2026-09-20 · 🧭 navigator · offPct 48

    feat(thetacog-mcp): C94b (2/3) sixteen vna doors in the package — server.js dispatches steer-ui · cockpit · story · alignment-map · competence-pixel · parametric-trigger · envelope · mesh · spec-tree · goal · runner-reading · straight-path · clip-ingest · clip-watch · underwriter-line · auth-flow with the caller's cwd and VNA_REPO, bundle-pmu ships their closure, a thrown door prints not run — <door>: <reason> never a stack trace

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 19→26 over 3 commits since

    Open the signed attestation →
  3. 2026-09-20 · 🧭 navigator · offPct 19

    ship(vscode): thetacog-mcp 0.3.19 packaged and installed — the steer onboarding checkout is the path (device flow, no paste, no download); tests/vna 1285 pass · 23 fail, every red named; the live site refuses the device flow for want of AUTH_ED25519_SEED

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 19→26 over 3 commits since

    Open the signed attestation →
  4. 2026-09-20 · 🧭 navigator · offPct 21

    feat(vna): C115 — the aperture is inspectable: aperture-receipt.mjs composes S_in · F_in · κ · ω off the walk receipt + git at the commit

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 19→26 over 3 commits since

    Open the signed attestation →
  5. 2026-09-20 · 🧪 laboratory · offPct 27

    spec(vna): C98 THE PASTE BECOMES ROWS OR IT DOES NOT EXIST — the eighth paste graded on the record, the fold's absorption of 9 of 12 asks confessed, five questions as decisions, C98a–h declared (fable sweep · record-of-intent sentence · ratio is read · card-1 witness door · clip-ingest door · no duplicate sentences · released ask is a pending row · heartbeat facts)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  6. 2026-09-20 · 🧭 navigator · offPct 35

    feat(vna): C108b onboarding-steps.mjs — one parser (refuses by step name), the NEXT → shapes, the per-machine reading over doors

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 19→26 over 3 commits since

    Open the signed attestation →
  7. 2026-09-20 · 📐 architect · offPct 20

    chore(vna): C105 ticked through spec-check (guard green 5/5) — C105a DOOR_SEMANTICS (notarise local · backup uploads · sync uploads) and C105b the self-audit + the strip line attested by this commit; SPEC-FROM-TREE re-rendered with the four rows

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→27 over 13 commits since

    Open the signed attestation →
  8. 2026-09-20 · 📐 architect · offPct 39

    chore(vna): C113h ticked through spec-check (guard green) — built-note names 6aa4a5e305

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→26 over 82 commits since

    Open the signed attestation →
  9. 2026-09-20 · 🧭 navigator · offPct 43

    feat(vna): C116 — the APERTURE strip under the header, the per-panel hover readings, and 🔍 View Aperture Receipt as a read-only native document

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 19→26 over 3 commits since

    Open the signed attestation →
  10. 2026-09-20 · 🎩 operator · offPct 78 · mistagged

    spec(vna): C97f ticked — built: /notarise names the tape and sells the stamp through the live notary-seat checkout; the upload is programmatic (notary-drain.mjs); the receipt debt of two swept commits named on the row

    Why it left the lane: The diff's actual content — src/app/notarise/page.tsx checkout wiring, scripts/vna/notary-drain.mjs, the SPEC-VNA-COCKPIT.md C97f prose ('notarise','checkout','entitlement credits','pubkey_fingerprint'), the bulk docs/reports/ghost-read/*.html persona/monologue reports, and the src/data/commit-greeks-index.json Greeks backfill (delta/gamma/vega/theta notes) — all belong to the VNA/notary/attestation vocabulary that seeds lensReality=B1,A1. None of it touches operator's owned strings (data/trust-debt/, docs/ops/dashboard*, public/pmu-demo/, ORTHOGONAL_HEATMAP_MVP_SPEC.md). lensIntent=A2,C is only reached because the commit trailer names 🎩 operator as a Relevant-Room, which is what seeds the intent lane the receipt scores against — the diff itself never pulls toward A2,C at all, hence litReality landing 78% outside it.

    The semantic pull: 'notarise', '/api/create-checkout-session/notary-seat', 'pubkey_fingerprint', 'tape_height', 'entitlement.credits', 'Qwen Ghost-read', 'persona', 'monologue', and the Greeks note strings ('Δ = weighted Semantic Bleed σ', 'Γ = traction slope', '𝒱 = population variance of 809 injected-rule hold-rates') are the terms that concentrate the walk at B1,A1; zero strings in the diff match operator's lexicon ('trust-debt', 'dashboard', 'pmu-demo', 'accounting').

    Intent–reality gap: The commit's Relevant-Rooms trailer lists 🎩 operator alongside architect and builder, so the receipt scores this commit against operator's lane — but the diff contains not one path or term from operator's owned surface; the claim of relevance and the measured landing share no coordinate.

    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, already asked 24×, exact spelling) — fail a commit whose Relevant-Rooms entry has zero glob-overlap with the diff and no '(coordination only)' suffix.
    • Ship tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs (ask-033, asked 11×, exact spelling) as the downstream safety net — even if a bad trailer slips through, the mistagged room's offPct trend must not absorb it.
    • Ship tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, asked 18×) — the Originating-Terminal (📐 architect here) should itself be checked against the diff, catching the same class one layer earlier.
    • Add an explicit owner for docs/specs/vna/** and src/app/notarise/** in the rooms owned-surface manifest — currently absent from every room's glob list shown, which is likely why habit fills the trailer instead of a lookup.
    • Decide whether src/data/commit-greeks-index.json (Greeks: delta/gamma/vega/theta) should relocate under data/trust-debt/ since its content is conceptually operator's domain even though this particular commit's backfill wasn't operator's work.
    • Add a pre-commit warn (not block, per WIP-claims precedent) that prints the diff's actual owned-surface hits next to the typed Relevant-Rooms line, so the habit-trio gets visibly contradicted before the commit lands.

    What we learned: The Relevant-Rooms trailer is populated by convention (a fixed 'architect · builder · operator' trio) rather than derived from the diff, and the lane receipt trusts that trailer at face value to pick which room's lane to score against — so a room can accumulate phantom out-of-lane events from commits that never touch a single byte of its owned surface, independent of any real placement error. This is distinct from the three prior facts-only lessons for this room (which only reported trend direction, never a mechanism).

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010)

    Detector probe: signal attribution — gzip reef 75% · ballistic walk 25%. Right-sized, not shallow or under-saturated — both sides hit 100% lit/walked ratio with walkTruncated=false. The one concrete adjustment: for docsOnly=true commits carrying bulk generated artifacts (ghost-read HTML, index backfills), test whether excluding those files from the walked corpus changes litReality's count, to check if 93 is a genuine content boundary or an artifact of generated boilerplate diluting the sample. Experiments: Re-run the reef placement for sha de2d035e4 twice — once with the sig_*.json signature files included, once excluded — and check whether laneHamming moves toward the 22 null when they're excluded, confirming whether structured non-prose JSON pollutes the gzip-NCD seed. · Re-run with src/data/commit-greeks-index.json's bulk backfill entries stripped from the walked diff and compare lensReality; if it stops resolving to B1,A1, that isolates the unrelated-commit backfill noise as a driver distinct from the actual C97f notarise work. · For the last 57 operator out-of-lane events, recompute lensIntent using ONLY the Relevant-Rooms-declared owned globs as the seed (instead of a room-wide reef) and measure what fraction of those 57 would have been correctly excluded before ever reaching the walk.

    Measured outcome (deterministic, not self-graded): room mean offPct 28→29 over 4 commits since · dictionary ablation saved 1128B

    A phantom mistag like this raises operator's measured loss-ratio without any real cross-lane work having occurred, which either overprices operator's premium on noise or masks the room's genuine 57-event drift trend inside false positives; restoring accuracy requires the relevant-rooms-covers-diff guard before the room's offPct trend can be trusted for pricing.

    Open the signed attestation →
  11. 2026-09-20 · 🧪 laboratory · offPct 18

    feat(vna): C98k the instrument's own output is never a pending ask — ECHO_MARKERS, one table beside pendingAsks; a clip chunk that begins with a marker is typed echo at the fold (slotted, retained, never released), earlier ones re-typed idempotently, --echoes lists them; live 59 echoes, PENDING 190 → 156

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  12. 2026-09-20 · 📣 listing · offPct 49

    chore(vna): C109h spec tick

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Open the signed attestation →
  13. 2026-09-19 · 🧪 laboratory · offPct 34

    feat(vna): C93j the pin is salaried hours — labour.mjs: measured route hours (chair turn span · runner verdict ms), the skill from the basin's reef, the buyer's cited declaration or UNPINNED, the competence split across the reef domains the walk lit, the reality grip measured (attempts · halts · walk · probe) × a declared multiplier, γ on every rate against the s anchor, the per-band table (tokens · cog · hours · rate · value · compute); data/vna/labour-rate.json written as the OPERATOR'S ESTIMATE with every number cited as one; the card prints HOURS RECLAIMED and the band table only because that file exists; guard 9/9, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  14. 2026-09-19 · 🧪 laboratory · offPct 52

    feat(vna): C93a the mint — cog.mjs mints a cog from the commit's decidable facts, gated by the red witness (runner row or recompute), zero without a live basin; weights v1 declared in data/vna/cog-weights.json; guard 4/4 on a scratch fixture repo, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  15. 2026-09-19 · 🧪 laboratory · offPct 45

    feat(vna): C93n the steer's four gauges become one ledger with a target each — steer-metrics.mjs writes one LLM-free row per prompt turn from the hook (walk · aperture · budget · carry · last commit's drift), --day prints five targets PASS/FAIL/UNMEASURED with a why and never a bare number; the drift floor is p75 of the tape's own distribution (read 40 %, not a typed 25); a walk threshold moves only on a null re-run row under its false-admit floor; the turn budget halts the runner before its next dispatch and the card prints the overrun; guard 6/6, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  16. 2026-09-19 · 📐 architect · offPct 58 · structural

    spec(vna): C89 and C85d ticked — the copy contract's declaration closed with its four units and ten dictations; the release row carries the audit's counts (tests/vna 810/813, the three circular reads; tests/pmu-simulator 2028/2134, the pre-existing column); SPEC-FROM-TREE re-rendered

    Why it left the lane: The diff is two spec-tracking markdown files (SPEC-FROM-TREE.md, SPEC-VNA-COCKPIT.md) whose prose is a running ledger over dozens of built subsystems — literal path strings like `src/lib/auth/device-flow.mjs`, `src/lib/notary/mmr.mjs`, `scripts/vna/cosign.mjs`, `src/lib/llm/signed-call.mjs`, `packages/thetacog-mcp/server.js`. The ballistic walk tokenizes those mentioned paths and lights lattice cells for them exactly as if the diff had touched those files — dragging reality mass to A2,C (code/infra coordinates) even though the only bytes that changed were two counters (135→137 ticked, one row flipped from [ ] to [x]) and a re-rendered timestamp/root hash. Intent stayed at C,B3 (spec bookkeeping); the walk saturated at 100% fill on both sides (litIntent 137/137, litReality 127/127), meaning it never discriminated between 'named in the ledger' and 'actually edited'.

    The semantic pull: Literal file-path strings embedded in the spec's own audit prose — 'src/lib/auth/device-flow.mjs', 'src/lib/notary/mmr.mjs', 'scripts/vna/cosign.mjs', 'src/lib/llm/signed-call.mjs' — pulled reality lit-cells toward A2,C even though the diff hunks show only a ticked-row count and a re-rendered header changing (fac903fec9→198d30bcc9, ddb6e91af3d8→241a66573a98).

    Intent–reality gap: The commit claims narrow bookkeeping — 'the declaration rows close first and the audit is re-taken at this HEAD' — bounded entirely inside architect's own spec-tracking discipline; the receipt measured reality dispersed across every subsystem the ledger describes (offPct 58), because the detector cannot yet tell 'this file was touched' from 'this file was named'.

    • Add `docs/specs/vna/**` to architect's owned-surface glob wherever the per-room manifest lives (the source behind 'THE ROOM'S OWNED FILE SURFACE' block — likely under data/ or .workflow/rooms/).
    • Ship the docs-only lattice bypass named in ask-005 (tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs) — this event's docsOnly=true flag was already true and still scored offPct 58, so the bypass is not merely requested, it is overdue.
    • Down-weight literal path-token hits in the walk so a prose mention of a file counts once per unique top-level directory (src/lib, scripts/vna, packages/thetacog-mcp) rather than once per literal string, so a 40-subsystem status ledger doesn't light 40 independent reality cells.
    • Backfill the 118 prior architect out-of-lane events against the corrected owned-surface glob to confirm how many were false positives of this same class before trusting the next offPct trend.

    What we learned: docsOnly=true is already computed and carried on the receipt row, but nothing downstream reads it to gate the lattice walk — a spec-tracking ledger that faithfully names 40 built subsystems will always saturate the walk and read as maximally off-lane, regardless of how narrow the actual byte-level edit was; the flag exists, the enforcement doesn't.

    The missing guard (the deliverable): tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. Saturated, not shallow — every cell the walk visits lights up (100% fill both lanes), so the walk isn't discriminating between a strongly-implicated path and an incidentally-named one. Concrete adjustment: cap lit-cell contribution per unique top-level directory instead of per literal path string, so naming 12 files under src/lib/notary/ doesn't out-light naming 1 file under docs/specs/. Experiments: Simulate the docsOnly bypass on this sha (skip lattice placement entirely when the diff touches only docs/specs/**/*.md) and recompute offPct — expect near-0 if the hypothesis holds. · Re-score the 118 stored out-of-lane events for room=architect over the last 14 days against an owned-surface glob that includes docs/specs/vna/**, and count how many reclassify to in-lane. · Recompute laneHamming for this sha with path mentions deduped per top-level directory rather than per literal string, and compare the result against the current 34 (vs null 20) to see how much of the signal survives.

    Measured outcome (deterministic, not self-graded): room mean offPct 25→21 over 9 commits since · dictionary ablation saved 1442B

    Every docs-only spec-tick from architect currently reads as a severe (offPct 58) breach and inflates this lane's loss-ratio on pure false positive; premium restores the moment the owned-surface glob covers docs/specs/vna/ and the docs-only bypass (ask-005) ships, since both the room-attribution and the walk-saturation mechanisms are structural, not behavioral.

    Open the signed attestation →
  17. 2026-09-19 · 🧪 laboratory · offPct 23

    feat(vna): C93k static/dynamic failure ratio — the red witness says WHY it was red; wired into redWitnessIn + gradeCommit, stamped on the verdict and audit rows

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  18. 2026-09-19 · 📐 architect · offPct 47 · structural

    spec(vna): C85 ticked — goal 12's declaration, every unit under it built and seen red the same day; SPEC-FROM-TREE re-rendered from the tree with the C84–C90 rows in their borne-out column

    Why it left the lane: The diff is almost entirely mechanical: numeric bumps inside the `↳ @ <coord> · N chunks slotted · M decisions · K versions · decided ... · satisfied by <shas>` metadata lines that SPEC-FROM-TREE.md carries for every declared row (e.g. C1 55→57, C5 44→46, C34 51→53, C40 118→122, C74 13→14, C78a 3→3-versions-bumped), plus full new row bodies for C84/C84a-e whose text is dense with commerce/infra strings — 'Stripe Checkout', 'src/lib/notary/pg-ledger.mjs', 'credits_ledger', 'device_codes table', 'NOTARY_LEDGER=postgres', 'checkout.session.completed'. Because SPEC-FROM-TREE.md is a single generated file aggregating every row across the whole tree (root hash line at the top: 'root ddb6e91af3d8 · rows ≤ 163 · 140 rows · 135 ticked'), a commit that only intends to tick one declaration (C85/goal 12) necessarily rewrites lines whose text belongs to dozens of unrelated coordinates, and the checkout/notary/credits vocabulary is what pulled the reality lens to C1,A1 while the declared intent (spec-formalism, goal-closure) sits at A1,A2.

    The semantic pull: Literal strings dragging the walk: 'Stripe checkout', 'src/lib/notary/pg-ledger.mjs', 'credits_ledger', 'device_codes table', 'NOTARY_LEDGER=postgres', 'checkout.session.completed', 'notary-durable-ledger.test.mjs', 'site-device-flow.test.mjs' — all embedded in the C84/C84a-e row bodies that this single-file render also carries and re-touches, none of which this commit built (they were built by earlier commits e6dac77217/8bdd91ff4c/d24c088597 etc; this commit only bumped their counters and re-stamped the header).

    Intent–reality gap: The message claims a narrow, in-lane act — 'C85 ticked ... SPEC-FROM-TREE re-rendered from the tree with the C84–C90 rows in their borne-out column' — but the receipt already flags this commit docsOnly=true (both changed files are docs/specs/vna/*.md) and still computed offPct=47 against the code-lane threshold, treating a generated aggregator's incidental full-tree text as if it were freshly authored cross-domain work.

    • Ship tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs (ask-005) wiring docsOnly=true to skip/exempt the lattice offPct gate
    • Audit why docsOnly=true is already present on this receipt row yet offPct=47 still triggered a full out-of-lane event — find and fix the disconnect between the flag and the gate logic
    • Split the per-row numeric ledger (`↳ @ coord · N chunks slotted · ...`) out of SPEC-FROM-TREE.md's prose body into a sibling generated JSON/data file so a pure counter-bump render no longer re-emits full row prose text into the walked diff
    • Add a `Render: tree-only` or equivalent marker trailer to spec-render commits so the pipeline has a second, redundant deterministic signal beside docsOnly
    • Add the repeated boilerplate row-template strings to the gzip compression dictionary and ablation-test the effect on this file's future renders

    What we learned: The detector already computes and stores docsOnly=true on this exact receipt row — the signal needed to exempt this commit class exists in every receipt today, but nothing downstream reads it before applying the lane threshold; the gap is not missing telemetry, it is an unwired flag, which is a cheaper and more mechanical fix than anything the prior three lessons for this room addressed (Originating-Terminal/Relevant-Rooms semantics).

    The missing guard (the deliverable): tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs

    Detector probe: signal attribution — gzip reef 15% · ballistic walk 85%. Saturated, not right-sized: litIntent/walksIntent = 1.0 and litReality/walksReality ≈ 1.0 mean essentially every walked cell lit up — for a diff this repetitive (near-identical `↳ @ coord · N chunks slotted ...` lines repeated ~140 times) the walk should be discriminating between boilerplate and substantive content, not lighting nearly everything. Adjustment: raise the admission/lit threshold specifically for diffs whose line-level repetition rate (measured via gzip ratio) exceeds a set bound, so boilerplate counter-bumps stop registering as full lattice coverage. Experiments: Run docs-only-commit-skips-lattice.test.mjs as a live experiment: recompute offPct for the last 20 docsOnly=true commits with the gate wired vs unwired, measure the count of out-of-lane events that disappear · Add the row-template boilerplate strings to the gzip baseline dictionary and re-run the walk on this exact diff (1cf8b93d4) to measure whether litIntent/litReality drop toward a non-saturated fraction · Calibrate a repetition-rate pre-filter: gzip-compress the diff standalone, and if compressed/raw ratio falls under a threshold (e.g. 0.15, indicating highly repetitive template text), route the commit through a lighter-weight placement path and measure offPct delta against the current full walk on a 20-commit sample

    Measured outcome (deterministic, not self-graded): room mean offPct 25→28 over 33 commits since · dictionary ablation saved 1651B

    A generated tree-render commit reading as a 47%-off-lane event inflates this room's measured loss ratio with false-positive drift that no repair can actually reduce until the docsOnly flag is wired into the gate — premium on the architect lane is restored the moment ask-005 ships and this commit class stops counting.

    Open the signed attestation →
  19. 2026-09-19 · 🧪 laboratory · offPct 41

    feat(vna): C93f polar separation — far from both sides: the farthest pair of cells the Rust walk lit as a Chebyshev distance on the full 12×12, the two poles named on every prediction (C92c A1,B1 ↔ C3,B3 reads 8 where the block radius saturates at 2), weighted from v1 because the operator named it the target; the tensor paste re-graded as the operator's own, with his coda saved to the row verbatim; guards 6/6 + 4/4

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  20. 2026-09-19 · 🧪 laboratory · offPct 26

    fix(vna): map of maps reads each room's OWNED paths (room-surfaces.json's key is `owned`, not globs) — the realm-sandbox globs the paste asked for were already declared, the map just showed 0

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→19 over 5 commits since

    Open the signed attestation →
  21. 2026-09-19 · 🧪 laboratory · offPct 40

    feat(vna): C93b the spend — spend.mjs reads usage rows from the transcript by prompt-turn (incremental, truncated line skipped), a commit's spend is the runner's verdict row or the chair's turns between commits, UNMEASURED never 0; floor/ceiling baselines and effectiveness; guard 4/4, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  22. 2026-09-19 · 🧪 laboratory · offPct 40

    feat(surfaces): C95b THE SECOND READER — the pay card renamed, the token meter off it, the chain facts once, banned words guarded, the stamp sentence from one constant

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  23. 2026-09-19 · 🧪 laboratory · offPct 24

    spec(vna): C94 THE HANDHOLD — the marketplace→licence story graded on the record; the bridge between the two sovereigns is the CAR read twice; six rows, one basin guard

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  24. 2026-09-19 · ☕ network · offPct 18

    docs(comms): v3 — designation door built, /steer vs /goal answered (two doors, one tree), seven steps to a paid extension with a done-when each, three rows to declare — sent 01a0bae8

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct —→0 over 12 commits since

    Open the signed attestation →
  25. 2026-09-19 · 📐 architect · offPct 30

    spec(vna): C84a C84b ticked — the device flow (2c294396ff, 8/8) and the pages a person sees (531815971a, 7/7), both copies of the rows

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→32 over 4 commits since

    Open the signed attestation →
  26. 2026-09-19 · 📐 architect · offPct 25

    spec(vna): C95a /steer is /goal++ — the hook in the extension, three pluses by painted label; C95b THE SECOND READER card, banned words guarded (operator + monologue Appendix, 2026-09-19)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→36 over 13 commits since

    Open the signed attestation →
  27. 2026-09-19 · 🧪 laboratory · offPct 33

    feat(vna): C92e labour on the CAR — hours, skill tier and grounding ratio inside the signed bytes, SIGNED_KEYS unmoved, stamped as an amending row after the verdict

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  28. 2026-09-19 · 🧪 laboratory · offPct 33

    feat(vna): C93p the babysitting reading — the prediction scored against LANDING (returns before the tick + halts), ρ UNDERPOWERED with n; the legend answered on ask, never on the card

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  29. 2026-09-19 · 🎤 voice · offPct 39 · structural

    blog(cook): the context you are paying to re-send — taken, the next morning: the post's own break-it broke the meter by 40× (115 calls · 19.7 M tokens on a 2.0 MB transcript; the unit of re-send is the call, not the turn), the meter now reads usage rows, the cog and its first pegs, the three regimes on one card, effectiveness 0.59, and C91 as the row that ends the orchestrator; validate-mdx green, mdx-cook structure green (S12 ratchet red is the floor another post set — named, not sanded)

    Why it left the lane: The added paragraphs (lines 109 and 111 of the shipped mdx) name the internal apparatus directly: the backticked function+path `spendOf()` in `scripts/vna/spend.mjs`, and the bare spec-row ID `C91`. These are ShortLex/spec-system tokens — the same class of string the reef indexes for the machine coordinates — sitting inside otherwise reader-facing narrative prose. litReality=143 vs litIntent=114 (both fully saturated, lit==walks on each side) shows the reality walk needed 29 more cells to cover content the intent lane didn't predict; lensReality picking up B1 alongside the intent's B3,C is consistent with those two literal machine-notation strings anchoring extra lit cells outside the B3,C footprint.

    The semantic pull: `spendOf()` / `scripts/vna/spend.mjs` (a function+file identifier) and `C91` (a bare spec-row ID) are the exact strings dragging placement toward B1 — both are internal-apparatus tokens, not reader-facing language, and both appear un-cited (no footnote, no deep-link) directly in blog prose.

    Intent–reality gap: The commit claims a blog post landing in the voice/content lane (mdx-cook street-level format, B3,C) about what the operator learned; the receipt shows the actual prose also lit the machine-ledger coordinate (B1) because two sentences report the fix by naming the internal function, file path, and spec-row ID directly rather than describing the mechanism in reader language.

    • grep committed src/content/blog/*.mdx bodies for bare spec-coordinate tokens (\bC\d+[a-z]?\b, [A-Z]\d,[A-Z] pairs) and scripts/vna|scripts/pmu-simulator path/function backticks; convert each hit to plain language + footnote
    • add a scripts/voice-*-check.sh rule (room-owned surface) that fails mdx-cook validate on bare coordinate IDs or internal script paths in blog body text outside a citation block
    • generalize the MACHINE TELL 'coordinate notation in prose' clause in docs/architecture/claude-rules/voice-and-pitch.md from advice-posture-only to all src/content/blog/*.mdx
    • update the mdx-cook skill's 'Chip' mechanism-grounding guidance to route exact function/file/spec-ID citations through a footnote or deep-link component rather than inline backticks
    • audit the room's other 93 out-of-lane events over the last 14 days for the same bare-notation pattern to confirm it's the dominant driver before declaring the guard sufficient
    • apply the two line-109/line-111 edits above and re-run the receipt on the amended commit to confirm offPct drops

    What we learned: The mdx-cook street-level format's own 'Chip' mechanism-grounding requirement, applied to a blog series that is ABOUT the measurement tool's own internals (the meter, the cog, C91), structurally invites exactly the coordinate/function-name leakage that CLAUDE.md already bans — but only inside THE ADVICE POSTURE's scope. A ban that exists but is register-scoped is functionally absent for every other post shape, which is new information the three prior facts-only lessons (which only tracked worsening offPct, never the content shape) never surfaced.

    The missing guard (the deliverable): tests/voice/no-bare-coordinate-notation-in-blog.test.mjs — scans every committed src/content/blog/*.mdx body for bare spec-coordinate tokens (pattern matching \bC\d+[a-z]?\b co-occurring with row/basin/spec/orchestrator, or [A-Z]\d,[A-Z] lattice pairs) and internal script identifiers (scripts/vna/*.mjs, scripts/pmu-simulator/*, bare function-name backticks like spendOf()) that are not wrapped in a footnote/citation component; fails the commit if found. This is a new construct, not a re-spelling of any of the 10 open guard asks listed (those cover room-surface coverage, originating-terminal, docs-only skip, mistagged offPct, shared-state ownership, commit-message boilerplate, binary-seed cap, glossary surface, and glob overlap — none inspect body-text notation content).

    Detector probe: signal attribution — gzip reef 35% · ballistic walk 65%. Right-sized in depth (walkTruncated=false, no cap hit) but saturating in breadth — litIntent/walksIntent and litReality/walksReality are both 1.0, meaning every step the walk took found lit content on both sides. A walk that always saturates can't distinguish 'genuinely broad content' from 'aperture too generous to ever come back empty.' Concrete adjustment: tighten the aperture on a held-out sample of prior in-lane voice posts and confirm the saturation ratio drops below 1.0 for at least some of them — if it never drops, the aperture (not the content) is the thing that needs narrowing. Experiments: re-run this commit's receipt after applying the code_rewrite edits (drop spendOf()/scripts/vna/spend.mjs and bare C91) and confirm offPct falls below 39 — isolates how much of the drift was the two literal strings vs the surrounding jargon · take 10 prior in-lane (offPct<15) voice-room mdx-cook posts and measure their litIntent/walksIntent saturation ratio; if it's also ~1.0 across the board, the aperture is over-permissive repo-wide, not specific to this event · ablate the reef corpus by removing scripts/vna/*.mjs and scripts/pmu-simulator/*.mjs identifiers from the machine-lane seed and re-run this sha's receipt — if offPct stays ~39, the pull is coming from jargon words (cog, regime, orchestrator) not literal path/function tokens, which would redirect the fix toward vocabulary rather than notation

    Measured outcome (deterministic, not self-graded): room mean offPct 20→19 over 4 commits since · dictionary ablation saved 871B

    An event that leaks the apparatus's own identifiers (spendOf(), scripts/vna/spend.mjs, C91) into public prose raises this lane's loss-ratio by making the room's out-of-lane rate look content-driven rather than mistagged — worsening across all three prior interventions (27→39, 21→31, 0→36) — and premium is restored only when the coordinate-notation ban is generalized past advice-posture and a guard fails on the literal strings before they ship.

    Open the signed attestation →
  30. 2026-09-19 · 🧪 laboratory · offPct 28

    feat(vna): C93o the s-band headless peg is unreachable under weights v1 — bandReach on the mint, chair-only on the card, a finding not a peg

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  31. 2026-09-19 · 📐 architect · offPct 31

    spec(vna): C84d ticked — the durable notary ledger, the −1 witness row and the priced 402 built at e4de1f6ee9, seen red then green 6/6

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→32 over 4 commits since

    Open the signed attestation →
  32. 2026-09-19 · 🧪 laboratory · offPct 32 · mistagged

    feat(vna): C93c the peg — peg.mjs prices a cog at the cheapest measured route per band and only falls, every move a row on cog-peg.ndjson; first walk on the live record: m band 2.38 M tokens/cog (169c748f76), C93a and C93b scored 0.72 / 0.70 against it; guard 4/4 (the ratchet as the construct across 20 rows in four orders), red on the parent

    Why it left the lane: The diff's actual content — scripts/vna/peg.mjs, tests/vna/c93-peg-ratchet.test.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md, data/vna/cog-peg.{json,ndjson} — is pricing/ratchet engineering: 'no arbitrage', 'peg', 'cheapest measured route', 'band', 'red witness', 'effectiveness = peg / actual'. None of these paths or terms appear anywhere in Laboratory's owned surface (memory/, .mcp.json, scripts/init-claude-flow-with-crm.sh, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, punch-list*). The commit's own Originating-Terminal trailer says '📐 VS Code Architect', not Laboratory — the event is being scored against a room the commit didn't originate from. lensIntent=C3,A (Laboratory's usual tooling/integration coordinate) vs lensReality=A1,B1 (strategy/pricing-construct territory) with laneJump=8, laneHamming=34 confirms the walk placed the mass where the content actually is, not where the intent lane (as inherited from the Relevant-Rooms trailer listing Laboratory) said it should be.

    The semantic pull: Pricing/ratchet vocabulary ('peg', 'no arbitrage', 'cheapest measured route', 'band', 'red witness', 'effectiveness') and governance vocabulary ('THE PEG IS A FLOOR THAT ONLY FALLS', 'never a dollar until a price is pinned') pulled the lit mass toward A1,B1 (strategy/construct), away from C3,A (Laboratory's swarm/CRM/MCP tooling lane) — no string in the diff touches swarm-comms, crm-mcp, or orchestrator vocabulary at all.

    Intent–reality gap: The commit message claims C93c work inside the VNA cockpit spec (correctly scoped, guard 4/4, built against a declared basin) and the Relevant-Rooms trailer names Laboratory as one of three relevant rooms — but the receipt measured this event against room Laboratory whose owned-surface glob covers none of the touched paths, and the commit's own Originating-Terminal is Architect, not Laboratory. The gap isn't in the work; it's between which room the trailer/attribution says should own this and which room's surface glob actually claims scripts/vna/, tests/vna/, docs/specs/vna/, data/vna/.

    • Extend Architect's (or Vault's) owned-surface glob to explicitly claim scripts/vna/**, tests/vna/**, docs/specs/vna/**, data/vna/**
    • Explicitly exclude those same globs from Laboratory's owned-surface declaration so it stops being charged for Architect-originated VNA commits
    • Trim the Relevant-Rooms trailer on the remaining C93 sub-commits (C93d, C93e) to Architect · Vault unless Laboratory's surface is actually extended first
    • Re-score the last 14 days of Laboratory off-lane events (113 events) against a corrected surface map to see how many collapse once vna/ paths are reassigned
    • Land tests/ops/room-surface-coverage.test.js (ask-001, already open, 8× asked) asserting every top-level scripts/*, tests/*, docs/specs/*, data/* directory is claimed by exactly one room's glob
    • Land tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, already open, 15× asked) so a commit whose Originating-Terminal is Architect cannot be scored purely against a Laboratory lane

    What we learned: New top-level feature directories (scripts/vna/, tests/vna/, docs/specs/vna/, data/vna/) get built out over multiple commits under one Originating-Terminal before any room's owned-surface glob is extended to claim them — so every commit in that build-out drifts by construction against whichever room happens to sit in the Relevant-Rooms trailer, independent of content quality. Prior lessons for this room were facts-only with no mechanism; this event is the first to name the actual structural gap: surface declarations lag directory creation by an entire feature's worth of commits.

    The missing guard (the deliverable): tests/ops/room-surface-coverage.test.js

    Detector probe: signal attribution — gzip reef 30% · ballistic walk 70%. Saturated, not discriminating: walksIntent=litIntent (129=129) and walksReality=litReality (107=107) means every walked cell lit — no pruning happened on either side, and the resulting laneHamming (34) is nearly indistinguishable from the null (36). That's a sign the walk exhausted its budget without sharpening the placement. Adjustment: seed the reef with VNA-specific terms first (cog, peg, no-arbitrage, band, red witness) so the walk starts from a non-trivial prior instead of a near-empty prewalkOverlap of 2, which should push laneHamming further from null on the next vna/ commit. Experiments: Seed the reef corpus with VNA-domain terms (cog, peg, no-arbitrage, band, red witness, cheapest measured route) tagged to the Architect/Vault coordinate, then re-run this sha's receipt and check whether prewalkOverlap rises above 2 · Recompute offPct for sha 62b8954ec with Relevant-Rooms trimmed to Architect · Vault (Laboratory dropped) — a drop below the 15 threshold would confirm mistagging as the root cause rather than genuine content drift · Add a per-directory reef anchor pinning scripts/vna/**, docs/specs/vna/**, tests/vna/**, data/vna/** to a fixed coordinate, then measure laneHamming vs laneHammingNull across the last 10 vna/ commits before and after the anchor lands

    Measured outcome (deterministic, not self-graded): room mean offPct 16→22 over 7 commits since · dictionary ablation saved 993B

    113 off-lane events in 14 days against Laboratory is mostly noise from an unclaimed surface, not real defect risk — this lane's loss-ratio is being charged for work it never touched; premium is restored by re-homing scripts/vna/, tests/vna/, docs/specs/vna/, data/vna/ under the room that actually owns them and re-scoring the trailing history, which should collapse most of the 113 to zero.

    Open the signed attestation →
  33. 2026-09-19 · 🧪 laboratory · offPct 48

    feat(vna): C93i the lane check walks the dispatch's own paths — foreign dirt advances with the paths named, own dirt keeps the preview's pause, the pause row carries both lists (guard 2/2, red on the parent); C93n declared — the steer's four gauges become one ledger with a target each (walk admission by null re-run, aperture n_graded, turn budget as a runner gate, carry turns OVERDUE, drift feedback into the snowball knob); goal 15 set — C93n · C91b · C91c · C91d · C91e · C91f

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  34. 2026-09-19 · 🧪 laboratory · offPct 32 · mistagged

    fix(vna): C93k — ENOENT on a file the parent tree lacks is STATIC, never dynamic

    Why it left the lane: The diff's only semantic content is `scripts/vna/failure-ratio.mjs` and `tests/vna/c93k-failure-ratio.test.mjs`, and every changed string is instrument vocabulary — `STATIC_RE`, `DYNAMIC_RE`, `classifyFailures`, the ENOENT literal quoted from `data/vna/spec-tree.json`. None of that intersects the laboratory room's declared owned surface (`.mcp.json`, `scripts/init-claude-flow-with-crm.sh`, `thetacoach-crm-mcp/`, `swarm-comms/`, `.thetacog/orchestrator/`, `.thetacog/punch-list*`) or its forbidden-surface list, which was checked directly in `.workflow/rooms/claude-laboratory.html` and names neither `scripts/vna/` nor `tests/vna/` anywhere. The walk (litReality=99, litIntent=116, laneHamming=26 well under the null 38) confidently placed the commit at a real, distant coordinate (A2,C) because that IS where the tokens live — the pull isn't noise, it's the room tag being wrong for a correctly-scoped piece of work.

    The semantic pull: `ENOENT: no such file or directory`, `STATIC_RE`/`DYNAMIC_RE`, `classifyFailures`, `data/vna/spec-tree.json` — all pmu-simulator/architect-instrument terms — dragged placement to A2,C, away from B2,B2 where the laboratory's CRM/swarm-comms/orchestrator vocabulary lives.

    Intent–reality gap: The commit message and Originating-Terminal trailer both describe narrow, correct C93k instrument work and name 📐 architect as the terminal — but the event landed tagged under 🧪 laboratory, whose owned-surface manifest contains zero vna paths. offPct=32 is measuring a tagging error, not scope creep: the code never claimed to be laboratory's, only the room attribution did.

    • Add `scripts/vna/**`, `tests/vna/**` to an explicit 'Forbidden surface' or 'not-owned' line in `.workflow/rooms/claude-laboratory.html` so future drift on these paths reads as unambiguous mistag, not ambiguous overlap.
    • Confirm/add `scripts/vna/**`, `tests/vna/**` to the architect room's owned-surface manifest (equivalent file to `.workflow/rooms/claude-laboratory.html` for 📐 architect) so the surface has a positive owner, not just laboratory's negative space.
    • Build `scripts/room-drift-claude-check.sh` — it is spec'd in `.workflow/rooms/claude-laboratory.html` line ~412 but marked 'not yet implemented'; this exact event (staged file outside owned surface, laboratory session) is precisely what it was written to catch.
    • Land `tests/rooms/relevant-rooms-covers-diff.test.mjs` (ask-010, already asked 22×) asserting every room named in a commit's Relevant-Rooms trailer owns at least one touched path.
    • Land `tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs` (ask-033, already asked 11×) so a confirmed-mistagged commit's offPct is excluded from the room's rolling drift trend rather than counted as laboratory sprawl.

    What we learned: The room's own drift-detection hook has been spec'd-but-unbuilt long enough that a room can accumulate out-of-lane events for paths its own manifest never claimed in the first place — the gap isn't fuzzy boundary judgment, it's a named, written-down guard that simply was never shipped. offPct on this room may be inflated by an unknown fraction of its 129 recent out-of-lane events for the same reason: tagging drift masquerading as scope drift.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. Right-sized on saturation (not truncated, not capped) but arguably over-spread for the diff's actual size — a 10-line, 2-file change lighting up 99-116 lattice cells is a lot of walk for a small patch. Adjustment: scale walk depth/breadth to diff size (line count or file count) so a small, surgical fix doesn't light up nearly as many cells as a multi-file feature commit — tightens precision without losing the recall that correctly found A2,C here. Experiments: Retag this sha's room to 📐 architect (or exclude it as confirmed-mistag) and recompute offPct — measurable outcome: offPct should fall from 32 toward the lane threshold once the room label matches the owned surface. · Run `relevant-rooms-covers-diff` retroactively over the room's 129 out-of-lane events from the last 14 days — measurable outcome: the fraction that are pure mistagging (like this one) versus genuine cross-lane work, which tells us how much of the 129 is a labeling bug rather than a discipline problem. · Seed the gzip reef dictionary with the vna instrument tokens listed below and re-run ablation over the last ~30 commits touching scripts/vna/**/tests/vna/** — measurable outcome: prewalkOverlap should rise for genuinely-in-lane vna commits, sharpening the reef's ability to distinguish 'vna work correctly tagged architect' from 'vna work incorrectly tagged laboratory.'

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since · dictionary ablation saved 819B

    A mistagged-not-misdone commit like this one manufactures phantom loss-ratio on the laboratory lane's premium; it's restored the moment the two open guards (relevant-rooms-covers-diff, mistagged-commit-does-not-inflate-offpct) land and this event class stops counting against a room that did nothing wrong.

    Open the signed attestation →
  35. 2026-09-19 · 🧪 laboratory · offPct 30

    feat(vna): C93f ncd_cross — the row against the files it names by the canonical gzip-NCD (a directory is null, never 0; the file read to 4× the row so the distance reads novelty, not size), weight 0 until the fit signs it; the ninth paste graded on the row; C93g declared — the snowball cap and the walk aperture are knobs ratcheted by tokens per cog, never constants (operator, twice); guard 5/5

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  36. 2026-09-19 · 🧪 laboratory · offPct 28 · structural

    test(vna): map-of-maps guard made hermetic against the live walk cache; a placed surface is one name on two lanes; placed lines carry C89b subsystem names, never the bare tier

    Why it left the lane: The diff's real mass is the regenerated docs/specs/vna/MAP-OF-MAPS.md, and the commit's own change (subName()) made every placed line in that file print full subsystem words — 'Site & Payments', 'Licence & Checkout', 'Extension UI & Hooks', 'Positioning & Outreach', 'Metrics & Schedules' — in place of the old terse dotted coordinates ('A.Strategy × A.Strategy'). Those subsystem words are exactly the reef's own domain vocabulary, repeated once per lane across all twelve sections, so the walk and the gzip-NCD reef both pick up strong signal for every lane the doc happens to enumerate, not just the lane the actual code fix (VNA_MAP_WALKS pinning, dedup) lives in.

    The semantic pull: 'Site & Payments × Licence & Checkout', 'Extension UI & Hooks', 'Positioning & Outreach', 'Metrics & Schedules', 'Data & the Book' — all newly-spelled-out by subName() in map-of-maps.mjs — sit in the diff dozens of times across the A1/A2/A3/B1/B3/C1/C2/C3 sections of MAP-OF-MAPS.md, dragging the reality lens toward B,A1 (litReality 103, up from litIntent 95) even though the only functional code touched (VNA_MAP_WALKS pinning, dedup of placed skill names) lives entirely in scripts/vna/map-of-maps.mjs and tests/vna/map-of-maps.test.mjs.

    Intent–reality gap: The commit message claims a narrow, room-correct fix ('made hermetic against the live walk cache'; 'placed lines carry C89b subsystem names') scoped to one generator and one test; the receipt measured offPct 28 because the generator's own output — a full 12-lane enumeration — necessarily names every lane by its real vocabulary on every regeneration, so the receipt reads lattice-wide activity from a two-file, single-purpose fix.

    • Add the LATTICE-MASS-EXEMPT marker emission to scripts/vna/map-of-maps.mjs's header template
    • Locate and patch the receipt/lattice-mass calculator to honor the marker
    • Ship the missing_guard test in the same commit as the marker
    • Replay the last 137 laboratory out-of-lane events with the marker applied and record the offPct delta
    • Audit the other DERIVED 'never edit' pan-lane artifacts listed in this diff's UNMEASURED section (COCKPIT-PAYLOAD.txt, envelope.json, cockpit.json, cockpit-preview.json) for the same marker convention
    • Apply spec_rewrite's header sentence in the same commit as the marker, per COMMIT MESSAGE STRUCTURE discipline

    What we learned: A DERIVED artifact whose entire purpose is to enumerate every lane by its real subsystem vocabulary (map-of-maps.mjs's subName()) is structurally omni-lane text — making that enumeration MORE readable (full subsystem words instead of bare dotted coordinates) measurably increases offPct even when the actual committed code is two small, correctly-scoped files, because reef+walk placement cannot distinguish 'this text names lane X' from 'this commit's work is in lane X'.

    The missing guard (the deliverable): tests/pmu-simulator/derived-pan-lane-doc-excluded-from-lattice-mass.test.mjs — new (none of the ten open asks cover a mixed code+derived-full-enumeration-doc commit; ask-005 only fires when ALL changed files are docs). Asserts a commit touching only a generator+test plus its DERIVED pan-lane doc does not inflate offPct past threshold from the doc's own taxonomy text alone; fails today and would have caught 6bca34615.

    Detector probe: signal attribution — gzip reef 65% · ballistic walk 35%. Right-sized, not shallow or saturated — litIntent/litReality track each other closely (95 vs 103). The adjustment needed is upstream of the walk: seed it from scripts/vna/map-of-maps.mjs's own source text only, not from the regenerated MAP-OF-MAPS.md's enumerated output, so the walk's starting point isn't already biased toward every named lane. Experiments: Recompute reefSha overlap with docs/specs/vna/MAP-OF-MAPS.md's per-lane subsystem-name text stripped from the corpus, and diff offPct on this exact sha (6bca34615) — ablation test. · Retroactively apply the DERIVED-doc exemption flag and re-run the room's 137 out-of-lane events from the last 14 days, measuring how many drop under the 15 threshold. · A/B subName()'s subsystem-word output against the old dotted-coordinate format on a frozen replay corpus to isolate how much of the offPct jump (vs the prior three lessons' 13/13/23) came from label richness alone.

    Measured outcome (deterministic, not self-graded): room mean offPct 17→1 over 4 commits since · dictionary ablation saved 1192B

    Laboratory's rolling 137-event out-of-lane count plus this offPct=28 (worse than the prior three lessons' 13/13/23) raises the room's loss-ratio specifically on pan-lane derived-doc commits; premium restores once the DERIVED-doc lattice-exemption marker ships, the guard is green, and a frozen-replay ablation confirms offPct on this commit class drops back under 15.

    Open the signed attestation →
  37. 2026-09-19 · 🧪 laboratory · offPct 28

    fix(surfaces): C95a the three pluses move inside card 1's fold — the hook sentence stays outside; outside-fold text 583→283 chars, C80b.0 still over its 220 cap by the sentence itself

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  38. 2026-09-19 · 🧪 laboratory · offPct 30 · mistagged

    feat(vna): C93l the legacy s/m pegs collapse by the lit floor — no landed commit can be priced in s or m under v1, so the pre-lattice pegs are marked legacy on the file and the card

    Why it left the lane: The diff is entirely inside scripts/vna/cog.mjs, scripts/vna/peg.mjs, scripts/vna/steer-ui.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md and tests/vna/c93l-m-band-peg.test.mjs — zero overlap with laboratory's declared owned surface (.claude/, .mcp.json, scripts/init-claude-flow-with-crm.sh, check-mcp-health.sh, claude-room, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*). The commit's own trailer reads 'Originating-Terminal: 📐 architect' / 'Relevant-Rooms: architect · laboratory · operator' — laboratory is named as relevant purely by trailer convention, not because any touched path is laboratory's. Separately, laboratory's vector_keywords in data/rooms.json ('test','validate','debug','held-out','dogfood','decidable') are saturated by this commit's own vocabulary — 'Guard: tests/vna/c93l-m-band-peg.test.mjs', 'hermetic', 'a costlier runner one appends nothing', 'seen red on the parent tree', 'live, deliberately NOT hermetic' — so the reef-style routing had genuine lexical pull toward laboratory even though the substantive work (peg pricing, litFloor, bandReach, legacy-band collapse, labour-rate declarations) is VNA cockpit economics, not an experiment/dogfood artifact.

    The semantic pull: Two independent pulls, not one: (1) the commit trailer names laboratory as a Relevant-Room by copy-pasted habit — the same 'architect · laboratory · operator' triad likely appears on other C93x commits in this epic (C93j/C93f/C93k/C93o all live in the same SPEC-VNA-COCKPIT.md); (2) the commit's dense test/guard vocabulary ('hermetic', 'fixture', 'seen red', '4/4') lexically resembles laboratory's own specialty language even though it's describing pricing-peg code, not an experiment. walksReality=144 (full lattice saturation) vs walksIntent=127 confirms the walk read far past the actual 2-line SPEC-VNA-COCKPIT.md diff hunk — because that file interleaves labour-rate economics, prediction math, failure-ratio taxonomy and peg pricing all in one document, any edit anywhere in it lights the whole surrounding text.

    Intent–reality gap: The commit claims laboratory is a relevant room for this work (trailer) and the code is legitimate, correctly-scoped VNA-cockpit pricing logic; the receipt measured 30% of the lit reality mass landing outside laboratory's lane because laboratory owns none of the five touched files at all — the claim and the ownership never had any basis to begin with.

    • Build tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, asked 23× already, exact spelling) — assert every room named in a commit's Relevant-Rooms trailer owns ≥1 touched path via the same owned-surface list used to render 'THE ROOM'S OWNED FILE SURFACE' section.
    • Grep recent architect-room commits for the literal string 'architect · laboratory · operator' to confirm it's a copy-pasted habit rather than a per-commit computation — if confirmed, that's the root cause, not this one commit.
    • Add a commit-msg hook (or extend the existing post-commit receipt hook) that computes Relevant-Rooms candidates from the diff paths and warns when a declared room has zero overlap, before the drift receipt fires.
    • Decide and document (docs/architecture/claude-rules/doors-and-surfaces.md) which room actually owns scripts/vna/**, docs/specs/vna/**, tests/vna/** — it is neither laboratory's nor architect's per the file-surface listing shown here, so this gap needs a named owner, not just a laboratory exclusion.
    • Consider splitting docs/specs/vna/SPEC-VNA-COCKPIT.md's C93 sub-basins (labour/rate, prediction, failure-ratio, peg-pricing) into separate files so a single checkbox flip doesn't light all 144 lattice cells regardless of which room is correctly tagged.

    What we learned: Relevant-Rooms trailers are being written as a fixed habitual triad rather than derived from the diff, and the vector-keyword reef (data/rooms.json's per-room 'test/validate/debug/hermetic' vocabulary) can pull a commit toward a room whose OWNED FILE SURFACE the diff never touches at all — the semantic-lexicon router and the literal file-ownership check are two different systems that can disagree, and nothing currently reconciles them before the receipt fires.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. Saturated, not right-sized — litReality hitting 144/144 means the walk can no longer distinguish 'this commit touches every domain' from 'this commit touches two lines inside a file that mentions every domain.' Adjustment: scope the walk's input to diff hunks (±N context lines) rather than the full file body the hunk sits in, so a checkbox-flip in a 700-line kitchen-sink spec doesn't re-light the whole document's semantic footprint. Experiments: Re-run this commit's walk with hunk-scoped input (diff ±10 lines) vs whole-file input; measure whether litReality drops below 144 and offPct drops below 15. · Split SPEC-VNA-COCKPIT.md's C93a/C93f/C93j/C93k/C93l/C93o blocks into per-basin files, re-walk this commit's historical siblings against the split version, and measure whether offPct for VNA-touching commits falls independent of which room is tagged. · Backfill ask-010's guard against the last 23 commits where it was asked (per the open-guard-asks counter) and count how many would have failed at commit time — this measures the true recurrence rate of the mistagged-trailer class specifically, separate from the walk-saturation class.

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since · dictionary ablation saved 903B

    A mistagged Relevant-Rooms trailer that survives commit-time inflates laboratory's loss-ratio with drift it never produced and dilutes the room's own premium signal; shipping ask-010 (already asked 23×) restores it by rejecting the false attribution before the receipt is even written.

    Open the signed attestation →
  39. 2026-09-19 · 🧪 laboratory · offPct 45

    feat(vna): C93f the two signatures — radius (the walk's Chebyshev footprint over the block grid; a span, never a ring bound) and lca_depth (the common directory of the row's paths) on the prediction, density (insertions per lit cell) on the mint; the shape is wide-by-count-or-span × focused-by-trajectory; the paste's Merkle LCA height refused as a constant on this tree; new inputs ride at weight 0 until the fit signs them; guard 4/4

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  40. 2026-09-19 · 🧪 laboratory · offPct 16

    fix(surfaces): C95a resolved against C80b — the derived short form outside card 1's fold, the full hook sentence and pluses first inside; card 1 passes C80b.0 at 105 chars

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  41. 2026-09-19 · 🧪 laboratory · offPct 43

    feat(vna): C91d the next goal from the tree — data/vna/goal-queue.ndjson is a SEQUENCE of fixtures that passed the ingest gate; goal.mjs queue <path> appends only when C81c accepts, goal.mjs next installs the head only when goal.json's own bytes have a goal row on the tape or there is no goal (an open goal installs nothing), re-runs the gate against the live tree at install, refuses an invalid head WITHOUT skipping to the next (W5 — the same seq installs once the fixture is repaired), sets a fresh headAt and writes the active leaf; the steer hook computes FIRST_TURN from the gauge file's session before gaugeTurn overwrites it and calls goalNext on that turn only; guard 5/5, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  42. 2026-09-19 · 🧪 laboratory · offPct 35 · mistagged

    feat(vna): C93e the learning ratchet — calibrate.mjs fits the prediction weights on the realized cog and the mint weights on tokens (ridge least squares, no model), scored on a sha-keyed held-out third, moving cog-weights.json only when the held-out error falls; first live run REFUSED at 2 of 30 rows and the refusal is the ledger's first row; guard 5/5 on synthetic truths, red on the parent; goal 14 every unit closed

    Why it left the lane: The diff itself (calibrate.mjs, its test) is textbook generic numerical-methods vocabulary — 'ridge-stabilised normal equations', 'leastSquares', 'heldOut', 'mse', 'partial pivot' — words that compress against whatever lattice cell already holds general linear-algebra/statistics code, not against the VNA-cockpit-specific corpus at the declared C1,C coordinate. prewalkOverlap=3 (near-zero, out of litIntent=132) shows the gzip-NCD reef seed found almost no match against the C1,C lane BEFORE the walk even ran — the walk then had nowhere anchored to go but toward the nearest real match, A1,B1. Separately, and just as load-bearing: the commit's own 'Relevant-Rooms: Architect · Laboratory · Vault' trailer names Laboratory, but every changed path (scripts/vna/calibrate.mjs, tests/vna/c93-weights-calibration.test.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md) falls entirely outside Laboratory's owned-surface glob (.claude/, .mcp.json, scripts/init-claude-flow-with-crm.sh, scripts/check-mcp-health.sh, scripts/claude-room, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*). Laboratory is being scored for drift on work it never claims to own.

    Intent–reality gap: The commit claims a tight, correctly-guarded VNA unit (C93e, 5/5 tests, held-out validation, refused-below-30-rows) AND lists Laboratory as one of three rooms this work is 'most relevant' to — but the receipt shows zero of the changed paths sit inside Laboratory's registered surface, and the content itself (generic ridge-regression code) doesn't even compress well against its own declared C1,C lane, landing instead at A1,B1.

    • Land tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, already asked 21×) — the exact gap this event exposes.
    • Land tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, asked 15×) — Originating-Terminal was 📐 VS Code Architect, not Laboratory; cross-check that against the measured landing too.
    • Register an explicit owning-room glob for scripts/vna/**, tests/vna/**, docs/specs/vna/**, data/vna/** in .workflow/rooms/*.html — right now no room surface shown covers this whole VNA tree, which is why trailers keep guessing.
    • Re-run this sha's walk after seeding the C1,C reef with the sibling C93a/b/c/d/f files (cog.mjs, spend.mjs, peg.mjs) to test whether prewalkOverlap rises and offPct falls on content alone, independent of the room-tag fix.
    • Audit the last 116 Laboratory off-lane events for the same Relevant-Rooms mismatch pattern before assuming they're all genuine scope creep.

    What we learned: Two independent failure surfaces get conflated by a single offPct number: (1) content-lattice placement (reef seed too thin at the declared coordinate) and (2) room-trailer over-listing (a room named 'relevant' that owns none of the touched paths). This event is almost purely (2) riding on a mild case of (1) — the prior three Laboratory lessons never separated these, so the room's offPct history may already contain several trailer-mistagging false positives that were never distinguished from real drift.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 70% · ballistic walk 30%. Right-sized in spread (132 vs 125 lit cells, close magnitude) but badly anchored (laneHamming=36 vs laneHammingNull=31 — barely above the null baseline, meaning the walk's actual distance-from-intent is nearly indistinguishable from random). Adjustment: raise the minimum prewalkOverlap floor required before the walk is trusted to report a lane at all — below some threshold (here, 3/132) the walk should emit UNMEASURED-for-placement rather than a confident A1,B1 reading, since the seed gave it almost nothing to anchor to. Experiments: Re-seed the C1,C reef with scripts/vna/cog.mjs + spend.mjs + peg.mjs (calibrate.mjs's actual siblings) and re-walk sha 78a158bf72; measure whether prewalkOverlap rises above 3 and offPct falls below 35. · Ablation: strip generic math terms (leastSquares, ridge, heldOut, mse, normal equations) from the general A1,B1-adjacent corpus weighting and re-walk; measure whether offPct falls purely from removing the false attractor. · Recompute offPct for all 116 Laboratory events in the last 14 days with Relevant-Rooms restricted to only rooms that own ≥1 changed path; measure how many of the 116 disappear or shift room — this directly tests whether mistagging (not real drift) is Laboratory's dominant offPct driver.

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since · dictionary ablation saved 1014B

    A mistagged Relevant-Rooms trailer inflates Laboratory's measured loss-ratio for scope it never touched, overpricing that lane's premium against phantom risk; restoring it requires the relevant-rooms-covers-diff guard so offPct is only ever charged to a room that actually owns the changed surface.

    Open the signed attestation →
  43. 2026-09-19 · 🧪 laboratory · offPct 32

    feat(vna): the address stamp — every placed map entry carries (reef_sha, axes_sha, bin_sha); the cache keys on the address, a reef reseed re-walks and RETAINS the old row; a foreign-reef fallback reads STALE

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→1 over 4 commits since

    Open the signed attestation →
  44. 2026-09-19 · 🧪 laboratory · offPct 26

    feat(vna): C91e the meter reads goal rows — tokenMeter() gains a goals block beside saved, never inside it

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  45. 2026-09-19 · 🧪 laboratory · offPct 29

    feat(vna): C93h mint history built — the spend of every minted historical commit read from the session whose transcript CARRIES the sha (80 of 81 over 3,197 transcripts; the time-bracket selector was wrong and picked hook sessions); the peg re-walked over 200 rows (l 192 k · xl 198 k tokens/cog, historical chair commits); THE-COG.md rendered from the record by cog-doc.mjs so the docs can never say more than the disk; and one incident reverted within the minute — the first accepted mint fit made the cog proportional to tokens, so the mint weights are now declared-only and the ratchet learns on the prediction side alone

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  46. 2026-09-19 · 🧭 navigator · offPct 28

    feat(surfaces): C95a /steer is /goal++ — the hook sentence on the README and card 1 from one constant, three pluses by painted label

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→22 over 4 commits since

    Open the signed attestation →
  47. 2026-09-19 · 🧭 navigator · offPct 61 · mistagged

    feat(surfaces): the dev value prop leads and the licence is the backup of the attested tape — per 10,000 actions, pinned to the compute that stores and re-walks them

    Why it left the lane: The commit's own trailer says `Originating-Terminal: 🎤 voice (rio)` but the receipt filed this event under room navigator — and `Relevant-Rooms: navigator, vault, builder` lists navigator FIRST while omitting voice entirely, even though every touched file (packages/thetacog-mcp-vscode/README.md, packages/thetacog-mcp/README.md, scripts/vna/public-surface-register.mjs, tests/vna/public-surface-register.test.mjs) is public-surface/pricing-copy work, not one byte of it touching navigator's owned scheduler/dashboard files. prewalkOverlap=4 (out of 143) shows the intent and reality seeds diverged before the walk even ran, and laneHamming=30 sits almost at the null (26) — the walk found two genuinely unrelated neighborhoods, which is what you'd expect when the room label itself points at the wrong lattice region.

    The semantic pull: README/licence/pricing strings ('backing up the attested tape', '10,000 actions', 'priced to the compute it takes to store and re-walk them') and scripts/vna/public-surface-register.mjs pulled the reality walk toward B,A1 (Tactics/Signal territory — voice's home), while the intent lane (C,C2) was seeded from navigator's registered coordinate (Operations/scheduler), producing laneJump=7 and offPct=61.

    Intent–reality gap: The commit message and diff are entirely coherent, correctly scoped public-surface copy work — the trailer even self-identifies the acting terminal as voice. The mismatch is that the event pipeline logged the receipt under room navigator instead of voice, and the commit's own Relevant-Rooms line never named voice at all, so the claimed lane and the measured lane were never going to agree.

    • Add tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, already asked 16×) — this event is the reproduction case: assert the commit's declared Originating-Terminal room's owned-surface overlaps ≥1 touched file
    • Patch the room-attribution logic that fed 'room 🧭 navigator' into this receipt to prefer Originating-Terminal over Relevant-Rooms[0]
    • Update CLAUDE.md COMMIT MESSAGE STRUCTURE to require Relevant-Rooms include Originating-Terminal's room
    • Register scripts/vna/public-surface-register.mjs and packages/*/README.md under voice's (or vault's) owned-surface list so future public-copy commits resolve correctly without depending on trailer reconciliation alone
    • Backfill-check the room's other 27 out-of-lane events in the last 14 days for the same Originating-Terminal-vs-Relevant-Rooms[0] mismatch pattern — this is likely a repeat cause, not a one-off

    What we learned: This room's persistent out-of-lane rate may not be navigator doing wrong-lane work at all — it may be the receipt pipeline mis-attributing OTHER terminals' commits to navigator whenever Relevant-Rooms lists navigator first, which is exactly the open, 16×-asked, never-shipped ask-027 guard; the prior three lessons for this room (offPct swings 15→13, 17→42, 18→4 with no diagnosis) are consistent with an attribution bug rather than three unrelated content failures.

    The missing guard (the deliverable): tests/pmu-simulator/originating-terminal-matches-surface.test.mjs

    Detector probe: signal attribution — gzip reef 65% · ballistic walk 35%. Saturated, not shallow: litIntent/walksIntent = 143/143 and litReality/walksReality = 139/139 — a 100% lit ratio on both sides means the walk lit everything it visited with no pruning/selectivity left to distinguish a genuine two-lane split from noise. Concrete adjustment: introduce a discriminative threshold so the walk stops lighting every visited node once local density saturates, freeing capacity to keep expanding past the current cap and resolve whether intent/reality are truly disjoint or just under-explored at the boundary. Experiments: Recompute prewalkOverlap distribution across the room's other 26 out-of-lane events in the last 14 days; if most also show prewalkOverlap <10% of walksIntent, the reef seed stage (not the walk) is the room's systemic offender — measurable via a room-level histogram of prewalkOverlap/walksIntent · Ablate: rerun this commit's reef seeding using Originating-Terminal (voice) as the room key instead of the currently-assigned navigator, and check whether offPct drops toward the room's 15 threshold — measurable as offPct before/after with identical corpus/lib/reef shas · Add a pre-walk consistency check that flags when Originating-Terminal's room and the room ultimately assigned to the event disagree, logged as a new receipt field (originating_room vs assigned_room) before the walk runs, so this class is visible at ingest rather than reconstructed after the fact

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since · dictionary ablation saved 969B

    A room whose out-of-lane events are actually mis-routed receipts rather than genuine cross-lane work is uninsurable at face value — the premium on navigator's lane should be held flat (not raised) until ask-027's guard ships and re-attributes this and the prior 27 events, at which point the true loss-ratio for navigator vs voice can be separately priced.

    Open the signed attestation →
  48. 2026-09-19 · 📐 architect · offPct 41

    spec(vna): C84c ticked — the credits ledger, the webhook-to-entitlement handler and its migration built at 8bdd91ff4c, seen red then green 9/9; the entitlement key corrected to the one /keys serves

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→27 over 12 commits since

    Open the signed attestation →
  49. 2026-09-19 · 🧪 laboratory · offPct 28

    feat(surfaces): the surface map — every text surface the extension's reader can arrive from, typed copy/record/legal/anvil, with floors that only fall

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→30 over 4 commits since

    Open the signed attestation →
  50. 2026-09-19 · 📐 architect · offPct 41

    spec(vna): C91a C91b C91c C91d C91e C91f C92a C92b C92d — the goal-13/14 unit rows carry their declaration receipt (declared at 169c748f76, not built), so the C43 ledger attests the declaration by label and C58 reads no dead basin; nothing built here

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→36 over 3 commits since

    Open the signed attestation →
  51. 2026-09-19 · 🧪 laboratory · offPct 45

    feat(vna): C88 — vna.stream, a read-only SSE tail of the flight tape and the witness file, rows as written, loopback only, no POST, no model on the path

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→22 over 7 commits since

    Open the signed attestation →
  52. 2026-09-19 · 🎤 voice · offPct 24 · structural

    blog(cook): the context you are paying to re-send — round 2: the skeptic's own sentence opens every section and is answered in the next line

    Why it left the lane: The commit installs seven skeptic-paragraphs whose T2 answer sentences carry the actual mechanism payload of the post — "Landauer (1961)", "Bennett (1973)", "the wire protocol is quadratic", "grows with the square of its length", "a resolution is not a mechanism", "verification not use, a record you did not write" — strings that are architecture/proof-of-concept language, not reader-voice. lensReality flips from the intent's C1 into B while keeping A1, which is exactly this: the T2 sentences pull mass into the mechanism lane even though the file sits in Voice's owned .mdx/.md surface. Separately, the new predictions.md content lives at docs/05-content/blog/cook-rounds/, a path the Voice room's declared owned-surface list never names (it only lists docs/05-content/blog/scratchpad/), so that sidecar file has no anchor lane to hold it in A1/C1 during ingest.

    The semantic pull: The seven inserted T2 sentences (Landauer/Bennett citation, 'grows with the square of its length', 'verification not use') read as mechanism-explanation prose, and the predictions.md sidecar sits outside the declared Voice glob — both drag lit mass toward lane B.

    Intent–reality gap: The commit claims a voice-craft edit (installing the skeptic's own sentence and its answer, mdx-cook idiom compliance) confined to the Voice room's blog surface; the receipt measured 24% of lit reality mass in lane B (mechanism) against an intent lane of A1,C1 only, because the format's required 'answer' sentence is itself mechanism prose and the sidecar file it touched has no declared home in the Voice glob.

    • Add `docs/05-content/blog/cook-rounds/*.predictions.md` to Voice's owned-surface glob (closes ask-001).
    • Extract the Landauer(1961)/Bennett(1973) mechanism citation into one shared glossary/footnote MDX partial referenced by id, not restated per post.
    • Add a mechanism-citation density cap to the mdx-cook SKILL.md spec for the T2 answer line.
    • Confirm docsOnly=true is actually consumed to dampen lattice offPct scoring for pure-content commits (ask-005) — this commit had docsOnly=true and still tripped at 24%, suggesting the flag is recorded but not yet load-bearing in the offPct calculation.
    • Re-run this sha's diff against the corrected glob + citation extraction and confirm offPct drops toward the 15 floor.
    • Track the Voice room's 14-day offPct mean after this fix lands — the prior three interventions here all made the trend worse (27→39, 21→31, 0→36), so this is the first test of whether a structural (glob + spec) fix outperforms a facts-only one.

    What we learned: The three prior interventions in this room were facts-only and could only report the mean getting worse; this pass found the actual structural gap they couldn't see — the Voice room's own owned-surface declaration doesn't cover its own sidecar artifact type (cook-rounds/*.predictions.md), so a genuinely-owned voice artifact ingests with no lane anchor, and that ambiguity compounds with mdx-cook's structural requirement that every objection be answered with real mechanism content. Voice content will always carry some legitimate lane-B mass by design of the format; the fixable part was the unanchored file, not the prose.

    The missing guard (the deliverable): tests/ops/room-surface-coverage.test.js

    Detector probe: signal attribution — gzip reef 35% · ballistic walk 65%. Saturated, not discriminating: walksIntent(126)=litIntent(126) and walksReality(136)=litReality(136) with walkTruncated=false — every cell the walk visits registers as lit on both sides, so a single mechanism-citation sentence counts the same as a dominant cluster. Adjustment: add a minimum-dwell/intensity threshold before a visited cell counts as 'lit', so a passing citation doesn't carry the same weight as sustained mechanism prose. Experiments: Re-run this sha's walk after the glob fix lands and compare offPct — expect a measurable drop if the unanchored predictions.md file was material to the 24%. · Add a lit-cell intensity threshold and recompute laneHamming (weighted vs binary) across this and the room's other 93 out-of-lane events from the last 14 days to see if the metric moves the room mean. · Seed the reef with the recurring mechanism-citation glossary terms (Landauer, Bennett, 'wire protocol is quadratic') explicitly tagged lane B, then re-measure whether Voice's own future posts still trip B as foreign mass or settle as an expected adjacent lane.

    Measured outcome (deterministic, not self-graded): room mean offPct 20→19 over 4 commits since · dictionary ablation saved 829B

    An unanchored-but-legitimately-owned sidecar file plus a format that structurally requires mechanism prose inside voice sections raises this lane's loss ratio on every cook-rounds post until the glob is fixed and the citation is deduplicated into a shared partial — both closeable in one commit, which is what restores the premium.

    Open the signed attestation →
  53. 2026-09-19 · 🧭 navigator · offPct 59

    fix(surfaces): the record's picks applied — the licence sentence leads with the stamp (Candidate 4), the listing is "ThetaCog — Tokens Not Re-Sent", §25's one sentence on the README

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  54. 2026-09-19 · 🧪 laboratory · offPct 38 · mistagged

    feat(vna): C91a the goal row on the tape — goalClose() appends ONE chained, signed `goal` row through the flight tape's one door when every unit reads closed (sha = the goal file's bytes; units + their commits, turns_used, head_at/head_close, context_bytes read off the clear gauge's ledger else UNMEASURED never 0, report_resend_id null for C91b); a second call for the same goal_sha returns the existing row; an open or unknown label appends nothing and names itself; verifyRow lands on flight-tape.mjs and verify() calls it per row; guard 5/5, red on the parent; goal 13 unit 1 of 6

    Why it left the lane: The diff is 100% flight-tape/goal-ledger construction — `goalClose()`, `ROW_KINDS` gaining `'goal'`, `verifyRow`, ed25519 `edVerify`/`sig_pubkey`, `context_bytes` read off `.thetacog` gauge ledgers, all inside `scripts/vna/flight-tape.mjs`, `scripts/vna/goal.mjs`, `docs/specs/vna/SPEC-VNA-COCKPIT.md`, `tests/vna/c91-goal-row.test.mjs`. None of that vocabulary or those paths appear anywhere in laboratory's owned surface (`.mcp.json`, `swarm-comms/`, `thetacoach-crm-mcp/`, `.thetacog/punch-list*`). The walk's lit cells sit at A1,A2 (cryptographic-tape/goal-row territory) while the declared lane is B3,B3 — a clean, total mismatch rather than a partial spillover, which is what a wrong ROOM label produces, not what a scoped-but-sloppy commit produces.

    The semantic pull: Terms like `goalClose`, `flight-tape.mjs`, `appendPricedRow` (explicitly disclaimed in the commit as belonging to a *different* tape), `verifyRow`, and `signed row` are all architect/VNA-cockpit constructs; nothing in the diff touches CRM, swarm-comms, or punch-list vocabulary, so the walk had no laboratory-owned content to anchor on and drifted fully into the tape/ledger coordinates.

    Intent–reality gap: The commit's own trailer says `Originating-Terminal: 📐 architect` (Relevant-Rooms: architect · laboratory · operator) and every touched path is under scripts/vna/, docs/specs/vna/, tests/vna/ — none of which laboratory owns — yet this receipt event is filed against room 🧪 laboratory, so the pipeline's room attribution contradicts both the commit's self-declared origin and the actual file surface it measured.

    • Add an owned-surface glob entry (architect or a new vna room) covering docs/specs/vna/**, scripts/vna/**, tests/vna/** — currently no room's list (per this event) claims these paths.
    • Build the standing guard ask-027 (tests/pmu-simulator/originating-terminal-matches-surface.test.mjs) so a commit's Originating-Terminal trailer is checked against its touched-file surface before the drift receipt assigns a room.
    • Audit the room's other ~119 out-of-lane events from the last 14 days for the same scripts/vna|docs/specs/vna|tests/vna file signature to see how many are this identical mistag vs genuine cross-lane work.
    • Wire the receipt/decision-ledger room field to prefer the commit's own Relevant-Rooms/Originating-Terminal trailer over whichever session-terminal heuristic currently produced 'laboratory' here.
    • Update CLAUDE.md's room-ownership references (or .workflow/rooms/*.html) to explicitly name which room owns scripts/vna/, docs/specs/vna/, tests/vna/ — the ambiguity is what let this route to laboratory at all.

    What we learned: This room's offPct is not being driven by scope-creep inside its own commits — the VNA/architect file family (scripts/vna/, docs/specs/vna/, tests/vna/) appears to have NO owned-surface entry anywhere in the room manifests, so any VNA commit that gets attributed to a room other than architect will register as maximally out-of-lane regardless of how tightly the code itself is scoped; the defect is in the room→glob map, not in commit discipline.

    The missing guard (the deliverable): tests/pmu-simulator/originating-terminal-matches-surface.test.mjs

    Detector probe: signal attribution — gzip reef 55% · ballistic walk 45%. Right-sized, not the problem here: walkTruncated=false and litIntent/litReality/walksIntent/walksReality are all within 5 of each other, so the walk covered comparable breadth on both sides and didn't saturate or undershoot. No depth adjustment is warranted — the fix is upstream of the walk, in which room the event was handed to before the walk ever ran. Experiments: Seed a distinct vna reef domain from docs/specs/vna/SPEC-VNA-COCKPIT.md and scripts/vna/*.mjs history, then re-run sha a2fc10390 offline and check whether prewalkOverlap rises above 5 against that domain vs laboratory's. · Add scripts/vna/**, docs/specs/vna/**, tests/vna/** to a distinct room's owned-surface glob and replay this same sha through the pipeline with no code change, confirming offPct drops from 38 toward the 15 threshold purely from re-attribution. · Cluster the room's other 120 out-of-lane events from the last 14 days by (lensIntent,lensReality) pair; if a large share share this exact B3,B3→A1,A2 signature, that's evidence of one systemic mistag rather than 120 independent drift incidents.

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since · dictionary ablation saved 1033B

    If this is confirmed as a routing mistag rather than genuine scope creep, it should NOT raise laboratory's loss-ratio at all — premium is restored by fixing the room-to-glob attribution (so the receipt files correctly against architect), not by asking already-guarded, seen-red-verified VNA code to change.

    Open the signed attestation →
  55. 2026-09-19 · 🎤 voice · offPct 53

    docs(vna): Part 6 — the pasted lifecycle reconciled against the record: three lines that do not travel, eleven improvements graded DECIDED / DONE / CANDIDATE / CONFLICT, six candidate rows C94g–l in order

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 20→19 over 4 commits since

    Open the signed attestation →
  56. 2026-09-19 · 🎩 operator · offPct 27

    fix(lens): C93m the aperture ratchet was starved, not broken — the grader takes the live aperture's real turns first (newest first, ledger ids skipped) before the cursor batch; a test context never writes the live receipts dir; the optimiser holds while no floor exists (the bootstrap hole that rotated the version every 30 min and kept the window at 0/20 for 144 holds); guard 3/3, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 28→32 over 8 commits since

    Open the signed attestation →
  57. 2026-09-19 · 🧭 navigator · offPct 20

    fix(surfaces): THE CAT — the npm README stops announcing its claws; the public-surface register guards both READMEs on four counts

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  58. 2026-09-19 · 📐 architect · offPct 49

    docs(vna): C93l read and left open — the C93k dispatch minted l once its walk landed (lit_reality 99 decides the band above s under v1); the m peg waits for a calibration row, not a second dispatch

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→38 over 3 commits since

    Open the signed attestation →
  59. 2026-09-19 · 🔨 builder · offPct 57

    chore(blog): panel strip for the-context-you-are-paying-to-re-send — the encircled panel rendered off c53f71a540, index rebuilt (220 posts / 827 panels)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→22 over 6 commits since

    Open the signed attestation →
  60. 2026-09-19 · 🧭 navigator · offPct 35 · mistagged

    feat(vna): C91c the eviction — the carry gauge acts on three receipts, never a timer; clearDecision (pure) in clear-gauge.mjs returns CLEAR only when the goal row exists for goal.json's own bytes, the send log carries the resendId that row names, and the gauge is FREE or OVERDUE — every HOLD names the missing receipt (goal-row · report · fold-first · gauge); clearDecisionFor in goal.mjs writes the verdict beside the gauge receipt from the hook's gaugeTurn every turn; vna-steer.ts watches the sibling file, latches once per goal_sha in workspaceState and calls the SAME clearClaudeTerminal() the button calls, FOLD-FIRST refusal untouched, the goal named on the status bar; C51's sentence amended — one click, never unattended, or the goal's own close; guard 5/5, red on the parent

    Why it left the lane: Every touched path in this diff — docs/specs/vna/SPEC-VNA-COCKPIT.md, packages/thetacog-mcp-vscode/src/vna-steer.ts, scripts/vna/{clear-gauge,goal-report,goal,steer-hook}.mjs, tests/vna/c91-clear-decision.test.mjs — sits on 🧭 navigator's file surface exactly zero times; navigator owns scripts/open-room-session.sh, .thetacog/cache/room-runners/*.sh, openclaw/src/thematic-scheduler.ts, openclaw/data/thematic-schedule.json, openclaw/src/focus-gravity.ts, openclaw/data/ollama-overnight/thematic-heartbeat.json, .workflow/cognitive-dashboard.html. The pull is lexical, not structural: 'steer' (vna-steer.ts, steer-hook.mjs) sits one gzip-NCD hop from navigator's 'thematic-scheduler'/'focus-gravity'; 'session'/'workspaceState'/'context.subscriptions' sit one hop from navigator's room-runner session scripts. The diff also literally imports `roomFromTerminal` from `src/lib/pmu/room-key.mjs` in both goal.mjs and goal-report.mjs — the same module family most likely responsible for stamping this receipt's room field from terminal/session identity rather than from the commit's own trailers.

    The semantic pull: 'steer'/'session'/'hook'/'watch'/'gauge' vocabulary in the VNA cockpit code reads as near-neighbor to navigator's scheduling/session vocabulary under compression distance, even though the two share no files; this is a token-vs-construct collision (CLAUDE.md's own Class 2 pattern), not a real structural overlap.

    Intent–reality gap: The commit's own trailers say Originating-Terminal: 📐 VS Code Architect and Relevant-Rooms: architect, operator, vault — navigator is named nowhere. The receipt nonetheless fired this intervention against room 🧭 navigator, whose owned surface the diff never touches once.

    • Confirm whether src/lib/pmu/room-key.mjs's roomFromTerminal() is the same function that stamps the deterministic receipt's room field (trace the PMU commit-receipt generator's room assignment step)
    • Add trailer-first resolution to that function per code_rewrite
    • Build tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs (ask-033, open 9×, still not built) with sha c35f59026 as the fixture: trailers name architect/operator/vault, receipted room navigator, zero surface overlap → assert exclusion from navigator's offPct
    • Build tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027) as the companion commit-side check
    • Backfill: audit navigator's other 23 out-of-lane events in the last 14 days for the same terminal/session-identity mistagging pattern before trusting its offPct trend

    What we learned: The drift pipeline's own room-attribution can be sourced from terminal/session identity (roomFromTerminal-style resolution) rather than from the commit's own Originating-Terminal/Relevant-Rooms trailers — so a commit can self-declare its lane correctly and still be scored against an unrelated room's offPct. The guard for exactly this (ask-033) has been asked 9 times and never built, meaning the detector is knowingly carrying this false-positive class into every navigator report.

    The missing guard (the deliverable): tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs

    Detector probe: signal attribution — gzip reef 30% · ballistic walk 70%. litIntent==walksIntent (127=127) and litReality==walksReality (137=137) on both sides — every visited node became 'lit', meaning the walk hit its budget with zero pruning/discrimination. That's saturation, not right-sizing: it's visiting-equals-admitting. Adjustment: separate 'visited' from 'admitted' by applying a compression-distance cutoff so a node can be walked without being counted as lit, which would likely have kept navigator below the 15% lane threshold here. Experiments: Re-run this sha's reef seed with prewalkOverlap threshold raised from whatever produced 6/127 to require ≥15% overlap before the walk proceeds; measure whether offPct on mistagged-room events drops · Add a distinct 'visited vs admitted' counter to the walk output and re-derive offPct off admitted-only counts for the last 20 receipts; compare to current offPct to size the saturation effect · Ablate roomFromTerminal()-style stamping vs trailer-first stamping on the last 14 days of navigator events specifically, and measure how many of the 24 out-of-lane events disappear

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since · dictionary ablation saved 948B

    This is a false claim against navigator's lane, not a real loss — navigator's premium should not move on it at all, and it's restored the moment ask-033's guard actually ships and retroactively voids c35f59026 from navigator's offPct history.

    Open the signed attestation →
  61. 2026-09-19 · 📐 architect · offPct 35

    spec(vna): C93h declared — the counterfactual is our own past: mint history (the tenth paste's six milestones graded; the dollar pin refused, the foreign-transcript claim corrected to our own 26 MB sessions); C93i declared — the lane check walks the dispatch's own paths, not the shared tree (the C91b pause at 02:29 UTC named as the incident); the historical mint launched detached over the last 200 commits

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→36 over 3 commits since

    Open the signed attestation →
  62. 2026-09-19 · 🧭 navigator · offPct 45

    feat(surfaces): the residual named on the notarize step — three verdicts and the hash; four whistles from the new-class posture on the roster

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  63. 2026-09-19 · 🧪 laboratory · offPct 25

    feat(vna): C92a the guards ride inside the CAR — guardsFor(sha) runs each named row's guard at HEAD and, with --parent, on the runner's archived parent tree; the result is signed at proofs.guards

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  64. 2026-09-19 · 📐 architect · offPct 16 · structural

    chore(vna): goal 16 installed — four units C93k · C92e · C93l · C93o, turns 4–10, at 499899153f

    Why it left the lane: The diff is docs-only (data/vna/goal.json, 13 insertions, 27 deletions) — a pure declaration edit — yet the receipt shows litReality=123 cells lit against litIntent=112, with reality's lensReality=A1,A diverging from lensIntent=A1,B. The commit message names four units (C93k, C92e, C93l, C93o) spanning turns 4-10 as a single 'installed' event; that many-unit, many-turn bundling is itself what the ballistic walk chases across a wider spread of coordinates than the room's declared A1,B lane covers — the walk followed the BREADTH of the goal-file's enumerated unit list, not the narrow single-unit intent the trailer implies.

    The semantic pull: The literal strings 'four units C93k · C92e · C93l · C93o' and 'turns 4–10' in the commit subject enumerate a multi-coordinate span in one sentence; a goal.json declaration touching that many named units drags the walk's lit-cell spread toward whichever unit's reef domain sits at A1,A (adjacent column, same row-anchor A1) rather than staying pinned to the A1,B column the Originating-Terminal (architect) claims.

    Intent–reality gap: The commit claims a single coherent installation event ('goal 16 installed') on the architect's strategy surface, but the receipt measured reality landing 11 more lit cells than intent and one lane-column off (A1,A vs A1,B) — the goal-declaration file structurally forces multi-unit content into one commit, and the walk reads that breadth as lane spread regardless of which room authored it.

    • data/vna/goal.json: split the four-unit array so each unit's declaration is its own top-level commit-eligible block, so a future 'install unit N' commit touches only that unit's JSON subtree
    • docs/strategy/ or CLAUDE.md: add a note that goal.json multi-unit batches require the commit message to name the SINGLE unit whose coordinate the diff's lattice placement should be checked against
    • scripts/vna: if a goal-declaration script writes all four units in one pass, add a --unit flag to declare one at a time, matching one-commit-one-unit discipline
    • tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs: extend fixture to cover a goal.json multi-unit batch commit specifically (not yet in the open-ask list's described cases)

    What we learned: A goal.json declaration commit that enumerates multiple units in one message is not the same intent-shape as a code change — the lattice walk treats the breadth of NAMED units in the message as lane-spread evidence, so goal/spec declaration commits need their own narrower message convention distinct from implementation commits, which prior lessons (ff09774e5, ffaf8d2ac, ff5110f85) did not isolate as a distinct commit class.

    The missing guard (the deliverable): tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs

    Detector probe: signal attribution — gzip reef 35% · ballistic walk 65%. Right-sized in depth but over-fed in breadth: litIntent=112 and litReality=123 are both large absolute counts for a 13-line JSON diff, meaning the walk is being asked to place a small diff against a message carrying four unit-names — concrete adjustment: cap the walk's message-derived seed terms to the units actually touched in the diff's JSON keys, not every unit named in prose. Experiments: Recompute this sha's walk using only the JSON keys actually changed in the diff (the specific unit ids present in the 13 changed lines) as the intent seed, and measure whether offPct drops below 15 — if it does, the message-breadth is confirmed as the cause · Ablation: strip 'four units C93k · C92e · C93l · C93o' down to just the primary unit name in a synthetic replay of this commit message and recompute laneJump/laneHamming to see if it falls closer to laneHammingNull=38 · Run the same goal.json diff pattern across the last 5 goal-declaration commits in this room and check whether offPct correlates with the count of unit-ids named in the subject line

    Measured outcome (deterministic, not self-graded): room mean offPct 25→18 over 5 commits since · dictionary ablation saved 813B

    A docs-only goal-declaration commit tripping offPct=16 on a room already carrying 126 out-of-lane events in 14 days reads as systemic under-fencing of the declaration format rather than one bad commit, so the lane's loss-ratio stays elevated until the one-unit-per-commit convention is enforced structurally (script flag), not just requested in prose.

    Open the signed attestation →
  65. 2026-09-19 · 🧪 laboratory · offPct 31

    feat(vna): C91f the falsifier on the row — a live, non-hermetic guard that goes green only when goal 15 closes through its own mechanism

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  66. 2026-09-19 · 🧪 laboratory · offPct 33

    feat(vna): C91b the report is derived, never typed — goal-report.mjs renders the closed goal's report from its tape row, the spec's declaration rows, git rev-list head_at..head_close, the runner's seen-red witnesses and the C89a controls dump; every number in the NUMBERS block passes through cites (path + field beside it, the C87 shape — no other door for a number); a goal with no closed row refuses; the .txt is plainText(md) byte for byte; goalAmend is C91a's one amendment door — the resendId lands as an APPENDED goal row carrying amends:<row_sha>, never a rewrite of the signed row; guard 6/6, red on the parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→24 over 6 commits since

    Open the signed attestation →
  67. 2026-09-19 · 🧪 laboratory · offPct 33

    feat(vna): the map of maps — every project surface keyed by the twelve lanes, READ where declared, PLACED by the one walk, UNMEASURED otherwise

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→9 over 6 commits since

    Open the signed attestation →
  68. 2026-09-19 · 🧪 laboratory · offPct 26

    feat(vna): C93q the three window readings — the Bridge paste's metrics corrected to the record: operator rows per commit, halts per dispatch, tape bytes per operator byte, over closed goals

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→40 over 3 commits since

    Open the signed attestation →
  69. 2026-09-19 · 📐 architect · offPct 25 · structural

    spec(vna): goal 13 re-set to its five open units (the paste-goal's C94 labels are not basins; its content is graded and built on C93j)

    Why it left the lane: The entire diff is 7 lines inside data/vna/goal.json — no file under any of architect's declared globs (docs/strategy/, docs/03-product/, .workflow/rooms/*.html, docs/01-business/strategy/, CLAUDE.md) was touched. grep across CLAUDE.md and docs/architecture/claude-rules/ for 'data/vna' returns nothing: the directory is unmapped to any room. lensReality=C,C / laneJump=2 / laneHamming=24 all measure the walk landing in the Ops.Grid×Tact.Signal quadrant (the runner/basin vocabulary in the message — 'basins', 'the runner can derive closure from the ticks') while lensIntent=B,A sits in architect's claimed doc quadrant — the encircled B1/C1/C2 mass is the runner-state coordinate the file actually lives at, not a doc-strategy coordinate.

    The semantic pull: Terms 'basins', 'the runner can derive closure from the ticks', 'goal 13 re-set to its five open units' are steer/runner-loop vocabulary (Ops.Grid × Tact.Signal), not architect's docs/strategy vocabulary — they pull placement toward B1,C1/B1,C2/C1,B3 regardless of which room authored the edit.

    Intent–reality gap: The commit claims architect-room spec work ('the goal file names basins the tree holds') but the only file changed, data/vna/goal.json, has zero owner-glob anywhere in the room-surface declarations — so the receipt reads 100% out-of-lane not because the work was wrong, but because the target file structurally cannot resolve to ANY room's lane.

    • Add a 'shared' ownership tag for data/vna/ (and .thetacog/, data/room-bifurcations.json) in whatever config backs the '== THE ROOM'S OWNED FILE SURFACE ==' listing so shared-state edits stop defaulting to 100% off-lane
    • Ship tests/pmu-simulator/shared-state-files-have-room-owner.test.mjs (ask-003) asserting every committed path resolves to a room glob OR an explicit shared tag
    • Ship tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs (ask-005) so docsOnly=true asset-only commits with no semantic diff score against a shared/ops lane, not the committing room's lane
    • Audit remaining unowned data/*.json and .thetacog/*.ndjson paths for the same gap now that one instance is confirmed
    • Note in CLAUDE.md's architect owned-surface row that data/vna/goal.json is explicitly NOT architect's — prevents future architect commits from re-triggering this exact miss

    What we learned: The detector assumes every committed path resolves to exactly one room's owned-surface glob, but the repo has a whole category of shared coordination files (data/vna/*) that were never assigned an owner by design — so ANY correct commit to data/vna/goal.json from ANY room will read 100% off-lane forever, independent of who commits or why, until shared files get a lane distinct from per-room globs. This is a new gap class, not the Originating-Terminal-vs-Relevant-Rooms mismatch ff09774e5 already covered.

    The missing guard (the deliverable): tests/pmu-simulator/shared-state-files-have-room-owner.test.mjs

    Detector probe: signal attribution — gzip reef 20% · ballistic walk 80%. Saturated, not shallow — walksIntent/litIntent and walksReality/litReality are equal on both sides (100% fill), which means the walk has no headroom left to express a partial or graded match; a 7-line JSON diff is being scored with the same full-saturation confidence as a large structural change. Adjustment: cap or discount lit-mass contribution for commits under a diffstat threshold (e.g. <10 lines, data-only) so small edits can't max out laneHamming. Experiments: Recompute prewalkOverlap from goal.json's structural JSON diff (which basin/unit keys actually changed) instead of raw-text NCD, then compare against offPct on the last 20 docsOnly commits to see if overlap tracks real drift or just JSON-shape similarity · Seed a 'shared/ops' lane definition from data/vna/*.json commit history and rerun this sha's walk against it — expect offPct to drop near 0 once a legitimate lane exists for the path · Add a diffstat-line-count discount to the walk's fill-saturation scoring and re-run the last 10 offPct>15 events to measure how many were small data-only edits like this one

    Measured outcome (deterministic, not self-graded): room mean offPct 25→31 over 7 commits since

    A structurally-unowned shared file inflating one room's offPct to 25% on a correct, well-scoped commit erodes trust in the lane signal itself — the fix that restores premium is tagging data/vna/ (and its siblings) as an explicit shared lane rather than penalizing whichever room happens to touch it next.

    Open the signed attestation →
  70. 2026-09-19 · 📐 architect · offPct 33

    spec(vna): C85d closed on the audit at 1364ad7464 — tests/vna 811/814 (the three release guards' circular reads, each excused by its own name only), tests/pmu-simulator 2029/2134 (the pre-existing column); 0.3.18 packaged and installed; SPEC-FROM-TREE re-rendered; goals 11 and 12, C89 and C90 every row ticked

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→27 over 12 commits since

    Open the signed attestation →
  71. 2026-09-19 · 🧭 navigator · offPct 36

    spec(vna): C92a ticked — guardsFor on the CAR, built at d5afa91f53, live-run on the C93l commit with --parent

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  72. 2026-09-18 · 🧪 laboratory · offPct 41

    feat(vna): C81c the goal ingest gate — goal-validate.mjs + goal.mjs import --validate; an external model's /goal is tied to live basins or rejected by line and rule; the paste that opened goal 8 is the first fixture and fails on its own names

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  73. 2026-09-18 · ☕ network · offPct 38

    research(comms/self): VNA seed-release report v1 — intent vs reality on the snowball (aimed right, never released), the C53a null and C53b release, how the spec uses ShortLex and the L1 walk, what is open; sent to the operator

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct —→0 over 12 commits since

    Open the signed attestation →
  74. 2026-09-18 · 🧪 laboratory · offPct 38

    feat(vna): C78e the Engine Telemetry ribbon under the triptych — Merkle root · L1 Rust walk · basins · causal chain, UNMEASURED before a fabricated zero

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→11 over 5 commits since

    Open the signed attestation →
  75. 2026-09-18 · 🧭 navigator · offPct 32

    feat(vna): the steer door is the IDE sidebar by default — html in a browser only when no IDE is up, never a split

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  76. 2026-09-18 · 🧪 laboratory · offPct 36

    feat(vna): C78a amended — no standalone trays: each card shows its main button + most-used actions above the fold, then an inline ▸ more

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→11 over 5 commits since

    Open the signed attestation →
  77. 2026-09-18 · 🧪 laboratory · offPct 48 · mistagged

    feat(vna): the txt is never read aloud — the hook block is the tree's new mass only, and the tail button opens no document

    Why it left the lane: The diff's own vocabulary is IDE/extension and tree-abstraction language — 'registerTextDocumentContentProvider', 'bodies.set(uri.toString()', 'SPEC AMENDMENT', 'treeViewOfRow', 'typed · placed · massed nodes' — all scoped to packages/thetacog-mcp-vscode/src/vna-tail.ts, scripts/vna/steer-hook.mjs, tests/vna/*. None of those paths, nor their lexicon, appear anywhere in laboratory's owned surface (thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*). The commit's own trailer even says Originating-Terminal: architect, Relevant-Rooms: architect/builder/navigator — laboratory is not claimed anywhere in the commit's own account. The out-of-lane coords (lensReality C2,C vs lensIntent A1,A3, laneJump=7) are the walk correctly finding VNA/tree-mining content; the room label 'laboratory' pinned to this event is the actual defect, not the content's placement.

    The semantic pull: Generic orchestration nouns shared by both subsystems — 'tree', 'node', 'fold', 'ledger', 'mine it for corrections' — gzip-NCD-match against laboratory's orchestrator/swarm lexicon (.thetacog/orchestrator/) even though the specific paths touched are 100% VNA. With prewalkOverlap only 5 against walksIntent=136, the reef seed barely engaged before the walk ran, so the walk had almost nothing lane-specific to anchor to and the residual lexical overlap on 'tree/node/fold' pulled the placement toward laboratory's orchestrator coordinates.

    Intent–reality gap: The commit message correctly and narrowly claims architect/builder/navigator as the relevant rooms and touches only VNA extension/hook/test files; the receipt nonetheless attributes offPct=48 drift to room 🧪 laboratory, a room with zero file-surface overlap with anything in this diff.

    • Add scripts/vna/**, packages/thetacog-mcp-vscode/**, tests/vna/**, docs/specs/vna/** to the architect room's owned-surface config
    • Wire tests/ops/room-surface-coverage.test.js (ask-001, already open, 7 prior asks) to fail when any diff path matches zero room globs
    • Wire tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, already open, 15 prior asks) so the Originating-Terminal trailer (architect) is checked against the diff's actual paths — this event would have failed that check instantly
    • Wire tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, already open, 19 prior asks) to verify laboratory is correctly ABSENT from Relevant-Rooms given the diff
    • Re-audit laboratory's 67 out-of-lane events over 14 days for the same VNA-ownerless-default pattern before trusting its offPct trend for any other intervention
    • Explicitly EXCLUDE scripts/vna/**, packages/thetacog-mcp-vscode/**, tests/vna/** from laboratory's config so it can never again absorb this class by default

    What we learned: e6a9a676c predicted the trailer would drift from habit; this event shows something worse — the trailer was CORRECT (architect/builder/navigator, laboratory never claimed) and the room attribution still landed on laboratory. The detector's room assignment does not appear to consult Relevant-Rooms/Originating-Terminal at all when no room's owned-surface glob matches; it silently defaults to the invoking room instead of surfacing UNOWNED. Ownerless surfaces don't just get mistagged by habit — they get absorbed by whichever room happens to be running the pipeline.

    The missing guard (the deliverable): tests/ops/room-surface-coverage.test.js (ask-001) — the guard that would refuse to let any file path in a commit's diff go unclaimed by a room glob, forcing an explicit UNOWNED state instead of a silent default-room absorption.

    Detector probe: signal attribution — gzip reef 30% · ballistic walk 70%. Right-sized on coverage (walkTruncated=false, litIntent/litReality track walksIntent/walksReality closely) but under-differentiated for THIS commit: a laneHamming of 31 against a null of 30 means the walk can barely tell this commit's placement apart from chance. Concrete adjustment: for comment-heavy, low-code-delta commits like this one (37 lines net, mostly prose rationale), increase walk depth or lower the admission tolerance so short structural diffs with long rationale text get a harder pull toward their true coordinate instead of resting near the null. Experiments: Reseed the gzip-NCD reef using only the 4 changed files' identifiers ('tree','fold','amendment','spec') vs the current full corpus and measure whether prewalkOverlap rises above 5 for this sha · A/B re-run this sha's walk with the new RAW_CAP_NODE=240/MAX_NODES_PER_ROW=8 constants seeded into the dictionary vs the old RAW_CAP_UNFOLDED=1200 baseline, and measure whether laneHamming separates further from laneHammingNull (currently 31 vs 30) · Feed the commit's own Relevant-Rooms/Originating-Terminal trailer as a hard prior into the walk before offPct is computed, and measure whether offPct for trailer-correct-but-mistagged commits like this one drops toward 0

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 1043B

    An event this size (offPct 48 vs threshold 15) charged to a room with zero file overlap corrupts laboratory's loss-ratio baseline and any premium computed from its trend line; restoring accuracy requires the owned-surface glob fix plus the coverage guard before laboratory's offPct history can be trusted for underwriting.

    Open the signed attestation →
  78. 2026-09-18 · 📐 architect · offPct 19

    spec(vna): C60 the forest line on every turn · C61 measure the door's repeatability before any budget change · C62 C58's tiebreaker by label, never a keyword proxy — the v4 reply's queue on the record before a /clear

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→34 over 11 commits since

    Open the signed attestation →
  79. 2026-09-18 · 🧪 laboratory · offPct 19 · mistagged

    fix(vna): the queue head orders by label, never file order — C52 led the live turn once the sort read the sequence; guard seen red on a later-in-file C47 printed as newest

    Why it left the lane: Both changed paths — scripts/vna/steer-hook.mjs and tests/vna/clear-gauge.test.mjs — sit in the scripts/vna and tests/vna coordinate. Checked against every room's owned-surface declaration in .workflow/rooms/*.html: cursor-laboratory.html, vscode-architect.html and rio-navigator.html each name zero vna paths; only kitty-operator.html's own focus_areas names 'scripts/vna (2c, flow-anchored) · pipeline / clipboard / steer'. The commit's own Relevant-Rooms trailer ('architect, navigator, laboratory') pulled the receipt's lane to laboratory's owned-surface cluster (crm-mcp, orchestrator, punch-list, memory/), which the diff never touches, so every lit reality cell in the vna coordinate scored as off-lane against that claim.

    The semantic pull: The pull isn't a term inside the code diff (queueHead, C52/C47 label sort, spec.md) — it's the trailer text itself. 'Relevant-Rooms: architect, navigator, laboratory' names laboratory as a lane-claim despite zero string/path overlap between the diff stat and laboratory's owned globs; the receipt has no way to know the trailer is wrong, so it dutifully measures 100% of the diff as outside laboratory's declared lane.

    Intent–reality gap: The commit claims three rooms (architect, navigator, laboratory) are relevant to a queue-ordering fix in scripts/vna/steer-hook.mjs; the receipt measured reality against those lanes and found offPct=19 because none of the three actually own scripts/vna or tests/vna — the room whose live focus_areas names that exact path (kitty-operator) isn't listed at all.

    • Land tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010) so it fails when a listed Relevant-Room's .workflow/rooms/<room>.html owned-glob has zero path intersection with the diff stat
    • Land tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027) — Originating-Terminal here is 📐 architect but the touched surface's live focus_areas belongs to 🥊 operator
    • Edit CLAUDE.md's COMMIT MESSAGE STRUCTURE section to drop the fixed '3 rooms' count in favor of '1-3, never padded'
    • git notes add on 1e329b45d correcting Relevant-Rooms to 'architect, navigator, operator' per the shipped-message-stays rule — do not amend
    • Audit the other 49 out-of-lane laboratory events in the last 14 days for the same padded-third-room pattern before assuming each is a genuine laboratory drift
    • Register scripts/vna/** and tests/vna/** explicitly as kitty-operator's owned surface in a static section of kitty-operator.html rather than only the dynamic focus_areas field, so the guard has a stable glob to check against

    What we learned: The COMMIT MESSAGE STRUCTURE convention hard-codes 'Relevant-Rooms: <3 rooms...>' — when a commit's diff genuinely touches only one room's surface, the third slot gets padded with a plausible-sounding but factually wrong room, and the drift receipt then faithfully measures that padded room as 100% out-of-lane. The fixed count is itself a drift-generator, independent of any code defect.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. litIntent==walksIntent (125/125) and litReality==walksRealty (139/139) — a 100% lit-to-walked ratio on both sides, with walkTruncated=false. A real distributional walk should not light every cell it visits; a 1:1 ratio suggests the walk is conflating 'visited' with 'matched' (no filtering step) rather than being well-utilized. Concrete adjustment: add a lit-threshold so walksReality > litReality in the typical case, then re-check whether offPct=19 survives on this same commit once visited-but-unlit cells are excluded. Experiments: Rerun this exact commit's walk with Relevant-Rooms corrected to 'architect, navigator, operator' (dropping the padded laboratory) and confirm offPct drops below 15 — a direct causal test of the padding-as-drift-source theory · Reseed the reef for kitty-operator using its static-registered scripts/vna/** glob (once added per the checklist) rather than the dynamic focus_areas string, and compare prewalkOverlap before/after — predict overlap rises well above 4/58 since the room now genuinely owns the touched path · Add a pre-walk lint that computes per-listed-room path-glob intersection count before the ~1.3s walk runs, short-circuiting to a mistagged verdict (skipping the full lattice walk) whenever a Relevant-Room has zero intersection — measure both walk-time saved and false-positive offPct events avoided across the room's other 49 recent out-of-lane events

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 1014B

    A commit whose trailer names a room that owns none of the touched paths is a paperwork defect, not a laboratory-lane loss — but until the Relevant-Rooms guard exists it inflates laboratory's measured loss-ratio on every padded commit; landing tests/rooms/relevant-rooms-covers-diff.test.mjs restores the premium by making the trailer's claim provably checkable before the receipt ever scores it.

    Open the signed attestation →
  80. 2026-09-18 · 🧪 laboratory · offPct 36

    feat(vna): C78a three cards and one CTA — the strip's fourteen buttons become ACTIVE CONTRACT · AUTONOMOUS RUNNER · INSTITUTIONAL ATTESTATION and two <details> trays

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→11 over 5 commits since

    Open the signed attestation →
  81. 2026-09-18 · 🧪 laboratory · offPct 29

    feat(vna): C52b first half — the snowball starts on the spec (basins only, the walk's slot first, NCD within, the compressor must admit) and the fold is the hook's to guarantee (detached, pid-locked, receipted); guards seen red under the ring stage removed and the lock check removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  82. 2026-09-18 · 📐 architect · offPct 24 · structural

    spec(vna): the five rows that cannot close tonight say why on the row — C15 gated by C11's own BROKEN receipt, C12 a model-in-the-loop session task, C49 needs its own null, C42 needs builder-model A/B runs, C45 needs a ledger schema; C44 already says NOT BUILT

    Why it left the lane: The diff is ten inserted lines across five checklist rows in one monolithic file, and four of five open with the identical governance template '(NOT BUILT 2026-09-17, said: ...)' / '(GATE READ 2026-09-17: ...)' immediately followed by dense measurement vocabulary lifted verbatim from other rooms' receipts — C11's 'abstention 3.5 %', 'ε 0.0093', 'rung 4'; C42's 'A/B runs across builder models'; C45's 'ledger schema'; C49's 'its own null'. That vocabulary is native to the pmu/lattice measurement coordinate (A1) laboratory/navigator's receipts populate, not to the strategy coordinate (A) architect's owned surface (docs/strategy/, docs/01-business/strategy/) is built from — so the walk's reality-side mass (110 lit cells) collapsed almost entirely into A1 while the intent walk still carried A.

    The semantic pull: '(NOT BUILT 2026-09-17, said:' x4, 'abstention 3.5 % (predicted 15–30)', 'ε 0.0093', 'rung 4', 'agreement bit', 'needs its own null', 'A/B runs across builder models', 'ledger schema' — all measurement-lane (A1) strings pasted into a file whose row-level job (say why it's gated) is a strategy-lane (A) decision.

    Intent–reality gap: The commit message frames this as closing five open governance rows with 'why' — a strategic-sequencing decision, architect's stated job — but the receipt shows the lit reality mass landed almost entirely in the measurement lane (A1) because the 'why' on each row is a quoted technical result, not a strategic framing.

    • Ship the already-spec'd C52/C52e (open on this room's own queue) — render SPEC-VNA-COCKPIT.md from the JSON tree with hand-edits routed through the tape, enabling per-row (per-basin) lane classification instead of one offPct blended across 5 unrelated governance rows.
    • Land tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs (ask-005, asked 8×) — this commit is docsOnly=true on its own receipt, exactly the case that guard was asked to cover.
    • Add docs/specs/vna/** to a named room's owned-surface glob (most plausibly laboratory, which produced the C11/C14/C43 receipts quoted inline) or explicitly mark it shared/exempt in the room-surface config, closing the gap tests/ops/room-surface-coverage.test.js (ask-001) would catch.
    • Once C52's per-row tree lands, replace inline technical justification (ε, abstention %, agreement-bit language) with a one-line verdict plus a link to the receipt it quotes (data/vna/clean-query-curve.json, data/vna/agreement-separation.json), keeping the governance row in the strategy lane and the technical detail in the receipt that already owns it.
    • Add the CLAUDE.md sentence from spec_rewrite so the Originating-Terminal/Relevant-Rooms distinction ff09774e5 diagnosed is finally written down, not just re-derived.

    What we learned: The prior lesson (ff09774e5) correctly diagnosed the classifier and even bought a temporary offPct improvement (20→14), but its four requested guards are still open after repeated re-asks (ask-010 ×15, ask-027 ×15, ask-033 ×9, ask-005 ×8) — the room keeps re-deriving the same diagnosis in prose across interventions without ever landing the code. The new fact this event adds: SPEC-VNA-COCKPIT.md is a single hand-edited file interleaving governance decisions and raw technical receipts across all three Relevant-Rooms, and the repo's own fix for that (C52/C52e) sits open on the identical queue as the unshipped guards — sensemaking is not the bottleneck here, shipping is.

    The missing guard (the deliverable): tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs

    Detector probe: signal attribution — gzip reef 20% · ballistic walk 80%. Right-sized, not shallow or saturated — 110 of 140 intent-side cells re-lit on the reality side (79%) with laneHamming well below the null, so the walk is finding real structure, not artifact. The mismatch is scope, not depth: it walks the whole file as one blob for 5 independent governance rows (C12/C15/C42/C45/C49) with different technical registers, blending five separable decisions into one offPct. Adjustment: chunk the walk per diff hunk (per checklist row) so each row gets its own offPct. Experiments: Seed the gzip dictionary with the VNA measurement vocabulary (ε, rung 4, abstention, agreement bit) and re-run prewalkOverlap on this commit and the last 10 spec(vna) commits — measure whether overlap rises materially above today's 4. · Re-run this commit's walk chunked per markdown list-item (5 separate hunks) instead of whole-file, and compare the resulting per-row offPct spread against the single blended 24% — tests whether the file-level number is masking 1-2 genuinely off-lane rows inside 3-4 in-lane ones. · Once C52e's tree-render exists, diff its rendered output against this commit's hand-edit for equivalent content and measure whether the tree-sourced version scores a lower offPct.

    Measured outcome (deterministic, not self-graded): room mean offPct 23→30 over 8 commits since · dictionary ablation saved 706B

    A room with 109 out-of-lane events in 14 days and a guard backlog re-asked 15×/15×/9×/8× without shipping reads as an unmanaged, chronic peril rather than an isolated miss; landing ask-005 plus finishing C52's per-row tree is what moves this lane from unbounded small claims to a priced, shrinking one.

    Open the signed attestation →
  83. 2026-09-18 · 📐 architect · offPct 23

    spec(vna): C48–C50 declared on Part 1 — spec-first snowball seeding, entropy-based snipping, the local cryptographic tape — each with what already exists named

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→23 over 25 commits since

    Open the signed attestation →
  84. 2026-09-18 · 🧪 laboratory · offPct 39 · structural

    feat(rpm): mode 2 — one-outcome walk format: outcome-is-not-the-document, six needs × 3 with Connection as relationships, RESULT backward from the end, MASSIVE ACTION built forward with NEEDS / LANDS ON / failure mode per stage, test-the-thing filters, what-changed section

    Why it left the lane: The diff only touches .claude/commands/rpm.md, adding 'Mode 2' — a skill spec built entirely from strategy/outcome vocabulary: 'Reference runs: docs/strategy/rpm-one-2000-licensed-agents-2026-09-17.txt', 'WHY — six needs × THREE mechanisms', 'MASSIVE ACTION — built FORWARD, stage by stage', 'NEEDS:', 'LANDS ON:'. None of that vocabulary belongs to 🧪 laboratory's owned surface (MCP/CRM/swarm-comms/orchestrator). The receipt's own lens read shows lensIntent=A1,B3 vs lensReality=A1,C1 — a B3→C1 slip while A1 held — but no region narrative is cached for this sha, so the exact 144-lattice coords can't be named beyond that lens pair.

    The semantic pull: 'docs/strategy/rpm-', 'NEEDS:'/'LANDS ON:', and the six-needs canonical-order string pull toward the strategy/outcome-planning region (reality lens C1); nothing in the diff touches MCP, CRM, swarm-comms or the orchestrator (laboratory's actual owned strings), which is why intent lens B3 (laboratory-adjacent) never gets re-lit on the reality side.

    Intent–reality gap: The commit's own trailers claim Relevant-Rooms: architect, operator, navigator (laboratory is never named) and Originating-Terminal: 🎤 voice (Terminal Voice, a different room than 🧪 Cursor Laboratory) — yet this receipt is being scored and charged against laboratory's lane at 39% off-lane.

    • Add a canonical room-ownership rule for .claude/commands/*.md (likely 'architect') to docs/architecture/claude-rules/doors-and-surfaces.md
    • Ship tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, asked 13× — exactly this event: Originating-Terminal 🎤 voice vs scored room 🧪 laboratory)
    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010) so the trailer's declared rooms are checked against the diff's actual owning room(s)
    • Run tests/ops/room-surface-coverage.test.js (ask-001) across the repo to find every other currently-unowned shared surface like .claude/commands/
    • Gate the receipt dispatcher on owned-surface intersection before it charges any room's ledger

    What we learned: Room-ownership globs don't cover .claude/commands/*.md at all — the shared skill/command-spec surface has no room assigned to it — so any commit there structurally cannot resolve to a correct lane and falls to whichever room the dispatcher defaults to (here, laboratory, 44 times in 14 days), independent of what the commit's own trailers correctly claim.

    The missing guard (the deliverable): tests/pmu-simulator/originating-terminal-matches-surface.test.mjs

    Detector probe: signal attribution — gzip reef 60% · ballistic walk 40%. Saturated. litIntent/walksIntent and litReality/walksReality are both ~1.0 — the walk isn't filtering signal from noise, it lights up nearly everything it touches. Concrete adjustment: for docsOnly=true commits (this one included), apply a stricter lit-threshold (minimum gzip-NCD similarity to count as 'lit') so plain-prose additions stop saturating the full walked region. Experiments: Recompute prewalkOverlap after stripping YAML frontmatter (---\nname:\ndescription:---) from command files, and measure whether driftPct drops — test whether boilerplate headers are inflating cross-lane seed overlap. · For docsOnly=true commits, cap walk depth/breadth and measure whether litIntent/litReality saturation (currently ~100%) drops into a discriminating range. · Backtest laneHamming (22) vs laneHammingNull (26) across laboratory's last 44 events: since this one sits only ~15% below null (a weak signal), test whether requiring laneHamming < 0.7×laneHammingNull before firing an intervention cuts false out-of-lane fires for this room specifically.

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 780B

    Charging a structurally-unowned surface's drift against 🧪 laboratory's ledger inflates that lane's loss-ratio on events it never authored; premium is restored by giving .claude/commands/*.md an owning room and gating the receipt dispatcher on owned-surface intersection before it charges any room.

    Open the signed attestation →
  85. 2026-09-18 · 📐 architect · offPct 39

    spec(vna): C70 the ratchet goals — nine metrics beyond tokens (gates-first-try · lost turns · shear · interventions · re-anchor drift · context carried · red witnessed · wall · tokens/cost), a prediction per metric in data/vna/regime-floors.json written before the first headless run, measured per regime, floor moves only the good way; UNMEASURED stays null

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→35 over 34 commits since

    Open the signed attestation →
  86. 2026-09-18 · 🧭 navigator · offPct 26

    feat(vna): C36 the round-trip research handshake — one sidebar action bundles the active leaf, the drift zones and the open invariant boundaries with the handshake that makes the answer land back in its basin; a hand edit to the spec now dispatches a fold; extension 0.3.10; guard seen red under the handshake removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  87. 2026-09-18 · 📐 architect · offPct 21 · structural

    spec(vna): §22 — name the meld pair for the Arm 2 coordinate, not the bare slot label

    Why it left the lane: The diff's only content is two parenthetical need-pair glosses added to satisfy the voice-meld check on a bare slot label. Those four words — Contribution, Growth, Connection, Significance — are the repo's six-needs vocabulary, which the reef/lexicon has seen heavily elsewhere (voice-and-pitch rules, the six-percentages guards, ghost-read need-scoring). Injecting them into a sentence whose declared coordinate is B,A1 (Tactics × Strategy.Law) pulled the ballistic walk's lit-reality mass toward A3,A3 — the needs/voice region — even though the edit is a one-line compliance fix inside an already-B,A1-declared section.

    The semantic pull: Exact strings from the diff: 'the Engine slot (Contribution × Growth)' and 'Identity-as-emission slot (Connection × Significance)' — these are the terms the walk's reef seed recognizes as needs-taxonomy tokens, dragging placement from the declared B,A1 coordinate to the measured A3,A3 coordinate (lensIntent=B,A1 vs lensReality=A3,A3 on the receipt row).

    Intent–reality gap: The commit claims a narrow, in-lane act — 'name the meld pair for the Arm 2 coordinate, not the bare slot label,' a docs-only edit that should stay filed under B,A1. The receipt measured the opposite: lensReality lands at A3,A3, and 21% of lit reality cells sit outside the declared lane, on a diff that is a single insertion satisfying a linter, not a content move.

    • Fence the §22 needs-gloss line in docs/specs/vna/SPEC-VNA-COCKPIT.md with the compliance-only note
    • Add the same fencing sentence pattern to the commit-message body template for voice-meld-driven edits
    • Define and ship the NEEDS-GLOSS marker convention wherever the voice-meld check inserts a needs pair
    • Teach the lattice-walk's lit-mass step to discount marked compliance-gloss spans from off-lane scoring
    • Audit docs/specs/vna/SPEC-VNA-COCKPIT.md's other §-numbered coordinate declarations for the same bare-label-then-needs-gloss pattern before they fire the same false alarm
    • Confirm whether docs/specs/vna/ belongs on any room's owned-surface glob — it is absent from architect's list even though architect originated this commit

    What we learned: Two enforcement layers on this repo actively work against each other on the same line of text: the voice-meld check REQUIRES needs-vocabulary be spelled out next to any bare coordinate label, and the lane-drift detector PENALIZES needs-vocabulary appearing outside a needs-declared lane. Satisfying one detector's warning is structurally guaranteed to trip the other whenever a Tactics/Strategy-lane document names its own needs pair — this is a new class distinct from the prior Originating-Terminal/Relevant-Rooms mismatch lessons.

    The missing guard (the deliverable): tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. litIntent=142 vs litReality=89 is a wide, asymmetric spread for a one-line, docs-only, 1-insertion/1-deletion diff — the walk is over-firing relative to the size of the actual change. Concrete adjustment: for docsOnly=true commits under a small line-delta threshold (e.g. <5 changed lines), run the walk at reduced recursion depth so a compliance-label tweak doesn't generate 89 lit-reality cells' worth of apparent spread. Experiments: Add the needs-vocabulary compliance pattern ('slot (Need × Need)') as a discounted/stopword entry in the lexicon dictionary, then recompress this commit and its siblings to check whether offPct drops toward or under 15 · For docsOnly=true commits with diff line-count under 5, run the walk at a shallower depth (e.g. 4 vs the current 8) on the last 20 such commits and compare offPct variance against the full-depth walk · Ablate a bundled needs-vocabulary token (Contribution/Growth/Connection/Significance as one gzip dictionary entry) and recompute laneHamming vs laneHammingNull on this commit to test whether the 26-vs-18 gap collapses once the baseline corpus already expects these words everywhere

    Measured outcome (deterministic, not self-graded): room mean offPct 23→31 over 20 commits since · dictionary ablation saved 999B

    A cosmetic linter-compliance edit tripping a 21%-off-lane alert is pure noise inflating this lane's loss ratio; premium is restored by exempting docsOnly single-line compliance edits from full-lattice scoring (ask-005) and discounting the known needs-gloss template from lit-mass.

    Open the signed attestation →
  88. 2026-09-18 · 🧭 navigator · offPct 37

    feat(vna): C79e automated lane enforcement — the runner advances in lane, pauses on drift with Auto-Amend / Revert on the card, says UNMEASURED otherwise; ⇄ pick an arm retires from the cards

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  89. 2026-09-18 · 🧪 laboratory · offPct 22 · mistagged

    feat(vna): C58 the chunk is released, never refused — ingest() and reslot() apply C53b's release: an unadmitted walk keeps its pixel and the nearest basin in ring 0/+1 takes the chunk as a snippet marked UNMEASURED with the walk's numbers and the compressor's d, the leaf retained. Live reslot: empty basins 50 → 37, released 236, ties 120; the done-when (under 10) is NOT met and the row stays open — 36 of 37 empties share a cell with another basin (67 rows on 31 cells) and the compressor cannot pick; released d median 0.83 = the random band, same as the admitted ones (0.82): the cell is the only signal. Guard seen red with releasedHere forced false

    Why it left the lane: The diff's actual content — `ingest()`, `reslot()`, `basin`, `ring`, `pixel`, `released: 'UNMEASURED'`, `m_attach`/`τ_attach`, and the files scripts/vna/spec-tree.mjs, tests/vna/spec-basins.test.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md, data/vna/spec-targets.json — sit entirely inside the VNA/spec-tree subsystem. Laboratory's owned surface (.claude/projects/**, .mcp.json, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*) touches none of it. Because VNA has no owning room at all (named already in e6a9a676c), 100% of this diff's mass necessarily lands outside whichever room's lane you check it against — laneHamming=38 vs null 23, offPct=22 is that structural gap made visible.

    The semantic pull: Every string that would 'pull' placement — spec-tree.mjs, spec-basins.test.mjs, SPEC-VNA-COCKPIT.md, basin/ring/pixel/released vocabulary — encircles at lensReality=C2,A1 (the VNA/spec cluster), while the commit's Relevant-Rooms trailer claims lensIntent A1,B3 territory by naming laboratory. The pull isn't toward a wrong neighboring lane; it's toward a lane that has never been assigned to any room's glob, so the walk has nowhere legitimate to land it.

    Intent–reality gap: The commit's Relevant-Rooms trailer claims joint relevance across architect · navigator · laboratory, but the receipt measures the entire diff residing in a VNA surface that overlaps zero owned paths for laboratory — the trailer asserts a relevance the file paths never earn.

    • Add scripts/vna/**, tests/vna/**, docs/specs/vna/**, data/vna/** to architect's owned-surface glob (Originating-Terminal on this and prior VNA commits is consistently architect) so VNA mass has a real owner for the first time
    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, asked 20× already — the highest-asked open guard, exactly this failure class)
    • Ship tests/ops/room-surface-coverage.test.js (ask-001) to flag any path with zero room owner — would have caught VNA the day C42 first landed
    • Stop hand-typing Relevant-Rooms from habit — compute it from `git diff --stat` against each room's glob and only list rooms with ≥1 matching path
    • Update e6a9a676c's 'outcome not yet measured' line: this is the second VNA/laboratory mismatch since that lesson was recorded with no guard shipped — note the recurrence explicitly so the next intervention doesn't re-diagnose the same root cause a third time

    What we learned: A lesson recorded as prose (e6a9a676c) without a shipped guard behind it does not change subsequent commits — this is the second VNA→laboratory mistagging since that exact mechanism was named, and the room's measured offPct trend across the two facts-only interventions since (null→13, then 23→23) shows no consistent improvement, consistent with nothing having actually closed the gap.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 30% · ballistic walk 70%. litIntent=135 vs litReality=120 is a moderate (~11%) asymmetry, not saturation and not shallow — walkTruncated=false confirms it ran to completion. Adjustment: raise walksReality's budget by ~15 walks to match walksIntent and re-check whether laneHamming converges toward laneHammingNull; if it does, the asymmetry was a sampling artifact rather than real drift. Experiments: Seed the reef with a VNA-domain lexicon (basin, ring, reslot, ncd, τ_attach) tagged to its own domain bucket, then re-measure prewalkOverlap on the next 10 VNA commits — expect it to rise materially off 4 if the domain gap (not room-tag noise) is the true driver · Pre-filter the walk: when Relevant-Rooms names a room with 0% path overlap on the diff, skip walking that room's lane entirely and re-measure whether laboratory's offPct distribution flattens toward its true (near-zero) baseline once VNA commits stop being checked against it · A/B raise walksReality budget by 15 on the next 20 VNA commits and measure whether laneHamming(measured) moves toward laneHammingNull(23) — confirms whether the asymmetry is a budget artifact or genuine drift

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 1147B

    This event doesn't raise laboratory's real loss-ratio — the underlying VNA work is sound and well-tested — but a second unaddressed occurrence of the same mistagging inflates the room's apparent drift-rate on risk it never wrote; the rate only resets once ask-010's guard ships alongside a real VNA room owner, pricing the mass against the party that actually holds it.

    Open the signed attestation →
  90. 2026-09-18 · 🧪 laboratory · offPct 26

    feat(vna): T7 seed from the leaf — --seed reads a prompt against every leaf by memoized NCD, names the two nearest with the margin, and abstains under m_attach or beyond τ_attach; guard seen red under m_attach := 0

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  91. 2026-09-18 · 🧪 laboratory · offPct 18

    test(vna): freeze it — the steer command never creates an editor-column panel

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  92. 2026-09-18 · 📐 architect · offPct 32

    spec(vna): C89d ticked — the README rewritten recipe-first, 448e6ef54d, guard 8/8 seen red

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→33 over 9 commits since

    Open the signed attestation →
  93. 2026-09-18 · 🧪 laboratory · offPct 41 · mistagged

    feat(vna): C52b second half — the attach path is slot-first: every tape chunk is walked, the basins within a block of its pixel are the slot, the nearest the compressor admits takes the chunk before any tape leaf; one walk per chunk; guard seen red under the slot stage removed

    Why it left the lane: The three touched files (docs/specs/vna/SPEC-VNA-COCKPIT.md, scripts/vna/spec-tree.mjs, tests/vna/spec-basins.test.mjs) carry pure VNA-spec-tree vocabulary — 'basins', 'chunkPixel/walkPixel', 'slot stage', 'ring', 'NCD', 'τ_attach/m_attach' — none of which touches any string in laboratory's owned surface (thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*, .mcp.json). The commit's own trailer 'Relevant-Rooms: architect, laboratory, navigator' is what pulled this event into the laboratory lane at all — the receipt then correctly measured that the diff's mass sits nowhere near laboratory's declared surface (litIntent=141 vs litReality=140, near-identical counts, but placed at lensReality=C1,A1 against a claimed lensIntent=A1,C3), producing offPct=41.

    The semantic pull: 'basins()', 'seedSpecFirst()', 'ingest()', 'chunkPixel', 'the slot stage', 'one walk per chunk' are all VNA-attractor-tree terms describing scripts/vna/spec-tree.mjs's own coordinate system; they have zero lexical or path overlap with laboratory's CRM/MCP/orchestrator surface, so the reef's gzip-NCD seed and the walk both land reality at C1,A1 while the trailer's habitual room list keeps insisting the intent lane is A1,C3-adjacent for laboratory.

    Intent–reality gap: The commit's trailer claims laboratory as one of three rooms this work is 'Relevant' to; the receipt shows 100% of the diff's three changed files fall entirely outside laboratory's owned-surface glob, so the claimed room lane and the measured file lane never touch.

    • Add scripts/vna/**, docs/specs/vna/**, tests/vna/** to the architect room's owned-surface config (the .workflow/rooms/*.html glob the room-surface system reads) so a correct default exists instead of forcing habit-fills
    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, already asked 16x) — fail when a Relevant-Rooms room has zero path overlap with the diff and is not the Originating-Terminal room
    • Ship tests/ops/room-glob-overlap.test.mjs (ask-024) so the new architect VNA glob can't silently collide with laboratory's or navigator's globs
    • Audit the 63 laboratory out-of-lane events from the last 14 days and reclassify the VNA-tagged ones under architect once its glob exists, to get an honest historical loss-ratio baseline for both rooms
    • Add the CLAUDE.md commit-trailer rule ('3 rooms whose owned-surface the commit most touches') a worked counter-example: a room with 0 touched files is never one of the 3, even if it appeared in the last VNA commit's trailer

    What we learned: Naming the gap once (e6a9a676c) did not change committer behavior — this room absorbed a mistagged VNA event again, and at volume: 63 out-of-lane events in 14 days in laboratory alone. A sensemaking note with no owning glob and no shipped guard is not a fix; it is a diagnosis that expires the moment the next commit is drafted by habit. The durable fact: this repo's drift pipeline can correctly measure a mistagged trailer (offPct=41 is accurate) but has no mechanism to stop one from shipping — ask-010 sitting at 16 asks unshipped is itself evidence that 'measure and log a lesson' does not substitute for 'land the guard'.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 65% · ballistic walk 35%. Right-sized in spread (141 vs 140, no saturation or truncation) but under-discriminative here (laneHamming 30 vs null 34 is a thin margin) — concrete adjustment: seed the walk's reef from the diff's changed FILE PATHS (scripts/vna/, docs/specs/vna/) in addition to commit-message text, since message-derived intent for a habitually-trailered commit will always underweight the actual path evidence. Experiments: Re-seed the reef with changed-file-path tokens for the next 20 VNA commits and check whether prewalkOverlap rises above 4 — if it does, path-derived seeding is the fix, not message-derived · Recompute offPct for the last 30 VNA-tagged commits with Relevant-Rooms restricted to Originating-Terminal only (drop habitually-listed rooms) and measure whether laboratory's VNA-driven offPct events collapse toward 0 · After adding architect's VNA glob, rerun this same sha's receipt and confirm laneHamming widens meaningfully past its null (target: >8 below null, versus today's 4) now that architect is the correct intent lane

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 976B

    A mistagged trailer lets laboratory's loss history absorb a defect it never produced while architect's true VNA drift exposure goes unpriced; premium is restored only by giving architect the VNA glob and reclassifying the 63 pending laboratory events against it, so each room's loss ratio reflects the surface it actually owns.

    Open the signed attestation →
  94. 2026-09-18 · 🧪 laboratory · offPct 26 · mistagged

    feat(vna): C43 Merkle-proof attestation per commit — a commit naming a spec row carries a verified inclusion proof from that row's basin to the root; the basin's bundle and the hook read the commits that satisfied it (the snowball runs backwards into the repo); post-commit attests detached; guard seen red under the proof's path fold removed

    Why it left the lane: The diff's own vocabulary — 'Merkle-proof attestation', 'attest-commit.mjs', 'spec-tree.mjs', 'basin', 'n_spec_${label}', 'post-commit gains one detached child' — is VNA-domain content. That vocabulary belongs to the room whose own declared topic vector is literally 'vna, pmu, vna-ide' (.workflow/rooms/cursor-laboratory.html line 460), not to the room this event was scored against. The event's given owned-surface block (.claude/…/memory/, .mcp.json, scripts/init-claude-flow-with-crm.sh, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/) matches .workflow/rooms/claude-laboratory.html byte-for-byte (lines 382-388) — a DIFFERENT room that self-describes its primary tools as 'claude-flow (90), thetacoach-crm (8), swarm-comms (5)' and contains zero references to vna anywhere in its own file. None of the 7 touched paths (scripts/vna/*, docs/specs/vna/*, hooks/post-commit, tests/vna/*, data/vna/*) intersect that room's glob, so offPct=26 is arithmetically guaranteed.

    The semantic pull: cursor-laboratory.html line 701 states outright: 'This room is the iteration loop: specs, audits, tests, component work. The sibling Claude Laboratory shares C2 but owns a different surface (agentic workflows / memory / MCP).' Two rooms share the emoji 🧪, the word 'Laboratory', and coordinate C2, but have fully disjoint owned surfaces. laneJump=7 / laneHamming=32 (vs null 34, barely above chance) is consistent with the detector having keyed on the ambiguous 'laboratory' label and landed in the wrong lab's lattice neighborhood rather than measuring a real content violation.

    Intent–reality gap: The commit message and trailers (Originating-Terminal: 📐 architect; Relevant-Rooms: architect, laboratory, operator) never claim Claude Laboratory's memory/MCP/CRM surface at all — the work is entirely VNA spec-tree plumbing. The receipt nonetheless scored it against 🧪 claude-laboratory's owned surface, which shares nothing with the diff; the room/lane claim on the event, not the commit's content, is what's wrong.

    • Fix the room-resolution key in the intervention pipeline to use the slug (cursor-laboratory / claude-laboratory), never the bare '🧪 laboratory' string.
    • Re-audit this room's '51 out-of-lane events in the last 14 days' for the same collision — likely several are VNA commits misrouted to claude-laboratory the same way, inflating a count that isn't this room's fault.
    • Confirm scripts/vna/**, docs/specs/vna/**, data/vna/**, tests/vna/**, hooks/post-commit are explicitly listed in cursor-laboratory.html's 'Owned file/dir surface' section, not just implied by its 'vna' topic tag.
    • Reconcile Originating-Terminal: 📐 architect against room: 🧪 laboratory on this commit — once room resolution is fixed, confirm which room this specific commit truly belongs to (architect vs cursor-laboratory) and correct one of the two fields.
    • Give the two 'Laboratory' rooms visually distinct labels (e.g. retain 🧪 for Cursor Laboratory only; rename Claude Laboratory's short label so 'laboratory' alone is never ambiguous in logs/receipts).

    What we learned: This repo has two rooms sharing one emoji and one word ('🧪 Laboratory') at the same coordinate (C2) with fully disjoint owned surfaces (cursor-laboratory.html ↔ claude-laboratory.html) — any pipeline that keys room identity off the label instead of the slug will silently misattribute every commit from one lab to the other, and will keep doing so at volume (not as a one-off) until the key is fixed.

    The missing guard (the deliverable): tests/pmu-simulator/originating-terminal-matches-surface.test.mjs

    Detector probe: signal attribution — gzip reef 65% · ballistic walk 35%. Right-sized, not shallow or saturated — full utilization on both sides with only modest asymmetry (134 vs 142). No depth adjustment indicated; the defect sits upstream of the walk, at room/corpus resolution. Experiments: Split the '🧪 laboratory' reef corpus by resolved slug (cursor-laboratory vs claude-laboratory) and re-score this commit's offPct against each independently — expect it to land near-zero against cursor-laboratory's corpus. · Re-key the last 14 days of 'laboratory' events by slug and re-measure the room's offPct trend/event-count — test whether the '51 events' figure collapses once the two labs are split, which would confirm the collision as the dominant driver rather than genuine content drift. · Add a canary test that tags a VNA-only diff with Originating-Terminal: 📐 architect and room 🧪 laboratory, then confirms ask-027's guard fires red.

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 1055B

    This event should not count against claude-laboratory's loss-ratio at all — it's misattributed VNA work belonging to cursor-laboratory/architect; premium is restored not by tightening claude-laboratory's behavior but by fixing the room-key collision so both labs' offPct trends reflect their actual, disjoint work.

    Open the signed attestation →
  95. 2026-09-18 · 🧪 laboratory · offPct 22

    measure(vna): C61 the door is repeatable — 40 leaves × 3 at 800 and 4000 ms: 0 pixel / 0 admission disagreements, median 69 ms; the "wall-clock leak" is refuted and no budget change is licensed. The 49-vs-60 was the targets moving: renderTargets() folds slotted snippets into the target text, so the first reslot rewrote spec-targets.json and the second walked heavier axes. Receipt data/vna/walk-repeatability.json; guard reads it

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  96. 2026-09-18 · 🧪 laboratory · offPct 29

    spec(vna): C54 the tree's own machinery is a declared lane — Arm 2 (six commits at A1.Strategy.Law × C3.Operations.Flow, undeclared) resolved by declaration, not by calling it drift: pick recorded (pick-ledger 6e4ef4244f92) with the true note (the fold, the slotting, the nulls, the renders — not IDE work), the row written, walked to C,C2 (one block from A1,C3), guard asserts the reach; Arm 2 now names B,A1 — today's C53 commits — because the envelope reads only unchecked rows as declarations, said on the row

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  97. 2026-09-18 · 🧪 laboratory · offPct 16 · mistagged

    feat(vna): C53c the borne-out column — every rendered spec row carries ONE typed state read from receipts, never prose (DECLARED · BUILT · GUARDED · MEASURED · MEASURED-HELD · MEASURED-BROKEN · UNDERPOWERED · NOT-WORTH-A-BOUNDARY · UNMEASURED) via data/vna/borne-out-receipts.json (label → receipt · verdict path · map); SPEC-FROM-TREE.md and the sidebar paint it with the receipt beside it, a missing receipt renders UNMEASURED with the path; first render: 43 GUARDED · 9 ticked rows with no guard on disk · C11 BROKEN · C14 UNDERPOWERED · C49 NOT-WORTH-A-BOUNDARY · C53a HELD; C53 closes a–c; guard seen red under the registry read removed and under the column dropped

    Why it left the lane: Every semantic-file in the diff — scripts/vna/spec-tree.mjs, docs/specs/vna/SPEC-FROM-TREE.md, docs/specs/vna/SPEC-VNA-COCKPIT.md, tests/vna/spec-render.test.mjs, data/vna/borne-out-receipts.json — sits under scripts/vna/**, docs/specs/vna/**, tests/vna/**, data/vna/**, none of which appear anywhere in laboratory's owned-surface list (.claude/projects/, .claude/settings.json, .mcp.json, scripts/init-claude-flow-with-crm.sh, scripts/check-mcp-health.sh, scripts/claude-room, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*). Terms like 'BORNE-OUT COLUMN', 'spec-tree', 'basins()', 'C53c' pull the walk to lensReality=C,B3 (the VNA/spec coordinate), 9 lane-jumps from lensIntent=C3,A — a jump the receipt then charges entirely to laboratory because the commit's own Relevant-Rooms trailer named it, not because any diffed path overlaps laboratory's lane.

    The semantic pull: docs/specs/vna/SPEC-FROM-TREE.md, scripts/vna/spec-tree.mjs, tests/vna/spec-render.test.mjs, data/vna/borne-out-receipts.json — a full VNA/spec-tree feature commit with zero string or path overlap against laboratory's CRM/MCP/orchestrator glob set, dragging placement to C,B3 purely on the strength of the Relevant-Rooms trailer habit.

    Intent–reality gap: The commit trailer claims 'Relevant-Rooms: architect · navigator · laboratory,' but 100% of the diff (spec-tree.mjs, SPEC-FROM-TREE.md, borne-out-receipts.json, spec-render.test.mjs) is VNA/spec work that touches none of laboratory's owned files — laboratory absorbed the whole event's mass for work it has no stake in.

    • Add an owned-surface glob for scripts/vna/**, docs/specs/vna/**, tests/vna/**, data/vna/** to a room config (.workflow/rooms/vscode-architect.html or cursor-laboratory.html — confirm which room actually carries VNA work; Originating-Terminal on this commit and the last 12+ VNA commits is 📐 architect, so architect is the likely correct owner)
    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010) — already asked 19 times, the most-requested open guard in this room's queue, and still unshipped
    • Ship tests/ops/room-glob-overlap.test.mjs (ask-024) as the complementary check on the config side
    • Audit the room's 69 out-of-lane events in the last 14 days for the same zero-overlap mistagging pattern before writing any more per-event intervention prose for laboratory
    • Update the commit-message authoring habit/template (wherever Relevant-Rooms gets filled — by hand or by a script) to check overlap before listing a room

    What we learned: The exact fix this room's own prior lesson (e6a9a676c) named — give VNA an owned-surface glob — has not landed, and the guard that would enforce it (tests/rooms/relevant-rooms-covers-diff.test.mjs, ask-010) has been requested 19 times without shipping. The recurring failure here isn't the drift detector; it's that this room's own missing_guard field has been asked-and-ignored 19 times running, meaning the intervention loop is stuck re-diagnosing a known defect instead of escalating past a stalled guard.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 35% · ballistic walk 65%. litIntent 130 / litReality 110 is a moderate, not saturated, spread — the walk is exploring both sides reasonably rather than collapsing to a single cell or maxing out. One concrete adjustment: since laneHamming (30) sits within 3 of its null (33), widen the walk budget on the reality side specifically for VNA-shaped diffs (paths under scripts/vna/**) to see if a deeper walk pulls laneHamming further from its null and gives a less noisy lane-distance signal. Experiments: Seed the reef with VNA-specific vocabulary (spec-tree, basin, borne-out, ShortLex Cxx labels) and re-run prewalkOverlap on the last 10 VNA commits — measure whether overlap rises from 2 toward the corpus median. · Re-score the 69 laboratory out-of-lane events from the last 14 days with a corrected Relevant-Rooms (dropping non-overlapping rooms) and measure how many collapse from out-of-lane to in-lane — this directly tests whether the mistagging class, not genuine drift, explains the bulk of laboratory's 69-event count. · Once a VNA owned-surface glob exists, ablation-test offPct on this commit's sha with the glob present vs absent to confirm the fix actually removes the charge rather than just relabeling it.

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 1278B

    This event is a false loss against laboratory's book — its offPct=16 reflects borrowed VNA volatility, not laboratory's own defect rate, so the honest premium fix is administrative (assign VNA its owned surface and ship the overlap guard) rather than any change to laboratory's actual code quality.

    Open the signed attestation →
  98. 2026-09-18 · 🧭 navigator · offPct 22

    feat(vna): C89d — the README rewritten recipe-first: H1 is the wedge (also the marketplace description), five steps by painted label before any theorem, a day with it in four beats with placeholders the meter fills, the million-token window answered by the clear gauge's fields and the counterfactual through CHARS_PER_TOKEN and BUNDLE_TOKEN_CAP by name, the theorem in one place after the recipe; boundary (C82c) and controls (C89a) untouched

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  99. 2026-09-18 · 🧪 laboratory · offPct 17

    feat(vna): C52e — the gate opened by re-slotting the tape through the one door (434 leaves, 58 admitted, 37 slotted into 17 basins, 21 ties named), then the rows rendered FROM the tree (SPEC-FROM-TREE.md, label order, state · text · the tree's reading · the commits), proven row-for-row against the hand-edited md; C52 closes with a–f; guards seen red under the admission check and the sort removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  100. 2026-09-18 · 📐 architect · offPct 54

    spec(vna): C84 ticked — goal 11's declaration, guarded at e1ad1af481

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→33 over 9 commits since

    Open the signed attestation →
  101. 2026-09-18 · 🧪 laboratory · offPct 31

    spec(vna): C58 settled — the done-when reads DEAD basins (no paste AND no attested commit): 41 commits that built the 13 ticked-before-the-ledger rows re-attested (C16 C18 C19 C24 C25 C27 C28 C29 C30 C33 C34 by name; C1 and C31 by this commit, which records their artifacts — §4 and the extension identity). Found and fixed with a guard: attest-commit's label regex read a ShortLex CELL (B3,C1 · C1,C2) as the row C1 — 16 of C1's attestations are coordinate mentions, retained in the append-only ledger and named on the row, never counted; the old test asserted the defect in the same sentence that denied it. C62 unchanged. Goal unit 2/5, first commit; the live dead-count guard lands next, after this commit's own attestation

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  102. 2026-09-18 · 🧪 laboratory · offPct 53

    feat(vna): C42 the injection boundary — ENVELOPE_SCHEMA + validateEnvelope() name every field of the 1,500-token envelope with its provenance, the cap, and the keys that may never appear (session · transcript · prompt · history); the guard proves the model-agnostic property: a pure function of (tree, leaf), byte-identical across calls, the tree untouched, 72/72 live basins valid and deterministic. Found by the guard's first run: the cap loop cut rule spans inside the node's own defs, so the second bundle differed on 20 of 72 — fixed by copying. Row stays OPEN: the A/B percentage across builder tiers needs model runs. Goal unit 3/5, boundary half

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  103. 2026-09-18 · 🧪 laboratory · offPct 37

    feat(vna): C79c the sense-making bridge — [🧠 Refine Goal with External LLM] on a fourth card, the C36 research bundle grown with the refine-goal handshake, the basin from the goal, the recent coordinates, the open rows and a stated token bound

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  104. 2026-09-18 · 🧪 laboratory · offPct 54

    feat(vna): C62 the tiebreaker is a decidable fact — a tied chunk goes to the one basin whose row label its own text names (ingest + reslot), never a keyword proxy. Live: ties 120 → 77, 6 by label; the chunk text rarely names its row. The real yield: "empty" was the wrong sufficiency for "dead" — 27 of 40 paste-empty basins carry an attested commit; DEAD (no paste, no commit) = 13, all ticked rows older than the attestation ledger. --reslot prints both; C58 re-read against the dead count and stays open on ledger age, not slotting. Guard seen red with labelTiebreak returning null

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  105. 2026-09-18 · 🧭 navigator · offPct 43

    feat(vna): C79d the per-turn live preview — between commits the three panels show the working tree, badged PREVIEW · working tree · turn N, the commit receipt never overwritten

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  106. 2026-09-18 · ☕ network · offPct 26 · structural

    feat(bookclub): enroll-gmail-chains — every participant of every thread the operator sent into, six doors held, count conserved

    Why it left the lane: The diff carries two constructs whose lattice destinations disagree. The placement words — scripts/bookclub/enroll-gmail-chains.mjs, data/bookclub/warm-enrollments.ndjson, seat:'gmail-chain', newsletter_subscribers — sit inside the room's declared globs (scripts/bookclub/, data/bookclub/), which is lane C. But the mechanism words the script actually pulls in — `better-sqlite3` against `data/central-mirror.db`, `import { isInternal, isRole } from '../../src/lib/internal-addresses.mjs'`, and the Supabase `CENTRAL_SUPABASE_URL`/`CENTRAL_DB_SERVICE_ROLE_KEY` REST write — are general-purpose identity-store plumbing, the exact class the room's own prior lesson (f748e0b17) already named as dragging placement toward A3. Stacked on top, the second file in the diff, tests/bookclub/enroll-gmail-chains.test.mjs (81 of 214 inserted lines — 38% of the diff), lives in a directory that appears in NONE of the room's owned-surface globs, so its lit cells have no lane-C coordinate to resolve to and fall wherever the gzip-NCD reef nearest-neighbors them (A3). laneHamming=18 is well under laneHammingNull=26 — the jump is patterned, not noise, consistent with two real, repeatable pulls rather than one random miss.

    The semantic pull: `../../src/lib/internal-addresses.mjs`, `better-sqlite3` + `data/central-mirror.db`, and `CENTRAL_SUPABASE_URL`/`newsletter_subscribers` are structurally cross-room identity/data-plumbing terms with nothing bookclub-specific about them (coords resolving toward A3). Independently, the whole string `tests/bookclub/enroll-gmail-chains.test.mjs` matches zero globs in the room's owned-surface list, so it has no lane-C address at all. lensIntent=C,A1 vs lensReality=A3,A1 shows the shared A1 held while C bled to A3 — consistent with both pulls landing in the same neighboring cell.

    Intent–reality gap: The commit claims a fully self-contained bookclub-lane feature ('six doors held, count conserved', Relevant-Rooms: voice, network, operator) — but the receipt measured 26% of the reality lattice landing outside the declared lane (offPct=26 vs threshold 15), driven by an owned-surface glob list that never anticipated a tests/ directory and by identity-join plumbing that reaches past the comms boundary into shared infrastructure.

    • Add tests/bookclub/** (and tests/outreach/** for consistency) to network's owned-surface glob wherever it's canonically defined (e.g. .workflow/rooms/network.html).
    • Implement ask-001 tests/ops/room-surface-coverage.test.js as a general rule: any scripts/<x>/ glob in a room's owned surface implicitly covers tests/<x>/ — fixes this for all 9 rooms, not just network.
    • Confirm data/central-mirror.db and src/lib/internal-addresses.mjs have a documented owning room via ask-003 tests/pmu-simulator/shared-state-files-have-room-owner.test.mjs — f748e0b17 named this class but never closed the ownership question.
    • Re-run the receipt for 583342c12 after the glob patch (via the backfill path, not a live re-render) to confirm offPct moves from 26 toward/under 15.
    • Note in docs/architecture/claude-rules/doors-and-surfaces.md that a room's test directory is not automatically covered by its script directory today — this is a repo-wide convention gap, not a network-specific mistake.

    What we learned: The room-surface glob convention has never included a tests/ mirror for ANY room's owned scripts/ directory — this is not a one-off gap in network's list, it's a missing symmetry in the owned-surface schema itself, evidenced by ask-001 already being asked 6× and ask-003 2× across rooms. f748e0b17 diagnosed the cross-store data-plumbing pull and partially fixed it (27→21); this event shows a second, independent, unaddressed pull (the untracked tests/ directory) that can alone push offPct back above threshold even when the plumbing issue is held constant.

    The missing guard (the deliverable): tests/ops/room-surface-coverage.test.js

    Detector probe: signal attribution — gzip reef 70% · ballistic walk 30%. Right-sized, not shallow: litIntent/litReality are within 1.4% of each other and both near a shared ceiling for a 214-line, two-file diff, so the walk is not under-exploring. If anything it may be slightly over-spread for a diff this small and single-purpose. Adjustment: cap walk breadth proportionally to diff line-count for small, single-concern commits and re-check whether litReality drops without offPct rising. Experiments: Re-seed the reef with the diff's own import graph (src/lib/internal-addresses.mjs, better-sqlite3, data/central-mirror.db terms) weighted in, then re-measure prewalkOverlap between C and A3 — confirms whether import-aware seeding relocates or legitimizes the A3 landing. · Ablate the test file from the reality corpus (feed only enroll-gmail-chains.mjs) and re-measure offPct — tests the tests-glob hypothesis directly against this sha. · Run the room's last 25 out-of-lane commits and tally what fraction include a new tests/<owned-subdir>/*.test.mjs with no matching glob — confirms whether this is the dominant systemic cause across the room's whole 14-day history, not just this event.

    Measured outcome (deterministic, not self-graded): room mean offPct —→0 over 12 commits since · dictionary ablation saved 877B

    This is network's 25th out-of-lane event in 14 days with a now-named systemic cause (no tests/ mirror in any room's owned-surface glob), which keeps the lane's loss-ratio elevated until ask-001's mirroring rule ships repo-wide rather than as a one-off patch to this room's list.

    Open the signed attestation →
  107. 2026-09-18 · 📐 architect · offPct 22 · structural

    spec(vna): §22 — from steer to the map of maps, in parts; C35–C47 declared, dev experience first (Arm 2 taken in the operator's words)

    Why it left the lane: The commit message frames the whole diff as one act: recording an arm-pick declaration ('the declaration moves,' A1.Strategy.Law) that fixes an envelope mismatch open for 7 commits. But the diff body is 21 checklist items total in the file, 13 new ones in this commit, each carrying build-tactic strings — 'background watcher,' 'gzip-NCD,' 'typed, content-addressed JSON hierarchy,' 'Merkle invalidation & content-addressing,' concrete file paths ('scripts/vna/clip-watch.mjs', 'data/vna/spec-tree.json', 'scripts/vna/spec-tree.mjs') and 6 'guard `tests/vna/' lines. Those tokens are B.Tactics vocabulary. The receipt's own lensReality=B,A1 (Tactics first) inverts lensIntent=A1,B1 (Strategy/Law first), and laneJump=3/laneHamming=14 register that inversion numerically. No per-region [row,col] narrative is cached for this sha (checked directly — no latest.json under the panel tool's per-prompt convention, and the commit-published PNG at public/commit/5e9e21e20b/ carries no engine/admissibility metadata to verify), so the pull is read off the lens/lane fields the receipt did emit, not off a reconstructed grid.

    The semantic pull: The single declaration paragraph ('the operator's sentence... is the arm pick; the declaration moves') is ~4 sentences. It is structurally followed, in the same markdown section, by three Parts and 13 checklist items whose language is entirely implementation-tactical (daemon, watcher, JSON AST, NCD clustering, Merkle proofs, notary sync, licence accounting). The diff's byte mass is therefore overwhelmingly B.Tactics even though the commit trailer and opening paragraph claim an A1.Strategy.Law act.

    Intent–reality gap: The commit claims to be a naming/declaration act ('Recorded with envelope.mjs --pick declaration') closing a 7-commit-old envelope mismatch, but the receipt shows the reality walk still leads with B (Tactics) over A1 (Law) — the same class of imbalance the commit was supposed to close, because the declaration paragraph is structurally outweighed by the 13-item build checklist it introduces in the same breath.

    • Split docs/specs/vna/SPEC-VNA-COCKPIT.md §22 into §22 (declaration, A1-pure) and §22b (tactics, C35-C47) per spec_rewrite.
    • Prefix each of C35-C47 with an inline lane tag, e.g. '[B]' or '[A1]', so a future receipt can distinguish declaration lines from build lines even inside one section if a split is skipped.
    • Add a one-line summary to the commit message itself stating item counts, e.g. '1 declaration paragraph + 13 tactical items (Part 1 dev-experience, Part 2 attestation-not-built, Part 3 map-of-maps)' so envelope.mjs has a cheap signal before the walk runs.
    • File the new guard tests/pmu-simulator/declaration-section-lane-purity.test.mjs (below).
    • Cross-reference Part 2 (C43-C45, explicitly NOT BUILT) into a clearly separate aspirational subsection or file, since unbuild items compound the B mass without landed code to justify it.

    What we learned: This room's prior two lessons (ff09774e5, ffaf8d2ac/ff5110f85) addressed commit-metadata mismatches (Originating-Terminal vs owned surface) and both left offPct climbing (14→28, 17→26). This event shows a DIFFERENT axis of the same failure: even a commit whose metadata and stated intent are self-aware and explicitly corrective ('the envelope has said for 7 commits... the spec never named it') still drifts, because the repo's spec-doc convention forces a declaration act and its full build checklist to live in one markdown section — the document structure itself, not the commit trailers, is what entangles A1 and B. Fixing commit tagging cannot fix a doc-internal lane mix.

    The missing guard (the deliverable): tests/pmu-simulator/declaration-section-lane-purity.test.mjs — new guard: when a spec section's opening paragraph matches a declaration/arm-pick pattern (e.g. contains 'the declaration moves', 'is the arm pick', or '--pick declaration'), assert the section is capped at N lines (or ends at the next heading/rule) before any checklist item ('- [ ] C' pattern) appears; a declaration paragraph followed immediately by a multi-item checklist in the same section should fail the guard and force a split, exactly as prescribed in spec_rewrite.

    Detector probe: signal attribution — gzip reef 55% · ballistic walk 45%. Both sides show lit==walks exactly (140/140 intent, 120/120 reality) — full saturation, zero dark/unfilled walk steps on either side. That is suspicious rather than reassuring: a walk that always exactly fills its budget without ever going dark suggests the budget is the binding constraint, not a natural stopping point, so 100% lit could mask truncation rather than confirm right-sizing. Concrete adjustment: re-run this sha's reality walk with walksReality budget raised from 120 to 200 and check whether litReality stays proportionally full (confirms genuine coverage) or plateaus below 200 (confirms the 120-budget was truncating, and offPct was computed on an artificially small reality sample). Experiments: Recompute prewalkOverlap with the arm-pick paragraph isolated as its own gzip block versus the C35-C47 checklist as a separate block; predict the declaration-only block's overlap rises measurably above 4, confirming the checklist bulk was diluting the reef seed. · Ablate the diff by stripping the six 'scripts/vna/...mjs' and 'guard `tests/vna/...test.mjs' path literals, recompress, and re-run the receipt; measure whether offPct drops, isolating whether bare path tokens (vs the surrounding B-flavored prose) are doing the lane-pulling. · Re-run this sha's receipt with walksReality budget raised 120→200 per walk_utilization above and record whether offPct changes, settling whether the asymmetric 140/120 walk budget itself (not just content) is contributing to the measured drift.

    Measured outcome (deterministic, not self-graded): room mean offPct 22→27 over 34 commits since · dictionary ablation saved 574B

    An architect-room commit that explicitly tries to close a 7-commit envelope mismatch and still lands at offPct=22 raises this lane's loss-ratio on declaration-type work specifically (not just metadata-tagging work already addressed), and premium is restored by shipping the section-split plus the declaration-section-lane-purity guard so future arm-pick commits are structurally prevented from re-absorbing their own build checklist's mass.

    Open the signed attestation →
  108. 2026-09-18 · 🧪 laboratory · offPct 29

    feat(vna): C60 the forest line on every turn — ⟦ FOREST ⟧ pull · undeclared · unworked · Arm 1 · Arm 2 · the net's coverage · rows · the last commit · the receipt's age, read from data/vna/envelope.json beside the snowball on every prompt turn (the hook computes nothing); STALE when a commit landed after the receipt; post-commit refreshes the receipt detached. First live line read STALE off a 162-min receipt. Guard seen red with the main-path line removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  109. 2026-09-18 · 🧪 laboratory · offPct 32

    feat(vna): C79b moving telemetry under the panels — last run · perf · tokens and turns saved · run cost, from receipts; the ring contracts fold into ▸ what the rings mean

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→11 over 5 commits since

    Open the signed attestation →
  110. 2026-09-18 · 🧪 laboratory · offPct 28

    feat(vna): Arm 2 settled — a ticked row is still a declaration (a tick closes the work, never the lane), and the declared side is placed by the one Rust walk (the basin's pixel from the tree), NCD only for a row not yet folded. Measured (limit 20): pull 6.65 → 0.2, undeclared 19 → 0, Arm 2 A1,C3×8 → none, Arm 1 → C15; 66 of 67 rows walk-placed; the net's coverage now said beside the pull (74 % at fence 2, 26 exact cells — not saturated). Guard A–C seen red with the regex reverted to unchecked-only; C54's second done-when now holds live

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  111. 2026-09-18 · 🔨 builder · offPct 16

    chore(bookclub): high-score board update — recomputed after send

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→22 over 6 commits since

    Open the signed attestation →
  112. 2026-09-18 · 📐 architect · offPct 45

    spec(vna): C84e ticked — the site door driven end to end (e6dac77217), guard green 8/8 and seen red three ways

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 25→30 over 19 commits since

    Open the signed attestation →
  113. 2026-09-18 · 🧪 laboratory · offPct 33

    feat(vna): C53a the seed-release null — THE METER reads the unadmitted line on its own (same pairing, same null, never pooled): steer rows since C52, refused placements 0.316 vs 0.213 ± 0.034 z 3.04 ABOVE the null while the 16 admitted sit at 0.125 under theirs; the admission was selecting against the placements that predict the action; C53 a–c declared under C52 and folded into the tree (four new basins); guard seen red with the field removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  114. 2026-09-18 · 🧪 laboratory · offPct 43 · structural

    feat(vna): C52a the spec's rows are the tree's basins — 58 stable-id contract leaves folded before any tape row, a hand edit revises its basin (never a second leaf), a tick is meta.done, a paste near a basin slots INTO it regardless of type; guard seen red under the type exemption removed

    Why it left the lane: basins() in scripts/vna/spec-tree.mjs folds every `- [ ] Cnn`/`Tn` row of the ENTIRE docs/specs/vna/SPEC-VNA-COCKPIT.md into the tree on every run ('every `- [ ] Cnn` / `- [x] Cnn` / Tn line of this file is a leaf'), so data/vna/spec-tree.txt's +81 lines mirror all 58 basins — including unrelated rows like C50 ('Local cryptographic tape (the flight recorder)') and C11 (null-hypothesis ladder) that C52a never touched. The C52a checkbox row itself was also rewritten to carry receipt-style telemetry ('LIVE: 58 basins, 57 placed by the walk... σ 2.6... all abstaining at τ_attach 0.55') inside the intent-lane doc. Both strings drag the reality walk across lattice cells belonging to every other C-number's topic, not just C52a's.

    The semantic pull: the diff's own repeated boilerplate 'the spec's own rows become the tree's BASINS' plus the full 58-row mirror in spec-tree.txt pulls reality mass toward the generic parent lane (lensReality=B,A) instead of the narrow C52a sub-lane the commit message claims (lensIntent=B,A1) — laneHamming 28 exceeds laneHammingNull 18, i.e. the jump is wider than chance.

    Intent–reality gap: the commit message claims scoped C52a work ('the spec's rows are the tree's basins — 58 stable-id contract leaves folded'), but the receipt measured offPct=43 because folding is architecturally whole-document: every C52x sub-commit in this five-part series will re-mirror all 58 basins (C11 through T12) into data/vna/spec-tree.txt regardless of which single row was the actual target.

    • Add the whole-spec-mirror scope note to the C52 parent bullet in docs/specs/vna/SPEC-VNA-COCKPIT.md
    • Strip σ/τ/d telemetry out of the C52a checkbox row's inline text, keep it in the commit message only
    • Add a 'generated-full-mirror' classification for data/vna/spec-tree.{txt,json} alongside the existing docsOnly/ingestSuspect flags
    • Re-run the reef with prewalkOverlap scoped to only the diff's touched basin row vs the full 58-row dump, log the delta
    • Apply the same scope note to C52b–e before they land, since each will re-trigger the same fold

    What we learned: a generator whose entire job is to mirror an upstream spec document into a data artifact (basins() ingesting all 58 rows) will structurally blow the lane threshold on EVERY commit in its own multi-part rollout (C52a–e), because the artifact's breadth is fixed by the spec's breadth, not by the single row the commit claims — offPct here is a property of the feature's design, not of this specific commit's care.

    The missing guard (the deliverable): tests/pmu-simulator/full-spec-mirror-commit-does-not-inflate-offpct.test.mjs — for a commit whose diff touches a generated file that is a verbatim/near-verbatim ingest of an entire upstream spec document (basins() output patterns), score reality lattice mass from only the NEW/changed leaves in that diff (added/revised basin ids), not the full re-rendered mirror of all existing basins; assert offPct on such a commit reflects only its own row's placement.

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. walks≈lit on both sides (134/134, 137/137) — the walk isn't saturating or revisiting cells, it's spreading close to 1:1, so depth/shape is right-sized. The problem is INPUT SCOPE: the reality walk is being fed the full re-rendered spec-tree.txt (58 basins spanning the whole spec) instead of just this commit's new/changed basin. Adjustment: scope the reality corpus for spec-tree.txt diffs to the added/revised leaf ids only (skip unchanged mirrored basins) before handing it to the walk. Experiments: Recompute prewalkOverlap on this same commit with data/vna/spec-tree.txt's unchanged-basin lines excluded from the reality corpus; hypothesis: offPct drops toward the 15% threshold, confirming the mirror (not the C52a logic) is the drift source. · Flag data/vna/spec-tree.{txt,json} as generated-full-mirror the same way docsOnly is flagged, then re-score the last 49 laboratory out-of-lane events with that flag applied and measure how many drop below threshold. · On a scratch tree, diff spec-tree.txt before/after basins() runs once vs twice with an unchanged spec, confirming the second run is a true no-op (per the C52a test's own assertion) so the mirror-exclusion logic has a clean idempotence baseline to build against.

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 986B

    a chronic structural offPct spike across a five-commit series (C52a–e) reads as repeated loss events against the laboratory lane's loss ratio even though the work is legitimate; premium is restored by the missing_guard scoping reality mass to new/changed leaves so the mirror stops being charged as drift on every sub-commit.

    Open the signed attestation →
  115. 2026-09-18 · 🧪 laboratory · offPct 31

    test(vna): C82d C83d — a release guard reads the manifest at the commit that introduced its version, never the working tree the next release moves on; C82d.0 went red the moment 0.3.17 landed with the code correct

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→11 over 4 commits since

    Open the signed attestation →
  116. 2026-09-18 · 📐 architect · offPct 34

    spec(vna): goal 2 on the record — C63 the CAR view + tesseract state, C64 dimensional splitting from the walk's lit cells, C65 regression + Part 2/3 column + push; units keyed to C63 · C64 · C44 · C45/C46 · C65. Supersedes goal 1 at unit 4/5 (C47/C17 verified green; the audit folds into unit 5). Two corrections stated on the rows: the tape's signed schema is never rewritten under 170 signed rows (the CAR is a view), and the sub-axis is the walk's own lit-cell vector, never a string heuristic

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 24→29 over 16 commits since

    Open the signed attestation →
  117. 2026-09-18 · 🧪 laboratory · offPct 52

    feat(vna): C81a the snapshot one door — the fold and the tesseract state land together under .thetacog/spec-tree.lock, tmp→rename; the reader re-reads bounded, never sleeps

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  118. 2026-09-18 · 🧪 laboratory · offPct 38

    feat(vna): C81b verify before green — the attestation card is 🟢 only from witness rows whose notary signature verifies; a flipped byte is 🔴, never green; no rows stays air-gapped

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  119. 2026-09-18 · 🧪 laboratory · offPct 21

    feat(vna): C57 the active leaf is the record's, not the prompt's — the snowball anchors on the row the last attested commit named (C43 ledger; /goal file wins) and the prompt re-aims only when the one door ADMITS the walk; a released or abstained seed rides as an aside; "continue" is not walked. Live: /clear → "continue" → C54, the row of ac4e12998e; this turn's prompt walked unadmitted (gain 0.0177 z 2.15 / 2.87) and C37 rode as the aside. Ledger row: anchor · active · reaimed, abstained = no leaf handed over; --status counts record anchors. Guard seen red with the record branch disabled (subtests 3, 5). Also: three calibrate-status assertions brought to the C55/C57 lines (two were already red since C53b/C55)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  120. 2026-09-18 · 🧪 laboratory · offPct 32

    feat(vna): C76 the synchronization audit and the status card — scripts/vna/notary-audit.mjs drives the 10 newest COMPLETE CARs off the REAL flight tape through the C44 handler in-process (memoryLedger + memoryAccounts, a throwaway notary seed held in RAM and never reported): live at 0eb7fd3cec, 42 complete CARs, the newest 10 (seq 278…300) → 10 receipts · 10/10 verified from the response alone · height 10 · device 19d66dc55db220b8 · data/vna/notary-witness.ndjson NOT written (a mock notary's receipts there would paint the card green for a notary that does not exist; guarded by a size:mtime stamp, seen red under an appendFileSync mutation). --regression runs node --test per suite dir and parses node's OWN summary (parseTap — tap + spec forms, absent → null never 0): tests/vna 529/531 pass · 2 fail (76 files, 59 s; a preview SMOKE + six-pct's prediction, neither importing this row's files) · tests/pmu-simulator 2022/2133 pass · 105 fail · 2 skipped · 4 todo (427 files, 422 s; pre-existing — the parent touched no pmu-simulator file; whole-file: architecture-invariants, commit-drift-abstain-renders, heatmap-stability; first 40 names in data/vna/notary-audit.json; C65's column). THE CARD: tape-sync.mjs notaryCard() — ONE rule read from the witness file only (height = max sequence_height, fingerprint = the newest row's; tape-sync now writes fingerprint = C44 fingerprintOf on every witness row, asserted in the C74 guard); steer-ui renderStrip paints it beside the 🔑 line — live ⚪ not synced, because no notary has answered over the wire (the route is not deployed; that push is the human's). SPEC-FROM-TREE.md re-rendered: C44 · C45 · C71 GUARDED, each read off a guard file on disk by borneOut, none BUILT-by-assertion. Guard tests/vna/notary-audit.test.mjs 5/5, red on the parent (module absent), red under two mutations (mock writes the witness file → C76.1 + C76.3; card fingerprint from the highest row → C76.0); 76/76 across the nine neighbouring suites. Row ticked. Goal 4 unit 5/8.

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→11 over 5 commits since

    Open the signed attestation →
  121. 2026-09-18 · 🧭 navigator · offPct 25 · mistagged

    feat(vna): C23 the prompt turn as a tile — LAST PROMPT · lens walk painted from the lens receipt (not run / UNMEASURED with the reason / pixel · hat · in/out · off-lane · age), the extension watches latest.json, re-renders through the shared door and sets the status bar, spawning nothing; guard seen red under the UNMEASURED branch removed

    Why it left the lane: The commit's own trailer names 'navigator' as a Relevant-Room, and 🧭's name/emoji (steering wheel/compass) semantically resonates with the diff's vocabulary — 'the extension watches latest.json, re-renders through the shared door and sets the status bar', 'VNA · Steer', 'steer-ui.mjs', 'cockpit'. That vocabulary pulled the gzip-NCD reef seed toward the navigator neighborhood even though every changed path (packages/thetacog-mcp-vscode/src/extension.ts, src/status.ts, scripts/vna/steer-ui.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md, tests/vna/last-prompt-tile.test.mjs) sits outside navigator's owned globs (scripts/open-room-session.sh, .thetacog/cache/room-runners/*.sh, openclaw/**, .workflow/cognitive-dashboard.html). The receipt's own lensIntent=C3,A vs lensReality=B3,B (laneJump=3, laneHamming=28 against a null of 35 — barely tighter than random) is the positional trace of that pull.

    The semantic pull: Word-collision on the room's identity: 'navigator'/🧭 (steering, cockpit, watching, re-rendering) is a near-homophone for the VNA 'steer' UI's own vocabulary, not for the room's actual owned surface (inter-terminal room switching + thematic scheduling). Same class as the repo's own named trap: token standing in for construct.

    Intent–reality gap: The commit message and Relevant-Rooms trailer claim this is architect/navigator/operator work; the receipt measured the mass landing at B3,B while the claimed lane was C3,A, and zero of the five changed files intersect navigator's declared owned-file globs — the work is coherent VNA-cockpit engineering, the room tag on it is simply wrong.

    • Amend the Relevant-Rooms trailer on 7ca376b823 (or its follow-up commit) to remove 'navigator' and name the room owning packages/thetacog-mcp-vscode/** + scripts/vna/**
    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010) so every named room must match ≥1 changed path against its owned glob
    • Audit navigator's other 18 out-of-lane events in the last 14 days for the same word-collision pattern before assuming this is a one-off
    • Add a commit-msg lint step that computes Relevant-Rooms from `git diff --name-only` against room owned-globs and flags any manually-typed room name absent from that computed set
    • Check whether other rooms named after IDE/steering metaphors (any room emoji suggesting motion/navigation) show the same collision rate

    What we learned: This is not an isolated mistag — navigator has 19 out-of-lane events in 14 days, and this event's mechanism (the room's own NAME semantically resembling the diff's vocabulary) suggests the Relevant-Rooms trailer is being filled by association with prose, not by checking the room's owned-file globs against the diff; the room's identity metaphor (🧭 steering) is actively adversarial to correct tagging on any VNA/steer-UI commit.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 65% · ballistic walk 35%. Under-converged for this diff's shape: litReality(142) > litIntent(126) and laneHamming(28) sits close to the null(35), i.e. the walk didn't tighten much past chance for a 5-file, 4-directory (docs/packages/scripts/tests) commit. Adjustment: scale walk depth/recursion budget by directory-span of the diff (count of distinct top-level dirs touched) so cross-cutting commits like this one get a deeper walk before a coord is committed. Experiments: Re-seed the reef for this sha and its 18 navigator siblings with the Relevant-Rooms trailer text masked out before gzip-NCD placement, and measure whether offPct drops — tests whether trailer prose is leaking into intent-lane seeding. · For any diff whose paths fall under packages/thetacog-mcp-vscode/** or scripts/vna/**, force a room-ownership prior into the seed and check whether laneHamming moves further from the null (confirms real drift) or collapses toward 0 (confirms the current gap was seed noise). · Flag any commit with prewalkOverlap < 5 as low-confidence before the walk runs, then backtest against .thetacog/prompt-drift/guard-*.ndjson history to see if low-prewalkOverlap commits correlate with high offPct across the corpus, not just this event.

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since · dictionary ablation saved 1151B

    A mistagged Relevant-Rooms trailer on a room already carrying 19 out-of-lane events in 14 days reads to an underwriter as systemic attribution noise rather than one bad commit, raising navigator's lane loss-ratio; restoring it needs the trailer correction plus the relevant-rooms-covers-diff guard landing and staying green across the next several navigator-tagged commits before the lane's premium can reprice down.

    Open the signed attestation →
  122. 2026-09-18 · 🧪 laboratory · offPct 22

    feat(vna): C53b the seed is RELEASED, never refused — an unadmitted walk against the basins keeps its pixel, the slot (ring 0 then +1) is ordered by NCD and the nearest basin is handed over marked UNMEASURED with the walk's own numbers (gain · z · z_required) on the row and in the seed ledger as stage released; abstains only when the slot holds no basin within one block; the C52f clause revised in its own guard; live on the next prompt (C40 released at C,B2, gain 0.0136 z 2.17 against 0.015 / 3.05); guard seen red under the C52f refusal restored

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  123. 2026-09-18 · 🧪 laboratory · offPct 45

    feat(vna): C46 the footprint — every commit receipt aggregated per coordinate (n · mass · σ̄ · mean off-lane · in-lane share), zoned by terciles of the measured distribution, queryable by coord or row, sufficient-for/not-for on the receipt; C13 ticked with its existing evidence; guard seen red under a constant cut

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  124. 2026-09-18 · 📐 architect · offPct 26

    measure(vna): C14 closed as unpowerable as defined — the chip's agreement bit is per target over the whole claim batch, so pooling windows per anchor drives the agreeing bucket to zero (26 → 23 → 0 of 938); rung 3 stays un-armed, the display stays gated; VNA_QOFFS pooling kept in measure-agreement.mjs as the record of the attempt

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 23→26 over 4 commits since

    Open the signed attestation →
  125. 2026-09-18 · 🧭 navigator · offPct 21

    feat(vna): C35 — the clipboard interceptor: every copy appends to the steer file while armed, LLM-free, with a guard seen red first

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  126. 2026-09-18 · 🎩 operator · offPct 28 · mistagged

    feat(pmu): one writer door for readings — writeReading refuses a reading that does not name its engine (house rule 11)

    Why it left the lane: The diff is 100% construct/infra vocabulary — "writeReading", "one writer door", "engine matches /^(rust-[a-z0-9-]+|js|js-fallback)$/", "tests/formal/reading-writer-door.test.mjs", 24 files under scripts/pmu/*.mjs each swapping writeFileSync(...JSON.stringify...) for writeReading(path, obj, 'js'). None of that vocabulary or those paths (scripts/pmu/, data/pmu/kr40/44/46*.json) intersect 🎩 operator's owned surface (data/trust-debt/, data/pmu/pipeline/, data/pmu/claudbridge/, docs/01-business/*, docs/ops/dashboard*, public/dashboard*). lensIntent=A1,C shows the intent had a foot in both a business-adjacent lane (A1) and construct (C) from the commit's governance framing ("house rule 11", the Story paragraph); lensReality=C1,C1 shows the walk landing twice, identically, deep in construct space — the repeated call-site edit is so homogeneous it collapsed to one coordinate instead of spreading.

    Intent–reality gap: The commit's own Relevant-Rooms trailer claims operator as one of three rooms this work touches, but the receipt measured zero of the 24 changed scripts/pmu/*.mjs files or the three kr40/44/46 data files landing inside operator's owned surface — the room is being charged offPct for a commit whose diff never touches anything operator owns.

    • Edit the commit-trailer authoring step (wherever Relevant-Rooms gets generated for scripts/pmu/ commits) to compute per-room path-overlap against each room's owned-surface globs before listing a room
    • Land tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs (ask-033) so a room named in Relevant-Rooms with zero owned-path overlap is excluded from that room's offPct denominator
    • Cross-check tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027) — Originating-Terminal is 📐 architect (vscode); confirm architect's owned surface does cover scripts/pmu/ so the terminal tag itself is correct even though operator's room tag is not
    • Backfill/recompute this room's 14-day offPct trend once the guard lands, since 55 OOL events in 14 days likely includes other zero-overlap mistags from the same Relevant-Rooms pattern
    • Add a one-line clarification to CLAUDE.md's COMMIT MESSAGE STRUCTURE section: Relevant-Rooms names owned-surface overlap only, never downstream consumers of the output data

    What we learned: offPct as currently computed conflates "rooms named in a commit's trailers" with "rooms whose owned surface the diff actually touches" — a commit can honestly list a downstream-consumer room (operator reads PMU readings on its dashboards) in Relevant-Rooms without a single changed path belonging to that room, and the room absorbs the drift charge for work it never did or owned.

    The missing guard (the deliverable): tests/pmu-simulator/mistagged-commit-does-not-inflate-offpct.test.mjs

    Detector probe: signal attribution — gzip reef 30% · ballistic walk 70%. Saturated, not discriminating: litIntent/walksIntent and litReality/walksReality both sit at ~100% fill, meaning nearly every walk step lights a cell on both sides — there's no spread left to distinguish intent from reality positionally. Concrete adjustment: raise the per-step lit threshold (or add walk depth) specifically for scripts/pmu/*.mjs diffs, which are dense with repeated near-identical boilerplate edits (import + one-line call swap ×24), so the walk stops trivially lighting every step and starts producing real spread. Experiments: Seed the reef lexicon with the writeReading(...) call-site pattern as a recognized construct cluster, then re-run this commit's walk and measure whether litReality drops below 135/135 (de-saturates) · Compute per-room path-overlap % at ingest time for every Relevant-Rooms trailer across the last 14 days of operator's 55 OOL events, and measure what fraction are zero-overlap mistags vs genuine drift · Raise walk depth or lower the lit-threshold specifically for diffs where >20 files share one near-identical boilerplate edit, and re-measure litIntent/litReality fill rate to confirm it drops from ~100%

    Measured outcome (deterministic, not self-graded): room mean offPct 27→32 over 8 commits since · dictionary ablation saved 1003B

    This event inflates operator's measured loss-ratio for work it never touched, which is a false premium signal rather than real cross-lane risk; landing ask-033's guard restores the room's offPct to its true baseline by excluding zero-overlap Relevant-Rooms attributions going forward.

    Open the signed attestation →
  127. 2026-09-18 · 🧪 laboratory · offPct 38

    feat(vna): C11 the clean-query coverage/precision curve — the §19.1 rung-4 prediction scored BROKEN 1/3 on the receipt (abstention 3.5 % vs 15–30 predicted; placed within-1 25.2 % vs ≥ 30; abstained rows 0 % ✓); the floor separates at a fifth of the predicted coverage; guard seen red under the BROKEN branch removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  128. 2026-09-18 · 🧪 laboratory · offPct 37

    feat(vna): C83c card 3 after a witness — credits left N beside the witnessed count

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→11 over 4 commits since

    Open the signed attestation →
  129. 2026-09-18 · 🧪 laboratory · offPct 33

    feat(vna): C73 the running agent's log is the default subject — flight-tape batch, CAR over two kinds, backup --source, no git anywhere on the path

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→11 over 5 commits since

    Open the signed attestation →
  130. 2026-09-18 · 🧪 laboratory · offPct 57

    fix(vna): four gaps the horizon paste's claims exposed against the record — (1) the envelope receipt never carried coverage/rows/placedBy, so the forest line read "net unmeasured" off a fresh receipt; (2) a STALE forest line now dispatches its own refresh detached (a chore commit from another daemon lands between post-commit refreshes); (3) a reslot tie is a structured row in the unplaced drawer with its candidates, never a leaf silently skipped; (4) the flight tape's turn row signs with the room the terminal is in (roomFromTerminal mirrors scripts/room.sh) — 103 of 164 rows were unsigned "no room" while the shell knew the room. Guards seen red under each amputation

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  131. 2026-09-18 · 🧪 laboratory · offPct 17

    chore(vna): C85d — extension 0.3.18 bumped, compiled, packaged (thetacog-mcp-0.3.18.vsix, 16 files, 90 KB), installed; the release guard c85-release-audit derived from C83d's (the release commit is the oldest -S hit; its own circular read the only excused red) — seen red on 0.3.17 (2/3 red)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→11 over 4 commits since

    Open the signed attestation →
  132. 2026-09-18 · 🧪 laboratory · offPct 23

    feat(vna): C56 the workbench — the developer's four facts at the top of the sidebar from receipts (next unit of work via the hook's own queueHead with its borne-out chip · the last seed as LANDED / RELEASED-UNMEASURED / ABSTAINED with the walk's numbers and the last-20 tally · the tree AT THE TAPE or N rows behind with the last fold's age · ticked + borne-out counts as chips that filter the list), Paste → Tree and walk on the strip; TASKS leads the page (the spec was tenth), open rows first; first render put C49 open beside its own NOT-WORTH-A-BOUNDARY; guard reads the rendered page, seen red with the strip removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  133. 2026-09-18 · 🧪 laboratory · offPct 26

    feat(vna): C45 the no-arbitrage complexity pricing engine — scripts/vna/market-clearing.mjs prices a task in COMPLEXITY UNITS, never money: P = Base × (1 + α·D_Cheb(start, end)) × (1 − NCD(diff, spec)) × μ_PMU. D_Cheb is the king-move distance on the 12×12 (one cross-domain step adds exactly α × the d=0 price); NCD is the one gzip sensor imported from spec-tree.mjs, so padding a diff with 10 KB of incompressible tokens RAISES the distance and LOWERS the price (the no-arbitrage term); μ is the record's own `admissible` — 1 or 0, never inferred from a pixel or a z — so an unmeasured walk prices 0 and SAYS so while the other factors are still reported. competence(witnessedSubset()) joins data/vna/notary-witness.ndjson (pubkey, seq) to the flight tape and the C46 receipts and reports lane density · drift variance · abstention compliance per coordinate over the WITNESSED rows only; no witness file → UNMEASURED, said (live: 0 witnessed rows today). Guard tests/vna/market-pricing.test.mjs 5/5, seen red on the parent tree (module absent) and under two mutations ((1 − NCD) dropped → C45.1 red; μ defaulting to 1 → C45.3 red); the CURRENCY tripwire is asserted over the object, the lines and the CLI stdout. The per-attestation metering policy the row also names stays policy, not built here. Goal 4 unit 4/8; spec row ticked.

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→14 over 3 commits since

    Open the signed attestation →
  134. 2026-09-18 · 🔨 builder · offPct 50

    feat(vna): C44 the independent notary witness gateway — src/lib/notary/gateway.mjs (WebCrypto only, one function for Node and the edge) + src/app/api/notary/ingest/route.ts (edge; 503 without a NAMED ledger adapter or a notary seed, never an unsigned or unrecomputable receipt); carOf gains signature.signed_bytes so the server verifies ed25519 over the row's own canonical bytes and binds every CAR field to them; car_sha recomputed server-side is the idempotency key; every inclusion proof recomputes to the signed merkle_root (no active root of its own); atomic batches — 401/422 append nothing, 402 priced whole with needed/available; replay returns the byte-identical receipt for free. Guard tests/vna/notary-gateway.test.mjs 10/10, seen red on the parent tree (module absent) and under two mutations. Goal 4 unit 1/7

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 26→22 over 6 commits since

    Open the signed attestation →
  135. 2026-09-18 · 🧪 laboratory · offPct 48

    feat(vna): C59 the bundle fits and carries a definitions leg — the merkle path's sibling hashes (7.6 KB against a 6 KB cap) made every bundle say OVER CAP; the envelope now carries root + leaf hash + a recomputable proof id, cuts cheapest-first (raw mass · lineage · rules · attestations · rule spans · headlines · contract tail) and says each cut once; the lineage's latest rows were the row's full text twice. The definitions leg: for each backticked term and row label, the node where it FIRST appears, on-disk existence for a path, the resolved rule from rule-grab (span must contain the term, identifier-shaped terms only) — computed at fold time (defsPass, 5.7 s / 68 basins), read by the bundle, STALE said when the contract moved. Live: 0 of 68 bundles over the cap (was 68 of 68), 243 of 287 terms resolved, 3 rule hits. Guard seen red with merkle_path restored. Also: the steer-hook bench pins its own tree and keeps the fold off (C57 anchored its bare prompt on the LIVE record; C55's fold walked spec-tree rows onto the bench tape)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  136. 2026-09-18 · 🧪 laboratory · offPct 42 · mistagged

    feat(pmu): C47 the monotone abstention gate — tri-mode DISAGREE is UNPLACEABLE (Q10, the header's own contract, never enforced), the margin floor fires only on the construct it was measured on; sealed-corpus probe 0/30 → 26/30 abstentions, 4 placements (C17 closed); guard seen red under both doors removed

    Why it left the lane: The commit's own Relevant-Rooms trailer lists 'laboratory, architect, navigator' by habit for any VNA/PMU-tagged commit, but every changed path — scripts/pmu/issue-receipt.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md, tests/pmu-simulator/c47-monotone-abstention-gate.test.mjs — sits entirely outside laboratory's owned surface (.claude/**, .mcp.json, scripts/claude-room, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*). The receipt's own telemetry shows the pull precisely: lensIntent=C2,C (laboratory's declared coordinate) vs lensReality=A3,A1 (where decideVerdict/abstentionGate/MARGIN_FLOOR actually landed), laneJump=5, laneHamming=34 — a wide lattice distance the trailer papered over by just naming three rooms at once.

    The semantic pull: Function/const names 'abstentionGate', 'decideVerdict', 'MARGIN_FLOOR', and the file 'scripts/pmu/issue-receipt.mjs' are pure PMU/VNA-lane vocabulary; none of them appear anywhere in laboratory's owned globs, so the reef seed and the walk both settled on A3,A1 while the trailer's habit-listing kept C2,C (laboratory) in the intent set.

    Intent–reality gap: The commit claims relevance to laboratory via its trailer, but the receipt measured 0% file overlap between the diff and laboratory's owned surface — the work is legitimate PMU/VNA engineering, the room claim on it is simply false.

    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, asked 18× and still unbuilt — the highest-count open ask in the ledger) so a trailer listing a room with zero diff-glob overlap fails the commit
    • Ship tests/pmu-simulator/shared-state-files-have-room-owner.test.mjs (ask-003) so scripts/pmu/**, docs/specs/vna/**, tests/vna/** get an explicit room owner instead of defaulting to whichever rooms happen to be named in a trailer
    • Add scripts/pmu/**, docs/specs/vna/**, tests/pmu-simulator/**, tests/vna/** to architect's (and/or navigator's) owned-surface config so C47-class commits have a legitimate home to be checked against
    • Ship tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027) to confirm Originating-Terminal: architect actually owns the majority of the diffed files (it does here — use this commit as the passing fixture)
    • Retroactively replay the room's other 65 out-of-lane events from the last 14 days against the new relevant-rooms-covers-diff check to size how much of laboratory's backlog is this same mistagging root cause vs something else

    What we learned: The most-asked open guard in the whole ledger (tests/rooms/relevant-rooms-covers-diff.test.mjs, ask-010, 18 asks) is exactly the guard this event needed, and it still hasn't shipped — the intervention engine can correctly diagnose and re-request the same fix 18 times without an escalation mechanism that forces a high-repeat-count ask to actually get built. The bottleneck here isn't diagnostic accuracy, it's that repeated asks carry no priority signal back into the work queue.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 60% · ballistic walk 40%. Right-sized, not shallow or saturated — litIntent(132) and litReality(130) are nearly matched fills, so the walk covered both sides evenly rather than truncating one. Confirm this receipt used the depth-8 commit-triggered panel walk (not the shallow depth-2 lensWalk) since the near-equal fill is consistent with the deep walk but should be asserted explicitly in the receipt metadata going forward. Experiments: Re-seed the gzip-NCD reef dictionary with PMU/VNA-specific tokens (abstentionGate, decideVerdict, MARGIN_FLOOR) and re-run this sha's prewalkOverlap calc; measurable outcome: overlap rises above 3 and laneHamming drops below 34 · Ablation-test the compression_dictionary_adds below by recompressing the last 30 days of laboratory-tagged commits with/without them; measurable outcome: offPct delta on the VNA-mistagged subset · Once tests/rooms/relevant-rooms-covers-diff.test.mjs exists, replay it against laboratory's 66 out-of-lane events; measurable outcome: count how many would have been blocked pre-commit vs how many are a genuinely different root cause

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 808B

    A mistagged-not-broken event like this is a low-severity loss (the underlying work is correct), but leaving the highest-repeat-count guard (18 asks) unshipped is what actually erodes the lane's premium — restoring it means landing tests/rooms/relevant-rooms-covers-diff.test.mjs, not re-diagnosing the same gap a 19th time.

    Open the signed attestation →
  137. 2026-09-18 · 📐 architect · offPct 33 · structural

    spec(vna): every row ticked tonight names its guard in the parser's own syntax (guard: `path`) — % SUFFICIENCY 49 % → 84.3 % (43/51); the 8 still unnamed are older rows and C21's absent guard

    Why it left the lane: The diff is almost entirely the literal, repeated annotation pattern '(guard: `tests/vna/<name>.test.mjs`)' and '(guard: `tests/pmu-simulator/<name>.test.mjs`)' stamped onto ~19 existing checklist rows (C11, C13, C14, C17, C20, C23, C36, C43, C46, C47, C48, C50, C51, C52a-C52d, C52f). Those path-literal tokens (tests/, scripts/, .mjs, spec-tree, clean-query, flight-tape, calibrate-status) are code-shaped strings even though the surrounding file is pure markdown prose; the ballistic walk and the gzip-NCD reef seed do not distinguish 'a doc citing a test path' from 'code touching that test', so the walk's recursive spread picked up extra structure (litReality 134 vs litIntent 131) and drifted from A1,A into A1,A3 — the third axis reads as a code/test lane, not the docs lane the commit claims.

    The semantic pull: Repeated literal strings '(guard: `tests/vna/...test.mjs`)' and '(guard: `tests/pmu-simulator/...test.mjs`)' scattered across nearly every touched line pull placement toward the encircled A1,A3 cell (laneJump=5, 33% off-lane), away from the declared architect/docs lane A1,A — the walk treats a citation of a test file as evidence of code activity.

    Intent–reality gap: The commit claims a bookkeeping-only pass over an existing markdown spec (annotate already-checked rows with their already-existing guard path, sufficiency 49%→84.3%, zero code touched, diffstat confirms 1 file / prose-only edits) — but the receipt scored 33% of the lit mass outside the declared lane despite docsOnly=true already being computed and present on the receipt row.

    • Ship tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs (ask-005 — already open, asked 9x, do not re-spell it)
    • Add the path-literal strip (or abstention route) described in code_rewrite to the docsOnly branch of the receipt-issuing script
    • Add docs/specs/vna/ to an explicit owned-surface glob (currently absent from architect's listed surfaces even though this room legitimately edits it under Relevant-Rooms) to close the adjacent mistagged-surface ambiguity
    • Extend footprint.mjs's tercile aggregation to bucket docsOnly commits separately so paperwork passes don't inflate a room's measured high-drift shelf
    • Note in SPEC-VNA-COCKPIT.md's own guard-naming convention section that a sufficiency-annotation pass (writing 'guard: `path`' onto existing rows) is a structurally docs-only class and should be recognized as such by the detector, not just self-reported

    What we learned: docsOnly is already computed and stamped onto the receipt (docsOnly=true, ingestSuspect=false) but nothing downstream consumes it — the flag is measured and then discarded, so a pure paperwork pass that happens to cite test-file paths verbatim (the guard-naming convention itself) still walks the full lattice and scores as if it were code drift. This is distinct from the prior lessons here (which were about Originating-Terminal/Relevant-Rooms trailer mismatch): this is the detector's own emitted signal going unused by its own verdict logic.

    The missing guard (the deliverable): tests/pmu-simulator/docs-only-commit-skips-lattice.test.mjs (ask-005, asked 9x, 1 spelling — already open; this event is fresh evidence it should ship next, not a new ask)

    Detector probe: signal attribution — gzip reef 25% · ballistic walk 75%. litIntent (131) and litReality (134) are nearly equal in raw count, yet laneHamming=14 vs laneHammingNull=22 shows only mild above-null discrimination — the walk is right-sized in breadth (not shallow, not saturated) but under-weights the difference between prose tokens and path-literal tokens, so it spreads into adjacent cells that a token-type-aware walk would have avoided. Concrete adjustment: give `tests/[^\s]+\.(mjs|test\.mjs)`-shaped substrings a separate, lower-weight channel in the per-token gzip contribution rather than folding them into the same stream as ordinary prose. Experiments: Recompute this commit's receipt with every `tests?/[^\s]+\.mjs` / `scripts/[^\s]+\.mjs` substring stripped from the diff before the walk runs; predict offPct drops well below the 15% threshold if the path-literal hypothesis holds · Compute prewalkOverlap for docsOnly commits over non-path-literal tokens only, and compare walksIntent/walksReality symmetry before vs after · Run C47's abstentionGate()/decideVerdict() over the last 20 docsOnly=true commits and measure what fraction would have abstained instead of confidently scoring off-lane, using the sealed-corpus method already validated for C17

    Measured outcome (deterministic, not self-graded): room mean offPct 23→26 over 11 commits since · dictionary ablation saved 955B

    A structural false positive on a benign paperwork commit (docsOnly=true, zero code risk) inflates this lane's apparent loss-ratio without real exposure; wiring the already-computed docsOnly flag into the verdict (strip-or-abstain) restores the premium to reflect actual drift risk rather than penalizing guard-path bookkeeping as if it were code work.

    Open the signed attestation →
  138. 2026-09-18 · 🧪 laboratory · offPct 25

    feat(vna): C12 the reader loop over the six percentages — three parallel Sonnet readers cold on the computed artifact, Claude grades per axis (number and reason), mean 100 at round 1, STOP; the loop's finding (the fence line read three ways) fixed in six-pct.mjs; the cycle recorder/verdict with its guard seen red under the STOP threshold removed

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  139. 2026-09-18 · 🧪 laboratory · offPct 42

    feat(vna): C82e the token meter — input tokens a /clear stopped re-sending, from the clear gauge's own bytes at the one named ratio, over sessions whose transcript stopped growing; one measure on the page and the status bar with Connect / Buy credits directly under it

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  140. 2026-09-18 · 🧪 laboratory · offPct 27

    feat(vna): the spec tree reads as an overview first — lanes, then leaves that drill down to contract · raw mass · decisions · hat + rules · --bundle (C41); C38–C41 ticked by their guard

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  141. 2026-09-18 · 🧪 laboratory · offPct 18

    test(vna): eleven pre-C89 pins re-aimed to the record — the CTA labels (C71, C79c.2, C80b), the dollars on the economics card (C79b: the worker's tokens, never its cost), the ribbon's home (C78e.4: its own drawer after the heartbeat), THE WALK never L1 (C78e.1), the dual-canonical reading (C80a.1: the reef's names ride `reef`), PANEL_MEANING as a contract not three strings (C78d.0), the drawer's name (C78d.1), the ⋮ and telemetry folds (C80b.2); lastRun carries the worker's token total; the SMOKE pattern removed from syncTape

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 16→11 over 4 commits since

    Open the signed attestation →
  142. 2026-09-18 · ☕ network · offPct 37

    research(comms/self): VNA seed-release report v2 — C53c landed, C53 closed a–c, the first borne-out render (9 ticked rows with no guard on disk); sent in the v1 thread

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct —→0 over 12 commits since

    Open the signed attestation →
  143. 2026-09-18 · 🧪 laboratory · offPct 43

    feat(vna): the loop end to end as one guard (paste → tape → hook → fold → next turn → status → attestation → page), the hook on every turn (PostToolUse, quiet unless new mass), the gauge measured after the append; C48 closed, C52f declared (one Rust door for the slotting — the node NCD is a second implementation)

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  144. 2026-09-18 · 🧪 laboratory · offPct 34

    feat(vna): C82a file lineage per ring and one proof sentence — every reading carries git show --name-only over the commits placed in its block (or the cockpit commit's own files, said so); the proof clause once per kind as a footnote, never per coordinate

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 17→11 over 3 commits since

    Open the signed attestation →
  145. 2026-09-18 · 📐 architect · offPct 28

    docs(ratchet): spec v69 — §8.68 the seven fixes and the after-count (135 → 95 of 2,126); §8.69 the night tied together

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 22→20 over 12 commits since

    Open the signed attestation →
  146. 2026-09-18 · 🧪 laboratory · offPct 28

    feat(vna): C78d the encircled triptych at the top of the cockpit — INTENT · REALITY · Δ with their sufficiency contracts, repainted on every run

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→14 over 3 commits since

    Open the signed attestation →
  147. 2026-09-18 · 🧪 laboratory · offPct 16

    feat(vna-ide): ONE SURFACE — the cockpit, the envelope and the preview render in the activity-bar view; no createWebviewPanel anywhere

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since

    Open the signed attestation →
  148. 2026-09-18 · 🧭 navigator · offPct 21

    chore(vna): C82d extension 0.3.16 — bumped, compiled, packaged (16 files, 81.24 KB), installed; extensions.json reads 0.3.16; the regression runs against this HEAD next

    Why it left the lane: (sensemaking unavailable — facts-only intervention)

    Measured outcome (deterministic, not self-graded): room mean offPct 3→34 over 8 commits since

    Open the signed attestation →
  149. 2026-09-18 · 🧪 laboratory · offPct 16 · mistagged

    feat(vna): C20 semantics is a contract on the row — Δ lane rows carry 'drift', self-lane regions 'dispersion', and the payload heads each zone by its field, never "drift" by default; guard seen red under the branch removed

    Why it left the lane: The receipt shows lensIntent and lensReality both resolving to the SAME lattice coordinate, B2,B2 (laneJump=0) — there is no positional jump — yet offPct=16 clears the 15 threshold because laneHamming=24 sits only 2 points off the shuffled-null baseline (laneHammingNull=26), a weak-signal margin. The diff's actual vocabulary — 'DRIFT ZONES', 'DISPERSION ZONES', 'semantics: drift', 'semantics: dispersion' — is VNA-cockpit content confined entirely to scripts/vna/self-lane-panel.mjs, scripts/vna/spec-render.mjs, scripts/pmu/lens-encircled-png.mjs, docs/specs/vna/SPEC-VNA-COCKPIT.md, tests/vna/spec-render.test.mjs — none of which appear anywhere in laboratory's owned surface (.mcp.json, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, scripts/claude-room, scripts/init-claude-flow-with-crm.sh). The pull toward 'out of lane' is not a lexical collision at a coordinate — it is that the commit's own trailer named 'laboratory' as a stakeholder ('Relevant-Rooms: architect, laboratory, navigator') with zero path overlap, so the receipt attributes lit VNA-cockpit cells to a lane laboratory never touched.

    The semantic pull: No string in the diff (no 'crm', 'swarm-comms', 'orchestrator', 'punch-list', 'claude-room') matches laboratory's owned surface — the only place 'laboratory' enters this event is the hand-typed Relevant-Rooms trailer, i.e. the pull is administrative habit at commit-authoring time, not a semantic collision produced by the code itself.

    Intent–reality gap: The commit claims three stakeholder rooms — 'Relevant-Rooms: architect, laboratory, navigator' — but the diff's entire five-file footprint sits inside scripts/vna/**, scripts/pmu/**, docs/specs/vna/**, tests/vna/**, none of which laboratory owns; the receipt then charges laboratory's lane for cells it has no path-level claim to.

    • Land tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010, already asked 12×) — checks the trailer's named rooms against `git diff --name-only`
    • Give the VNA/pmu subsystem (scripts/vna/**, scripts/pmu/lens-encircled-png.mjs, docs/specs/vna/**, tests/vna/**) an explicit owned-surface glob in whichever room's config the operator designates (candidate: architect, since Originating-Terminal on this commit and its sibling C23 commit is both 📐 architect)
    • Fix the Relevant-Rooms description in CLAUDE.md's COMMIT MESSAGE STRUCTURE section per spec_rewrite
    • Land tests/pmu-simulator/originating-terminal-matches-surface.test.mjs (ask-027, asked 15×) alongside — the Originating-Terminal claim itself deserves the same diff-path check
    • Audit laboratory's 54 out-of-lane events in the last 14 days for the same VNA/pmu path signature, to quantify how much of the room's offPct trend is mistagging noise vs real drift

    What we learned: Prior lesson e6a9a676c already named the structural gap (VNA has no owned-surface glob, trailers filled by habit) but shipped no config change — this event is the SAME mechanism recurring inside the room's 54-events/14-days count, proving that a lesson recorded in prose does not self-execute: until an actual committed glob + guard lands, every VNA commit continues re-taxing whichever room name is habitually typed into the trailer, and the room's offPct trend stays contaminated by attribution error rather than real work drift.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 75% · ballistic walk 25%. Saturated/tied — with litIntent==walksIntent==litReality==walksReality all at 126, the walk cannot express any differential between intent and reality at the aggregate level; it is being used at a resolution too coarse to separate a borderline (offPct near threshold) commit from a clean one. Concrete adjustment: when totals tie 1:1 like this, trigger a finer-grained secondary walk pass (deeper recursion budget) specifically to resolve cell-level placement instead of accepting the aggregate tie as informative. Experiments: Reseed the reef dictionary with VNA-cockpit terms ('DRIFT ZONES','DISPERSION ZONES','semantics:') and re-run this sha's walk; measurable outcome: laneHamming gap vs laneHammingNull widens by >5 points on VNA-tagged commits after reseed, vs the current 2-point gap · Inject the commit's own Relevant-Rooms trailer tokens into the walk's placement input and re-run; measurable outcome: lensReality shifts toward the room(s) whose owned-surface glob the diff paths actually match, rather than staying independent of trailer content · Backtest the walk against all 54 laboratory out-of-lane events from the last 14 days; measurable outcome: if >80% share the scripts/vna/**|scripts/pmu/** path signature, that confirms a single root cause (mistagging) rather than 54 independent drift incidents, justifying the config fix over further reef tuning

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 722B

    Every VNA/pmu commit mistagged into laboratory inflates this room's loss-ratio with mass it never generated while understating architect's/navigator's true exposure; premium is restored only once VNA has a declared owned-surface glob and the Relevant-Rooms trailer is checked against the diff instead of typed from habit.

    Open the signed attestation →
  150. 2026-09-18 · 🧪 laboratory · offPct 23 · mistagged

    feat(vna): T6 the thresholds are ratcheted, never typed — --ratchet reads the band against a shuffled-partner null (K=8), floors only tighten, a receipt per run; guard seen red when shuffling the leaves changed nothing

    Why it left the lane: The commit's own trailer reads 'Relevant-Rooms: architect · laboratory · builder', but the diff touches only scripts/vna/spec-tree.mjs, tests/vna/spec-tree.test.mjs, and docs/specs/vna/SPEC-VNA-COCKPIT.md. None of those paths fall under laboratory's declared owned surface (.claude/projects/.../memory/, .claude/settings.json, .mcp.json, scripts/init-claude-flow-with-crm.sh, thetacoach-crm-mcp/, swarm-comms/, .thetacog/orchestrator/, .thetacog/punch-list*) — I checked .workflow/rooms/claude-laboratory.html directly. lensReality=A1,A3 (the VNA/spec-tree coordinates the diff actually occupies) sits nowhere near lensIntent=C,B3 (laboratory's habitual MCP/swarm-coordination lane), and prewalkOverlap=4 out of walksIntent=142 confirms the reef found almost no shared ground between the two lanes before the walk even ran. The pull toward the out-of-lane region is entirely the trailer text itself, not the code.

    Intent–reality gap: The commit message and trailer claim laboratory is one of three rooms this work is relevant to; the receipt measures 100% of the diff mass landing in VNA-coded coordinates that share zero files with laboratory's owned surface — the claim names a stakeholder room that never touched the work.

    • Add `scripts/vna/**`, `tests/vna/**`, `docs/specs/vna/**` to the 'Owned file/dir surface' list in .workflow/rooms/vscode-architect.html — it already lists 'vna' as an initiative tag but never claimed the glob
    • Add the same three globs to the 'Forbidden surface' list in .workflow/rooms/claude-laboratory.html, marked 'owned by 📐 Architect', so future commits stop naming laboratory by habit
    • Mirror the glob into .workflow/rooms/iterm2-builder.html's owned-or-forbidden section depending on which of architect/builder actually ships VNA code vs specs it
    • Add a line to CLAUDE.md's COMMIT MESSAGE STRUCTURE section: 'Relevant-Rooms must match the diff against each named room's Owned file/dir surface list, never a habitual sibling-room roster'
    • Ship tests/rooms/relevant-rooms-covers-diff.test.mjs (ask-010) — already asked 13× and still open
    • Bucket the room's 55 out-of-lane events from the last 14 days by whether the diff falls under scripts/vna/**, tests/vna/**, docs/specs/vna/** to size how much of laboratory's drift history is this exact mechanism before filing more individual interventions

    What we learned: Prior lesson e6a9a676c already named 'VNA has no owned-surface room' — this event is the SAME mechanism recurring, which means the diagnosis alone did not close the loop. The escalation: Relevant-Rooms is being filled from a fixed three-room roster (architect · laboratory · builder) attached by habit to VNA commits regardless of diff overlap, and the guard that would catch this (tests/rooms/relevant-rooms-covers-diff.test.mjs, ask-010) has been requested 13 times without landing — the fire-and-diagnose loop is repeatedly re-discovering a known cause instead of shipping the fix. The durable fact: an open ask's request-count is not a substitute for the guard actually landing.

    The missing guard (the deliverable): tests/rooms/relevant-rooms-covers-diff.test.mjs

    Detector probe: signal attribution — gzip reef 70% · ballistic walk 30%. Right-sized, not shallow or saturated-in-a-bad-way: both lanes light essentially every step they take (142/142, 135/135), so the walk is doing its job completely on each side independently. The gap isn't a walk-depth problem — it's that the walk never cross-seeds between the claimed lane (laboratory's owned surface) and the diff's actual paths, so it can't itself notice a room-glob mismatch before reporting the full spread as drift. Adjustment: seed the intent-side walk with the named room's Owned-file-surface glob as an explicit candidate set (not just its habitual coordinate history), so a zero-overlap trailer surfaces as a reef-level flag before the walk finishes. Experiments: Recompute prewalkOverlap using each Relevant-Rooms room's Owned-file-surface glob as an explicit seed set instead of free walk history; measure whether overlap collapses toward 0 specifically on mistagged commits vs genuine cross-lane ones. · Bucket the 55 laboratory out-of-lane events (14 days) by whether the diff paths fall under scripts/vna/**, tests/vna/**, docs/specs/vna/**; report the fraction — a measurable test of whether VNA mistagging is the dominant cause of laboratory's drift history. · Apply this commit's own K=8 leave-one-out ratchet technique (ratchetStats/lcgShuffle, already shipped in scripts/vna/spec-tree.mjs) to the room-lane detector: shuffle which room's owned-surface glob is checked against a given diff, and see whether the real 'this room covers this diff' rate beats the shuffled null — if not, Relevant-Rooms is provably noise for offPct scoring.

    Measured outcome (deterministic, not self-graded): room mean offPct 18→13 over 5 commits since · dictionary ablation saved 1886B

    A mistagged trailer that inflates offPct without any real cross-lane work erodes laboratory's loss-ratio on paper while the actual VNA work in architect/builder goes unmeasured for the same class of drift; restoring the premium requires the owned-surface glob and the relevant-rooms-covers-diff guard landing together, not another diagnosis.

    Open the signed attestation →
gemsedu.com #1 ▼5.7%moonshotscapital.com #2 ▼1.8%leadedgecapital.com #3 ▲0.6%differential.vc #4 ▲11%dometic.com #5 ▼6.2%thecignagroup.com #6 ▲5.8%sigma.se #7 ▼9.2%karlsborg.se #8 ▼4.8%teneo.com #9 ▲0.2%ltu.se #10 ▼4.8%emiratesnbd.com #11 ▲1%apcoworldwide.com #12 ▼0.8%rytmus.se #13 ▲5.1%championacaustin.com #14 ▼1.9%amseliplaw.com #15 ▼8.1%clarionschool.com #16 ▼6.2%svenskakyrkan.se #17 ▼5.8%reed.com #18 ▼12.9%scania.com #19 ▼14.4%anthonypllc.com #20 ▲1.7%sigeducation.com #21 ▼7.6%state.gov #22 ▲3.2%scor.com #23 ▼6.3%easystem.se #24 ▲0.1%brodit.se #25 ▼13.5%ericsson.com #26 ▼6.4%khda.gov.ae #27 ▲3.6%parkcity.org #28 ▲52.4%pernod-ricard-china.com #29 ▼16%innoventureseducation.com #30 ▼4%dubaiholding.com #31 ▼0.8%wsp.com #32 ▼6.2%addition.com #33 ▲7.2%bdtmsd.com #34 ▲1.9%expediagroup.com #35 ▼8.7%crslimited.com #36 ▲16.1%baylor.edu #37 ▼4.5%americancenteruae.com #38 ▼5.2%lfg.com #39 ▼5.1%atriumhealth.org #40 ▼4.6%eosvc.com #41 ▲2.3%upandrunningdubai.com #42 ▼2.1%its.jnj.com #43 ▼2.5%cablevision.com #44 ▼2.3%mit.edu #45 ▲0.6%rackspace.com #46 ▼14.6%winningtemp.se #47 ▲1.2%siemens.com #48 ▼4%sunstarstrategic.com #49 ▼16%gunnebo.com #50 ▼8.8%newyorklife.com #51 ▼1.8%volvo.com #52 ▼6.8%oryxworld.com #53 ▼20.9%statefarm.com #54 ▼1.4%jcdecaux.ae #55 ▲10.5%neweratech.com #56 ▼8.9%munichre.com #57 ▼2.7%sc.com #58 ▲6.4%inspiralia.com #59 ▼4.1%linkedin.com #60 ▼5.6%insureai.co #61 ▼20.9%louisville.edu #62 ▲22.1%marsh.com #63 ▼2%bakerbotts.com #64 ▲78.9%ecoclean-group.net #65 ▲153.8%bermanauditadvisorycpa.com #66 ▲8.5%aresmgmt.com #67 ▲16.6%se.abb.com #68 ▼11.2%jkj.com #69 ▲12.3%nsigroup.org #70 ▼1.9%tyrolit.com #71 ▲299.9%jcdecaux.com #72 ▼9.5%fox.com #73 ▲19.2%emerson.com #74 ▲13.6%luxcapital.com #75 ▼6%conning.com #76 ▼8.1%artvillagenursery.com #77 ▼20.9%pacemetals.com #78 ▲12.3%bancamediolanum.it #79 ▲106.1%schmuhlbrothers.com #80 ▲82.4%peraco.com.au #81 ▲199.2%students.rcsj.edu #82 ▲61.6%scnsoft.com #83 ▲64.6%jsx.com #84 ▲209.9%bartec.com #85 ▲141.2%lbl.gov #86 ▼20.9%muskegoncc.edu #87 ▲149.1%rakbank.ae #88 ▼2.3%mindshareworld.com #89 ▲185.9%aig.com #90 ▼5.5%camarda.com #91 ▲25.7%xprize.org #92 ▼5.4%stoughtontrailers.com #93 ▲400%tetrapak.com #94 ▼1.9%dubailand.gov.ae #95 ▲42.7%hsph.harvard.edu #96 ▼20.9%krausanderson.com #97 ▲171.8%nyu.edu #98 ▼11%trenchlaw.com #99 ▼20.9%mckoolsmith.com #100 ▼20.9%gemsedu.com #1 ▼5.7%moonshotscapital.com #2 ▼1.8%leadedgecapital.com #3 ▲0.6%differential.vc #4 ▲11%dometic.com #5 ▼6.2%thecignagroup.com #6 ▲5.8%sigma.se #7 ▼9.2%karlsborg.se #8 ▼4.8%teneo.com #9 ▲0.2%ltu.se #10 ▼4.8%emiratesnbd.com #11 ▲1%apcoworldwide.com #12 ▼0.8%rytmus.se #13 ▲5.1%championacaustin.com #14 ▼1.9%amseliplaw.com #15 ▼8.1%clarionschool.com #16 ▼6.2%svenskakyrkan.se #17 ▼5.8%reed.com #18 ▼12.9%scania.com #19 ▼14.4%anthonypllc.com #20 ▲1.7%sigeducation.com #21 ▼7.6%state.gov #22 ▲3.2%scor.com #23 ▼6.3%easystem.se #24 ▲0.1%brodit.se #25 ▼13.5%ericsson.com #26 ▼6.4%khda.gov.ae #27 ▲3.6%parkcity.org #28 ▲52.4%pernod-ricard-china.com #29 ▼16%innoventureseducation.com #30 ▼4%dubaiholding.com #31 ▼0.8%wsp.com #32 ▼6.2%addition.com #33 ▲7.2%bdtmsd.com #34 ▲1.9%expediagroup.com #35 ▼8.7%crslimited.com #36 ▲16.1%baylor.edu #37 ▼4.5%americancenteruae.com #38 ▼5.2%lfg.com #39 ▼5.1%atriumhealth.org #40 ▼4.6%eosvc.com #41 ▲2.3%upandrunningdubai.com #42 ▼2.1%its.jnj.com #43 ▼2.5%cablevision.com #44 ▼2.3%mit.edu #45 ▲0.6%rackspace.com #46 ▼14.6%winningtemp.se #47 ▲1.2%siemens.com #48 ▼4%sunstarstrategic.com #49 ▼16%gunnebo.com #50 ▼8.8%newyorklife.com #51 ▼1.8%volvo.com #52 ▼6.8%oryxworld.com #53 ▼20.9%statefarm.com #54 ▼1.4%jcdecaux.ae #55 ▲10.5%neweratech.com #56 ▼8.9%munichre.com #57 ▼2.7%sc.com #58 ▲6.4%inspiralia.com #59 ▼4.1%linkedin.com #60 ▼5.6%insureai.co #61 ▼20.9%louisville.edu #62 ▲22.1%marsh.com #63 ▼2%bakerbotts.com #64 ▲78.9%ecoclean-group.net #65 ▲153.8%bermanauditadvisorycpa.com #66 ▲8.5%aresmgmt.com #67 ▲16.6%se.abb.com #68 ▼11.2%jkj.com #69 ▲12.3%nsigroup.org #70 ▼1.9%tyrolit.com #71 ▲299.9%jcdecaux.com #72 ▼9.5%fox.com #73 ▲19.2%emerson.com #74 ▲13.6%luxcapital.com #75 ▼6%conning.com #76 ▼8.1%artvillagenursery.com #77 ▼20.9%pacemetals.com #78 ▲12.3%bancamediolanum.it #79 ▲106.1%schmuhlbrothers.com #80 ▲82.4%peraco.com.au #81 ▲199.2%students.rcsj.edu #82 ▲61.6%scnsoft.com #83 ▲64.6%jsx.com #84 ▲209.9%bartec.com #85 ▲141.2%lbl.gov #86 ▼20.9%muskegoncc.edu #87 ▲149.1%rakbank.ae #88 ▼2.3%mindshareworld.com #89 ▲185.9%aig.com #90 ▼5.5%camarda.com #91 ▲25.7%xprize.org #92 ▼5.4%stoughtontrailers.com #93 ▲400%tetrapak.com #94 ▼1.9%dubailand.gov.ae #95 ▲42.7%hsph.harvard.edu #96 ▼20.9%krausanderson.com #97 ▲171.8%nyu.edu #98 ▼11%trenchlaw.com #99 ▼20.9%mckoolsmith.com #100 ▼20.9%