Skip to content

FE-1406: Audit the harness-teaching lineage and propose the fixed-key plugin contract (ADR-0007) - #9327

Open
lunelson wants to merge 3 commits into
ln/fe-1497-controller-read-pathfrom
ln/fe-1406-harness-teaching-adr
Open

FE-1406: Audit the harness-teaching lineage and propose the fixed-key plugin contract (ADR-0007)#9327
lunelson wants to merge 3 commits into
ln/fe-1497-controller-read-pathfrom
ln/fe-1406-harness-teaching-adr

Conversation

@lunelson

@lunelson lunelson commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

🌟 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

  • FE-1406: Build the harness repertoire (internal; owning issue)
  • FE-1431, FE-1393 (internal; the other two issues the ADR resizes)
  • Decision: libs/@hashintel/brunch-agent/docs/adr/0007-harness-teaching-meets-plugin-content-at-fixed-keys.md
  • Evidence: libs/@hashintel/brunch-agent/docs/evidence/proofs/audits/harness-teaching-lineage-audit.md
  • Source of the key set: docs/archive/planning-inputs/penciled-directions-2026-08-14.md
  • Strategy: docs/control/STRATEGY-LOG.md S-008; frontier: docs/control/STEERING.md (E5)
  • Amends: docs/adr/0006-plugins-per-target-formalism.md decisions 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 SDCPN construct runbook is mostly harness craft. A strain appendix lists the places the current design pulls against itself.

ADR-0007 (proposed) — eight decisions:

  1. One principle for every key: the harness defines and teaches the concept and ships its default; the plugin specialises it in the harness's terms; the rendered instruction text interleaves them, key → harness default → plugin cell. Cells add, never override. Adding a key is an amendment; a plugin that needs one fails the generality test.
  2. Sixteen fixed keys in four groups: contract data (ontology, schema, patterns — machine-matchable only), guidance typed by mechanism (lenses, techniques, movements with slice/sweep, licenses, motifs, smells, rabbit_holes, failure_modes), per-job runbooks (kickoff, trajectory, close), machinery (checks, tools).
  3. Words: mechanism types license / technique / attention / anchor; repertoire for the harness's own filling of the keys; selection vs sequence; posture is produced by kickoff and never stored.
  4. The jobs construct and review and revise are harness vocabulary.
  5. The surface never selects; the agent does.
  6. Conversational triggers are guidance, not patterns: SDCPN P06/P10/P12 become techniques, P09/P11 become movements.sweep; their pattern ids retire.
  7. Admission by evidence — the first repertoire text comes from FM-12/14/15, the v0 prompt's seven headings, GEN-Q02's batching license, and the lifted rows; nothing because it sounds right.
  8. Topology: packages/repertoire depends only on core and is rendered by bindings; plugins never import it. A plugin is plugin.yaml validated by a JSON schema in core plus src/. 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-1431FE-1406FE-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

  • 80b8d8dad9 Audit the harness-teaching lineage and propose ADR-0007 (v1: eight move headings)
  • 376e17da48 Fix 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

  • Linear edits to FE-1406, FE-1431, FE-1393 (drafted; not written — Linear writes need explicit approval).
  • Glossary changes in CONTEXT.md (Plugin by keys; Runbook = the three runbook keys; new Repertoire, Key, Mechanism type, Posture; ElicitationPack retired) and SPEC-LEDGER §11.5 → designed.
  • Then FE-1431 starts: the schema and key reader in core, plugin.yaml, SDCPN migration.

Gates

packages/core architecture 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 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

  • ADR-0007 is 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.
  • The ADR amends ADR-0006 decisions 2 and 5 but does not edit ADR-0006 itself; that cross-reference lands with acceptance.

🐾 Next steps

  • Lu ratifies, amends, or rejects ADR-0007.
  • On acceptance: Linear edits, glossary and SPEC-LEDGER amendments, then FE-1431.

🛡 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; Supersedes resolves; 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.

