Version. 0.1
Date. 2026-07-28
Status. Pre-scoping live-codebase verification brief. Hands to Claude Code on DUNIN7-M4. Markdown primary (technical consumer).
Author. Claude.ai. Operator: Marvin Percival.
Parent. loomworks-ova-reach-enforcement-scoping-handoff-v0_1 (session-handoffs/). This brief executes its Section 6 step 2.
Prior evidence consumed, not re-verified. loomworks-vertical-vc-diligence-cc-inspection-report-v0_1 V1 (engine 1aac815) established: the three-designation additive model (memberships.py:36-40); the two-rung ladder at the actor resolvers (deps.py:1160-1179, cookie path :891-945); no can_read on ResolvedActor (:1008-1029); get_committing_resolved_actor (:1182-1197); get_contributing_contributor as a no-narrowing pass-through (:1208-1224); three sample read routes. This brief does not repeat those; it covers what V1 did not.
Six verifications grounding the OVA reach-enforcement scoping note before it is drafted. The scoping note's central question — can reach be withheld below membership — needs to know what the "declared seam" concretely is, the true size of the read surface, whether the seed's held-contribution machinery exists in the engine, what the Phase 45 OVA seam shipped as, how tightly attribution couples to membership, and what scope machinery exists above the engagement.
CC verifies, evidence-cites (file path + line range), reports verdicts (HOLDS / PARTIALLY HOLDS / BREAKS / INCONCLUSIVE where applicable; descriptive where enumerative). CC does not remediate, does not draft the scoping note, does not build. Engine read at main current HEAD; report the SHA and note drift from 1aac815 if any.
Ask. Seed v0.12 says "the access mode is declared and the seam is in place" for scope reach. What is that, concretely, at HEAD? An access-mode column on engagements or scopes? An ACL table? A settings flag? Nothing?
Look at. The engagement model and table; any scope-related models; Alembic history for anything access-mode-, ACL-, visibility-, or reach-shaped (note Phase 15 set the Loomworks engagement's visibility to 'automatic' — find what column that wrote and what its value set is); grep for access_mode, visibility, acl, restricted, reach across models and migrations.
Evidence expected. Every schema element found, with path + lines and its current value domain; or an explicit "nothing exists" with the searches run.
Verdicts. HOLDS: a declared access-mode element exists and is merely unenforced. PARTIALLY HOLDS: something adjacent exists (e.g. a visibility column with a different purpose) — report whether it is the seam or a false friend. BREAKS: nothing exists; "seam in place" is posture only, and the scoping note must add the declaration as well as the enforcement.
Ask. V1 (prior report) cited three read routes as "a sample, not the whole set." The scoping note must size the enforcement rework, which requires the whole set.
Look at. Every engagement-scoped route (path contains /engagements/{). For each: method+path, the resolver dependency it takes (get_resolved_actor / get_contributing_contributor / get_committing_resolved_actor / other / none), and read-vs-write classification. Include the /me/... and /operator/... surfaces where they read engagement-scoped Memory (the Phase 40 orchestration routers translate over engine reads — identify which engine read paths they traverse and whether they take their own resolver or delegate). Include converse/recall paths that read committed assertions.
Evidence expected. A table: route, file+line, dependency, read/write. Totals per dependency. Explicitly flag any engagement-scoped read taking no resolver.
Verdicts. Descriptive, plus one sentence: is there a single chokepoint all reads traverse (the resolver layer), or do any reads bypass it — because a bypass is where a reach guarantee would silently leak.
Ask. The seed commits the contribution axis: trusted core writes directly; outside contributions held until admitted. V1's evidence shows assertions carry a held state. Does the engine's held→committed flow implement admit-by-trusted-core semantics, and is there any contribution path for a non-member?
Look at. The assertion lifecycle states and transitions; who can create a held assertion (the contributions endpoint takes the base resolver — membership required; confirm no other entry); who can transition held→committed (the commit gate) and held→discarded; whether "trusted core" exists as a concept anywhere or whether can_commit (operator/contributor designations) is its de-facto implementation; whether an assertion's contributor attribution requires a membership row or only a person/actor reference.
Evidence expected. State machine sites (paths + lines); the creation and admission permission checks; the attribution foreign keys and their targets.
Verdicts. HOLDS: held-until-admitted exists with membership-gated creation and commit-gated admission — the trusted-core shape in de-facto form. PARTIALLY HOLDS: held exists but admission semantics diverge from admit-by-trusted-core (report how). BREAKS: held is not an admission gate (e.g. it is a drafting state only).
Ask. Phase 45 committed an OVA seam (delegation contract, approval cards). What is that seam at HEAD — module, interface shape, call sites? The scoping note must land reach enforcement as OVA-contract work behind the existing seam, not as a parallel bespoke ACL that OVA later displaces.
Look at. The Phase 45 CR's shipped surfaces in code; grep for ova (case-insensitive) across the engine; any authorizer interface, stub, or delegation-contract module; the shape of whatever call authorize(...)-like sites exist.
Evidence expected. The seam's module path + interface (or the explicit finding that Phase 45's seam is delegation-scoped only and no general authorizer interface exists); every call site.
Verdicts. HOLDS: a general authorizer seam exists that reach checks can route through. PARTIALLY HOLDS: a delegation-scoped seam exists; reach would extend its contract (report the extension surface). BREAKS: no seam in code; the scoping note starts the seam per the integration investigation's Option E shape.
Ask. The handoff's second candidate resolution ("a participation shape that is not membership") depends on whether a contribution can be attributed to a person who holds no membership row. How tightly is attribution coupled to membership?
Look at. The assertion/contribution attribution columns and their FK targets (person/principal vs membership); the actor-ref construction (actor_from_person); any code path that resolves a contributor's display or provenance via membership rather than person; what concretely breaks (FK violation, join returning nothing, display fallback) if an attributed person's membership were absent or removed.
Evidence expected. FK graph for attribution (paths + lines); the join paths provenance display uses; a one-paragraph read on non-member attribution feasibility.
Verdicts. HOLDS: attribution is person/principal-anchored; membership absence does not corrupt provenance. PARTIALLY HOLDS: attribution is person-anchored but display/provenance paths join through membership (report sites). BREAKS: attribution FKs target membership.
Ask. The seed's reach axis is scope-level and scopes include domains and organizations above the engagement. What scope machinery exists in schema at HEAD, so the scoping note can decide honestly between engagement-only-first and scope-general enforcement?
Look at. Any organization, domain, or scope tables/models; the workspace model (established: person-owned engagement grouping — confirm it is not a Memory scope and say so explicitly); anything from the aggregating-scope or memory-space-extensibility directions that reached schema.
Evidence expected. Enumerated scope-shaped schema with paths; or "engagement is the only Memory scope in schema" with searches run.
Verdicts. Descriptive, plus one sentence on whether engagement-only-first enforcement forecloses anything the seed's N-scope model needs later.
Single Markdown report: loomworks-ova-reach-enforcement-step-0-report-v0_1.md. Sections V1–V6, each with verdict, evidence citations, one-sentence read; engine main SHA at top; drift note against 1aac815 if HEAD moved. Drop in /Users/dunin7/Downloads/ for Claude.ai retrieval. Read-only session against both repos apart from the Downloads copy; nothing committed, nothing pushed.
DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — OVA reach enforcement — Step 0 inspection brief — v0.1 — 2026-07-28