Skip to content

prose(experiment): the spawn offer, the return leg, and the graceful lock - #1073

Merged
leeovery merged 10 commits into
feat/experiment-skillsfrom
feat/experiment-integration
Sep 1, 2026
Merged

prose(experiment): the spawn offer, the return leg, and the graceful lock#1073
leeovery merged 10 commits into
feat/experiment-skillsfrom
feat/experiment-integration

Conversation

@leeovery

Copy link
Copy Markdown
Owner

PR3 of the experiment-phase stack, on #1071. Built fresh against design/experiment-phase.md (#1057); replaces the integration layer of the closed #1062.

What this is

The seam between the conversations and the laboratory:

  • The spawn offer (workflow-shared/references/experiment-spawn.md, loaded identically by research and discussion): when a number is about to bear a decision, the session offers the laboratory — conversationally, never a script, and declining keeps the inline measurement as a legitimate exploratory sighting. On yes the spawn is recorded right there: experiment create --from {phase} (id + lock), the plain-terms problem.md with its provenance line and no design content — the spawning phase is the client at the laboratory door — then the now-or-later gate (render experiment-spawn-gate). "Now" pauses the conversation mid-phase with no closing ceremony and hands the user to the menu in fresh context (/clear + /workflow-start); "later" continues with conclusion blocked. Both roads end at the menu; the laboratory is always entered fresh — nothing crosses into another phase's processing skill mid-session, and the bridge never carries a spawn.
  • The wiring: the four conversation surfaces (research epic + linear, discussion epic + linear) gain the offer as a lettered section in the register of their existing off-topic triggers. Session loops otherwise untouched; bugfix and quick-fix never see it.
  • The return leg: reconcile-advisory.md gains the experiment branch — at the spawning conversation's next entry the register renders, each newly terminal report is read in full, verdicts land as evidence the conversation weighs and can override, an abandonment surfaces its reason with the waiting point back open. Serves both flag origins (the holder released at a conclude/abandon, and a completed discussion flagged by the one-hop).
  • The graceful lock: the research and discussion conclusion flows check awaiting_experiments beside their triage checks and render experiment-wait-gate — blocker naming the open ids, guidance naming the ways out, pause/keep menu. The engine's completion refusal stays the backstop, never the UX.
  • Engine surfaces this layer owns: experiment-spawn-gate (refuses an id the item holds no wait on — the gate follows the recorded spawn) and experiment-wait-gate (refuses when nothing is owed), pinned in the render-surfaces suite and driven in the simulation.

Also: both epic-menu invokers now gloss the experiment route's fourth positional ($3 = the record id).

Gates: npm test 2670/2670 · npm run test:cli green · npm run test:migrations green · npm run typecheck clean.

🤖 Generated with Claude Code

@leeovery
leeovery force-pushed the feat/experiment-integration branch from 30706d0 to 147138c Compare September 1, 2026 09:04
@leeovery
leeovery force-pushed the feat/experiment-integration branch from 147138c to dfe87fe Compare September 1, 2026 09:56
@leeovery
leeovery force-pushed the feat/experiment-integration branch from dfe87fe to 455e2d3 Compare September 1, 2026 11:07
@leeovery
leeovery force-pushed the feat/experiment-integration branch from 455e2d3 to f742968 Compare September 1, 2026 11:38
@leeovery
leeovery force-pushed the feat/experiment-integration branch from f742968 to 40d4976 Compare September 1, 2026 13:41
@leeovery
leeovery force-pushed the feat/experiment-integration branch from 40d4976 to 8c475cf Compare September 1, 2026 15:20
leeovery and others added 10 commits September 1, 2026 17:40
…onversation's two pauses

