Version. 0.1
Date. 2026-07-28
Status. Change request. Ready for CC execution on DUNIN7-M4. Hotfix-class: small, protective, sequenced ahead of the seed-to-render completion arc.
CR number. CR-2026-158, provisional — Step 0 verifies across repos including stele/change-requests/ per the CR-2026-157 collision precedent.
Baseline. Engine main at 1aac815 (the tree the walk audit, the perimeter probe, and both prior inspection sets all read). Step 0 reconciles.
Grounding. loomworks-walk-audit-report-v0_1 (W-1; the Stage-2 500 and its control-test isolation); the 2026-07-28 perimeter probe (W-2 correction; the affected-class table — E0060 at 182 versions and E0089 both carry discovery_to_seed_extracted with zero manifestations ever derived; the never-registered drift dispatch; the three additional replay-backed routes at rule_sets.py:154, assertion_groups.py:168, cadences.py:153).
Why now. No user can trigger the failure today only because the Manifestation room is a placeholder (W-9). The completion arc removes that mask. This CR lands the fix before the surface that would detonate it.
The engine's Memory replay fails on any engagement whose history contains an event type written by the codebase but never registered in memory/registry.py. One such type is confirmed: discovery_to_seed_extracted, written by /seed/extract (door 3), unregistered because registrations stop at Phase 37 and the extract event arrived later. Every door-3 engagement is therefore dead at Manifestation derivation — and at the three other replay-backed routes — from the moment of creation. Two live engagements are in the affected class, including E0060.
This CR fixes the class, not the instance: (1) a write-site-versus-registry sweep finds every unregistered event type, not just the known one; (2) each is registered with replay semantics established from its writer's actual payload; (3) a structural guard test asserts, permanently, that no event type can be written unregistered — the guarantee moves into code; (4) replay is proven healed against a fixture replicating the affected history shape and live-verified on the standing walk-audit engagement, which is currently dead at Stage 2 and becomes this CR's acceptance instrument. A rider removes or repairs the unsatisfiable create-from-conversation route (W-2, corrected: dead-but-broken API surface, no callers anywhere).
Engine-only. No migration expected (registration is code, not schema) — Step 0 confirms. No live-engine deployment inside this CR; deployment to the serving perimeter is a separate Operator step named at Checkpoint B.
docs/phase-crs/, record change-requests/, and stele/change-requests/.memory/registry.py end to end: what registration provides (replay handler, validation, both), what an entry's shape is, what replay does on an unknown type (the exact failure mode the walk hit — cite the raising site).discovery_to_seed_extracted plus possibly others — the three walk-adjacent CRs' event families and the credential events from CR-2026-157's branch if merged. Report the full diff verbatim; every unregistered type found joins this CR's scope.discovery_to_seed_extracted is state-neutral (informational record of the extraction; the seed content travels by other routes) — but that is established from the writer's code, not assumed. If any type's replay semantics are genuinely ambiguous — the event should have mutated state and didn't — halt and surface rather than registering a guess.POST /me/engagements/create-from-conversation: unsatisfiable by construction (path-scoped dependency deps.py:271 on a route with no {engagement_id} segment), zero callers in the deployed OL build and the OL source tree, doors 1/2 committing via /operator/converse intents instead. Determine from the route's history (docstring, the v0.72-era commits) whether it is an abandoned earlier seam or a still-intended future terminal. Abandoned → remove in this CR, history preserved in the commit message. Intended → halt and surface to the Operator; do not repair on a guess.3a — Registrations. Every type from the Step 0 sweep, registered with the semantics item 4 established. State-neutral types get an explicit no-op state handler with a comment stating that neutrality is deliberate and derived from the writer (cite it) — not an accident of an empty function.
3b — The structural guard. A test that extracts the set of event-type strings written by the codebase (the same mechanism as the Step 0 sweep, made durable — a registry of writers, an AST/grep harness, or whatever the code's shape makes honest) and asserts every one is registered. The guard is the point of the CR: the class of failure W-1 belongs to becomes impossible to reintroduce silently. If the write-site enumeration cannot be made mechanically reliable, halt and surface the alternative (e.g. append-time runtime assertion) rather than shipping a guard that lies.
3c — Replay-heal verification. A test fixture that replays an engagement history shaped like the affected class — creation including discovery_to_seed_extracted, then ordinary contributions — through Manifestation derivation and the three other replay-backed paths (rule_sets, assertion_groups, cadences). Red before 3a, green after. E0060 itself is never touched.
3d — Rider (conditional per Step 0 item 5). Remove the unsatisfiable route, or halt.
The 3b guard; the 3c heal fixture across all four replay-backed paths; per-type registration tests (payload accepted, replay outcome as established); a regression asserting the previously-failing walk shape now derives (mirrors the walk's control test in reverse); rider: route absent / OpenAPI no longer declares the unsatisfiable parameter. Estimated ~10–14 new tests. Full suite green throughout; the standing Stele router-mount waiver applies if still in force (Step 0 confirms its status rather than assuming).
Step 0 — pre-flight above; branch cr-2026-158-registry-completeness; archive this CR to docs/phase-crs/. Step 1 — 3b guard, red (it must fail against the unfixed registry — the guard proving itself). Step 2 — 3a registrations; guard green. Step 3 — 3c heal fixture and regressions. Step 4 — rider per its condition. Checkpoint A — live verification on the dev stack, walk-audit environment pattern: stand the dev engine up on the spare port against playground_walkaudit exactly as the walk audit did (inline env only, no tunnel-routed ports, live processes untouched); derive a Manifestation on the standing WALK-AUDIT-2026-07-28 engagement — the engagement the walk left dead at Stage 2 returns 201; exercise one of the three other replay paths on it; tear the dev processes down. Halt for Operator acceptance. Checkpoint B — merge and tag (--no-ff, tag registry-completeness-v0_1), implementation notes filed; halt before push. Post-CR, Operator-owned, named here so it is not lost: deploying the fix to the serving perimeter is a launchd restart of the live engine after the merge lands — an Operator decision and act, outside this CR; until it happens, E0060's gap remains latent-but-unfixed on the live engine even though main carries the fix.
playground_dev untouched throughout; live processes untouched.It does not wire the Manifestation room surface (the completion arc's work — this CR is its prerequisite). It does not touch E0060 or E0089 directly; they heal by replay the first time anything derives them after the live engine carries the fix. It does not absorb the June→July manifest gap (v0.75's residue; the W-2 route's history may inform that pass and the Step 0 finding should be cited into it). It does not address W-5 (recall wrongness) — that is its own finding with its own arc.
Read /Users/dunin7/Downloads/cr-2026-158-memory-registry-completeness-v0_1.md and execute it.
Baseline engine main 1aac815 (reconcile at Step 0; verify CR number 158 across all three CR locations including stele/change-requests/). Branch cr-2026-158-registry-completeness. Steps 0-4 auto-proceed, per-step commits, suite green at each. Checkpoint A: dev-stack live verification per the walk-audit environment pattern — spare port, playground_walkaudit, inline env only, no tunnel-routed ports, live processes and playground_dev untouched; derive on WALK-AUDIT-2026-07-28; tear down after. Checkpoint B: merge, tag, halt before push.
Halt-and-surface conditions: any sweep-found type with ambiguous replay semantics; the guard cannot be made mechanically honest; the rider route shows evidence of being an intended future terminal; any schema need.
Stage by explicit path; never git add -A; halt before every push.
DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-158 — Memory Registry Completeness — v0.1 — 2026-07-28