FE-1404: Run condition 3 as the walking skeleton - #9322
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
PR SummaryLow Risk Overview Specs and archives are consolidated: Execution direction shifts via S-007: design-convergence outputs are reclassified as test-bed material; STEERING closes that frontier and centers a vertical slice (controller read path, SDCPN plugin in code, reviewer correction, client-tool return). SPEC-LEDGER, INDEX, evidence cross-links, git-workflow, and steering protocol (proxy-completion triggers) are updated to match. Reviewed by Cursor Bugbot for commit 2815f0e. Bugbot is set up for automated code reviews on this repo. Configure here. |
Adds docs/specs/sdcpn-plugin.md: the one authored artifact for the SDCPN target, written under fixed contract headings (Purpose, Kinds, Must know, Patterns, Moves, Deliverable) over the IR spec's ten Layer-B kinds, with three machine-read tables and a domain-neutrality rule. Outcome: the plugin is per target formalism, not per domain. The domain-keyed DemandTable, cards, and activation matrix of FE-1402/1403/1404 are legible from this file as a departure from Layer B: their twenty CPS rows collapse onto kind-level rows instantiated on discovered nodes, and their five "domain" cards lift to kind-indexed patterns P01-P05. Mechanism: Layer B supplies kinds, cross-kind quantity/source-regime/ rationale attributes, and question-relative completion over a static floor; the condition-2 v0 prompt supplies the interviewing moves. Places and queues are not elicited (granularity rule); durations and rates live on activity as quantity, and dynamics is continuous evolution only. The file lives under docs/specs/ until the walking-skeleton branch creates packages/plugin-sdcpn/ with a manifest and parser; a manifest-less package directory fails the topology gate. Registered in docs/INDEX.md.
Ratify ADR-0006: a plugin is one sectioned Markdown file per target formalism with fixed headings (Purpose, Kinds, Must know, Patterns, Moves, Deliverable) and three machine-read tables, domain-neutral by rule. The SDCPN plugin file gains its second job runbook, review and revise, with harness-owned checks and stopping outcomes. Strategy entry S-007 supersedes S-005 and S-006: the design-convergence queue is closed, its outputs are test-bed material, and the frontier is the walking skeleton worked outward from four epicentres. STEERING.md is rewritten around them (E1 controller read path, E2 plugin in code, E3 targeted correction, E4 real entry) with the coatings-plant baseline named correctly. The steering protocol gains a proxy-completion trigger. Consolidation: plugin-contract.md and elicitation-completion.md are reduced to what survives (heading contract and version binding; nineteen evaluateCompletion invariants); the declarative drafts and the CPS card set move to docs/archive/specs/ with supersession banners; the kernel spec gets a supersession map; SPEC-LEDGER, INDEX, CONTEXT.md glossary, and evidence links follow. The strategy-log gate now accepts an entry that supersedes several earlier entries, and the inherited condition-3 test assertions name the errors they expect. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
FE-1497 now holds epicentre E1, so STEERING drops the no-owner gate and the exceptional-root entry, names the issue in the frontier table and work order, and counts the completion invariants as the rewritten spec does. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A branch must answer to an issue but may carry several built together; work with no issue behind it rides the branch of the issue that forced it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1eb01e8 to
a8dca9e
Compare
e437581 to
a306716
Compare
Make preregistration chronology deterministic across filesystems and move large model reply fixtures out of environment variables so Linux can spawn the test runner reliably. Co-authored-by: Cursor <cursoragent@cursor.com>

