DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path current-status/current-status-manifest-v0_76-amendment-v0_1.md

Current-Status Manifest v0.76 — amendment instructions — v0.1

Document: current-status-manifest-v0_76-amendment-v0_1 Version: v0.1 Date: 2026-07-30 Author: Claude.ai. Operator: Marvin Percival. Recipe: Apply these splices to current-status-manifest-v0_75.md and save the result as current-status-manifest-v0_76.md (add-new-file sibling — never git mv; v0.75 stays a standing sibling, byte-for-byte untouched).

What v0.76 records: the June→July absorption pass (B-15) — the window the v0.75 §5 residue named as owed. Seven new §3 entries (121–127) absorb 2026-06-01 → 2026-07-30 across both repos; the v0.75 absorption-gap residue is marked resolved in place; Entries 119 and 120 receive the owed supersession markers (GRANTHA displaces OVA in the authorization seat); §1's substrate fronts advance; §2.D gains one methodology candidate; §5 gains six residues, three of them new findings this pass surfaced rather than inherited.

Depth declaration, stated plainly because it governs how these entries should be read. Entries 122, 123, 126 and 127 are written at the manifest's normal depth — the source material was available to this pass (the lifecycle-cluster CR extract, CR-2026-158's Step 0 sweep, the walk-audit report, the charter). Entries 121, 124 and 125 are written at pointer depth — merge subjects, SHAs, dates and document paths, without the build-level detail Entries 113–120 carry. That is a deliberate honesty limit, not an oversight: this is a retrospective pass reading merge history and filed documents, not a session recording its own work, and inventing Entry-118-depth prose from a merge subject would falsify the record. Where a future pass wants that depth for a particular arc, the CRs are named and filed.

Evidence base. inspection-briefs/loomworks-june-july-inspection-report-v0_1.md (read-only, engine + OL + record history for the window) and inspection-briefs/loomworks-lifecycle-cluster-extract-v0_1.md (ten-CR extract). Both should be filed to the record alongside this amendment — see the companion CC instruction.


Splice 1 — Header

Replace:


# Loomworks Current-Status Manifest — v0.75

with:


# Loomworks Current-Status Manifest — v0.76

And Version: 0.75Version: 0.76, and Date: 2026-07-28Date: 2026-07-30.

Splice 2 — Status line (append after the v0.75 Status paragraph)

Locate the paragraph beginning:


**v0.75 (2026-07-28): record hygiene — stale-text supersession markers and repo-verified fronts; no build work.**

Append immediately after it (as a new paragraph):

> v0.76 (2026-07-30): the June→July absorption pass — the window the v0.75 residue named as owed is now absorbed, and the record is current for the first time since 2026-06-28. The window carried 351 engine commits / 52 merges and 114 Operator-Layer commits / 23 merges, spanning roughly forty numbered change requests (CR-2026-098, 101–158 with gaps) plus a dozen named ones — none of it recorded in §3. Seven entries absorb it: 121 (the window's shape and this pass's method), 122 (the Room-1 actor-boundary and truthfulness sequence, CR-2026-120 → 127 → 128 → 129 — a closed arc, each CR handing exactly one named finding to the next), 123 (assertion lifecycle and the graph walks, CR-2026-144/145/148/151/154/155), 124 (the upload and ingestion cluster, CR-2026-130–143/146/147), 125 (the dunin7 perimeter arc and the Item 7a claim/credit work the v0.75 residue named by name), 126 (CR-2026-158, memory registry completeness — eight event types written but never registered, six live engagements unable to derive a Manifestation, now merged, deployed and healing), and 127 (the walk audit and the governed build regime the project now runs under). Engine main advanced 0b2c232 → a317051 across the window, tag registry-completeness-v0_1, deployed to the serving perimeter by Operator-directed launchd restart 2026-07-30; Operator Layer main b107290 → 99f7f64 (2026-07-19, unchanged since). Entries 119 and 120 receive the owed supersession markers — both place OVA in the authorization seat; GRANTHA holds it per Decision J1 (investigations/loomworks-reach-enforcement-grantha-correction-note-v0_1), so both entries stand as trajectory with the seat corrected in place. Three findings this pass surfaced rather than inherited, all filed to §5: ask_about_past_input was deliberately carved out of CR-2026-129 and never brought under the truthful-by-construction discipline the rest of Room 1 received — the strongest single lead for the recall-truthfulness defect; a surface-silence class with four instances, where the substrate holds the truth and no surface reports it; and a forty-seven-day untagged stretch on the engine across dozens of merges. Depth is declared per entry (see Entry 121) — four entries at normal depth, three at pointer depth, because a retrospective pass reads merge history, not its own working material. Otherwise carries v0.75 forward.

