DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-seed-editor-v0_1.md

Change Request — Conversational seed editor (revise via considerations) — v0.1

Document: cr-seed-editor-v0_1 Version: v0.1 Date: 2026-06-28 Type: Phase change request — engine + Operator Layer. This is the first piece of the seed-surface work that is a new capability (a new classifier intent + a conversational driver), not surfacing-what-exists. The substrate (versioning, corrections-preserved, revise_seed) is built; the intent, driver, and surface are new. Consumer: Claude Code (executor). Branch base: engine main @ 5ccc3d7; OL feat-companion-surface @ 86663aa (the seed-viewer is landed and verified; the editor extends it). Governing scoping note: loomworks-seed-viewer-scoping-note-v0_1 (the editor was named there as the next piece after the viewer) + this session's seed-editor decisions. Grounding: loomworks-seed-model-grounding-inspection-v0_1 + the seed-editor CR-drafting grounding pass (the revise_seed/considerations path, the classifier idiom, the authority gate, the viewer's SeedPayload baseline — engine @ 5ccc3d7, OL @ 86663aa).


Plain-language summary

You can see your engagement's seed now (the viewer). This lets you change it — by telling the Companion in plain words. You say "make the voice warmer and less clinical," the Companion proposes the revised wording, and you approve it in the conversation. The change becomes a new version of the seed; the old version is kept (the seed never overwrites — every version is preserved). Nothing changes until you approve. This first version edits the five core commitments (what the work is, who it's for, the voice, the constraints, the success conditions); editing contributors, agents, or extra assertions comes later.


What's true today (grounded)

The revision substrate is fully built — and reachable only through the considerations machinery:

The viewer gives a partial baseline (this bounds v1):


Seed alignment

On the seed's spine. The seed is the engagement's foundation document; revising it is an Operator-authority, corrections-preserved act — both of which the substrate already enforces (the human-close gate; the automatic version-bump-and-retain). This CR adds the conversational way in to a capability the seed's own discipline already governs. The approve-in-conversation flow mirrors the add-side held→commit pattern (propose → human approves → commit) — the same human-approval shape applied to the seed. Nothing is revised without the human; nothing is overwritten.


The flow (decided — approve-in-conversation)

The decided shape (this session): the Companion proposes the revision conversationally; the Operator approves in the conversation; that approval is the human closing_party that closes the consideration with terminal_state="amend". Then the viewer re-fetches and shows the new version.

This mirrors the add-side held→commit gate and the create conversation — voice-first, the approval shape the Operator already knows. The alternative (approve-on-the-viewer, a document-diff approval surface) was set aside for consistency with the conversational, held→commit posture.