🌟 What is the purpose of this PR?
Brunch is an elicitation harness: an AI interviewer that draws a model of a cyber-physical process out of a human expert and projects it into a Petrinaut net. FE-1404 set out to run a third scored baseline interview, armed with the completion contract and interview guidance from the two branches below this one. Building the instrument for that run produced about 5,400 lines of protocol, operator prompt, seal, and scoring code, larger than the harness it was meant to evaluate, and it never ran. That size was the finding. This pull request carries both the instrument, frozen as test-bed material, and the pivot its evaluation forced: plugins are per target formalism, one sectioned Markdown file each, domain-neutral by rule (ADR-0006); the design-convergence queue is closed and the frontier is a walking skeleton worked outward from four epicentres (S-007). The SDCPN plugin file is the pivot's one durable design artifact. The condition-3 run itself happens on a later branch, after this stack merges.
🔗 Related links
libs/@hashintel/brunch-agent/docs/adr/0006-plugins-per-target-formalism.mddocs/control/STRATEGY-LOG.mdentry S-007; current frontier:docs/control/STEERING.mddocs/specs/sdcpn-plugin.md🚫 Blocked by
🔍 What does this change?
Three things land together. First, the SDCPN plugin file: one document under fixed headings (Purpose, Kinds, Must know, Patterns, Moves, Deliverable) with three tables the harness reads by machine, written over the IR specification's ten kinds and naming no industry;
Movescarries two job runbooks, construct and review-and-revise. Second, the decision and strategy records that ratify it and close the previous design queue, with the steering document rewritten around the four epicentres and a new stop rule for arcs whose only outputs are evaluation-side. Third, a consolidation of the specification suite: the declarative plugin contract and the domain-keyed completion draft are reduced to what survives and their full drafts archived with supersession banners; the CPS card set is archived with its card→pattern mapping; the kernel spec gains a supersession map; the ledger, index, glossary, and evidence links follow. The condition-3 instrument is kept frozen underevaluations/.🏗️ Agent notes
Stacked as
#9311→#9312→#9313→ #9319 → #9320 → #9321 → this branch.ln/fe-1497-controller-read-path(empty) sits above it.Commits
a381ff364fincomplete fe-1404 work — the condition-3 instrument (evaluations/protocols/process-model-elicitation/baseline/condition-3-*, rewrittenrun.ts,protocol.md;packages/core/test/architecture/condition-3-instrument.test.tsand additions tobaseline-runner.test.ts). Authored by an agent that ran out of budget; the commit carries no body, which the deposit rule counts as a defect. Its disposition is on FE-1404.d49d4b70ceAuthor the SDCPN plugin file at formalism level23065c4174Pivot Brunch to per-formalism plugins and the vertical slice7f61c721cbGive the controller read path an owner615348388eParent the two skeleton-adjacent rootse437581e38State the branch-to-issue rule as at-least-oneThe pivot commits were authored on a separate branch and folded into this one (
gt fold), because the pivot is work that resolving FE-1404 forced and has no issue of its own.Instrument disposition
Frozen, not run. The preregistration lock is stale against the tree and the runner's own
--verify-sealrejects it. Salvage for the run branch:Condition3ProjectionSchemaand the semantic validators (assertCompleteCondition3Projection,assertCondition3ProjectionSemantics, the no-progress streak), re-keyed from domain clause coordinates to kind-level node and slot identity. Drop there: the operator LLM and envelope, the seal and recovery apparatus, the 51-component result vector, and the retired design seams (typed DemandTable clauses,firesWhentable, activation matrix, objective-anchor rows). Until that branch,condition-3-instrument.test.tskeeps asserting the frozen constants; the threetoThrow()calls without messages were given the messages they expect so Oxlint passes.What ADR-0006 retires and replaces
ScopeExpr/where/inSupport→ kinds are the scope;firesWhen→ thewhencolumn ofPatterns;completionAnchor→ theobjectiverow's dependency slice; typed foldTable/demandTable/variantDimension/lossCategories → the three tables plusproject/validatein code; cards and activation matrices → kind-indexed patterns and moves. Full table in the ADR.Consolidation moves
docs/specs/plugin-contract.md451 → 146 lines;docs/specs/elicitation-completion.md339 → 120 (nineteen invariants ofevaluateCompletion(model, mustKnowRows));docs/specs/cps-interview-guidance.md→docs/archive/specs/cps-interview-guidance-2026-08-25.md; full drafts of the first two copied todocs/archive/specs/with banners (relative links re-rooted, content otherwise unchanged). Evidence documents from FE-1402/FE-1403 reclassified in INDEX as evidence, not authority.Gates
control-surfaces.test.tsnow accepts a strategy entry that supersedes several earlier entries (S-007 supersedes S-005 and S-006).baseline-runner.test.tscopies the archived guidance path into its temp fixture. Verified at the tip aftergt sync: 182/182 core tests,tsgo --noEmitclean, Oxlint 0 errors (2 inherited warnings), oxfmt clean.Linear changes made alongside (2026-08-25)
FE-1404 rewritten and retitled; FE-1406, FE-1431, FE-1393 rewritten; FE-1482 retitled and parented to FE-1476; FE-1406 parented to FE-1357; FE-1497 created; FE-1387 → Backlog; verdict comments on FE-1407/1402/1403; retired blockers FE-1407→1404, FE-1402→1404, FE-1403→1404, FE-1404→1406, FE-1406→1431 removed.
Pre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
📜 Does this require a change to the docs?
The changes in this PR:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
🐾 Next steps
ln/fe-1497-controller-read-path: fold,evaluateCompletionwith the nineteen invariants as tests, the plugin-file parser (FE-1482), sweep list and cue.🛡 What tests cover this?
packages/core/test/architecture/control-surfaces.test.ts— strategy-log fields, supersession graph, steering references.packages/core/test/architecture/docs-index.test.ts— every docs file indexed, links resolve (covers the archive moves).packages/core/test/architecture/topology.test.ts— no manifest-less package directory (why the plugin file lives underdocs/specs/for now).packages/core/test/architecture/baseline-runner.test.ts,condition-3-instrument.test.ts— the frozen instrument.❓ How to test this?
docs/specs/sdcpn-plugin.md, then ADR-0006 and S-007, thendocs/control/STEERING.md.libs/@hashintel/brunch-agent/packages/core:npx vitest run,yarn lint:tsc,yarn lint:eslint.📹 Demo
Documentation and test changes only.