DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path inspection-briefs/loomworks-b25-step-0-inspection-brief-v0_1.md

Loomworks — B-25 Step 0 inspection brief — v0.1

Version. 0.1 Date. 2026-08-01 Author. Claude.ai (drafting session). Operator: Marvin Percival. Executed by. Claude Code on DUNIN7-M4, one engine session. Target. /Users/dunin7/loomworks-engine at main e106917, tag provenance-seam-v0_1. Charter. standing-notes/dunin7-standing-authorization-charter-v0_1. R-5 inspection run. Build-list item. B-25. Status. Read-only. Establishes ground for B-25's change request. Produces no code change and no change request.

Why now. B-29 is merged and B-25 is unblocked. But B-29 rewrote provenance construction at every one of the eighty-three sites, and three of B-25's eleven sit inside those same Provenance(...) expressions. Every line number in B-25's evidence base was taken at a317051 and is now suspect.

Evidence base, all of it pre-B-29. inspection-briefs/loomworks-b25-sizing-sweeps-findings-v0_1 (the eleven, plus two unclear); inspection-briefs/loomworks-inspection-corrections-note-v0_1 C-6 (two recorded locations that do not resolve); inspection-briefs/loomworks-walk-audit-report-v0_1 W-6.


1. The fences

Read-only. No fixes, no branches, no commits, no stashes, no dependency installs.

No database connection. playground_dev is the live production database.

No test-suite run and no live-perimeter call. Every question here is decidable from source.

The engine is free — B-29 released it — but this session does not build. If a question needs a build to answer, report it unread.


2. The discipline clause

State only what you have read back, and the four verification disciplines now filed at standing-notes/loomworks-standing-note-executable-document-versions-v0_4:

  1. Name the file and line for every claim. A claim with no anchor is not a finding.
  2. Report unread where a question cannot be settled inside the fences.
  3. Do not inherit. Everything in the evidence base was read at a317051. This session reads at e106917.
  4. A sweep pattern must not encode an assumption about its target. State what the sweep must find, then confirm the pattern can find it.
  5. A check against a path that does not exist passes vacuously. Confirm targets exist before treating silence as a pass.

3. Question one — re-anchor the eleven

For each site: does it still exist, at what line, and did B-29 change the expression it sits in?

| # | Site, as recorded at a317051 | Writes today | True value | |---|---|---|---| | 1 | api/routers/engagements.py:285 | Actor with a generated identifier, as the draft seed's author | The authenticated person, in scope two lines earlier | | 2 | api/routers/engagements.py:347 | Same construction, as amend author | The principal the creator-assertion resolved | | 3 | api/routers/engagements.py:392 | Same construction, as induction author | Same | | 4 | api/routers/considerations.py:195 | Coalesces the client's agent identifier against a generated one | The agent the client named | | 5 | api/routers/seed_commit_from_brief.py:271 | Kind contributor, carrying a person identifier | Kind person — the session-cookie path | | 6 | api/routers/me_create_engagement.py:393 | Same | Same | | 7 | api/routers/me_create_engagement.py:728 | Same | Same | | 8 | api/routers/seed_extraction.py:246 | Same | Same | | 9 | api/routers/seed_extraction.py:283 | Same | Same | | 10 | orchestration/router.py:359, :3292, orchestration/routers/converse.py:1378 vs api/deps.py:1176 | Spoken door writes kind companion; typed door writes kind person, same person identifier | One of the two, consistently | | 11 | orchestration/routers/converse.py:690 | Does not resolve — see §5 | — |

Three sites need particular care. B-29's work touched Provenance(...) expressions at api/routers/seed_extraction.py, api/routers/seed_commit_from_brief.py and api/routers/me_create_engagement.py — the same expressions B-25's sites 5 through 9 sit in or beside. Report the current line and the shape of the expression as it now stands, not merely whether the defect survives.

Also re-anchor the compounding site. The hardcoded companion name is at api/routers/assertions.py:405 — not engagement/assertions.py:404, which corrections-note C-6 established carries no such string. Confirm at e106917.


4. Question two — the two judgment questions