The now-or-later choice right after a spawn (experiment-spawn-gate,
addressed to the spawning item, refused for an id it holds no wait on)
and the blocked-conclusion gate (experiment-wait-gate: blocker naming
the open ids, guidance naming the ways out, pause/keep menu — the
graceful face of the engine's completion refusal). Pinned in the
render-surfaces suite; the simulation audits both at their prescribed
moments.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…the now-or-later exit

One shared reference carries the flow: the conversational offer (a
number about to bear a decision — declining keeps the sighting in the
session, labelled exploratory), the spawn recorded while the
conversation still holds the knowledge (create, the plain-terms problem
file with its provenance line, the waiting point noted in the session's
own document, both cadence commits), then the engine-rendered
now-or-later gate. Now pauses the session with the menu one step away —
the laboratory starts in fresh context; later returns to the loop with
conclusion blocked. Wired into all four session surfaces in the
off-topic trigger's register.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…he blocked conclusion

The reconcile advisory gains its experiment branch: the register
rendered, each newly terminal record's report read in full, verdicts
presented as evidence the conversation weighs and can override, an
abandonment surfacing its reason with the waiting point back open. The
research and discussion conclude flows check the evidence waits before
the ceremony and meet a live wait with the wait gate — pause to the
menu or keep talking — so the engine refusal stays the backstop, never
the UX. The epic route gloss covers the record id where the stored
route is invoked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ate surface

Touching closing-gates.md adopts its menus: the re-review offer, the
mandatory review gate's two faces, and the wrap-up consent become one
variant-keyed surface, wording preserved — the final-review variant
carries the classification's quoted reason as --reason. Distinct from
conclude-gate on purpose: that surface is the completion consent the
same close reaches later, and the two stops coexist in one conclusion.
The prose now carries the fetch and the verbatim emission; the ratchet
pin retires with the last templated fence.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…release

advisory binds and covers cancel, the wait gate outruns the defer sweep

The spawn's record commit takes --sweep: the experiment topic is the
laboratory's slot, never the spawner's to claim. The research loop gains
the laboratory cue its discussion sibling already carried. The release
advisory reads the series off the manifest to bind each record's
directory, reads every terminal report in full, and now covers the
cancel release — nothing measured, the waiting point back open — with a
callout worded for every release. The discussion's evidence-wait check
moves ahead of the defer sweep, into the concluding ceremony's head, so
a point blocked pending evidence is never written deferred on the way
to a close that cannot pass; the refusal keeps one home. And the menu
promise is scoped to what every work type renders — the menu carries
the way in, with per-record rows the epic dashboard's own.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…es align

The epic menu's cancel flow meets every refusal the engine now raises:
one broadened cascade branch fetches the gate — which derives whichever
apply: collapsing specs, a series cancel's wait release, or a waiting
conversation's stranded experiments — and the receipt says where the
ball sits when waits released or records closed; the section's absolute
claims scope per phase. The release advisory speaks the triangle — a
cancel abandons open records with its reason on each row, and a new
spawn revives even a cancelled series. The wait gate's guidance is one
sentence true for every work type. The concluding ceremony's map stage
becomes its own section so the empty wait branch routes explicitly, and
the bridge continuations' pipeline lines carry the experiment slot,
the epic plan template glossing the record id its experiment routes add.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Park is the roadmap's word for set-aside-retrievable — the closing
ceremony's evidence gate says deferred, the state it actually guards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… three arguments

The bridge's plan template drops its experiment id branch and the
continue-epic route gloss its record-id clause — routes are phase-blind
three-positional invocations everywhere, and the record resolves inside
the phase.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ate; the spawner-cancel gate speaks per-record

experiment-spawn.md follows the crash-window-free shape — the problem
statement goes to the session's cache scratch and the create installs it,
so the separate write step and its window disappear. The spawn-side
cancel-cascade statement derives from the item's own waits: those records
end abandoned, this conversation's waiting points close, a sibling
conversation's experiments are named untouched. The two pause exits show
their cadence-commit fence like every other commit site.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, top-level evidence, and the entry note that claims

A refused create gets its branch: nothing recorded — no id, no lock,
the scratch survives — say why in one line and return to the session
loop; the note and both commits run only on success. The release
advisory reads top-level rows alone (a parent's verdict synthesises
its subs, so sub reports are the parent's business) and its path
template always resolves. The picker's resolved record announces
through the claiming note on every path — Starting for a conceived
record, Resuming in flight — and the auto-select line folds into it,
one line per entry, the slot claimed as it speaks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the feat/experiment-integration branch from 8c475cf to 13232f9 Compare September 1, 2026 17:27
@leeovery
leeovery merged commit 775db74 into main Sep 1, 2026
@leeovery
leeovery deleted the feat/experiment-integration branch September 1, 2026 17:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant