Skip to content

experiment: absorption, the docs pass, and the prose cases - #1074

Merged
leeovery merged 12 commits into
feat/experiment-integrationfrom
feat/experiment-crosscut
Sep 1, 2026
Merged

experiment: absorption, the docs pass, and the prose cases#1074
leeovery merged 12 commits into
feat/experiment-integrationfrom
feat/experiment-crosscut

Conversation

@leeovery

@leeovery leeovery commented Sep 1, 2026

Copy link
Copy Markdown
Owner

PR4 of the experiment-phase stack, on #1073 — the final slice. Built fresh against design/experiment-phase.md (#1057); replaces the cross-cutting layer of the closed #1063.

What this is

  • Absorption moves the series. Feature absorb carries phases.experiment.items.{topic} whole — records, verdicts, reasons, derived status — and renames the record directory into the epic; a live awaiting_experiments rides its holder untouched, reconcile_needed: "experiment" now travels on research mirrors too, and collisions on the series refuse like the discussion's. Experiment state joins by topic name on both sides, so a research item holding live experiment state that would land collision-suffixed refuses loudly with the recovery named — the wait must never strand. Experiments make no knowledge-store call anywhere in the transaction. The receipt names the moved series.
  • Docs. New docs/experiments.md — the lifecycle from the user's side: the offer, the laboratory model, the fresh-context control, design → freeze → autonomous run → verdict, amendments before results, splits, abandonment, the return leg, the register, and the deliberate knowledge-base absence. Plus the full pass: research-and-discussion, work-types, how-it-fits-together, knowledge-base, lifecycle-operations, and agents gain experiment coverage where shipped behaviour reaches them.
  • CLAUDE.md / README. The phase joins the Workflow Phases list and the three-D's grouping, the pipelines gain their Experiment (opt.) slot, the layout gains the record path, entry routing gains $3, presence notes the phase; README at its own granularity.
  • Prose cases. Four, per the design's test footprint: research-spawns-an-experiment (the offer and the now-exit), discussion-spawns-an-experiment-and-continues (later-exit into the wait gate), experiment-walks-to-verdict (per-record entry through design, freeze, run, verdict, release + flag), experiment-abandoned-returns-open (the re-entry surfacing an abandonment, the point back open). Worlds recipe-built, snapshots generated and byte-stable under the goldens; walks run on command, never in the gates.
  • Menu adoption. Touching a file adopts its menus: closing-gates.md's four prose menus became the variant-keyed closing-gate surface (on the integration layer), and absorb-into-epic.md's three became absorb-name-gate, absorb-confirm-gate, and absorb-continuation — wording preserved verbatim, all pinned.

Zero-residue sweep of the whole stack diff: clean — no store contact, no triage contact, no discovery routing, no cost machinery, no old-model vocabulary, no historical narration.

Gates: npm test 2681/2681 · npm run test:cli green · npm run test:migrations green · npm run typecheck clean · conventions lint 37/37.

🤖 Generated with Claude Code

@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from 438f722 to effc584 Compare September 1, 2026 01:57
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from effc584 to 6bee1e0 Compare September 1, 2026 09:04
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from 6bee1e0 to d948919 Compare September 1, 2026 09:57
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from d948919 to df287fc Compare September 1, 2026 11:07
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from df287fc to 90a9746 Compare September 1, 2026 11:38
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from 90a9746 to 416fe3a Compare September 1, 2026 13:41
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from 416fe3a to 7293497 Compare September 1, 2026 15:20
leeovery and others added 12 commits September 1, 2026 17:46
The absorb moves a feature's series whole — item, records, and the
record directory renamed under the epic topic — with any live evidence
wait riding its holder, topic-keyed beside the series so the completion
refusal and release edges keep holding after the move. A series name
collision in the epic refuses like the discussion's, and a research
item carrying live experiment state that a collision suffix would land
off the topic name refuses too — the join is by name, and a stranded
wait could never release. Experiments make no knowledge-base call; the
receipt names the moved series by its record count.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A new chapter walks the laboratory end to end from the user's side —
the offer, the problem-in/no-design-content spawn, the lock, the fresh-
context entry, design → freeze → run → report → verdict, amendments,
splits, abandonment, the return leg, and the register. The chapters the
phase now touches gain their slice: the conversations' spawn offer and
lock, the pipeline tables' slot, the epic menu's per-experiment entries
and ranking, the absorb's travelling series, the cancel courtesy, the
knowledge base's deliberate exclusion, and the agents chapter's
no-standing-workforce note. CLAUDE.md gains the phase entry, the
pipeline slots, the record-directory path, the $3 record id, and the
presence rows; the README's pipelines carry the slot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The spawn-and-return round trip from each side and the laboratory's own
walk: research spawns and takes the now-exit (create + problem with
provenance and no design content + the engine-owned lock, closing
ceremony skipped); discussion spawns, keeps talking on the later exit,
and its close attempt meets the wait gate; the per-record epic entry
walks design → freeze → run → verdict, releasing the wait and flagging
the spawner; and a put-down run's re-entry surfaces the abandonment
through the advisory's experiment branch with the point back open and
the once-blocked conclusion now passing. Worlds are recipe-built and
snap byte-identical; code-settleable claims ride the invariants.

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

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Touching absorb-into-epic.md adopts its menus: the name-confirm gate
(the default topic name with the y/back/Rename choice), the proceed
consent beneath the summary, and the post-absorption continue-as-epic
menu — the pivot continuation's sibling — become render surfaces,
wording preserved. The name gate validates its --into against the
manage detail's absorb targets; the continuation takes the deleted
feature's name as a flag. The prose carries the fetch and the verbatim
emission, and the templated-fence pin tightens with the migrated pair.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
name, routes for the join refusal, and the book keeps to the boundary

