skills(experiment): the laboratory — per-record entry and the design-before-data walk - #1071
Merged
Merged
Conversation
leeovery
force-pushed
the
feat/experiment-skills
branch
6 times, most recently
from
September 1, 2026 15:20
6f8dcf1 to
fe82558
Compare
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ort, verdict The linear per-record walk: initialization reads the problem file and the spawning conversation on disk, the design freezes at the user-confirmed briefing, the run measures as designed with splits walked in miniature, and the verdict routes back through the bridge. The conventions lint's in-flight carve-out empties — the presence-hook requirement now binds in full. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Section-body conditionals are H4, each branch routes itself, and the abandon load carries its return footer — a sub put down mid-run resumes the measurement instead of falling off the step. The approved branch starts measuring on entry: the freeze's approve option was the go, and a later sitting re-enters through the menu. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Terminal blockers take the two-section shape (plain fence, guidance as a rendered signpost, no phase title), the no-id path renders the engine's picker beneath the register, and the handoff's Record path drops its trailing slash. The speculative $2-as-id parse leaves — no caller produces that shape. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sub walk is self-contained in the run leg — advance before the sub's measurement, verdict inline, an abandoned sub skips its remaining legs, and the parent binding is never rebound. The run's opening re-reads the record (stale-status fix) and gains the resume and terminal edges; the live-sub refusals in conclude and abandon route back to the run; the amendment protocol gets its Load edge and one exit per answer; guidelines take the corpus name; the recovery protocol re-derives the record directory and fetches the register at the announce it serves. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… lint carve-out retires Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ndonment Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The put-down loads defer to their reference's own routing — a parent's abandonment never resumes measurement; the record picker's sub-redirect carries its routing line; the split walk states its bindings honestly (the parent's hold in the file, a loaded leg binds the sub for its duration) and a sub's measurement commits name the sub. Initialisation draws the boundary at the freeze: an unfrozen record — conceived or designed — reads the spawning conversation's ground, and only an approved or running one takes the design-is-the-ground read. The design and briefing legs meet an engine refusal as what it is — the record moved beneath the session — and route to the close; the cancelled-series blocker speaks the triangle (rows stand; a new spawn starts the next experiment); the guidelines drop the triage vocabulary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
"Park" and "put down" leave the laboratory prose — both read as a resumable pause the record never offers, and park is the roadmap's word. The briefing branch keys on the gate's b/abandon, and every abandonment route says abandon. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…record resolves inside the phase Step 1 parses work_type, work_unit, topic — identical to every sibling entry; no record id travels in routing. select-record.md becomes the resolver: one live record auto-selects, several render the register and the picker (the sub-to-parent redirect and the re-ask now handle picker responses alone — a terminal or unknown pick re-asks), and a finished series meets a terminal blocker in the validate-series shape. validate-record.md folds into the resolver's tail — resolution only yields live records, so its terminal blockers were unreachable; the status routing (conceived silent, in-flight Resuming) survives as its C section. The process's Step 6 becomes the return leg's loop: next-experiment.md reads the series after a terminal transition, offers the engine-rendered next-or-menu gate while live records remain — on next it re-runs select-record.md (one home for the resolution) and loops to initialization; on menu, or over a finished series, the bridge exit runs. The bridge's positional gloss returns to the uniform three-positional statement. The resolver's auto-select one-liner joins the ratchet pins — the Auto-Select convention's line is prose-authored at every sibling site (view-plan, display-single, check-dependencies), and this entry mirrors that family rather than inventing a one-off engine surface for it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s back-out routes clean The entry's Workflow Context gains the sibling pipeline table with the laboratory bolded in its slot. select-record handles b/back — no record resolves, and each caller routes the back-out: the entry ends on a clean terminal (the menu is the way back), the return leg's next pick exits through the bridge the way m/menu does. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rded, the shapes the conventions name The picker's resolution guards the resolved id first — a sub answer resolves to its parent, and unknown or finished records re-ask alike. A terminal record entering initialization is caught before any ground is read. Conclude, abandon, and the split's sub-conclude gain the general refusal branch design already carried: nothing recorded, say why in one line, fix and re-run — no commit, no false release. The return leg opens neutral (a record ended, or moved beneath the session) and its next pick self-routes both outcomes. The run leg's embedded arrows go bare; the design leg's double-nested conditionals promote to H4; the merged-span headings take the value form; the pipeline table renders the phase's slot as the sibling entries do. The cancelled-series blockers and the engine's reactivate refusal name the reopen-first recovery. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
leeovery
force-pushed
the
feat/experiment-skills
branch
from
September 1, 2026 17:27
fe82558 to
293cdc7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR2 of the experiment-phase stack, on #1070. Built fresh against
design/experiment-phase.md(#1057); replaces the skills layer of the closed #1061.What this is
The two skills of the laboratory:
workflow-experiment-entry— internal, per-record: the epic menu routes/workflow-experiment-entry epic {wu} {topic} {E-id}; linear callers arrive without an id and pick from the register via the engine-renderedexperiment-pickmenu. Validates the series (missing/cancelled → terminal blockers) and the record (concluded/abandoned → the verdict stands; a new spawn is the reopen), then hands off. Blockers, the picker, and the resolve loop live in references — the backbone is a table of contents.workflow-experiment-process— the linear walk: guidelines + initialization (a conceived record reads the problem file and the spawning conversation's document on disk, in full — it is mid-flight and unindexed; a record in flight reads its own frozen design instead), collaborative design against the template, the briefing whose approve freezes the design (experiment approve), the mostly-autonomous run (execution shape chosen for dependable results; no custom workflow agents; harness code is instrument, living with the record), the report in scientific-method order, the one-line verdict, and the bridge back — the menu is the router.The amendment protocol governs the freeze's one escape: dated amendments re-confirmed while no results are visible; frozen for good after. Splits (
E{n}.{m}) are the run leg's internal walk — each sub designs, freezes, runs, and concludes on its own row; the parent synthesises and releases the wait once. Abandonment is first-class at every leg and terminal branches route themselves, including engine refusals (a parent conclude over live subs routes back into the split walk).No knowledge-base contact, no triage, no session loop, no off-topic machinery — the remit is the experiment; the spawning conversation owns everything else.
Supporting edits
Engine (on the PR1 layer): the
experiment-pickrender surface; menu labels take the verb + italic-tail form (Enter E1 window-placement — *Topic · experiment*); the approve option's label cut to a terse clause. Periphery: the bridge's epic-continuation gloss covers the experiment route's fourth positional; seed/brief shared references name the experiment consumer; the conventions-lint carve-out for in-flight process skills is gone — the presence-hook requirement binds in full.Two adversarial review passes (conventions incl. progressive disclosure, and routing/reachability with live-engine reproduction) ran over this layer; every verified finding is folded in.
Gates:
npm test2665/2665 ·npm run test:cligreen ·npm run test:migrationsgreen ·npm run typecheckclean.🤖 Generated with Claude Code