DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path phases/phase-53-discovery-to-seed-skill/loomworks-phase-53-cr-drafting-handoff-v0_1.md

Loomworks — Phase 53 CR Drafting Handoff

Version. 0.1 Date. 2026-05-10 Audience. A fresh Claude.ai chat (same project, so project knowledge is shared) that drafts the Phase 53 CR. The current chat may also draft the CR directly per the Phase 50 compressed-analog precedent. Provenance. Produced after loomworks-phase-53-scoping-note-v0_2.md (which absorbed phase-53-step-0-findings-v0_1.md). All architectural decisions are settled in v0.2 of the scoping note (P53-D1 through P53-D11); this handoff transposes those decisions into drafting instructions.


1. What this is

The Phase 53 scoping note v0.2 is CR-ready. The Step 0 findings are absorbed. All v0.1 §12 open questions are resolved: P53-D1 through P53-D9 confirmed by Operator at v0.1 review; P53-D3 settled by V2+V3 elimination; P53-D5 sharpened by V4+V5 (Phase 31 produces string brief, does not call induct_seed); P53-D6 amended by V6 (Phase 16 _ACCEPTED MIME-type extension included in Phase 53 scope); P53-D10 (endpoint name /seed/extract) and P53-D11 (defer Phase 31 induct-seed gap clarification to Phase 54+) surfaced and settled. Several small CR-drafting-time verifications remain (per §4 below): ExtractionSkill protocol exact base class name; build_default_registry() exact signature; Phase 16 _ACCEPTED exact location; Seed model exact field names against R-A5–R-A11; induct_seed exact signature; FORAY helper exact import path. None block CR drafting from beginning. There is no more scoping work to do — the next deliverable is a single CR document.

The receiving chat reads this handoff, then the scoping note v0.2, then the Step 0 findings. Then it drafts the CR. The CR specifies architectural decisions firmly; substrate field names, function signatures, table names, model identifiers, route paths, and module locations are marked with [CC verifies at Step 0] where the CR drafter could not read live ground truth, or with [CC verifies at CR drafting] where Step 0 findings flagged exact-string verifications worth doing at drafting time.

The CR target filename: phase-53-cr-discovery-to-seed-skill-v0_1.md.

The CR's structural template: phase-52-cr-jurisdiction-routing-v0_1.md in the engine repo's docs/phase-crs/ — the closest precedent (single-sub-arc shape; engine-only; deferred-OBJECT_TYPE_REGISTRY pattern; small Memory-event registration block). Adapt to Phase 53's specific shape: skill substrate + Phase 16 additive amendment + endpoint + Memory event; tighter test fixtures driven by V8; explicit backward-compat for Phase 25 and Phase 31.


2. Decisions the CR implements