@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 26, 2026 3:47pm
petrinaut Ready Ready Preview Aug 26, 2026 3:47pm
petrinaut-docs Ready Ready Preview Aug 26, 2026 3:47pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hashdotdesign-tokens Ignored Ignored Preview Aug 26, 2026 3:47pm

Request Review

@github-actions github-actions Bot added area/infra Relates to version control, CI, CD or IaC (area) area/libs Relates to first-party libraries/crates/packages (area) type/eng > frontend Owned by the @frontend team labels Aug 25, 2026
@lunelson lunelson changed the title FE-1406: Audit the harness-teaching lineage and propose the move-heading contract FE-1406: Audit the harness-teaching lineage and propose the fixed-key plugin contract (ADR-0007) Aug 25, 2026
@lunelson
lunelson force-pushed the ln/fe-1497-controller-read-path branch from 3d0a574 to 9ae74f7 Compare August 26, 2026 08:30
@lunelson
lunelson force-pushed the ln/fe-1406-harness-teaching-adr branch from 277cae7 to 000d346 Compare August 26, 2026 08:30
@cursor

cursor Bot commented Aug 26, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Documentation and governance only: accepted ADR, glossary, steering, and ledger updates with no production code, auth, or data-path changes.

Overview
This PR documents how harness-owned interviewing craft gets a real home after years of §11.5 “pending” prose: a lineage audit traces fifteen restatements (2026-08-06→08-25), and ADR-0007 is accepted as the design.

ADR-0007 amends ADR-0006 decisions 2 and 5: plugins stop being one Markdown file concatenated wholesale; contract tables become schema-validated data (ontology, schema, patterns), and prose becomes cells under fixed harness-owned keys rendered as key → harness default → plugin cell (cells add, never override). Sixteen keys in four groups cover guidance (lenses, techniques, movements, …), per-job runbooks (kickoff, trajectory, close), and machinery (checks, tools). The generic strategy quiver is named the repertoire in planned packages/repertoire; conversational pattern rows (e.g. P06/P10/P12) move to guidance keys. Decision 9 keeps the key catalogue a working set until co-authoring plugin-sdcpn, plugin-gherkin, and repertoire in cycles stabilizes it.

Control and glossary follow acceptance: S-008 / S-009 in STRATEGY-LOG, E5 authoring lane in STEERING, SPEC-LEDGER §11.5 → designed and §11.2 pack form → designed, ADR-0006 cross-reference, INDEX entries, and CONTEXT.md redefines Plugin/Runbook/Pattern and adds Key, Repertoire, Posture, Mechanism type.

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.

@lunelson
lunelson force-pushed the ln/fe-1406-harness-teaching-adr branch from 88a3f37 to 405d669 Compare August 26, 2026 09:13
@lunelson
lunelson force-pushed the ln/fe-1497-controller-read-path branch from 38db847 to 30e5dd7 Compare August 26, 2026 09:13
@lunelson
lunelson force-pushed the ln/fe-1497-controller-read-path branch from 30e5dd7 to 516a863 Compare August 26, 2026 10:42
@lunelson
lunelson force-pushed the ln/fe-1406-harness-teaching-adr branch from 405d669 to 44fb37e Compare August 26, 2026 10:42
@lunelson
lunelson changed the base branch from ln/fe-1497-controller-read-path to graphite-base/9327 August 26, 2026 13:43
@lunelson
lunelson force-pushed the graphite-base/9327 branch from 516a863 to a7e0d47 Compare August 26, 2026 13:44
@lunelson
lunelson force-pushed the ln/fe-1406-harness-teaching-adr branch from 44fb37e to 76c8d9f Compare August 26, 2026 13:44
@lunelson
lunelson changed the base branch from graphite-base/9327 to ln/fe-1497-controller-read-path August 26, 2026 13:44
lunelson and others added 3 commits August 26, 2026 17:25
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>
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) type/eng > frontend Owned by the @frontend team

Development

Successfully merging this pull request may close these issues.

2 participants