Both were deferred to this Step 0 by the sizing findings. Each needs a read that establishes what the engine already treats as true, so the Operator decides against evidence rather than in the abstract.

4.1 api/routers/considerations.py:111, called at :534. The escalation recipient's actor is taken wholesale from the request body — kind, identifier and version all client-supplied, written through without validating that the actor exists or that the kind matches the identifier.

The question: is the escalation recipient an assertion about a party, which is the client's to make, or a reference to a party, which is the engine's to resolve?

What to read: every other place the engine accepts an actor from a request body, and whether any of them validate. If some do and some don't, the inconsistency is itself the finding. Also read whether the recipient is ever dereferenced later — a reference that is never followed and a reference that is followed have different stakes.

4.2 api/routers/seed_conversation.py:116. The seed-conversation Companion writes as kind agent under a stable sentinel rather than kind companion.

The question: is this Companion person-bound? Kind companion requires the identifier to carry the person's own value; if this identity is not person-bound, agent may be correct rather than a mislabel.

What to read: memory/base.py:69-81's definitions of the four kinds; how the sentinel is constructed and whether it varies by person; and whether any other Companion-like identity in the tree writes as agent. Do not assume it is a defect because it appears in a defect list.


5. Question three — site 11

Corrections-note C-6 established that orchestration/routers/converse.py:690 at a317051 is engagement_id = body.project_id or _current_engagement_id — creation-scope resolution, not an authorship construction. The file's only actor constructions were :1307 and :1378, and :1378 is already site 10c.

Two possibilities, and this session settles which: site 11 meant :1307, or the line moved between the sizing sweep and the corrections read.

What to read: :1307 at e106917 — is it a falsy-coalesce writing a wrong value? And is there any other coalescing construction in that file that fits the sizing findings' description of site 11 (coalesces the request's project field against the last-viewed engagement)?

If neither resolves, report site 11 as unrecoverable and the count drops to ten. Do not manufacture a site to preserve the number eleven.


6. Question four — has B-29 changed the shape of the fix?

B-25 corrects wasAttributedTo. B-29 rewrote how wasGeneratedBy is produced at the same construction sites.

Establish: does the post-B-29 shape make B-25's eleven easier, harder, or unchanged? Specifically, do any of the eleven now sit inside a helper that B-29 introduced or modified, such that one correction would reach several sites at once — the shape-two pattern from B-29's own build?

If a helper-shaped fix exists, that is a material finding for the change request. B-25 was sized as eleven heterogeneous fixes; if B-29's refactoring has clustered them, the sizing changes.


7. What this brief does not do


8. Reporting

One findings document, Markdown primary.

Path. inspection-briefs/loomworks-b25-step-0-findings-v0_1.md. Copy to ~/Downloads.

Structure: environment (SHA, tree state, explicit statement that no database, suite or perimeter call was made) · question one as a table, recorded line beside current line, with the expression shape at sites 5–9 · question two, both questions with what the read establishes and what still needs a ruling · question three, ending in :1307, a different line, or unrecoverable · question four · corrections preserved · unread.

Filing. Charter R-1: commit and push on clean pre-flight. Append the outcome to current-status/dunin7-status-brief.


9. Claude Code kickoff


B-25 Step 0 inspection. Read-only.

Brief: loomworks-record/inspection-briefs/loomworks-b25-step-0-inspection-brief-v0_1.md
Confirm it is the highest version present — numeric sort.

Read the brief in full. Charter dunin7-standing-authorization-charter-v0_1 governs.

Target: /Users/dunin7/loomworks-engine at main e106917 — POST-B-29.
Every line number in the brief's evidence base was taken at a317051 and is
suspect. Re-anchor rather than inherit.

Read-only: no fixes, no branches, no commits, no suite run, no database
connection, no perimeter call. playground_dev is the live production database.

Four questions in the brief's order. Section 5 may legitimately end in
"unrecoverable" — do not manufacture a site to preserve a count.
Section 4 asks what the engine already treats as true, not what should be
done about it.

File findings per section 8. Append the outcome to the status brief.

DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — B-25 Step 0 inspection brief — v0.1 — 2026-08-01 Eleven sites recorded before the ground moved. Read them where they are now.