Repository navigation
Releases: esanacore/engineering-constitution
Release list
v1.52.0 — the demo page kept current
The demo page kept current. DOCUMENTATION.md has said since 1.47.0 that a
demo still showing old behavior is an incomplete change, but the rule lived
only there — the workflow steps and checklists agents actually follow never
mentioned demo.html, so nothing prompted the update. This release puts it
where agents look.
Changed
- Agents are told to keep the demo page current.
DOCUMENTATION.md
already said a demo still showing old behavior is an incomplete change, but
nothing an agent works from said so. NowAI_WORKFLOW.mdRequired Workflow
step 20 and "Before Completing Work", every agent instruction file and
template, the Solon reviewer, and both pull request templates carry the
rule: when a change alters user-facing behavior and the repository has a
demo.html, update it in the same change.tests.ymlenforces the rule
across instruction files with ademo page currentanchor; the checker's
default anchors are unchanged, so no adopter's strict run changes behavior.
v1.51.0 — a Next Steps procedure at the end of every push
A Next Steps procedure at the end of every push. Sessions kept ending with the
work that only the maintainer could do — pushing a tag, publishing a release,
bumping the fleet — mixed in with loose follow-up ideas, and the 1.45.0 and
1.50.0 tag steps lived only in chat scrollback (ADR-0005). Now every summary,
pull request, and handoff ends with the same ordered checklist that says who
acts on each step, and a checker holds it to that shape.
Added
- Every push ends with a Next Steps procedure (
AI_WORKFLOW.md, "Next
Steps Procedure"; ADR-0005). The closing summary, the pull request
description, anddocs/AGENT_HANDOFF.mdnow end with the same numbered
checklist of what happens next, in order. Every step says who acts —
HUMAN, AGENT, or AUTOMATED — and the steps only a person can do
(connecting hardware, entering a credential, a UI-only setting, an
approval) are named up front in a**Human action required:**line and
then described: why a human, what you need, the procedure, and how you know
it is done. The procedure is never empty: with nothing pending it still
offers a suggestion. Trivial changes do not skip it. scripts/check_next_steps.shverifies that shape in
docs/AGENT_HANDOFF.md, or in a pull request body piped with--file -.
Warn by default,--strictto block; paired with
scripts/test_check_next_steps.sh.tests.ymlruns it--stricton this
repository's handoff, andconstitution-compliance.ymlruns it in warn
mode on adopters' handoffs, skipping pins that predate it.- Every agent instruction file, both pull request templates, and the
handoff template carry the rule.tests.ymlenforces the instruction
files with an explicitcheck_instruction_templates.sh --anchor; the
checker's default anchors are unchanged, so no adopter's strict run
changes behavior in this release.
v1.50.0 — the demo page standard, checked
The demo page standard, checked rather than assumed. 1.47.0 made demo.html
a product-facing expectation, but the only mechanical check was that the file
existed; the framework's own page failed the standard it shipped, and nothing
noticed.
Added
scripts/check_demo_page.shchecks the Demo Page standard, not just the
file's presence.check_compliance.shcan only see thatdemo.html
exists, so a demo that pulled its fonts from a CDN or called an API on
localhostpassed. The new checker reports remote resource loads (scripts,
stylesheets, preconnects, images, frames, media, SVG<use>/<image>, a
remote<base>, CSSurl()/@import, and JavaScriptimport/fetch/
Worker/WebSocketcalls with a literal URL), scripts or stylesheets kept
in separate files, references into build output (dist/,node_modules/,
...), URLs in markup or scripts naminglocalhostor a private network
address, and aREADME.mdthat never links the page. Navigation links,
local images, and page text are allowed, so a labeled simulated transcript
can still showcurl http://localhost:8080; HTML comments are ignored. Warn
by default,--strictto block; paired with
scripts/test_check_demo_page.sh(9 tests, including one regression case
per finding from the change's own critique pass).constitution-compliance.ymlruns the demo page check in warn mode
wheneverdemo.htmlexists, and skips cleanly on constitution pins that
predate the checker. Adopters see findings as annotations before anything
turns red.
Changed
- The constitution's own
demo.htmlno longer loads Google Fonts. The new
checker's first finding was the framework's own page: three requests to
fonts.googleapis.com/fonts.gstatic.com, the exact dependency the
standard forbids. It now uses system font stacks, andtests.yml's
self-governance job runscheck_demo_page.sh --strictagainst it.
v1.49.1
A correction to 1.49.0's version-reference rewrite, caught by the 1.49.0 fleet
bump's own dry run before it wrote anything.
Fixed
-
bump_adopters.shrewrites only the version the bump is moving away from.
1.49.0's rewrite replaced any stale version on a line mentioning the
constitution. The 1.49.0 dry run showedpatients-servedtaking 23 rewrites,
most of them into a governance review log —`CONSTITUTION_VERSION` moved `1.44.0` → `1.44.1`,`v1.45.0` adds `LICENSE` (Apache-2.0),At review time (2026-06-22) … release1.15.0``, and a completed checklist item
naming the tag it was pinned at. Rewriting those produces "moves 1.49.1 →
1.49.1" and the claim that this release shipped Apache-2.0 licensing.It is the fault 1.49.0 fixed for
docs/AGENT_HANDOFF.md, in a different
file. Excludingdocs/governance/*.mdwholesale is not available: a line
there readingReviewed constitution release: Xis a real current claim, and
the checker's own fixture depends on it. The rule was too broad rather than
the file list too long, so in prose the rewrite now moves only the version at
the repository's current gitlink.patients-serveddrops from 23 rewrites to
one —CONSTITUTION_VERSION, a declaration that must equal the pin rather
than prose about one, deliberately exempt from the narrowing.Where the outgoing version cannot be resolved, the prose rewrite is skipped
and the repository reported with aNOTE: leaving a stale reference for a
human is recoverable, rewriting the wrong line is not.This makes the rewrite deliberately more conservative than
check_version_alignment.sh, which can still report historical lines the
bump declines to fix. That asymmetry is the design — the checker reports, and
a human either updates the text or marks the lineversion-alignment:ignore.
scripts/test_bump_adopters.shgoes from 9 cases to 11, including a
governance review log modelled onpatients-servedwhose four historical
forms must survive verbatim while its one current claim moves.
v1.49.0
The fleet bump carries the adopter's own version references with it, and the
alignment checker stops mistaking a session log for a stale claim. Both changes
are additive or strictly less likely to fail than before, so no adopter's CI can
turn red on this release and no documented invocation changes — MINOR under the
compatibility policy.
Changed
bump_adopters.shmoves adopter-side version references with the pin.
A repository that names the constitution version in prose —Engineering Constitution v1.48.0inCLAUDE.md, aCONSTITUTION_VERSIONfile, a README
line — failscheck_version_alignment.shthe moment the gitlink moves past
it. The fleet bump moved only the gitlink, so every release left such an
adopter's compliance gate red until someone hand-edited one line;
AI-Process-Engineer needed exactly that commit on 1.48.0 and again on
1.48.1. The bump now rewrites those references in the same commit as the
gitlink, scanning precisely whatcheck_version_alignment.shscans and
applying the same "first semantic version on a line that mentions the
constitution" rule, so an unrelated version on the same line is left alone.
Rewrites are listed per repository in the run output and recorded in the
commit body. Three new cases inscripts/test_bump_adopters.sh(8 total)
cover the rewrite, a repository with no references being committed
untouched, and — the case that matters —check_version_alignment.sh
exiting 0 against the bumped result.
Fixed
-
check_version_alignment.shno longer treats a session log as a stale
claim, andbump_adopters.shno longer rewrites one. The checker flagged
any line naming the constitution and a version other than the pinned one,
which is wrong fordocs/AGENT_HANDOFF.md:DOCUMENTATION.mddefines that
file as capturing "state after work", one entry per session, so a version it
names is a historical fact rather than a claim about the current pin. In a
real adopter it reported three mismatches for## Last Session — 2026-08-27: Constitution 1.46.0, its scope line, and**Branch**:chore/constitution-1.46.0`` — all true as written.The file is no longer scanned, by either script. This matters most for the
version-reference rewrite added above: sharing the checker's rule meant it
inherited the checker's blind spot, so the next fleet bump would have
silently rewritten those lines across every adopter — falsifying handoff
records and inventing branch names that never existed. The rewrite had not
yet run against a release, so nothing was altered.For a historical mention inside a file that is otherwise current, a line
containingversion-alignment:ignoreis skipped by both scripts. The opt-out
is explicit: an unmarked stale mention still fails, so this is not a blanket
exemption.scripts/test_check_version_alignment.shgains four cases
(10 total) andscripts/test_bump_adopters.shgains assertions inside its
rewrite case, including a mechanical guard that fails if the two scripts'
scanned sets ever drift apart again.
v1.48.1
A security patch for the MCP server's dependency tree. No standard, required
file, checker default, script option, or exit code changed, and no adopter has
to do anything beyond re-pinning the submodule — this is PATCH under the
compatibility policy 1.48.0 introduced.
Security
-
Every transitive advisory in
mcp-server/is resolved. Enabling
Dependabot alerts on this repository surfaced 23 open advisories, all
transitive under the single direct dependency@modelcontextprotocol/sdk,
and all invisible until now because alerts had never been switched on. Each
patched version was already reachable inside its parent's existing range, so
every fix is a lockfile bump with no change tomcp-server/package.json:Package From To Advisory floor hono4.12.25 4.13.8 >= 4.13.5 fast-uri3.1.2 3.1.8 >= 3.1.6 ip-address10.2.0 10.7.2 >= 10.3.1 qs6.15.2 6.16.0 >= 6.16.0 @hono/node-server1.19.14 1.19.17 >= 1.19.15 body-parser2.2.2 2.3.0 >= 2.3.0 Severities spanned 7 high, 14 medium, and 2 low.
-
Two adopters carried a vendored copy of this same tree.
SSH_DeviceManagerandistqb-quiz-simulatoreach committed a
point-in-time copy ofmcp-server/on 2026-06-12, froze it at package
version1.0.0, and never updated it — the same drift 1.48.0 fixed in this
repository's own server. Nothing referenced either copy; both were removed
upstream rather than patched. Consume the MCP server from
constitution/mcp-server/, where the submodule pin keeps it current.
SECURITY.md's supply-chain section already says never to vendor what a
pinned dependency provides; these two predated it.
Changed
docs/OTS_SOFTWARE.mdrecords the patched floors for the MCP SDK's
transitive tree in its Anomaly Review column, per the pre-release checklist.
v1.48.0
The framework holds itself to its own rules, gains the standards a 2026 AI-assisted repository needs, and defines what a release of a governance framework means. Everything here is warn-by-default or additive; no required file, no checker default, and no option or exit code of any script a shipped workflow invokes changed (the one exit-code change, version_analyzer.sh's usage error moving from 1 to 2, is in an on-demand tool no workflow runs), so this is MINOR under the compatibility policy it introduces.
Added
- The framework runs its own tests and checkers in CI.
scripts/run_all_tests.shis the declared "Full suite" in a realdocs/TEST_PLAN.md, and.github/workflows/tests.ymlruns it throughrun_declared_tests.sh --strictplus aself-governancejob that turns the shipped checkers on this repository in--strictmode (secrets sweep, instruction-file consistency across the root,templates/, and the sample project, skills validation, wiki links, the OTS inventory includingmcp-server/, and version references). Until now the suites passed only because someone ran them by hand before a release. Backed byscripts/test_run_all_tests.sh(6 cases: a failing suite fails the run and is named,--quietstill replays failing output, an empty directory is an error rather than a pass, annotations fire only under GitHub Actions). scripts/test_checker_contract.sh— the checker contract, enforced. Everyscripts/check_*.shmust honor--help(exit 0), exit2on an unknown option, accept--strictwhere its usage documents it, be committed100755(the 1.42.0 executable-bit regression can no longer ship), source the CI-annotation helper and call it, and have a paired negative-case suite; everyscripts/lib/*.shmust stay100644. Two checkers are exercised end to end underGITHUB_ACTIONS=true.- GitHub Actions annotations from every checker.
scripts/lib/ci_annotations.shprovidesci_annotate, and all thirteen existing checkers (plus the two new ones and the test runner) now print::warning::/::error::workflow commands for their summary finding when running under GitHub Actions, so a warn-mode result appears in the pull request's Checks tab and Files-changed view instead of only in a job log. Outside Actions the helper is a no-op and output is byte-for-byte unchanged (all existing suites pass untouched). scripts/check_instruction_templates.sh— instruction files must agree. Verifies that every agent instruction file present in a directory (AGENTS.md,CLAUDE.md,COPILOT_INSTRUCTIONS.md,.cursorrules,.cursor/rules/project.mdc,.continue/config.json,.aider.conf.yml,.project-rules.md,.agent-instructions.md,.goosehints,.openhands_instructions,.antigravity/instructions.md,.github/copilot-instructions.md, the Solon agent,SYSTEM_PROMPT.md,CONTRIBUTING.md,HELP.md, and theirdocs/and.github/locations) carries the same guidance anchors — session planning and project memory by default,--anchorto override. It makes the manual rule inAGENTS.mdmechanical; the session-plan rollout missed half the templates the first time, and this checker's first run found twelve drifted files (five of this repository's own root files, the Antigravity and Solon templates, and all five sample-project instruction files), all fixed in this release. Backed byscripts/test_check_instruction_templates.sh(5 cases).scripts/check_skills.sh— the 25 skills are validated. Front-matternamemust match the directory (tools load skills by that name, so a mismatch is a skill that never triggers),descriptionmust be present, an H1 body must follow, and every*.sha skill mentions must exist underscripts/orconstitution/scripts/. Backed byscripts/test_check_skills.sh(5 cases).INTEGRATION.mdgains an "Agent Skills" section explaining how Claude Code (.claude/skills/symlink or copy), Cursor/Continue/Copilot, and Goose load them — previously the README advertised the skills and nothing said how to reach them.scripts/bump_adopters.sh— the fleet bump is a command. Re-pins every adopter'sconstitution/submodule to a release commit: one branch (constitution/bump-v<version>) and one pull request per repository (gh, or the compare URL with--no-pr), the version read fromVERSIONat the target commit. Idempotent by design — already-pinned repositories, existing bump branches, and non-adopters are reported and skipped, so a partial run is simply re-run — and it never touches a default branch or force-pushes. Backed byscripts/test_bump_adopters.sh(5 cases against local bare remotes, including a rejected push that fails the run without stopping later repositories). It is now step 9 ofRELEASES.md's "Cutting a Release".- Untrusted content and AI agents (
SECURITY.md). Issue and pull request bodies, review comments, CI logs, fetched pages, and tool output join the input-validation list, and a new section states the rule: content is data, never instructions; a request arriving that way to change task, widen access, run a command, or disable a check is escalated verbatim, not obeyed; committed instruction files are reviewed like CI configuration. The "block destructive commands" principle now has an artifact:templates/.claude/settings.json(installed with--agents=claude) carries apermissions.denyfloor —sudo, deleting/or~, force and mirror pushes, remote branch deletion, branch and tag deletion, and reads of.env(and.env.local/.env.production),*.pem,*.key,id_rsa,credentials.json.SECURITY.mdis explicit that this is a prefix-matched floor a reordered flag can slip past; the protocol firewall is the enforcement.test_bootstrap.shasserts it is installed. - CI/CD supply chain (
SECURITY.md). Everyactions/checkoutin every shipped workflow template and in this repository's own workflows is pinned by full commit SHA with the version as a comment;templates/.github/dependabot.yml(and a new.github/dependabot.ymlhere) manages thegithub-actionsecosystem so pins move by reviewable pull request; the section also covers least token permissions, lockfiles, and never piping a download to a shell.test_bootstrap.shfails if an installed workflow pins an action by tag. - Proportionate workflow for trivial changes (
AI_WORKFLOW.md, ADR-0004). A change is trivial only when it alters no behavior, fits on one screen, touches nothing on the sensitive list (dependencies, environment variables, secrets, auth, CI, instruction files, checkers, templates), and nobody has asked for the full workflow; such a change may skip the session plan, implementation plan, coverage evaluation, isolated critique, traceability/OTS/environment updates, release evaluation, memory proposals, and plan cleanup — never the scoped reads, never the secrets sweep, never the pull request, which must say the fast path was taken. "When in doubt, it is not trivial."CONSTITUTION.md's "Required Workflow" points at it. - Pull request and CODEOWNERS templates.
templates/.github/pull_request_template.mdcarries the Completion Checklist and the full-workflow / fast-path declaration;templates/.github/CODEOWNERSis a commented example so code ownership becomes a host-enforced setting. Both are installed bybootstrap.shand asserted bytest_bootstrap.sh; this repository uses both, andINTEGRATION.md's "Repository Settings Checklist" gains the matching rows. - Commit messages follow Conventional Commits (
RELEASES.md, "Commit Messages";CONSTITUTION.mdPrinciple 10).scripts/version_analyzer.shnow anchors its greps to real prefixes (^feat(\(scope\))?!?:,^fix...,^type!:,^BREAKING CHANGE:), so a commit saying "prefix cleanup" no longer counts as a fix and an exclamation mark in prose no longer counts as breaking; it gains--help, exits2on a usage error, and a 4-case suite (scripts/test_version_analyzer.sh). - "Product-facing" is defined (
DOCUMENTATION.md, "Product Requirements Expectations"; pointer from Principle 1): a repository that ships behavior to people other than its own maintainers, so someone outside the team can hold it to a promise; when unsure, treat it as product-facing. - Incident postmortems.
templates/docs/INCIDENT_POSTMORTEM.md(blameless; impact, timeline, root cause, contributing factors, detection, response, corrective actions that becomeTODO.mditems), referenced fromOPERATIONS.md's "Incident Response" and thedocs/OPERATIONS.mdtemplate, kept underdocs/incidents/. - Data classification and synthetic test data.
SECURITY.mdgains "Data Classification" (Public / Internal / Confidential / Restricted; record it in the architecture data flow; state retention; synthetic data everywhere but production; logs follow the lowest level) andTESTING.mdgains "Test Data" (fixtures are synthetic, never anonymized production records). - OTS inventory License column.
templates/docs/OTS_SOFTWARE.md's tables and conventions gain the SPDX license identifier every real SOUP register carries.check_ots_inventory.shlocates the Name column by header, so existing inventories keep passing; add the column when convenient. check_ots_inventory.sh --manifest-dir <dir>(repeatable) reads a sub-package's manifests in addition to the root's, labeling each dependency with its directory; a missing directory is a usage error. New negative case (11 total). This is how the constitution's ownmcp-server/package.jsonis now checked.- ADR-0003, "A Compatibility Policy for the Framework's Own Releases", and ADR-0004, "A Proportionate Workflow for Trivial Changes" (both Accepted), plus an ADR rule for the framework itself (
DOCUMENTATION.md, "ADR Triggers for the Framework Itself";CONSTITUTION.mdPrinciple 6): a change to the Required Files, the Required Workflow, the c...
v1.47.0
Added
-
A demo page is now a product-facing expectation (
docs/adr/0002-demo-page-requirement.md, Accepted). The framework's documentation standards were entirely textual: a fully compliant repository could be read cover to cover without a reader ever seeing the product work. This repository has shippeddemo.htmlfor months — published through GitHub Pages, linked fromREADME.md, and load-bearing enough thatRELEASES.mdstep 2 updates its version badge — but no standard asked adopters for one.DOCUMENTATION.mdgains a "Demo Page" section defining the artifact: one self-containeddemo.htmlin the repository root with inline styles and scripts, opening correctly fromfile://with no build, no backend, and no network (Principle 7 applies to the demo as it does to the product); plain in-interface labelling of anything simulated, because a demo that fabricates output without saying so is a lie told in HTML; currency with the product, enforced through a new Documentation Review Checklist entry; publication through the platform's static hosting when available, linked from the README; and the same no-secrets rule as any other published artifact.CONSTITUTION.mdPrinciple 1 gains the matching review bullet, andREADME Expectationsnow asks for the link. -
scripts/check_compliance.shchecksdemo.htmlin the product-facing tier, alongsidedocs/PRODUCT_REQUIREMENTS.mdanddocs/REQUIREMENTS_TRACEABILITY.md: a warning for every repository, a failure under--product. Product-facing, not required — an internal library or a pure configuration repository has no product to demonstrate, and a required tier would produce ceremonial empty pages or fail honest repositories. The placeholder check needed a second shape to do this correctly: the existing grep treats<!--as evidence of an unfinished template, which is true of Markdown and false of HTML, where a comment is ordinary markup.demo.htmltherefore carries its own explicit marker (constitution-demo-template-placeholder), written into the scaffold and deleted by the adopter, so finished pages with comments pass and unedited copies do not.scripts/test_check_compliance.shgains cases 5a and 5b covering the new tier entry and both halves of that distinction. -
templates/demo.html, installed byscripts/bootstrap.shinto every adopting repository: a working, dependency-free single-file page — overview, capability panels, and a scripted example interaction — so a freshly bootstrapped repository starts from something that runs rather than from a blank requirement. It carries the placeholder marker, socheck_compliance.shreports it as unfinished until it is filled in.scripts/test_bootstrap.shasserts the file is installed, still carries the marker, loads no remote asset, and issues no request, which is the mechanical half of thefile://promise.
Fixed
scripts/check_compliance.shno longer accepts a directory in place of a product-facing file. The tier tested for any filesystem entry, so a directory nameddocs/PRODUCT_REQUIREMENTS.md— or, under the new entry,demo.html— reportedOK. Every product-facing entry is a file, so the tier now requires one, andtest_check_compliance.shcase 5c covers it. Found while reviewing the demo-page change; it applies to all three product entries, not only the new one.
v1.46.0
Changed
- The required reading order now scopes unbounded files (the change the instruction-weight measurement justified): at session start, agents read
TODO.md's open ([ ]/[~]) items only andCHANGELOG.md'sUnreleasedsection plus the most recent release — completed items and older releases are history, consulted on demand — and this repository'sINTEGRATION.mdmoves to consult-on-demand inAGENTS.md. Applied as one uniform, grep-driven sweep:AI_WORKFLOW.mdsteps 4–5 (with a measured-rationale note after the step list), rootCLAUDE.md/AGENTS.md/COPILOT_INSTRUCTIONS.md/Solon, eight template instruction files (.aider.conf.yml, which loads files whole, instead gains a comment documenting the rising cost), and all four sample-project instruction files. On the source repo this trims theAGENTS.mdreading order from ~65k to roughly ~35k estimated session-start tokens with no information loss for a fresh task. Write-guidance mentions of TODO/CHANGELOG (update rules, freshness tripwires) are deliberately unchanged.
Added
scripts/measure_instruction_weight.sh— the instruction-weight meter (final lead from the "The Harness Is the Thing" intake, closing that source's promotion list). Reports bytes, words, and estimated tokens (bytes/4) for every document in the agent required-reading order — parsed fromCLAUDE.md/AGENTS.mdreading sections in both the heading and prose shapes the framework's files actually use — per document and in total, with an advisoryHEAVYflag above ~8,000 estimated tokens and an explicit---filesmode. Deliberately a meter, not a gate: heavy documents never fail the run; the one hard failure is a reading list naming a file that does not exist (a broken reading order, including an uninitializedconstitution/submodule). Backed byscripts/test_measure_instruction_weight.sh(9 cases: section parsing in both shapes, checklist bullets excluded, missing-file failure, HEAVY advisory non-failure, dedupe,--files, usage errors, empty repo). First measurements recorded inTODO.md: the rule documents are lean (~16.5k estimated tokens); the session-start weight lives in unbounded history files (CHANGELOG.md~20.5k,TODO.md~8k) — so the follow-up on the table is scoping the reading order, not a condensed digest.
v1.45.0
Added
-
An isolated critique pass is now a required workflow step.
AI_WORKFLOW.md's Required Workflow gains step 16: after tests and coverage, and before any documentation work, the finished diff is critiqued from a fresh context — a sub-agent, a second session, or at minimum a distinct pass that re-reads only the final diff rather than the conversation that produced it — asking whether the change is correct, minimal, and as simple as it could be, with findings folded back into implementation before proceeding. Rationale: a single context that plans, implements, and critiques its own work blurs the critic's objectivity (promoted fromsources/summaries/articles/the-harness-is-the-thing.md; first lead of that intake). A matching verification bullet joins Before Completing Work, and the wiki'sAI-Development-Workflowpage gains a "Critique from a fresh context" section. Renumbering later steps also fixed a pre-existing duplicate "21." in the list (the workflow now counts 30 steps, previously mis-numbered to 28). The automated form of this check (scripts/ai_preflight.sh) remains tracked inTODO.md. -
Advisory model-selection guidance in
AI_WORKFLOW.md(second lead promoted from the same intake). A new "Model Selection (Advisory)" section maps capability tiers onto the workflow's own seams: the most capable available model for judgment-heavy phases (understanding/planning steps 10–12, the step-16 critique pass, user-facing communication), cheaper models for well-patterned execution once a plan is explicit — often by letting the stronger model plan and implement the first task before handing off. Explicitly bounded: model-agnostic, advisory only, and never a reason to shorten the workflow — a model that cannot follow it is the wrong model for that phase. -
Workspace-level
AGENTS.mdpattern inINTEGRATION.md(third lead promoted from the same intake). A new "Terminal Sessions Across Many Repositories (Optional)" section documents layering a personal, cross-repoAGENTS.mdabove a workspace of adopting repositories, loaded via a portable parent-directory-walking shell wrapper. Two boundaries keep it composable with the per-repo submodule model rather than competing with it: the workspace file is personal configuration, never committed governance, and never overrides a repository's own rules or the constitution's reading order; and every repository must remain self-sufficient for teammates, CI, and agents that never saw the workspace file. -
Source summary: "The Harness Is the Thing" (Scott Fryxell, 2026-08-25) at
sources/summaries/articles/the-harness-is-the-thing.md, recorded insources/manifest.tsvper theKNOWLEDGE_SOURCES.mdworkflow. The article independently converges on this framework's thesis (the organizing system around AI agents outlasts any model) and contributes three promotion leads now tracked inTODO.md— an isolated critique pass (strengthening the existing Self-Critique pre-flight item), advisory cost-tiered model routing, and a parent-directoryAGENTS.mdauto-load pattern for multi-repo workspaces — plus one recorded tension: instruction weight has a per-session cost this framework does not yet measure. No constitution document changed; promotion is deliberate and separate.