The absorb pre-check covers the series so a series-only collision is
caught at the name rather than the transaction, whose join refusal now
routes back to the name step; the summary columns re-cut so the series
row aligns. The agents chapter re-homes the laboratory sentence so the
critics keep their pronoun, the experiments chapter drops the cost
clause — the no-cost boundary binds the book — and the menu promise is
scoped to what every work type renders, in the book and CLAUDE.md
alike. The cases follow the moved prose: the blocked close now meets
the wait gate before the defer sweep (nothing written deferred), the
conclude gate's absence is pinned, the spawn-side record commits carry
their sweep in recipes, pins, and the sim, and the release advisory's
series read is pinned on the return leg.

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

book and the record, the join by landing name, and the boundary cases

The pipeline tables of all six phase entries carry the parenthesised
experiment slot; commands.md documents the cancel triangle end to end —
open records abandoned with the cancellation's reason, the spawner-side
cascade, the reactivate refusal, and the spawn that revives a cancelled
series — and CLAUDE.md's cancellation bullet and briefs line follow,
its live_sources note narrowing with the engine. The lifecycle chapter
aligns to the triangle in the book's voice. The absorb join fix replaces
the refusal with the landing: a research item carrying live experiment
state lands at the topic name — the join every release edge reads — and
a collision there refuses uniformly, the dead-recovery branch retired
from the prose. Two prose cases join the corpus: the amendment
boundary's far side (results visible — a pushed rule change lands as a
dated correction and a successor, the conclusion executing the rule as
registered) and the concluded return leg (the flagged research re-entry
binding the record's directory from the manifest read, reading the
report in full, weighing the verdict, and concluding past the released
wait); the blocked-close case pins the map gateway's absence.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The conduct texts, fixtures, and expected paths drop "park" and "put
down" for the one terminal verb; the wait-gate claim mirrors the
ceremony's deferral wording. The fixture snapshot re-pins its recipe
hash — the world itself is unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The phase entry, the agents chapter, the absorb surfaces, and the
walk-to-verdict case each carried a lone negative no sibling in the
same position carries. The KB exclusion joins the never-list where
every unindexed phase already lives; the absorb pin takes the suite's
exhaustive form, which proves the same absence and the positive list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CLAUDE.md's entry-routing section drops the experiment exception — every
entry takes the uniform three positionals — and the phase entry's menu
sentences follow: one row per topic with live records, resolution
inside the phase, and the next-or-menu loop after a record ends. The
experiments chapter, the dashboard tour, and the research-and-discussion
page say the same. The two entry-driven prose cases shed the fourth
argument: each fixture's series holds one live record, so the walks
auto-select E1, the picker stays unrendered, and the return leg takes
the bridge exit over the finished series — the next gate excluded by
invariant. The retired validate-record.md leaves the file lists; the
return leg's next-experiment.md joins them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…cs and cases follow the spawn's problem transaction

The absorb's research move loses its rename machinery: a feature's
research is single and self-named and lands at the topic name
unconditionally — the same landing the discussion and the series take —
with a collision refusing beside the discussion's and a foreign-named
item refusing loudly. The pipeline diagrams say (Experiment) singular
and the never-entered-directly clause moves out of the notation
sentence into the type paragraphs. The prose cases' spawn sequences
follow --problem (invariants re-pinned, fixture recipes reworked,
snapshots regenerated); the spawner-cancel and create wording in
CLAUDE.md, commands.md, and the lifecycle chapter follows the
per-record cascade and the crash-window-free spawn.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ase, top-level counts, and the summary the engine draws

The absorb's foreign-name guard covers discussion, research, and
experiment alike — the feature directory is deleted afterwards, so a
silently skipped item would be lost; the pre-existing discussion hole
closes with the series'. Counts speak experiments, not records: a
series E1, E1.1, E2 is two, everywhere a number appears. The
pre-confirm summary migrates to an engine surface (render
absorb-summary) — every fact the feature's own manifest, the hand-
repadded fence retired — and the flow's collision probe covers
research, its refusal branch keyed on the message tail. CLAUDE.md's
staleness bullet gains the derived-slot walk-past and the conclude
trigger, its ranking sentence softens to the design's words; the
pipeline surfaces gain the (Experiment) slot uniformly. Two prose
cases land — the amendment boundary's near side (dated entry,
re-present, explicit go; the declined change struck; no re-freeze
verb) and the series loop (picker first ask, next at the gate, the
second record auto-resolved) — and the two stale recipe hashes are
re-stamped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the feat/experiment-crosscut branch from 7293497 to b96c3dd Compare September 1, 2026 17:27
@leeovery
leeovery merged commit 95dd294 into main Sep 1, 2026
@leeovery
leeovery deleted the feat/experiment-crosscut 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