Splice 3 — §1 Substrate state (append after the v0.50 update line)

Locate, under ### Substrate state:


**Updated for v0.50 (engine + Operator Layer substrate-state refresh).**

Append immediately after that line:

> Fronts updated for v0.76 (2026-07-30) — SHAs only; the numeric refresh is owed (see §5). Engine main a317051, annotated tag registry-completeness-v0_1, origin in sync; deployed to the serving :8000 perimeter by Operator-directed launchd restart on 2026-07-30 and verified running the merged code. Operator Layer main 99f7f64 (2026-07-19, "Merge Item 7a into main: /claim standing→credit fall-through + admin claim_url"), unchanged since. Workshop (loomworks-ui) remains frozen at the Phase 45 shape — positioning, not neglect. This pass did not read the alembic head, the current engine suite counts, the Operator-Layer test counts, or the stele repo front, so every numeric figure standing above this line — alembic 0081, the 2,930-test engine figure, the 4ffb3ff Operator-Layer HEAD, the 56f2b6b engine HEAD — is stale and known to be stale; treat the SHAs named here as the fronts and the numbers as unverified until the refresh runs. The last suite figure this pass has any evidence for is 3424 passed / 68 skipped / 1 failed at the CR-2026-155 merge (2026-07-28; the one failure is the standing waived Stele router-mount test), which is itself two merges behind the front.

Splice 4 — Entry 119, supersession marker

Locate (in Entry 119):


reframed as OVA-not-yet-enforcing per seed v0.12's reach axis, arc commissioned.

Append immediately after it:


**[Superseded in part (v0.76): OVA no longer holds the authorization seat — GRANTHA does, per Decision J1 (`investigations/loomworks-reach-enforcement-grantha-correction-note-v0_1`). The V1 finding itself stands unchanged; only the protocol named in the seat is corrected. Preserved as v0.73 trajectory.]**

Splice 5 — Entry 120, entry-level supersession marker

Locate the heading:


### Entry 120 — OVA reach-enforcement scoping arc: run and resolved by inversion (new v0.74; 2026-07-28, later same session)

Insert immediately after the heading, as the entry's first line, before its opening paragraph:


