Skip to content

FE-1404: Run condition 3 as the walking skeleton - #9322

Open
lunelson wants to merge 7 commits into
ln/fe-1403-test-cps-guidancefrom
ln/fe-1404-run-condition-3
Open

FE-1404: Run condition 3 as the walking skeleton#9322
lunelson wants to merge 7 commits into
ln/fe-1403-test-cps-guidancefrom
ln/fe-1404-run-condition-3

Conversation

@lunelson

@lunelson lunelson commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

🌟 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

  • FE-1404: Run condition 3 as the walking skeleton (internal)
  • Parent in this stack: FE-1403 / #9321
  • Decision: libs/@hashintel/brunch-agent/docs/adr/0006-plugins-per-target-formalism.md
  • Strategy: docs/control/STRATEGY-LOG.md entry S-007; current frontier: docs/control/STEERING.md
  • Plugin file: docs/specs/sdcpn-plugin.md
  • Epicentre issues: FE-1497 controller read path, FE-1482 plugin walking skeleton, FE-1479 targeted correction, FE-1438 client-tool return (all internal)

🚫 Blocked by

  • FE-1403 / #9321 (stack parent). The three branches below carry the drafts this branch archives, so the stack merges in order.

🔍 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; Moves carries 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 under evaluations/.

🏗️ Agent notes

Stacked as #9311#9312#9313#9319#9320#9321this branch. ln/fe-1497-controller-read-path (empty) sits above it.

Commits

  • a381ff364f incomplete fe-1404 work — the condition-3 instrument (evaluations/protocols/process-model-elicitation/baseline/condition-3-*, rewritten run.ts, protocol.md; packages/core/test/architecture/condition-3-instrument.test.ts and additions to baseline-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.
  • d49d4b70ce Author the SDCPN plugin file at formalism level
  • 23065c4174 Pivot Brunch to per-formalism plugins and the vertical slice
  • 7f61c721cb Give the controller read path an owner
  • 615348388e Parent the two skeleton-adjacent roots
  • e437581e38 State the branch-to-issue rule as at-least-one

The 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-seal rejects it. Salvage for the run branch: Condition3ProjectionSchema and 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, firesWhen table, activation matrix, objective-anchor rows). Until that branch, condition-3-instrument.test.ts keeps asserting the frozen constants; the three toThrow() 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 → the when column of Patterns; completionAnchor → the objective row's dependency slice; typed foldTable/demandTable/variantDimension/lossCategories → the three tables plus project/validate in code; cards and activation matrices → kind-indexed patterns and moves. Full table in the ADR.

Consolidation moves

docs/specs/plugin-contract.md 451 → 146 lines; docs/specs/elicitation-completion.md 339 → 120 (nineteen invariants of evaluateCompletion(model, mustKnowRows)); docs/specs/cps-interview-guidance.mddocs/archive/specs/cps-interview-guidance-2026-08-25.md; full drafts of the first two copied to docs/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.ts now accepts a strategy entry that supersedes several earlier entries (S-007 supersedes S-005 and S-006). baseline-runner.test.ts copies the archived guidance path into its temp fixture. Verified at the tip after gt sync: 182/182 core tests, tsgo --noEmit clean, 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 not modify any publishable blocks or libraries, or modifications do not need publishing

📜 Does this require a change to the docs?

The changes in this PR:

  • require changes to docs which are made as part of this PR

🕸️ Does this require a change to the Turbo Graph?

The changes in this PR:

  • do not affect the execution graph

⚠️ Known issues

  • The condition-3 instrument merges frozen and unrun; its test file asserts constants of a retired design and is deleted by the run branch after salvage.
  • The instrument commit has no message body.
  • The truck-fleet dossier promised by FE-1382 is absent from the repository; Proof 1's generality half uses a fixture derived from the inbox truck SDCPN (gate recorded in STEERING).

🐾 Next steps

  • ln/fe-1497-controller-read-path: fold, evaluateCompletion with the nineteen invariants as tests, the plugin-file parser (FE-1482), sweep list and cue.
  • FE-1404's run on a fresh branch after this stack merges.

🛡 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 under docs/specs/ for now).
  • packages/core/test/architecture/baseline-runner.test.ts, condition-3-instrument.test.ts — the frozen instrument.

❓ How to test this?

  1. Checkout the branch.
  2. Read docs/specs/sdcpn-plugin.md, then ADR-0006 and S-007, then docs/control/STEERING.md.
  3. In libs/@hashintel/brunch-agent/packages/core: npx vitest run, yarn lint:tsc, yarn lint:eslint.

📹 Demo

Documentation and test changes only.

@vercel

vercel Bot commented Aug 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hash Ready Ready Preview Aug 25, 2026 1:03pm
petrinaut Ready Ready Preview Aug 25, 2026 1:03pm
petrinaut-docs Ready Ready Preview Aug 25, 2026 1:03pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hashdotdesign-tokens Ignored Ignored Preview Aug 25, 2026 1:03pm

@lunelson lunelson changed the title incomplete fe-1404 work FE-1404: Run condition 3 as the walking skeleton Aug 25, 2026
@lunelson
lunelson marked this pull request as ready for review August 25, 2026 12:13
@cursor

cursor Bot commented Aug 25, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Documentation, ADRs, and control-plane steering only—no production harness or runtime behavior changes in this diff.

Overview
This PR records the FE-1404 pivot: plugins are one sectioned Markdown file per target formalism (not per domain), with fixed headings and three machine-read tables (Kinds, Must know, Patterns), plus project/validate in code. ADR-0006 accepts that shape, retires the declarative contract (ScopeExpr, firesWhen, typed demand tables, kernel cards), and points at sdcpn-plugin.md as the normative exemplar.

Specs and archives are consolidated: plugin-contract.md and elicitation-completion.md are rewritten around the file format and nineteen evaluateCompletion invariants; full pre-pivot drafts and CPS interview guidance move under docs/archive/specs/ with supersession banners. The kernel spec gains a supersession map; CONTEXT.md splits domain vs target formalism and adds glossary terms (patterns, demand rows, runbooks).

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.

lunelson and others added 6 commits August 25, 2026 14:51
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>
FE-1482 (plugin walking skeleton) now sits under FE-1476 and FE-1406
(pattern lift) under FE-1357, so both leave the exceptional-roots list.

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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/infra Relates to version control, CI, CD or IaC (area) area/libs Relates to first-party libraries/crates/packages (area) area/tests New or updated tests type/eng > frontend Owned by the @frontend team

Development

Successfully merging this pull request may close these issues.

1 participant