These are settled. The CR drafter does not re-decide them; it transposes them into CR sections.

  1. Phase 53 = Sub-arc 1 only (engine: Discovery-to-seed skill module + Phase 16 _ACCEPTED MIME-type extension + POST /engagements/{eid}/seed/extract endpoint + discovery_to_seed_extracted Memory event + induct_seed hand-off). Sub-arc 2 (Operator Layer) is empty by default. Sub-arc 3 (marketing site) is empty.
  1. P53-D1 — LLM-assisted bounded skill. Single-shot LLM call wrapped by strict input/output contract. No conversation; no multi-turn; no retry-on-clarification. The discipline is bounded contract, not no LLM. Per V8's evidence — 6+ organizing schemes across Discovery records, purely-declarative would over-fit.
  1. P53-D2 — Free-form Markdown Discovery documents with recognized section headers (path (a)). Phase 53 skill consumes the kind of Discovery records already produced in chat. Phase 54+ may add a structured Memory-shape input (path (b)) as an alternative; not Phase 53 scope.
  1. P53-D3 — Skill registers in ExtractionSkillRegistry at src/loomworks/skills/registry.py. V2 retired materializer-registry candidate (render-output-side, distinct surface). V3 retired GRAMMAR_REGISTRY candidate (shape-declarative not callable). Only ExtractionSkillRegistry remains; V1 confirms intact.
  1. P53-D4 — Operator Layer sub-arc 2 empty by default. Per Phase 51/52 precedent. The Operator Layer's existing engagement-creation surface remains Phase 31's conversational flow (V5 confirmed unchanged from Phase 31 tag); sub-arc 2 ships no Operator Layer changes.
  1. P53-D5 — Phase 31 and Phase 53 coexist as truly distinct paths. V4 + V5 revealed deeper divergence than v0.1 anticipated: Phase 31 produces a string brief; Phase 53 produces a structured Seed. Phase 31 does NOT call induct_seed; Phase 53 does. They share the /engagements/{eid}/seed/* URL family but produce different artifacts and follow different downstream pipelines. Coexistence holds.
  1. P53-D6 — Discovery document Memory location via Phase 16 upload-pipeline + additive text/markdown MIME-type amendment. V6 BREAKS: _ACCEPTED rejects Markdown with 415. Smallest-amendment path: extend _ACCEPTED to include text/markdown plus add UTF-8 text-decoding at the skill's input edge. No rebuild of Phase 16's pipeline; no breaking change.
  1. P53-D7 — Tag name: phase-53-discovery-to-seed-skill on engine repo only. No tags on Operator Layer or marketing repos by default — Phase 53 has no work in those repos. If sub-arc 2 lands actual work via Phase 54 surface design lifting forward, marker tag follows Phase 51 V7 precedent.
  1. P53-D8 — Engagement creation arc as explicit multi-phase trajectory. Phase 53 = kickoff; Phase 54+ candidates listed in carry-forward (Discovery-assistance flow §1.1; Discovery-trajectory and Discovery-record specialists; Operator Layer surface; Phase 31 clarification; eventual Phase 32 marketing engagement). Each phase scoped independently when it opens; arc framing in scoping language only, not commitment.
  1. P53-D9 — Memory event kind: discovery_to_seed_extracted. Mirrors Phase 50's grant_request_received and Phase 52's jurisdiction_routing_decided registration pattern exactly. Schema: discovery_document_ref, extracted_seed_payload, skill_version, extracted_at, _foray namespace, content_hash. OBJECT_TYPE_REGISTRY entry and _ANCHOR_PRIORITY entry deferred per V7 / Phase 50/52 precedent.
  1. P53-D10 — Endpoint name: POST /engagements/{eid}/seed/extract. Per V10's tighter-alternative recommendation. The endpoint is an ExtractionSkill invocation surface; URL reflects the family. Engagement-scoped per V10's universal convention.
  1. P53-D11 — Phase 31 induct-seed gap deferred to Phase 54+ for Operator clarification. V5 found Phase 31 produces string briefs and does NOT call induct_seed. Whether deliberate design choice or incompleteness is not a Phase 53 question. Phase 53 carry-forward records the open question; no Phase 31 amendment in Phase 53.
  1. Build sequencing. Per scoping v0.2 §7: 4 active build steps + 3 reserved buffer slots (5–7). Two checkpoints (A after Step 2, B after Step 4 final-before-tagging). Tag: phase-53-discovery-to-seed-skill per P53-D7, on engine repo only.
  1. Carry-forward. Per scoping v0.2 §10.1–§10.3: Discovery-assistance flow; Discovery-trajectory + Discovery-record specialists; Operator Layer surface; Phase 31 induct-seed gap (P53-D11); Phase 31/53 unification or deprecation (carried from v0.1). All conditional/opportunistic items from Phase 52 §18 carry forward unchanged.
  1. Halt thresholds. Per scoping v0.2 §9: Phase 16 _ACCEPTED extension surfaces unexpected interactions with existing MIME-type filters; ExtractionSkill protocol surface differs from V1's read; induct_seed hand-off contract differs from V5's implication; any backward-compat regression on Phase 25 or Phase 31.

3. CR target shape

3.1 Sections to include (mirroring Phase 52 CR v0.1 structure)

3.2 Build step shape (per Phase 52 v0.1 precedent)

Each of the four active build steps in §14 contains:

Phase 53's build steps span one repo only (engine). Steps 1–4 hit the engine repo; no cross-repo work. Step-0-equivalent inspection blocks scope to engine files exclusively.

Suggested step decomposition (CR drafter refines):

Checkpoint A after Step 2 (skill standalone tested before endpoint integration). Checkpoint B after Step 4 (final-before-tagging).

3.3 Reserved-slot buffer language (per Phase 49/50/51/52 precedent)

Per Phase 49 v0.3 §15 / Phase 50 / Phase 51 / Phase 52's full carry of the convention, slots 5–7 in Phase 53's build read as "(reserved — buffer for amendments arising from steps 1–4)" and "(reserved — buffer)". Reserved-not-skipped: unconsumed if no amendment arises; the buffer's value is its presence, not its consumption. Phase 50/51/52 each left all three unconsumed. CR §14 carries this language.


4. CR-drafting-time verifications

Step 0 absorbed ten verifications, so CR drafting starts from a strong evidence base. The remaining drafting-time verifications focus on details that didn't fit in Step 0 — exact line numbers, exact strings, exact import paths, exact module locations. These follow the same discipline as Phase 51/52 drafting: live-string-from-codebase, not placeholder-from-CR.

CR drafter verifies the following at draft time (read live; substitute exact strings into CR sections):

  1. ExtractionSkill protocol exact base class name and full signature. Step 0 V1 verified the registry is intact at src/loomworks/skills/registry.py; CR drafter reads the exact base class name (could be ExtractionSkill, Skill, Extractor, or similar), the protocol surface (which methods it requires), and the secret_key kwarg signature so §8 specifies the new skill's class shape exactly.
  1. build_default_registry() exact module location, signature, and registration call shape. Step 0 V1 named build_default_registry() as the registration locus; CR drafter reads the exact module path, function signature, and the three existing registration calls so §9 specifies the fourth registration against verbatim sibling pattern.
  1. secret_key autouse-monkeypatch convention exact conftest.py location. Step 0 V1 confirmed convention present across 18+ test modules; CR drafter reads the canonical conftest.py fixture so §17 tests on the new skill follow the convention without re-deriving.
  1. Prompt template module location convention. v0.2 §3.2 sketches src/loomworks/prompts/discovery_to_seed_extraction.py analogous to Phase 31's creation_conversation.py; CR drafter confirms against Phase 31's prompt module location (V5 verified Phase 31 surface intact) and follows the convention.
  1. Phase 16 _ACCEPTED exact location, current value, and existing test coverage. Step 0 V6 BREAKS named _ACCEPTED doesn't include text/markdown; CR drafter reads the exact file path, the current MIME type list, and any existing test that validates accepted/rejected types so §7 specifies the extension surgically and §17 adds the new MIME type to the existing test pattern.
  1. Seed model exact field names and R-A5–R-A11 mapping. Step 0 V4 confirmed single canonical Seed model with naming-only divergence from R-A5–R-A11; CR drafter reads the exact field names so §8's structured-output instructions target verbatim field names (not R-A5–R-A11 abstractions) and §11's response body specifies the actual Seed shape.
  1. induct_seed exact module location, signature, and existing two production callers. Step 0 V5 confirmed two production callers exist (neither in Phase 31); CR drafter reads the exact signature and call shape from both existing callers so §11's hand-off step specifies the third invocation against verbatim sibling pattern.
  1. Phase 50 grant_request_received OR Phase 52 jurisdiction_routing_decided registration block exact module location. Step 0 V7 confirmed Phase 53 mirrors the pattern; CR drafter reads the more recent (Phase 52) registration block as primary template — typed MemoryObject subclass + Literal object_type + append_event call — so §10 ships a parallel block against verbatim template.
  1. compute_content_hash + _foray namespace exact import paths. Step 0 V9 confirmed FORAY hooks intact; CR drafter reads the canonical import path for compute_content_hash and the _foray namespace structure so §10 specifies imports against verbatim code.
  1. Phase 16 upload endpoint exact return shape. v0.2 §3.4 states the endpoint's request body is "a Discovery-document Memory artifact reference (the same shape Phase 16 returns from upload)"; CR drafter reads the exact return shape so §11's request body specifies the Memory artifact reference structure precisely.
  1. **/seed/extract route placement against existing 10 /seed* routes.** Step 0 V10 enumerated all 10 routes; CR drafter reads which router module they live in and adds the new route in the same module (or in-convention sibling) so §11 specifies the route placement consistently.
  1. engine repo docs/phase-crs/ directory listing. Confirms CR number ordering for Phase 53 (likely CR-2026-068 if Phase 52 was 067); CR drafter reads the directory and assigns the next number.