**[Superseded in part (v0.76): this entry names OVA in the authorization seat throughout — its title, its slice structure, and its D1/D2/D3 decisions. GRANTHA holds that seat per Decision J1 (`investigations/loomworks-reach-enforcement-grantha-correction-note-v0_1`); OVA is consumed underneath for blind verification. **The arc's findings, its inversion, and its slice structure all stand** — the correction is to the protocol named in the seat, not to the reasoning. Read every "OVA" below as trajectory. Preserved as v0.74 trajectory.]**

Note on placement, for the record. The v0.75 markers were sentence-level because each corrected one stale sentence. This one is entry-level because the correction reaches the entry's title and runs through every section — marking each occurrence would bury the entry in markers and still risk missing one. Placement at the head is the deviation; the corrections-preserved discipline is unchanged (nothing is deleted or rewritten).

Splice 6 — §5 absorption-gap residue: mark resolved

Locate the §5 item beginning:


**Absorption gap: OL and engine work landed 2026-06-28 → 2026-07-19/28 with no §3 entry (filed v0.75).**

Append to the end of that item's paragraph:

> [RESOLVED by v0.76 (2026-07-30).] The absorption pass ran — from merge history, filed CR documents and two read-only inspections, not from test names, as this residue required. Entries 121–127 absorb the window; §1's fronts are corrected to engine a317051 / Operator Layer 99f7f64. The residue's instruction to treat §1's substrate SHAs as superseded is discharged for the SHAs and carried forward for the numbers — the numeric refresh is its own residue below. The window proved larger than this residue anticipated: not one Operator-Layer arc and one engine advance, but roughly forty numbered change requests.

Splice 7 — §5 new residues (insert as new items immediately after the item amended in Splice 6)

> Semantic recall is the one recall path never brought under truthful-by-construction (filed v0.76). ask_about_past_input was deliberately lifted out of CR-2026-129 at v0.2 by Operator decision (2026-07-01): server-composing it without a topic filter would have turned a focused question into a full memory dump, so rather than ship a throwaway filter it was carved out as its own semantic/embedding-recall foundation-effort, "to be scoped and grounded on its own." It was never scoped. Every recall-adjacent document in the window converges on it, and the standing no-live-recall-demonstration rule rests on it. This is the strongest available lead for the recall-truthfulness defect — the six-assertion engagement that answered with a superseded value in the wrong lifecycle state. The rest of Room 1 received the server-compose discipline; this path did not. Whether the defect is a recall bug living here or a lifecycle bug living in the fourteen answer-composing read paths is the diagnosis that opens the recall arc, and it should start here rather than rediscover it.

> The surface-silence class: the substrate holds the truth and no surface reports it (filed v0.76). Four instances, three of them found independently in this window, which is what makes it a class rather than three defects. (1) E0005's newest Manifestation is twenty-five versions stale and nothing on any surface says so (named by CR-2026-158, handed to the completion arc). (2) Provenance is fully walkable in the substrate — render → shape → Manifestation → assertion → contributor — and no surface exposes a single hop (walk-audit finding). (3) A moved assertion is invisible: redirect_assertion records the move correctly with event and rationale, but the Memory room renders only held and settled sections, so an Operator cannot see that a note was moved or why without a direct API or database query (CR-2026-144's own named finding). (4) compositions.py:73 relabels a companion-triggered composition as contributor — the one instance that is active wrongness rather than silence (CR-2026-120 residue, carried again by CR-2026-127, never chased). The completion arc closes the first three by construction; the fourth is a small independent fix. Naming the class matters because the substrate keeps being right while the surface stays silent, and each instance has so far been filed as its own unrelated gap.

> Substrate-state numeric refresh owed (filed v0.76). This pass advanced §1's SHAs but read no alembic head, no suite counts, no stele repo front. Every number in §1's Substrate state block predates 2026-06-11. A short read-only pass closes it: alembic head on main and playground_dev, engine suite pass/skip/fail at a317051, Operator-Layer test and route counts at 99f7f64, and the stele front. Small, and it should ride the next session that touches the engine rather than standing as its own errand.

> Forty-seven days untagged on the engine (filed v0.76). Engine main carried no tag between 2026-06-11 and 2026-07-28 despite dozens of merges; the Operator Layer went untagged from 2026-06-28 to the window's end. The window's work is recoverable by merge subject, which is how this pass read it, but tags are what make a front nameable without archaeology, and their absence is the practical reason this absorption cost what it did. No corrective action proposed here — the observation is filed so the tagging cadence is a deliberate choice rather than a lapse.

> CR-2026-145's as-built matching mechanism is unrecorded (filed v0.76). The CR deliberately left the correction-matching approach undetermined at filing — "to be determined at Step-0/build-brief stage" — with one explicit constraint: do not repeat the keyword-comparison design removed from remember_about_me as the source of the confirmation loop. The CR merged (5e9c857, 2026-07-04). What was actually built is recorded nowhere this pass could find. Worth one read before anything else touches correction-recognition, because the constraint was the point.

> One figure in the inspection report is internally inconsistent and must not be propagated (filed v0.76). The June–July inspection report describes CR-2026-154's supersession-aware-answering audit as covering fourteen answer-composing read paths with a named-exempt list; in one place it calls the exempt set four paths and in another enumerates eight (history reads, at-version reads, seed induction history, state_of_engagement_at_version, state_of_object_at_time, consideration surfacing, relationship reads, the 1a redirect backfill). This pass did not read CR-2026-154 itself and cannot resolve it. The exempt-path count is therefore unasserted in Entry 123. Whoever opens the recall diagnosis should read the CR directly — the exempt list is the first place a fifteenth path would hide, so its exact membership is load-bearing.

Splice 8 — §2.D methodology candidate

Under ### 2.D Methodology candidates awaiting framing (v0.21 consolidation candidates), append one item at the end of the list:

