Document: loomworks-create-stage-door-3-scoping-note-v0_1
Version: v0.1
Status: scoping note — precedes a CR. Re-scopes door 3 from the "heaviest net-new capability" framing in the three-door note (loomworks-create-stage-three-doors-scoping-note-v0_1) down to its true size, applying the door-2 machinery-import discipline. Grounded in the door-3 inspection (the existing upload pathway, extract_seed_fields_from_text, the reusable review patterns — engine 5ccc3d7, OL 3f2fca8).
Date: 2026-06-28
Origin: Door 3 of the create stage ("here's my specification" — for the already-documented Operator, e.g. a system designer fluent in PRDs). The three-door note scoped it as "the heaviest, newest capability — document upload, extraction, mapping-review, a marketing→product boundary, provenance threading." That framing carried the same route-external-things-through-pipelines fingerprints that bloated door 2. Re-checked through the door-2 lens — am I importing machinery, or applying the product's own methodology to "map a document to a foundation"? — door 3 collapses to a small piece. The product already has every engine part, including the document-text→five-commitments skill.
Door 3 is for the Operator who has already written their specification — a PRD, a brief, a statement of work — and just wants it mapped to the Loomworks foundation, not talked through. They upload their document, the system reads it and extracts the five commitments (what the work is, who it's for, the voice, the constraints, what success looks like), and shows the mapping for the Operator to confirm or adjust each one. They brought finished work, so they review a mapping rather than answer questions. Then it opens the create conversation for any gaps and the Operator commits the seed. The product already has the upload that reads documents and the AI logic that extracts the commitments — so this is mostly assembling existing pieces, plus one small new thing: a way to edit an extracted value before confirming it.
The door-3 grounding surfaced the deepest unification of the create stage, and it reframes everything:
extract_seed_fields_from_text(document_text: str, …) (seed_extraction_core.py:189, model claude-sonnet-4-6) is a single AI call that takes plain text and returns the structured five commitments. It is door 2's compose path AND door 3's compose path — the same skill, different text input:
extract_seed_fields_from_text → the five commitments.extract_seed_fields_from_text → the five commitments.
The three doors are three text inputs to one extraction skill. They are not three capabilities — they are three adapters to one compose path that already exists. The create stage has a spine, and the product already implements it. This also resolves door-2's open-question #3 (which established AI-logic path composes the foundation): it is extract_seed_fields_from_text. Door 2 can go to CR on this finding.
The three-door note's door-3 framing imported machinery that does not apply:
get_resolved_actor (auth + engagement membership, uploads.py:447); no anonymous path. No credits, no claim-token, no anonymous→authed crossing — the door-2 boundary machinery simply never applied to door 3. (Stated explicitly so the trap does not recur.)extract_seed_fields_from_text, which takes a string, not a file. The upload pathway's transformed_content_inline is exactly that string. A document body slots straight in, no adapter. "Extract the commitments from a document" = the existing compose path pointed at a document input, not a new subsystem.The lesson (same as door 2): we learn from work that has been done. The upload pathway, the extraction skill, the seed viewer's display, the held-card confirm — all already built, for other reasons, all reused here because they fit the intent, not contorted to fit. Door 3 imports no machinery; it applies the product's own methodology to a document input.
A signed-in Operator with a document: upload → extract the five commitments → review the mapping (confirm/adjust) → open the conversation for gaps → commit.
execute_upload → transformed_content_inline; PDF/text/OCR skills already run).extract_seed_fields_from_text (the shared compose path) maps the document text to the five commitments + gaps. Model: most appropriate for the task (the skill uses claude-sonnet-4-6 today; the CR inherits the product's model choice, does not pin one).Reused (existing, fits the intent):
uploads.py/executor.py).extract_seed_fields_from_text — the shared compose path).DraftSeedRequest/Seed).SeedViewer's Field component + the five-commitment render (incl. constraints-as-list) — the viewer we just built.MemoryRoom/WorkCard).DraftSpecification/UploadResultCard) — the review lands inline, no new overlay machinery.Genuine net-new (small):
projectId (ChatView.tsx:581-586), which create mode lacks.transformed_content → extract_seed_fields_from_text → review surface. Small orchestration.
me_create_engagement.py already calls extract_seed_fields_from_text. So a document-to-create path may already exist in some form. The CR's Step 0 MUST run down exactly what that route does before scoping any new work — or the CR will re-import what is already there, the exact trap this whole re-scoping exercise is guarding against. Ground on the existing route first; scope only the genuine gap (likely just the editable-review component + create-path upload + glue, but confirm against the real route, not this note's assumption).
Door 3 is the one door that brings a real external source (the uploaded document). Under the trust-axis = tie-to-source principle, the resultant seed's commitments could carry an outward thread to the source document. This is an enhancement, not v1 core — named for the CR to consider, deferred by default. (The upload pathway already writes UploadEventReceived with provenance, so the source event exists to thread from if wanted.)
me_create_engagement.py already does (the Step-0 imperative) — the load-bearing unknown. Door 3 may be a small completion, not a build.SeedViewer's Field to be editable, or a new sibling? Lean: extend/sibling the viewer's display so the read and edit surfaces share vocabulary.extract_seed_fields_from_text).extract_seed_fields_from_text) → the five commitments → the create conversation → the Operator-committed seed. The spine exists; the doors are adapters. This is the architecture the three-door note groped toward, now confirmed against the real code.DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — create stage door 3: document to foundation (true size) — scoping note — v0.1 — 2026-06-28 Door 3 ("here's my specification") re-scoped from "heaviest net-new capability" to its true small size: a signed-in Operator uploads a document, the existing upload pathway transforms it to text, the existing extract_seed_fields_from_text skill (door 2's compose path too) maps it to the five commitments, the Operator reviews-and-adjusts the mapping (reusing SeedViewer's display + the held-card confirm), gaps drop to the conversation, the Operator commits. Genuine net-new is one editable-review component + create-path upload re-gating + small glue. No marketing boundary, no bespoke subsystem. The big finding: all three doors are text inputs to ONE compose path — the create-stage spine already exists. Step 0 imperative: me_create_engagement.py already calls the extraction skill — door 3 may be partly built; ground the real route before scoping.