If any of items 1–12 reveal architectural divergence (not just naming or exact-string), CR drafter halts and surfaces — does not draft and hope.


5. Drafting discipline

Live-string-from-codebase, not placeholder-from-CR. Same discipline as Phase 50/51/52. When the CR specifies model identifiers, function signatures, class names, field names, route paths, or any concrete string that already exists in the codebase, use the live string. Step 0 absorbed this discipline at the ten-verification level; CR drafting continues it at the exact-line-number level.

Step 0 inspection blocks at each build step. Per §3.2 above. Each build step says "before implementing, CC reads {specific files} and confirms {specific facts}." Phase 53's build steps lean on Phase 16, Phase 31, Phase 25, and Phase 50/52 source files for their respective Step-0-equivalent inspections.

Halt thresholds per build step. Each build step carries a halt threshold. Phase 47/48/49/50/51/52 standard: ">30 tests touched" for blast-radius decisions. Phase 53 reuses this and adds: any divergence from v0.2 scoping decisions triggers halt; any discovery that Phase 31's surface or Phase 25's induct_seed contract differs from V5's read triggers halt-and-amendment.

Reserved-slot buffer language. Per §3.3 above. Slots 5–7 are reserved-not-skipped.

Test posture progression. Mirror Phase 52: green-against-mocked-substrate in early steps; green-with-real-substrate-fold-in by final step. Step 1 (_ACCEPTED extension) lands green against unit-level test of MIME-type acceptance. Step 2 (skill module + registration) lands green against unit-level skill-invocation mocks (LLM call mocked; structured-output validated). Step 3 (endpoint + Memory event + FORAY) exercises the orchestration path against test fixtures. Step 4 runs the full fixture sweep — full-fit Discovery record (loomworks-marketing-creation-flow-content-v0_3.md per V8), partial-fit Discovery records (selected from V8's inventory), hallucination-resistance test, integration test, backward-compat smoke.

LLM-mocking discipline. Phase 53's skill is LLM-assisted; tests cannot run against live LLM (slow, non-deterministic, expensive). The skill's tests mock the LLM response and validate the contract-bounded parsing/validation logic. A separate non-CI test (or manual exercise) can run against live LLM as a quarterly verification cadence — outside Phase 53 scope; can be carried forward as Phase 54+ candidate if useful.

Backward-compat discipline for Phase 25 and Phase 31. P53-D5's coexist-as-distinct-paths choice creates two backward-compat test surfaces: Phase 25 form-submission path produces identical output and identical induct_seed invocation; Phase 31 conversational path produces identical string-brief output, identical five engagement-scoped endpoint shapes, and still does NOT call induct_seed (the gap is preserved deliberately per P53-D11). CR §17 ships explicit backward-compat tests for both.

Lens-bounded discipline at draft time. v0.2 §6 records the lens-bounded scoping evidence cascade methodology candidate landing its second instance via Step 0 V4, V5, V10. CR drafting carries this forward: when §6–§11 sections reference counts (call-sites, fixtures, test cases, route enumerations), the CR uses Step 0's enumerated counts as live truth, not scoping-note abstractions. If CR drafting surfaces a count discrepancy against Step 0's enumeration, halt and surface — third-instance evidence for the cascade would itself be methodology contribution worth preserving.

No voice content shipping in Phase 53. Same as Phase 52 — Phase 53 ships no Companion-rendered prose. The skill produces a structured Seed; the Memory event records a substrate fact; no voice surface. CR doesn't have a voice-template section.


6. Scope boundaries (don't cross)

The CR drafter does not draft sections for any of the following — these are out of Phase 53:

If the CR drafter finds itself drafting any of the above, it has crossed the seam — back up.


7. Halt-and-escalate signals during drafting

The receiving chat halts drafting and reports back to the Operator (rather than continuing) if any of the following arises:

In all cases, halt-and-surface is preferred to draft-and-hope.


8. Companion documents during drafting

If the receiving chat needs project-knowledge searches mid-draft, candidates include:

The receiving chat does not need to read all of these front-loaded; pull as needed during section-specific drafting.


9. Paste-ready kickoff prompt for the new chat

Open a new Claude.ai chat with the same project (so project knowledge is shared) and paste:


Open Phase 53 CR drafting. Read first: loomworks-phase-53-cr-drafting-handoff-v0_1.md.
That document specifies the reading order, the decisions to implement, the
CR-drafting-time verifications, and the drafting discipline. Follow it.

The target output is a single CR document at
phase-53-cr-discovery-to-seed-skill-v0_1.md. Mirror the structural shape of
phase-52-cr-jurisdiction-routing-v0_1.md (closest precedent: single-sub-arc,
engine-only, deferred-OBJECT_TYPE_REGISTRY pattern). Adapt to Phase 53's
specific shape: skill substrate + Phase 16 additive amendment + endpoint +
Memory event; tighter test fixtures driven by V8; explicit backward-compat
for Phase 25 and Phase 31.

The scoping note loomworks-phase-53-scoping-note-v0_2.md is authoritative
for scope; CC's Step 0 findings phase-53-step-0-findings-v0_1.md is
authoritative for the verified state of the codebase (already absorbed into
v0.2; use the findings document for exact-string verifications during drafting).

Do not draft sections for items in the handoff's §6 "scope boundaries" list —
those are Phase 54+ or out-of-Phase-53 entirely.

Halt and surface to me rather than draft-and-hope if any of the §7
halt-and-escalate signals arise.

Begin by reading the handoff in full, then the scoping note v0.2, then the
Step 0 findings. Plan the section structure before drafting prose. Confirm the
plan with me before drafting if uncertain.

The receiving chat reads this, then begins. The CR drafts iteratively across the chat as sections build up.


10. After the CR is drafted

The receiving chat hands the Operator a downloadable phase-53-cr-discovery-to-seed-skill-v0_1.md. The current chat's role ends with this handoff document (or, if compressed-analog path is taken, with both this handoff and the CR).

Operator workflow from there:

  1. Download the CR from the receiving chat.
  2. Add to project knowledge (replaces nothing; appends as new file).
  3. Open a fresh CC session on DUNIN7-M4.
  4. Paste a CC kickoff prompt referencing the CR — same shape as Phase 52's kickoff.
  5. CC archives the CR at docs/phase-crs/ per CR §3.4 (assumes the section follows Phase 52's pattern).
  6. CC runs Step 0 inspection per the CR's pre-flight items (smaller list than Phase 52's because Step 0 absorbed ten items at scoping time).
  7. CC reports findings; if naming-only divergences, CC proceeds; if architectural divergences, halt and report (same discipline as Phase 49/50/51/52).
  8. CC implements per the CR; reports build summary at completion (~2–2.5 hours per scoping v0.2 §7).
  9. Phase 53 close: tag phase-53-discovery-to-seed-skill on engine repo; Operator Layer marker tag if sub-arc 2 stays empty; no marketing repo tag.
  10. Session handoff produced; manifest v0.38 absorption next session (with lens-bounded scoping evidence cascade promotion from candidate to named principle per scoping v0.2 §10.3).

DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks Phase 53 CR Drafting Handoff — v0.1 — 2026-05-10