> surface-silence-as-a-class. When the substrate holds true state and no surface reports it, the instances present as unrelated product gaps — a missing staleness marker here, an unexposed provenance walk there, an invisible move somewhere else — and get filed separately, each too small to prioritise. Named as a class they are one thing: the build's surfaces have lagged its substrate, systematically, because substrate correctness is what the discipline polices and surface completeness is not. Four instances in one window (§5). Candidate framing: the correctness disciplines that make the substrate trustworthy have no surface-side counterpart, and the completion arc is the first work to treat that as a single subject rather than a queue of gaps.

Splice 9 — §3 new entries (insert after Entry 120, before §4)

Locate the final paragraph of Entry 120, beginning:


**Next artifact.** The Slice 1 change request, drafted in a fresh session from

Insert the following after that paragraph and its trailing --- separator, preserving the --- separator convention between entries.


Entry 121 — The June→July window: shape, method, and depth (new v0.76; absorbs 2026-06-01 → 2026-07-30)

The window the v0.75 residue named as owed, absorbed. This entry carries the window's shape and this pass's method; Entries 122–127 carry its content.

The shape. 351 engine commits across 52 merges; 114 Operator-Layer commits across 23 merges. Roughly forty numbered change requests (CR-2026-098, 101–158 with gaps) plus a dozen named ones. Engine main 0b2c232 → a317051; Operator Layer main b107290 → 99f7f64. The record itself took heavy filing in the same window — 43 scoping notes, 99 investigations, 10 completion records, 17 inspection briefs, 13 session handoffs — so the work was documented as it happened; what was missing was the absorption layer, not the primary record.

The method. Two read-only inspections: inspection-briefs/loomworks-june-july-inspection-report-v0_1.md (both repos' merge history for the window, the record's filings by directory, CR-2026-158's Step 0 sweep, and a flagged pass for recall/answering/lifecycle work) and inspection-briefs/loomworks-lifecycle-cluster-extract-v0_1.md (each of the ten flagged CRs' own summary, corrections and named-but-unfixed gaps). The v0.75 residue required "a proper pass, not a reconstruction from test names," and this is that: every claim in Entries 122–127 rests on a merge SHA, a CR document's own words, or a completion record.

The depth, declared. Entries 122, 123, 126 and 127 are at the manifest's normal depth — the source material was available. Entries 124 and 125, and the arc-level parts of this one, are at pointer depth: SHAs, dates, CR numbers, document paths, and what the merge subject says, without build-level specifics. The distinction is deliberate. Entries 113–120 are dense because each was written by the session that did the work, from its own material; a retrospective pass has merge subjects. Writing Entry-118-depth prose from a merge subject would read as authoritative and be invented, which is the failure this record exists to prevent. Where a future pass wants that depth, the CRs are named and filed and can be read.

What the window changes about the project's own picture of itself. Three things. The engine went forty-seven days untagged (§5) — the practical reason this pass cost what it did. The record's primary filing kept pace while the absorption layer fell forty CRs behind, which suggests the absorption cadence, not the filing discipline, is what needs a trigger. And the window's densest single thread — assertion lifecycle feeding answer truthfulness — is precisely the thread the current build is blocked on, which is why Entry 122 and Entry 123 are at full depth and why the recall diagnosis starts from §5's semantic-recall residue rather than from scratch.


Entry 122 — Room 1 (Memory): the actor-boundary and truthfulness sequence (new v0.76; 2026-06-30 → 2026-07-01)

Four change requests in three days, each handing exactly one named finding to the next and the last declaring Room 1 clean against conformance bar v0.2. The cleanest closed sequence in the window, and the direct ancestor of the truthfulness work the build is now blocked on.

CR-2026-120 — actor-kind read contract + commit-gate enforcement (merged a90aee8, 2026-06-30). The Companion writes memory with actor kind companion; the read serializers could not deserialize it — one crash site (ActorRefResponse.kind) was why E0060's Memory room returned 422, all five of its assertions being Companion-authored. Read was fixed to match write via a canonical ActorKind alias across five read-side Literal sites. Because making the display correct would make an existing security hole more reachable, the same CR closed it: the commit and discard gates checked kind == "agent" only, so a companion actor could commit or discard on its own authority. Both landed together — one contract, honestly displayed and structurally non-committing. Residue, never chased: compositions.py:73 silently relabels a companion-triggered composition as contributor (§5, surface-silence class).

