FE-1406: Audit the harness-teaching lineage and propose the fixed-key plugin contract (ADR-0007) - #9327
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
3d0a574 to
9ae74f7
Compare
277cae7 to
000d346
Compare
PR SummaryLow Risk Overview ADR-0007 amends ADR-0006 decisions 2 and 5: plugins stop being one Markdown file concatenated wholesale; contract tables become schema-validated data ( Control and glossary follow acceptance: S-008 / S-009 in No runtime or package code in this diff—implementation is scoped to FE-1406, FE-1431, and FE-1393 per the ADR. Reviewed by Cursor Bugbot for commit cb078a1. Bugbot is set up for automated code reviews on this repo. Configure here. |
88a3f37 to
405d669
Compare
38db847 to
30e5dd7
Compare
30e5dd7 to
516a863
Compare
405d669 to
44fb37e
Compare
516a863 to
a7e0d47
Compare
44fb37e to
76c8d9f
Compare
The question of who teaches the interviewer how to interview — as distinct from what to notice in a formalism — has been written down fifteen times since 2026-08-06 under eight vocabularies and assigned to five layers, and kernel §11.5's rule that "guidance ownership follows vocabulary ownership" was affirmed at every station and designed at none. The audit (docs/evidence/proofs/audits/harness-teaching-lineage-audit.md) records each form, the words it used, the layer it chose, and its fate, from three full-read sweeps of the corpus plus the Linear record; its findings are that the moves were never enumerated in canon, that the SDCPN construct runbook is mostly harness craft filed in a plugin, and that sequence and selection were always both present and never separated. ADR-0007 (status: proposed, awaiting ratification) pulls the layers into one structure: the plugin splits by nature into schema-validated contract data, a per-job runbook under eight fixed harness-owned move headings, and a harness repertoire of defaults rendered before plugin cells. Headings are typed procedure / repertoire / anchor, which is Principle v2 applied heading by heading; the repertoire headings are where the interviewer selects against the posture kickoff produces. It amends ADR-0006 decisions 2 and 5, preserves ADR-0002 N2, Layer B's derived ordering, and completion rule 15, and restores FE-1406 to its original question. Both documents have INDEX rows; the docs-index and control-surface gates pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ADR-0007 v2: every plugin key follows one principle (the harness defines and teaches the concept and its default; the plugin specialises in harness terms; the rendered text interleaves key, default, cell). Sixteen fixed keys in four groups replace the eight move headings of v1; the repertoire becomes packages/repertoire. S-008 records the decision to build the layer as topology and STEERING gains the fifth epicentre, the authoring lane, the ratification gate, and the anti-rescope trigger. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lu accepted the record with one caveat: fixing the key catalogue now would repeat the failure the record corrects. Decision 9 makes the set a working one that two plugins converge on in co-authoring cycles; S-009 records the method and STEERING's authoring lane becomes that cycle. The glossary, SPEC-LEDGER, and ADR-0006 carry the amendments acceptance triggers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
76c8d9f to
cb078a1
Compare
a7e0d47 to
0cc223e
Compare

🌟 What is the purpose of this PR?
Brunch has always had a clear answer for what to notice in an interview — that is the plugin's job, keyed to the kinds of its target formalism. It has never had a settled answer for how to interview: how to open, when to walk one case and when to sweep, how to probe, how to vary with the expert's appetite, where not to dig, how to close. Kernel §11.5 has said since 2026-08-11 that this craft is harness-owned ("guidance ownership follows vocabulary ownership"), and every design station since then has affirmed it and rescoped it down. This pull request does two things about that: it audits every form the idea took, and it proposes ADR-0007, which fixes the plugin authoring surface as a set of harness-owned keys so that the teaching layer has a home a test fails on when it is missing. It also records the strategy (S-008) and reconciles STEERING, so the frontier shows the authoring lane that builds it.
Draft: documentation only, no code. Opened for Lu's ratification of the ADR; the Linear edits it implies wait on that.
🔗 Related links
libs/@hashintel/brunch-agent/docs/adr/0007-harness-teaching-meets-plugin-content-at-fixed-keys.mdlibs/@hashintel/brunch-agent/docs/evidence/proofs/audits/harness-teaching-lineage-audit.mddocs/archive/planning-inputs/penciled-directions-2026-08-14.mddocs/control/STRATEGY-LOG.mdS-008; frontier:docs/control/STEERING.md(E5)docs/adr/0006-plugins-per-target-formalism.mddecisions 2 and 5🚫 Blocked by
Nothing in code. Stacks on
main; independent of the FE-1404 / FE-1497 stack, which it describes but does not touch.🔍 What does this change?
The audit (
docs/evidence/proofs/audits/harness-teaching-lineage-audit.md) — fifteen dated restatements of the idea from 2026-08-06 to 2026-08-25, the vocabulary each used (lenses, kernel cards, strategy quiver, motions, movements, moves, repertoire…), the layer each assigned it to, what moves it enumerated, and what became of it. Eight findings that never found a home, among them: the split rule was named in canon and designed nowhere; sequence and selection were never separated;rabbit_holes(anti-guidance) was named once and lost; the SDCPNconstructrunbook is mostly harness craft. A strain appendix lists the places the current design pulls against itself.ADR-0007 (proposed) — eight decisions:
ontology,schema,patterns— machine-matchable only), guidance typed by mechanism (lenses,techniques,movementswithslice/sweep,licenses,motifs,smells,rabbit_holes,failure_modes), per-job runbooks (kickoff,trajectory,close), machinery (checks,tools).constructandreview and reviseare harness vocabulary.techniques, P09/P11 becomemovements.sweep; their pattern ids retire.packages/repertoiredepends only on core and is rendered by bindings; plugins never import it. A plugin isplugin.yamlvalidated by a JSON schema in core plussrc/. Gates: unknown key rejected; repertoire fills every guidance and runbook key; a plugin may leave cells blank and may add no key.Control surfaces — S-008 appended (complements S-007; the slice forced the layer, so it is built as code and gates with each layer's intent documented, not as spec). STEERING gains epicentre E5 (the teaching layer), the authoring lane FE-1431 → FE-1406 → FE-1393 running alongside the skeleton run, an ADR-0007 ratification gate owned by Lu, a new belief row, a sequencing cut, and a stop/replan trigger against rescoping the repertoire without run evidence. The "controller read path is small" belief's open probe (is the 378-line parser an argument for data?) is answered yes.
🏗️ Agent notes
Commits
80b8d8dad9Audit the harness-teaching lineage and propose ADR-0007 (v1: eight move headings)376e17da48Fix the harness-teaching layer as keys and steer toward building it (v2: sixteen keys in four groups; S-008; STEERING)Why v2 replaced v1
v1 proposed eight fixed move headings inside the runbook. Lu's re-reading of the 2026-08-14 penciled directions showed the richer key set was already stated there, that most of its keys are job-independent (so they do not belong inside a runbook), and that every key follows the same principle — formalism-specific direction in harness-defined concepts. v2 keeps the two dimensions v1 found (sequence in the runbook keys, selection in the guidance keys) and puts them under one rule.
What waits on ratification
CONTEXT.md(Plugin by keys; Runbook = the three runbook keys; new Repertoire, Key, Mechanism type, Posture; ElicitationPack retired) and SPEC-LEDGER §11.5 → designed.plugin.yaml, SDCPN migration.Gates
packages/corearchitecture tests 119/119 (docs-index, control-surfaces, topology, Flue placement); lefthook pre-commit (oxfmt, markdownlint) passed on both commits. Brunch Markdown is excluded from oxfmt by design.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:
proposed; until accepted, FE-1406/FE-1431/FE-1393 keep their S-007 scope in Linear and the glossary still describes the six-heading plugin file.🐾 Next steps
🛡 What tests cover this?
packages/core/test/architecture/docs-index.test.ts— every document indexed, every link resolves (covers the ADR rename).packages/core/test/architecture/control-surfaces.test.ts— S-008 parses with all required fields;Supersedesresolves; STEERING remains the single mutable control.❓ How to test this?
Read the ADR, then the audit's "What never found a home" section against it: every finding there should map to a key or a decision.
📹 Demo
None; documentation only.