Skip to content

Releases: esanacore/engineering-constitution

v1.52.0 — the demo page kept current

Choose a tag to compare

@esanacore esanacore released this 30 Sep 05:41
93510ce

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. Now AI_WORKFLOW.md Required 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.yml enforces the rule
    across instruction files with a demo page current anchor; 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

Choose a tag to compare

@esanacore esanacore released this 30 Sep 05:05
eee5984

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, and docs/AGENT_HANDOFF.md now 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.sh verifies that shape in
    docs/AGENT_HANDOFF.md, or in a pull request body piped with --file -.
    Warn by default, --strict to block; paired with
    scripts/test_check_next_steps.sh. tests.yml runs it --strict on this
    repository's handoff, and constitution-compliance.yml runs 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.yml enforces the instruction
    files with an explicit check_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

Choose a tag to compare

@esanacore esanacore released this 30 Sep 04:44
485b5df

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.sh checks the Demo Page standard, not just the
    file's presence.
    check_compliance.sh can only see that demo.html
    exists, so a demo that pulled its fonts from a CDN or called an API on
    localhost passed. The new checker reports remote resource loads (scripts,
    stylesheets, preconnects, images, frames, media, SVG <use>/<image>, a
    remote <base>, CSS url()/@import, and JavaScript import/fetch/
    Worker/WebSocket calls with a literal URL), scripts or stylesheets kept
    in separate files, references into build output (dist/, node_modules/,
    ...), URLs in markup or scripts naming localhost or a private network
    address, and a README.md that never links the page. Navigation links,
    local images, and page text are allowed, so a labeled simulated transcript
    can still show curl http://localhost:8080; HTML comments are ignored. Warn
    by default, --strict to 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.yml runs the demo page check in warn mode
    whenever demo.html exists, 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.html no 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, and tests.yml's
    self-governance job runs check_demo_page.sh --strict against it.

v1.49.1

Choose a tag to compare