CR-2026-127 — addressable held-tray grammar + committed revision (merged fe0ffc4, 2026-06-30). The only working save phrase was "commit held N"; "save" and a bare "yes" routed to a dead queue and produced false "Logged" claims. Built one grammar — verb plus number — over the held tray: show_held, discard_held, change_assertion (held edits in place; committed supersedes with a confirm step and the prior preserved), plus natural-language routing for save and commit phrasing. Reused display_number, revise_assertion/discard_assertion and the commit N reference implementation rather than building new data-layer mechanism. The deprecated approve_draft card-queue path was routed around rather than deleted — filed for later cleanup.

CR-2026-128 — retract boundary (merged fe6edc9, 2026-07-01). Two Companion-reachable erasures had no human-only gate: retracting a committed assertion (ungated at both data and HTTP layers) and revoking a delegation — a thin wrapper over the same unguarded retract, and worse, with no confirm beat at all, firing immediately as the Companion. Both made human-only; "forget about me" re-routed so the confirmation turn acts as the human; delegation revocation given a propose→confirm beat mirroring the memory arm. The Operator's decision was explicit and absolute: full gate, no seam, no exception — an exception "evolves to more without continual oversight."

CR-2026-129 — recall truthfulness (merged 2abcfd1, 2026-07-01). Write-side truthfulness was closed by 127 and 128; the gap was read-side. recall_personal and the remember_about_me delegation-grant acknowledgement handed real data to the model to phrase, so the content was truthful but the phrasing was not guaranteed to match it. Both are now server-composed directly from retrieved data, mirroring show_held and orient, so the reply cannot fabricate, omit or miscount. v0.2 is a scope correction of v0.1, and it is the most consequential single decision in the window: v0.1 included a third path, ask_about_past_input; Step 0 found it has no topic filter, so server-composing it would turn a focused question into a full memory dump. Rather than ship a throwaway filter, the Operator lifted it entirely out of the CR into its own semantic-recall foundation-effort (2026-07-01). That effort was never scoped. See §5 — it is the strongest lead for the defect the current build is blocked on.

Why the sequence matters now. Each CR names the next one's finding explicitly, and CR-2026-129 closes by stating Room 1 passes the conformance bar. It does — for every path except the one deliberately carved out. The discipline that makes the rest of Room 1 truthful by construction was never applied to the one path a partner would actually use to ask a question.


Entry 123 — Assertion lifecycle and the graph walks (new v0.76; 2026-07-02 → 2026-07-28)

Six change requests extending the lifecycle machinery and opening the provenance graph. Where Entry 122 is a designed sequence, this is a cluster — several independent threads that share a subject.

CR-2026-144 — move assertion to another engagement (Operator Layer 2a320fd, 2026-07-05; no engine merge, by design). A held Memory entry sometimes belongs to a different engagement than the one it was captured in; a "Move to…" action on held cards, wired to the engine's existing /redirect endpoint. v0.2 corrects v0.1's premise: v0.1 assumed net-new backend work; Step 0 found the engine already shipped exactly the required mechanism — redirect_assertion, built in Phase 17 for an unrelated purpose, retracting the held source, creating a held copy in the target with back-pointer metadata, enforcing held-only and same-engagement rejection, 9/9 tests passing before the CR touched it. The build was frontend-only, and the CR's status line says so: engine main unchanged. This entry records that explicitly because the absence of an engine merge reads as a discrepancy and is not one — verified 2026-07-30 against engine a317051: handler at engagement/redirect.py:286, mounted at POST /engagements/{engagement_id}/assertions/{assertion_id}/redirect, and the Operator Layer's redirectAssertion() calls the identical route string. Named gap: a moved assertion has no Memory-room surface (§5, surface-silence class). Also unverified: a real browser click-through of the picker, covered only by mocked component tests.

CR-2026-145 — correction-recognition, propose-and-confirm (merged 5e9c857, 2026-07-04). Stating a fact that corrects an earlier one created an unrelated new assertion with no relationship recorded — a direct contradiction of corrections-preserved-not-smoothed. Now the Companion proposes the match and the Operator confirms before anything changes. Deliberately not naive text-matching: a near-identical keyword approach had been removed from remember_about_me as the source of the confirmation loop, and the CR forbids repeating it while leaving the actual mechanism to the build brief. What was built is recorded nowhere this pass could find (§5).