The turn-by-turn flow:

  1. Trigger. The Operator says something like "make the voice warmer" / "change who this is for" / "add a constraint" — OR clicks the "revise" affordance on the viewer, which seeds a revise conversation. Either way the revise_seed intent classifies.
  2. Propose. The Companion, given the current seed (the viewer's SeedPayload baseline) and the requested change, composes the proposed AmendedSeedFields — the changed field(s) + a drafted amendment_rationale — and presents the proposal in the conversation (shows the proposed new wording, names which field, states the rationale). It does NOT yet write anything. (Analogous to a held draft — proposed, not committed.)
  3. Approve. The Operator approves in the conversation (a confirm turn / affordance). This is the human-gated moment. On approval, the driver runs the full considerations sequence — open (pinning the seed) → close(amend, the proposed fields, the human as closing_party, the induction agent + runner). The gate (_close_seed_amend Gate 2) enforces the human + contributor-membership requirement; the driver inherits it.
  4. Confirm + re-render. On a successful close, revise_seed has version-bumped and preserved the prior version. The Companion confirms ("the voice is updated — version N"), and the viewer re-fetches to show the new version.

On rejection / refinement: if the Operator says "no, warmer than that" before approving, the proposal is re-composed (no consideration opened/closed yet — nothing written). Only approval opens-and-closes. (Mirrors the held-card refine-before-commit.)


Decisions (settled, grounded)

  1. Conversational-first, approve-in-conversation (decided). Companion proposes, human approves in chat, the approval closes the consideration.
  2. Fork A — wrap the considerations machinery, do not bypass it. The driver orchestrates open→[advance]→close; it does not lift the 409 (which is on creation, not revision) and does not reach revise_seed directly (there's no thin entrypoint, and bypassing would skip the authority gate and the version-bump provenance).
  3. The authority gate is inherited, not rebuilt. The human close enforces it. The driver must perform the close with a human closing_party in the seed's initial_contributors. (Implication: the Operator must be a listed contributor on the seed — confirm at Step 0 that the Operator creating/owning an engagement is in initial_contributors; if an owner could be absent from that list, that's a gap to surface, not work around.)
  4. v1 scopes the five commitment fieldswhat_the_work_is, who_consumes_the_work, voice_of_the_work, constraints (list), success_conditions. No new fetch needed (the viewer's SeedPayload provides them). Editing initial_contributors/initial_agents/additional_assertions is deferred (needs an extended payload; named, not built).
  5. amendment_rationale is collected in the flow — required by the substrate; the Companion drafts it from the Operator's stated reason ("warmer, less clinical" → rationale), shown in the proposal. If the Operator's request carries no clear reason, the Companion asks. Not optional.
  6. constraints is a list — the editor handles add/remove/edit of list items, not a single text blob.

Scope boundary — what this does NOT do


The build — steps

Per-step commits, suite green at each, halt-before-push. Engine + OL.

Step 0 — inspect before building (no code) — heaviest Step 0 of the arc

Confirm against engine 5ccc3d7 / OL 86663aa:

  1. The owner-in-initial_contributors question (Decision 3 implication). Confirm that the Operator who owns/created an engagement IS in the seed's initial_contributors — because the close gate requires the closer be a listed contributor. Trace a real engagement (e.g. Goosey/E0007): is Marvin in E0007's seed initial_contributors? If an owner can be absent from that list, the editor would refuse a legitimate owner's revision — surface this as a finding before building, do not work around it.
  2. The induction agent + runner the close requires. close_consideration(terminal_state="amend", …) needs _induction_agent + _agent_runner. Where do these come from on a normal request path — are they already constructed somewhere the driver can obtain them, or does the driver assemble them? Show the real source (how does any existing seed-amend close get them today, if any path exercises it).
  3. The four-part intent idiom, traced live against ask_about_past_input (read-class) AND create_engagement_ (commit/proposer-class, the closer analog): the enum entry + gloss, the _route_ handler shape, the route_intent dispatch branch, the instruction template. The seed editor is a proposer-then-human-close flow — closer to create_engagement_* (which proposes then commits) than to the read-only recall. Confirm which template to mirror.
  4. How a multi-turn propose→approve flow is held across turns. The add-side held→commit holds a proposed state between turns (the held card). Does an analogous "proposed but not yet approved" carrier exist the seed-revise proposal can reuse, or does the proposal live in conversation state until approval? (The proposal must survive from the propose turn to the approve turn without writing anything.) Show the add-side held mechanism as the reference.
  5. The viewer attach pointSeedViewer.tsx:75 action row; how the "revise" affordance seeds a revise conversation (does it send a converse turn with an intent hint, like the create page's intent_hint? — ChatView create-mode is the reference).

Report findings — especially Step 0.1, which could be a blocking finding — then build.

Step 1 — Engine: the revise_seed intent + handler (propose side)

Suite expectation: the intent classifies ("make the voice warmer" → revise_seed, not request_revision or general_conversation); the handler composes a proposed AmendedSeedFields with a rationale; nothing is written (no consideration opened). Tests for classify + propose-without-write.

Step 2 — Engine: the approve→close orchestration (write side)

Suite expectation: approval opens-and-closes the consideration, revise_seed bumps the version and records wasRevisionOf, the prior version is retained (assert both versions exist), the authority gate refuses an agent/non-contributor closer (assert SeedAmendmentAuthorisationError), and a pre-approval refine does NOT write. End-to-end test against a real engagement seed in the DB (the standing lesson — not a green suite alone; prove the version actually bumped and the prior survived).

Step 3 — OL: the viewer "revise" affordance + conversational confirm

Suite expectation: the revise affordance renders on the loaded viewer; clicking it opens the revise flow; an approved revision re-renders the viewer at the new version. Component/surface tests.


Acceptance

What this sets up / depends on (named)


DUNIN7 — Done In Seven LLC — Miami, Florida Change Request — Conversational seed editor (revise via considerations) — v0.1 — 2026-06-28 Adds a revise_seed intent + a conversational driver that proposes AmendedSeedFields (incl. the required rationale), and on the Operator's in-conversation approval orchestrates the considerations open→close that version-bumps the seed and preserves the prior version. The authority gate (human + contributor-membership) is inherited from the considerations close, not rebuilt. v1 edits the five commitment fields; the viewer's affordance seeds the flow. Engine 5ccc3d7 + OL 86663aa. Step 0.1 (owner-in-initial_contributors) is a potential blocking finding to confirm first.