@esanacore esanacore released this 28 Sep 02:07
13e05c2

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.sh rewrites 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 showed patients-served taking 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) … release 1.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. Excluding docs/governance/*.md wholesale is not available: a line
    there reading Reviewed constitution release: X is 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-served drops 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 a NOTE: 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 line version-alignment:ignore.
    scripts/test_bump_adopters.sh goes from 9 cases to 11, including a
    governance review log modelled on patients-served whose four historical
    forms must survive verbatim while its one current claim moves.

v1.49.0

Choose a tag to compare

@esanacore esanacore released this 27 Sep 20:25
d7afbce

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.sh moves adopter-side version references with the pin.
    A repository that names the constitution version in prose — Engineering Constitution v1.48.0 in CLAUDE.md, a CONSTITUTION_VERSION file, a README
    line — fails check_version_alignment.sh the 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 what check_version_alignment.sh scans 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 in scripts/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.sh no longer treats a session log as a stale
    claim, and bump_adopters.sh no longer rewrites one.
    The checker flagged
    any line naming the constitution and a version other than the pinned one,
    which is wrong for docs/AGENT_HANDOFF.md: DOCUMENTATION.md defines 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
    containing version-alignment:ignore is 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.sh gains four cases
    (10 total) and scripts/test_bump_adopters.sh gains assertions inside its
    rewrite case, including a mechanical guard that fails if the two scripts'
    scanned sets ever drift apart again.

v1.48.1

Choose a tag to compare

@esanacore esanacore released this 23 Sep 18:51
49b9854

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 to mcp-server/package.json:

    Package From To Advisory floor
    hono 4.12.25 4.13.8 >= 4.13.5
    fast-uri 3.1.2 3.1.8 >= 3.1.6
    ip-address 10.2.0 10.7.2 >= 10.3.1
    qs 6.15.2 6.16.0 >= 6.16.0
    @hono/node-server 1.19.14 1.19.17 >= 1.19.15
    body-parser 2.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_DeviceManager and istqb-quiz-simulator each committed a
    point-in-time copy of mcp-server/ on 2026-06-12, froze it at package
    version 1.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.md records the patched floors for the MCP SDK's
    transitive tree in its Anomaly Review column, per the pre-release checklist.

v1.48.0

Choose a tag to compare

@esanacore esanacore released this 22 Sep 00:49
898f54a

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.sh is the declared "Full suite" in a real docs/TEST_PLAN.md, and .github/workflows/tests.yml runs it through run_declared_tests.sh --strict plus a self-governance job that turns the shipped checkers on this repository in --strict mode (secrets sweep, instruction-file consistency across the root, templates/, and the sample project, skills validation, wiki links, the OTS inventory including mcp-server/, and version references). Until now the suites passed only because someone ran them by hand before a release. Backed by scripts/test_run_all_tests.sh (6 cases: a failing suite fails the run and is named, --quiet still 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. Every scripts/check_*.sh must honor --help (exit 0), exit 2 on an unknown option, accept --strict where its usage documents it, be committed 100755 (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; every scripts/lib/*.sh must stay 100644. Two checkers are exercised end to end under GITHUB_ACTIONS=true.
  • GitHub Actions annotations from every checker. scripts/lib/ci_annotations.sh provides ci_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 their docs/ and .github/ locations) carries the same guidance anchors — session planning and project memory by default, --anchor to override. It makes the manual rule in AGENTS.md mechanical; 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 by scripts/test_check_instruction_templates.sh (5 cases).
  • scripts/check_skills.sh — the 25 skills are validated. Front-matter name must match the directory (tools load skills by that name, so a mismatch is a skill that never triggers), description must be present, an H1 body must follow, and every *.sh a skill mentions must exist under scripts/ or constitution/scripts/. Backed by scripts/test_check_skills.sh (5 cases). INTEGRATION.md gains 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's constitution/ 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 from VERSION at 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 by scripts/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 of RELEASES.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 a permissions.deny floor — 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.md is explicit that this is a prefix-matched floor a reordered flag can slip past; the protocol firewall is the enforcement. test_bootstrap.sh asserts it is installed.
  • CI/CD supply chain (SECURITY.md). Every actions/checkout in 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.yml here) manages the github-actions ecosystem 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.sh fails 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.md carries the Completion Checklist and the full-workflow / fast-path declaration; templates/.github/CODEOWNERS is a commented example so code ownership becomes a host-enforced setting. Both are installed by bootstrap.sh and asserted by test_bootstrap.sh; this repository uses both, and INTEGRATION.md's "Repository Settings Checklist" gains the matching rows.
  • Commit messages follow Conventional Commits (RELEASES.md, "Commit Messages"; CONSTITUTION.md Principle 10). scripts/version_analyzer.sh now 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, exits 2 on 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 become TODO.md items), referenced from OPERATIONS.md's "Incident Response" and the docs/OPERATIONS.md template, kept under docs/incidents/.
  • Data classification and synthetic test data. SECURITY.md gains "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) and TESTING.md gains "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.sh locates 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 own mcp-server/package.json is 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.md Principle 6): a change to the Required Files, the Required Workflow, the c...
Read more

v1.47.0

Choose a tag to compare

@esanacore esanacore released this 21 Sep 20:28
cabaf67

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 shipped demo.html for months — published through GitHub Pages, linked from README.md, and load-bearing enough that RELEASES.md step 2 updates its version badge — but no standard asked adopters for one. DOCUMENTATION.md gains a "Demo Page" section defining the artifact: one self-contained demo.html in the repository root with inline styles and scripts, opening correctly from file:// 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.md Principle 1 gains the matching review bullet, and README Expectations now asks for the link.

  • scripts/check_compliance.sh checks demo.html in the product-facing tier, alongside docs/PRODUCT_REQUIREMENTS.md and docs/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.html therefore 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.sh gains cases 5a and 5b covering the new tier entry and both halves of that distinction.

  • templates/demo.html, installed by scripts/bootstrap.sh into 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, so check_compliance.sh reports it as unfinished until it is filled in. scripts/test_bootstrap.sh asserts the file is installed, still carries the marker, loads no remote asset, and issues no request, which is the mechanical half of the file:// promise.

Fixed

  • scripts/check_compliance.sh no longer accepts a directory in place of a product-facing file. The tier tested for any filesystem entry, so a directory named docs/PRODUCT_REQUIREMENTS.md — or, under the new entry, demo.html — reported OK. Every product-facing entry is a file, so the tier now requires one, and test_check_compliance.sh case 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

Choose a tag to compare

@esanacore esanacore released this 10 Sep 23:25
25461e5

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 and CHANGELOG.md's Unreleased section plus the most recent release — completed items and older releases are history, consulted on demand — and this repository's INTEGRATION.md moves to consult-on-demand in AGENTS.md. Applied as one uniform, grep-driven sweep: AI_WORKFLOW.md steps 4–5 (with a measured-rationale note after the step list), root CLAUDE.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 the AGENTS.md reading 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 from CLAUDE.md/AGENTS.md reading sections in both the heading and prose shapes the framework's files actually use — per document and in total, with an advisory HEAVY flag above ~8,000 estimated tokens and an explicit---files mode. 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 uninitialized constitution/ submodule). Backed by scripts/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 in TODO.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

Choose a tag to compare

@esanacore esanacore released this 02 Sep 01:33
7dfc546

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 from sources/summaries/articles/the-harness-is-the-thing.md; first lead of that intake). A matching verification bullet joins Before Completing Work, and the wiki's AI-Development-Workflow page 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 in TODO.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.md pattern in INTEGRATION.md (third lead promoted from the same intake). A new "Terminal Sessions Across Many Repositories (Optional)" section documents layering a personal, cross-repo AGENTS.md above 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 in sources/manifest.tsv per the KNOWLEDGE_SOURCES.md workflow. 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 in TODO.md — an isolated critique pass (strengthening the existing Self-Critique pre-flight item), advisory cost-tiered model routing, and a parent-directory AGENTS.md auto-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.