CR-2026-148 — dismissed held items stay conversationally live (merged ea29a79, 2026-07-06). discard_assertion mutated the database row but wrote no conversation turn, and the classifier reads only recent turns — so a dismissed offer stayed pending forever. Confirmed live: an Operator dismissed an item, repeated the utterance, and was told "Still waiting on your okay from earlier…" about an item that no longer existed; three times in one session, with the repeated content lost each time. The dismissal is now recorded as a turn.

CR-2026-151 — "dismiss" as a discard trigger (merged a971c60, 2026-07-08). The interface labels the action "Dismiss"; the voice intent's trigger words were "discard, drop, throw away, remove." Saying the word printed on the screen did nothing. One classifier-vocabulary line — the smallest CR in the window, and a clean instance of the interface and the grammar drifting apart.

CR-2026-154 — graph hygiene, Stage 1 (merged 355fe7a, 2026-07-28). Includes §4.4 Item 1d, supersession-aware answering: a verification-only item confirming AS_CURRENT_STATES = ("held", "committed") in engagement/assertions.py and that the answer-composing read paths route through it correctly, with a named-exempt list covering history reads, at-version reads, seed induction history, state_of_engagement_at_version, state_of_object_at_time, consideration surfacing, relationship reads and the 1a redirect backfill. It closed clean. This pass did not read the CR and does not assert the path counts — the available secondary source is internally inconsistent about the size of the exempt set (§5). The exempt list is where a missed path would hide, so its exact membership should be read from the CR before the recall diagnosis leans on it.

CR-2026-155 — graph Stage 2, forward walk (merged 7ba761e, 2026-07-28). Given an assertion, find what was built from it: an indexed GET …/assertions/{aid}/dependents matching any pinned version against shape_events_view.selected_memory_refs, with the matched version surfaced per result, plus a dependents count on revise and retract responses so the Operator sees the consequences at the moment of the decision. Explicitly signal-only — nothing blocked, invalidated or auto-changed, per Operator-authority. v0.2 preserves two build-time corrections (CAST(:aid AS text); matched_version typed int | None, v0.1's typing being a reasoning error preserved in place) and four accepted divergences, including an unpaginated dependents list filed as a follow-on and a migration round-trip run out-of-suite against playground_dev with coverage stated honestly as weaker than the acceptance gate's wording rather than read as covered.


Entry 124 — The upload and ingestion cluster (new v0.76; 2026-07-01 → 2026-07-06) — pointer depth

Fifteen change requests in six days building the upload pathway from persistence through interpretation. Recorded here at pointer depth: merge SHAs and subjects, with the CRs filed and readable.

c57c3ad CR-2026-131 upload turn persistence · 1afc723 CR-2026-130 upload content reaches Memory · 2632037 CR-2026-132 folder upload, structure preservation · 7f84f10 CR-2026-133 upload interpretation, formats and summarization · f9cf51f CR-2026-135 brief file and image descriptions · 766f21c CR-2026-136 persist full upload description in the Companion turn · 69c8d8d CR-2026-137 locate and list files by request · 5f1d54c CR-2026-138 persist structured list data, pin classifier temperature · 0002335 CR-2026-140 thread source_mode through to the upload wire response · 54489a1 CR-2026-141 upload result card survives reload · d02f5a0 fix, duplicate description in upload chat bubble · 542e09c CR-2026-143 expose original_filename on AssertionResponse · 7f01b7b + 0dfe1ac CR-2026-146 (v0.7) retain audio for live dictation and on non-assertion-creating turns · 030b9b0 CR-2026-147 accurate image-capability line in the persona. Also in-window: fa4d308 CR-2026-142, hard_delete_engagement must not delete a principal's account.

What the cluster does not cover, and why it matters. No spreadsheet or presentation extraction exists, and the two upload pathways enforce inconsistent rules — .docx accepted by one and rejected by the other. Both findings come from the venture-diligence inspection (Entry 119, V2/V3) and both stand after this cluster. For a data-room engagement the cap table, the financial model and the pitch deck are the heart of the corpus, and none of them can be taken in. That is the ingestion arc's charter, and it is unblocked.


Entry 125 — The dunin7 perimeter arc and the Item 7a claim/credit work (new v0.76; 2026-07-19) — pointer depth

The Operator-Layer work the v0.75 residue named by name — "the OL Item 7a claim/credit arc appears nowhere in the manifest" — plus the engine half that landed the same day.

Engine: cc21759 (Stage 3 leave-behind content v0.23 → v0.25), ea858b3 (Stage 3, the representatives perimeter), 79262c5 (Item 7a, standing-invitation claim_url). Operator Layer: main advanced to 99f7f64 — "Merge Item 7a into main: /claim standing→credit fall-through + admin claim_url" — and has not moved since. Filed alongside: completion-records/loomworks-dunin7-perimeter-stage-1-completion-report-v0_1, completion-records/loomworks-stage-2-completion-report-v0_1, and the four-part session-handoffs/loomworks-dunin7-perimeter-session-handoff-v0_1 through v0_4, plus session-handoffs/loomworks-stage-3-scoping-handoff-v0_1/v0_2.

Pointer depth: this pass read the merge subjects and the filed document names, not the completion reports. The arc is recoverable at full depth from those four handoffs and three completion records whenever a session needs it.


Entry 126 — CR-2026-158: memory registry completeness, and the deployment that healed replay (new v0.76; 2026-07-29 → 2026-07-30)

The first item executed under the governed build regime (Entry 127), and the fix that unblocked the completion arc.

The defect, and its size. Eight event types were written by the codebase but never registered in memory/registry.py: discovery_to_seed_extracted, engagement_created_from_assistance, grant_request_received, jurisdiction_routing_decided, manual_content_contributed, reconciliation_proposal, seed_committed_from_brief, upload_event_received. Registrations stopped at Phase 37; every event family added since — the door-3 extract path, the doors-1/2 creation paths, the upload pipeline, four other writers — went unregistered. The Step 0 sweep at engine 1aac815 found 35 declared object_type literals against 27 registered, with zero registered-but-never-declared. upload_event_received is the common case at 80 events across four engagements, which means any engagement that has ever received an upload was in the affected class.

The live damage. Six engagements could not derive a Manifestation: E0005 (v308, poisoned from v283, 19 Manifestations derived before poisoning), E0060 (v182, poisoned from v1, none ever), E0006 (v121, from v14, none), E0030 (v67, from v40, none), E0121 (v9, from v5, none), E0089 (v6, from v1, none). Five of the six had never derived a Manifestation at all. E0005 is the instructive case: it derived nineteen times across 283 healthy versions, then an upload poisoned it mid-life, leaving its newest Manifestation permanently twenty-five versions stale with no surface reporting the staleness — named by this CR, not fixed by it, and handed to the completion arc (§5, surface-silence class).

Why no user was hitting a 500. The Manifestation and Shaping rooms are hardcoded placeholders (walk-audit finding W-9), so nothing was asking these engagements to derive. The registry defect and the placeholder rooms masked each other, and building the real Manifestation surface would have removed the mask — which is why this had to land first.

What shipped. All eight types registered; a structural guard landed so the class cannot be reintroduced silently; both heal fixture shapes proven; the create-from-conversation rider resolved by removal; live-verified against the synthetic WALK-AUDIT-2026-07-28 engagement before and after deployment. Engine merge c4014d6, main a317051, annotated tag registry-completeness-v0_1, push-verified. Deployed 2026-07-30 by Operator-directed launchctl kickstart -k on com.dunin7.loomworks-engine; the live :8000 engine verified running the merged code by its OpenAPI surface. The six engagements heal by replay on their next derivation — no backfill required.

Resolved as a by-product. The same sweep established that CR-2026-157 (non-member contribution pathway) was not executed against 1aac815: no matching commit or branch, _alpha_authorizer_stub still present and called at credit/cross_engagement_memory.py:65,120, no credential or non-member code in tree. Governing documents: change-requests/cr-2026-158-memory-registry-completeness-v0_2.md, completion-records/cr-2026-158-checkpoint-a-report-v0_1.


Entry 127 — The walk audit and the governed build regime (new v0.76; 2026-07-28 → 2026-07-30)

The project's operating model changed inside this window, and the manifest should carry it because it governs how every subsequent entry gets produced.

The walk audit (2026-07-28/29). One synthetic engagement walked seed to render. The finding was that the thread stops, it does not fray: Stage 1 (Memory) is largely continuous through the Companion; Stages 2–4 are continuous nowhere. The Manifestation and Shaping rooms are hardcoded placeholders (RoomView.tsx:56-66); no Companion intent produces a Manifestation, a Shape or a Render; the Companion-continuity count is eight forced departures to raw mechanics. The provenance backward walk — render → shape → Manifestation → assertion → contributor — is possible only through the API. The substrate is genuinely good and no surface exposes a single hop. Filed at inspection-briefs/loomworks-walk-audit-report-v0_1 with its CC brief and Operator checklist alongside.

The regime (2026-07-30). A standing charter was ratified, and a plain-English build list in standing-notes/ became the single document the Operator reads at each sitting — every item with its status, its dependencies and what it unblocks, maintained as a closing duty by whichever session touches it, add-new-file siblings per the filing rules. Sessions run against the charter's authorization classes and report; the Operator's involvement narrows to decisions and acts that are genuinely his. CR-2026-158 (Entry 126) is the first item executed under it, and this absorption pass is the second.

Environment reality, learned the hard way and recorded so it is not relearned. The :8000 engine serves the live app.dunin7.com perimeter, and the production database is named playground_dev — a standing naming trap. All development verification uses the walk-audit pattern: a second engine on a spare port, inline environment only, a fresh database (playground_walkaudit), an Operator-Layer instance on a port the tunnel does not route, live processes and .env untouched. Deploying a merged engine fix to the serving perimeter is a launchd restart — an Operator act, always named, never assumed.

One standing rule added mid-window. Multiple Claude Code sessions may write to loomworks-record in the same period. Every task re-verifies HEAD immediately before each write rather than trusting an earlier reading, never amends or force-updates without confirming no other session is mid-flight, and prefers append-shaped work — new commits, new sibling files — over history-editing operations, which the record's discipline favours anyway. Prompted by a live collision: two sessions wrote concurrently, HEAD moved mid-task, and an amend misfired.


Splice 10 — Changelog (insert immediately after the ## Changelog line, above the v0.75 entry)


- **v0.76** (2026-07-30): **The June→July absorption pass — the window the v0.75 residue named as owed is absorbed, and the record is current for the first time since 2026-06-28.** 351 engine commits / 52 merges and 114 Operator-Layer commits / 23 merges, spanning ~40 numbered CRs (098, 101–158 with gaps) plus a dozen named ones. Seven entries: **121** (window shape, method, and a per-entry depth declaration — four entries at normal depth, three at pointer depth, because a retrospective pass reads merge history rather than its own working material); **122** (Room 1 actor-boundary + truthfulness sequence, CR-2026-120 → 127 → 128 → 129, a closed arc; CR-129 v0.2's carve-out of `ask_about_past_input` identified as the window's most consequential decision); **123** (assertion lifecycle + graph walks, CR-2026-144/145/148/151/154/155; CR-144's missing engine merge recorded as by-design, verified at `a317051`); **124** (upload/ingestion cluster, CR-2026-130–143/146/147 — pointer depth; the spreadsheet/presentation absence stands); **125** (dunin7 perimeter + Item 7a claim/credit — pointer depth; the arc the v0.75 residue named by name); **126** (CR-2026-158 memory registry completeness — eight unregistered event types, six live engagements unable to derive, merged `c4014d6` → `a317051`, tag `registry-completeness-v0_1`, deployed by Operator launchd restart, healing by replay); **127** (the walk audit and the governed build regime now in force). §1 fronts advanced to engine `a317051` / OL `99f7f64`, **SHAs only — the numeric refresh is owed**. Entries 119/120 receive the owed supersession markers: **GRANTHA holds the authorization seat per Decision J1**, OVA displaced; both entries' findings and reasoning stand, only the seat is corrected. §2.D gains **surface-silence-as-a-class**. §5: the absorption-gap residue RESOLVED; six residues filed, three of them new findings — the `ask_about_past_input` semantic-recall carve-out (the strongest lead for the recall-truthfulness defect), the surface-silence class (four instances), the 47-day untagged stretch, the owed numeric refresh, CR-145's unrecorded matching mechanism, and one inconsistent secondary figure left deliberately unasserted. Otherwise carries v0.75 forward.

Splice 11 — Footer

Update the footer version line to v0.76 — 2026-07-30. Tagline unchanged.


Verification checklist for CC after applying


DUNIN7 — Done In Seven LLC — Miami, Florida Current-status manifest — v0.76 amendment instructions — v0.1 — 2026-07-30 Splice list to turn v0.75 into v0.76: the June→July absorption pass — seven entries, the GRANTHA supersession markers on Entries 119/120, advanced fronts, one methodology candidate, and six residues including the semantic-recall lead.