Conversation
… group (#1325) Bumps the actions-deps group with 1 update: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action). Updates `docker/setup-qemu-action` from 4.2.0 to 4.3.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/setup-qemu-action/releases">docker/setup-qemu-action's releases</a>.</em></p> <blockquote> <h2>v4.3.0</h2> <ul> <li>Bump <code>@docker/actions-toolkit</code> from 0.92.0 to 0.96.0 in <a href="https://github.com/docker/setup-qemu-action/pull/336">docker/setup-qemu-action#336</a></li> <li>Bump <code>@sigstore/verify</code> from 3.1.0 to 3.1.1 in <a href="https://github.com/docker/setup-qemu-action/pull/316">docker/setup-qemu-action#316</a></li> <li>Bump brace-expansion from 1.1.15 to 1.1.18 in <a href="https://github.com/docker/setup-qemu-action/pull/332">docker/setup-qemu-action#332</a></li> <li>Bump js-yaml from 4.2.0 to 4.3.1 in <a href="https://github.com/docker/setup-qemu-action/pull/334">docker/setup-qemu-action#334</a></li> <li>Bump postcss from 8.5.10 to 8.5.25 in <a href="https://github.com/docker/setup-qemu-action/pull/331">docker/setup-qemu-action#331</a></li> <li>Bump sigstore from 4.1.0 to 4.1.1 in <a href="https://github.com/docker/setup-qemu-action/pull/317">docker/setup-qemu-action#317</a></li> <li>Bump undici from 6.27.0 to 6.28.0 in <a href="https://github.com/docker/setup-qemu-action/pull/333">docker/setup-qemu-action#333</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/setup-qemu-action/compare/v4.2.0...v4.3.0">https://github.com/docker/setup-qemu-action/compare/v4.2.0...v4.3.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/setup-qemu-action/commit/1f40c72289eff860ee54a304f1438e3cff362e0a"><code>1f40c72</code></a> Merge pull request <a href="https://github.com/docker/setup-qemu-action/issues/336">#336</a> from docker/dependabot/npm_and_yarn/docker/actions-to...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/932216e29e2417c3aa0bc5aec3c57089030cef2c"><code>932216e</code></a> [dependabot skip] chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/a39e895360e601ae54e9ac97b8ea3b99e5f40491"><code>a39e895</code></a> build(deps): bump <code>@docker/actions-toolkit</code> from 0.92.0 to 0.96.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/a98ae9ffe777adf16ca44873bab9926427b262fa"><code>a98ae9f</code></a> Merge pull request <a href="https://github.com/docker/setup-qemu-action/issues/333">#333</a> from docker/dependabot/npm_and_yarn/undici-6.28.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/8ebc9d118344dda0af3e25d2a7330010dd33e951"><code>8ebc9d1</code></a> [dependabot skip] chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/c41e3fcbc0d6742101e0310c3b008ac3b16a9529"><code>c41e3fc</code></a> build(deps): bump undici from 6.27.0 to 6.28.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/5fc60dfac60f723a3386e73530ff8067f2848f60"><code>5fc60df</code></a> Merge pull request <a href="https://github.com/docker/setup-qemu-action/issues/332">#332</a> from docker/dependabot/npm_and_yarn/brace-expansion-1...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/a26e892bb646b50218299a9b391e7a4b0322d96a"><code>a26e892</code></a> Merge pull request <a href="https://github.com/docker/setup-qemu-action/issues/328">#328</a> from docker/dependabot/github_actions/actions/checkou...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/aa6d04232374700651c6e7be400e859600041423"><code>aa6d042</code></a> Merge pull request <a href="https://github.com/docker/setup-qemu-action/issues/324">#324</a> from docker/dependabot/github_actions/actions/setup-n...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/d381ce5c16de15c000da8929fd1fc6e8fdef19e1"><code>d381ce5</code></a> Merge pull request <a href="https://github.com/docker/setup-qemu-action/issues/317">#317</a> from docker/dependabot/npm_and_yarn/sigstore-4.1.1</li> <li>Additional commits viewable in <a href="https://github.com/docker/setup-qemu-action/compare/96fe6ef7f33517b61c61be40b68a1882f3264fb8...1f40c72289eff860ee54a304f1438e3cff362e0a">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
#1328) Part of #1311, executing #1313 unchanged, per the re-assessment on #1311. Two tracked artifacts were renderings rather than state, and both collided between concurrent branches. This decouples them from the working tree. ## What changed - **The burn-down is no longer tracked.** `reports/canonical-review.md` is removed from the tree. `canonical_review.py report` renders the burn-down from the JSON ledger to standard output, and `.github/actions/validate/action.yml` appends that rendering to the run's job summary on every event. The `report --check` gate is gone with the file it checked, since a rendering that is never committed has no state to go stale. The JSON ledger stays tracked, sorted, one entry per unit. - **`record` holds a lock** across its read, merge, and replace of the ledger, reusing `local_review.held_lock`. The lock file lives in the worktree's own git directory rather than beside the ledger, so a record killed mid-write leaves nothing untracked in `reports/`. - **One digest stamp per skill.** `.claude-plugin/fleet-skills/.source-digest`, one hash over every skill's bytes, is replaced by `.claude-plugin/fleet-skills/.source-digests/<name>`, one file per skill, so two edits to two skills touch two files. `is_stale` compares source, plugin, and `.github/skills/` per skill and refuses an orphaned, missing, or hand-edited stamp. The stamps stay under the plugin root, not under `.github/skills/`, which `spec/files.json` declares a verbatim tree carried whole. - **Every surface naming the tracked rendering was swept:** `scripts/README.md` (where the "a rendering is never committed" rule is now stated, once), `OPERATIONS.md`, `GOVERNANCE.md` "Verification Discipline" and the linter section, `AGENTS.md` "Where the Rules Live", and `local-strict-review` "The Carried-Content Pass", with the generated skill trees regenerated. ## Tests - `test_canonical_review.py`: two records applied in either order produce one ledger, two branches recording different units merge without a conflict, a held lock refuses the record rather than writing past it, the lock lives in the git directory, and a record writes the ledger and nothing else into the tree. The report cases now read the rendering from standard output. - `test_build_dist.py`: two skill edits change two disjoint stamp files, and a hand-edited, missing, or orphaned stamp reports stale. - Each new case was run against the develop engines first and failed there: the lock cases error, the report cases fail on the file the old engine still wrote, and every build_dist case errors on the missing per-skill directory. ## Verification Local gate set green from the worktree: ruff format and check, mypy, the whole self-test surface, `build_dist.py --check`, `canonical_review.py check` (the three carried units this change moved were each read whole and recorded), prose lint, `spec/validate.py`, `repo_gate.py`, and `docker_lint.py`. ## Residual The JSON ledger is still one tracked file every canonical-content worker writes. It merges wherever the two passes' entries do not land on the same line, which is every case but two first-ever entries for units that sort adjacently with no entry between them. That is the shape #1313 asked to keep, and `backlog-burndown`'s no-shared-file rule still names no exception for it, which is that skill's own decision under #1323 rather than this change's. The ledger is written in place, as before, and one docstring clause in `write_ledger` still says "the read this replaces", meaning supersedes. ## Carried-content passes The three carried units this change moved were each read whole twice, since the first read's fixes are themselves edits. Findings in text this branch wrote were fixed. Findings in text it did not write are listed here for the maintainer rather than fixed or filed, since each is a design call in a verbatim fleet-wide unit: - `AGENTS.md` "Where the Rules Live": the `merge-and-release` sentence says Skills are refreshed "first", while that skill refreshes them at its step 7 after the dispatch. The `.husky/pre-push` sentence describes enforcement a carrier cannot get, since the hook runs hub-hosted scripts from the repo top level. The Skills paragraph says the Skills are hub-local while `.github/skills/` is a carried verbatim tree. The lint row routes a carrier to a hub-only section where its own `OPERATIONS.md` "Local Verification" holds its invocations. `carried-instruction-file-guard` is named nowhere in the file. "canonical content this repository authors and others carry" binds "this repository" to the carrier in a verbatim unit, where "the hub" is meant. - `GOVERNANCE.md` "Verification Discipline": "byte for byte wherever the declared fidelity is verbatim" omits the EOL and action-pin normalization `spec/section-model.md` applies. "The destination is declared fleet-wide" names no place the declaration lives. "or carries no such file" binds to `OPERATIONS.md` rather than to the repository. "Two Profiles" is quoted where the skill's heading reads "Two profiles", declined as style consistent with that skill's own cross-references. - `local-strict-review` "The Carried-Content Pass": the brief's `Paths:` line never says what a unit key looks like, that `(preamble)` names the text before the first level-two heading, or where a section ends, so a subagent inheriting nothing cannot follow it literally. The cross-checkout sentence never says an engine is pointed by its working directory. "text the target has since changed" reads as since the fork point where the mechanism needs since the stale ref's tip. - `.husky/pre-push`, outside any unit: its dirty-tree remedy line ("commit what is being pushed, then run the pass and record it, then push") states the receipt's order only, and where the dirty content is the canonical ledger it points the reader the wrong way round. Closes #1268, #1290, #1151. Relates #1240, #1295. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Part of #1311, the mechanical half of #1314 per the re-assessment there. The Merge Gate prose amendment and the required-versus-advisory decision wait for Step 3, as that comment sequences them. ## What changed - **`.coderabbit.yaml`**, new: `path_filters` exclude `.github/skills/**` and `.claude-plugin/fleet-skills/**`. Auto review is enabled for pull requests into `develop` with no pause after five reviewed commits. A Markdown path instruction asks for false, stale, unverifiable, or unfollowable claims only. Sequence diagrams, suggested labels and reviewers, and the in-progress fortune are off. The markdownlint, actionlint, shellcheck, and ruff tools are off, since CI runs the same four. - **`.pr_agent.toml`**, new: `[ignore] glob` lists the same two trees. Qodo is asked to reproduce a claimed crash before reporting it, to quote the rule a compliance finding rests on, to keep a rule against unchanged text in the summary, to route informational findings to the summary rather than a thread, and to drop the badge images that hide a finding's title from a text matcher. Qodo reads this file from the default branch, so it binds once promoted to `main`. - **`.github/copilot-instructions.md`** "Reviewing Carried Fleet Content": one paragraph asks Copilot to post no review comment under either generated tree and to put a finding on the file the fix belongs in when the pull request changes it, otherwise in the review summary. Read whole five times and recorded. - **`docs/pr-reviewer-evaluation.md`**: "Generated Mirrors" and "Review Configuration" subsections record every setting with the finding or cost behind it, and the Status and Plan sections record the current footing: both trials over, CodeRabbit and Qodo on public repositories only, CodeRabbit's open-source tier auto-reviewing only at ten stars or more so a review here is triggered by comment, a private repository Copilot-only, Copilot's budget, and the Claude GitHub App installed but unconfigured. The issue names `.claude-plugin/**`, and the filters take `.claude-plugin/fleet-skills/**` instead, since `.claude-plugin/marketplace.json` beside that tree is hand-authored and the wider glob would take it out of review too. Both files parse to exactly the intended structures. Neither is declared in `spec/files.json`, since the two advisory bots run on the hub only. ## Copilot Content exclusion, the only hard mechanism, is documented for organizations on a Business or Enterprise plan, and this repository is under a user account, so it is unavailable. The instructions paragraph above stands in for it, and GitHub documents such instructions as non-deterministic, so it is a suggestion where the other two are filters. That file is carried fleet-wide, so downstream repositories pick the instruction up on their next resync, which matters because they carry `.github/skills/` too. ## Carried-content pass `.github/copilot-instructions.md` "Reviewing Carried Fleet Content" was read whole twice. Findings in the paragraph this branch wrote were fixed. Three pre-existing findings in text it did not write are for the maintainer rather than fixed here: "Follow the fidelity declared for the file" names a declaration a carrier does not hold, in `spec/files.json`, at a granularity that is per unit rather than per file. "Canonical source" and "the hub" resolve only through the preamble's pointer to `AGENTS.md`, never from the unit alone. "Shared infrastructure" is the unit's one use of that phrase for what the rest calls the hub. ## Acceptance The issue's first acceptance test, a skill-editing pull request drawing bot comments on `.agents/skills/` only, cannot be run on this pull request, which edits no skill, and for Qodo cannot run before the next promotion. It is measured on the first skill-editing pull request after `main` carries this change. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…1330) Part of #1311, Step 3 of the path re-proposed there, and its deletion pilot in the same change. Three commits, each carrying its own measurement in its message. ## What changed - **`local-strict-review` "Disposing of Findings"**, rewritten by deletion. The fourteen-sentence paragraph is five rules, each a bold statement followed by a marked non-normative `Why:` line: every finding ends in one of `pr-review-conduct`'s five outcomes by pointer, the disposing agent classes each finding `style`, `introduced`, or `pre-existing` in that order, another round is owed only while an `introduced` finding is open, a push allows two rounds of edits across both passes and then the remainder goes to the maintainer per `pr-review-conduct` "Escalate to the maintainer when", and the pass is mandatory while the count it records gates nothing. - **`local-strict-review` "Running It"**: one sentence seating the cross-unit sweep with the author assembling the brief. The `Return:` line does not gain the class, since the disposing agent classes both passes' findings and the carried-content reviewer reads knowing nothing about the branch. - **`GOVERNANCE.md` "Verification Discipline"**: one bullet. Another round of edits is owed only while a defect this change introduced is open, never by a finding count, and the class, what it owes, and the budget are the Skill's. - **`pr-review-conduct` "Never exit the loop early"**: one clause scoping it to the PR-hosted loop and naming `local-strict-review` as the home of the pre-push bound. - `backlog-burndown` untouched, per the issue. Its "state a number in the brief" budget and "file the remainder" route now differ from the Skill's two rounds and escalation, which is #1323's. - Skill mirrors regenerated with `scripts/build_dist.py`. The ledger records each unit at the digest its last reviewer read. ## The pilot's measurement `introduced` findings over total per whole-unit read, classed by the rule this change writes, which was in every reviewer brief from the first round. The first commit's rounds are R1 to R4, the second commit restarted at R1 after answering the four findings the first left open, and the third commit is one maintainer-granted round past the budget. | Unit | Commit 1 | Commit 2 | Commit 3 | | --- | --- | --- | --- | | local-strict-review > Disposing of Findings | 9, 3, 1, 2 | 3/3, 1/1, 2/2 | 2/2 | | local-strict-review > Running It | 2, 6, 4, reverted | 1/4, 1/3, 0/3 | unchanged | | GOVERNANCE.md > Verification Discipline | 8, 7, 3, 2 | 0/1 | 1/1 | | pr-review-conduct > Expected review loop | 0 | unchanged | unchanged | Two results. Units changed lightly converged in one to three reads, the sweep sentence included once it sat in the author's seat. The unit carrying the whole rule did not converge in eight whole reads across three commits, holding at one to three `introduced` findings per round, nearly every one against a clause the previous round's fix wrote. Pointer-only fixes lowered the floor and did not reach it. ## Open findings, reported rather than fixed The issue's pass budget is spent, so these stand, each `introduced`: - `style` as "a preference between defensible forms" is wider than the omit-preferences rule it is declined under, so a rule-backed form classes `style` and is declined citing a rule that does not reach it. - "editing stops" after the second round says nothing about the push, while the recorded count admits it at the hook and the escalation rule stops the unit of work. - The `GOVERNANCE.md` bullet overlaps "A review flags an instance, so fix the class" on a local pass with no tiebreak for siblings in text the change did not touch. - The lead-in's "a stale rationale is a cleanup rather than a defect" has no cleanup class to land in, so a finding on a `Why:` line this change wrote is `introduced` under the class rule and a cleanup under the lead-in. - "an `introduced` finding is fixed" unless disproven leaves outcomes 3, 4, and 5 unreachable for an `introduced` finding inside the budget, against the first rule's "every finding ends in one of the five outcomes". - "Escalate to the maintainer when" lists four triggers and an exhausted budget is not one of them, so only that section's seat-routing paragraph applies to the pointer. - `AGENTS.md`'s session-scope bullet, "a round count is not a reason to leave one open", reads against a two-round stop in a seat that escalates. My read is that the bullet governs ending a session and an escalation keeps the session open, so no contradiction, left for the maintainer to confirm. ## #1327 against "Disposing of Findings", 35 items 26 settled by the rewrite, 7 inherited by the pointer to `pr-review-conduct`'s enumeration (7, 8, 9, 11, 12, 17, 76), 2 still present by design (15 and 18). One new pre-existing finding on `Running It`, the model-tier citation, is posted there. ## Verification Full local gate set per `OPERATIONS.md` "Local Verification", 1060 tests, all green on each commit. Eleven whole-unit passes and three diff passes recorded across the three commits. Closes #1267. Relates #1104, #1283, #1327. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…d the Reviewer Footing (#1333) Part of #1311, the Merge Gate half of #1314. With #1329's mechanical half this settles that issue, so the `develop -> main` promotion PR carries `Closes #1314`. ## What changed - **`pr-review-conduct` Merge Gate item 2** records the reviewer footing: the coverage the gate requires is Copilot's, and CodeRabbit and Qodo are advisory, cited to the hub's `docs/pr-reviewer-evaluation.md` "Status" rather than restated as a roster. The issue's recommendation was advisory on prose paths only, and the recorded footing is advisory on every path, since that doc says no candidate is a required reviewer anywhere. Maintainer's call, flagged here rather than narrowed on my own. - **Merge Gate item 3** bounds what a finding on carried prose owes: a finding classed `pre-existing` under `local-strict-review`'s classes, on text inside a canonical Markdown unit, is outcome 4 applied once per unit, gathered onto the unit's tracker on the hub, an open issue whose title carries the unit key, and answered with that link. Every other finding keeps its own outcome. The five outcomes stay the one enumeration. - **`GOVERNANCE.md` "Verification Discipline"** binds the sibling sweep to a finding being fixed and to what the change touched or broke, filing a pre-existing sibling elsewhere rather than folding it in. This is the tiebreak the #1330 body listed as open (its third bullet). `agent-conduct` surfaces the same bound. - Skill mirrors regenerated. The ledger records each unit at the digest its last reviewer read. ## Measurement, under the stop rule `introduced` findings over total per read. Reads 1 to 3 are the two-round budget, read 4 the maintainer-granted round on 2930660, read 5 the one clause granted on 2f1aaa8. | Pass | Read 1 | Read 2 | Read 3 | Read 4 | Read 5 | | --- | --- | --- | --- | --- | --- | | pr-review-conduct > Merge Gate | 5/8 | 3/5 | 6/8 | 4/6 | 6/10 | | agent-conduct > When a Failure Surfaces a Lesson | 0/3 | 0/3 | 0/1 | unchanged | unchanged | | GOVERNANCE.md > Verification Discipline | 0/9 | 1/3 | 0/5 | unchanged | unchanged | | Diff pass | 10/11 | 4/4 | 6/7 | 7/9 | 3/5 | The two lightly edited units converged in one or two reads. The unit carrying the new rule did not. Each of the two granted rounds fixed the false claim it was granted for and drew a narrower one in its place: the first made an intent unit the carrier's own, the second files every intent-unit finding at the source, which a per-repo intent section such as Repository Layout does not have. That is the pilot's curve, and the next clause would draw the next one. ## Open `introduced` findings, reported rather than fixed These stand for the maintainer. My recommendation is to merge with them recorded on #1331 and let #1317's one-home pass, which this rule now plainly needs, settle the carrier routing in one place. 1. A per-repo intent section (`GOVERNANCE.md` Devcontainer and Repository Layout, a repo's own `CODESTYLE.md` additions, a "Disproved Claims" ledger) has no source defect, so "filed there too ... fixed at the source" files carrier-local noise on a hub tracker. The Verification Discipline qualifier it drops is "since every other carrier holds it too". 2. The carrier clause drops the `pre-existing` condition the hub-side rule carries, so read literally every carrier finding on an intent unit goes to the tracker, against the closing sentence. 3. The opener "turns on whether it is `pre-existing`" is falsified by the carrier clause, where fidelity decides. 4. "gathers onto" names no action, and a closed tracker for a defect the hub already fixed reads as "none is open", so a carrier on stale text files a new tracker for a settled defect. 5. The fidelity branch names no source for a unit's fidelity, `spec/files.json`, and covers verbatim and intent while the manifest also carries `verbatim-tree`, which is how this skill itself reaches a carrier. 6. The tracker retitle obligation sits only in this merge-time checklist, and a heading rename happens under skills that never route here. Copilot's open thread on the head asks the same. 7. A carrier's finding sits on a `.github/skills/` path that no unit key names, so the text gives it no mirror-to-source mapping to find the unit or its tracker. 8. The "Markdown" qualifier excludes the non-Markdown units `list` names without saying why. Deliberate, the issue's own "correct for code". 9. The sweep bound is file-granular where the canonical pass reads by unit and `backlog-burndown` bounds a change to the units the issue names. The `backlog-burndown` half is #1323's. 10. "and the finding is being fixed" means a finding deferred under outcome 4 owes no sibling sweep, so the class is lost on a deferral. 11. The local pass files a `pre-existing` finding "once" with no tracker, so the same defect gets an issue from the local pass and a tracker entry from a PR reviewer. A #1317 candidate. 12. A wrong `pre-existing` finding lands on the tracker unjudged. That is the issue's design, batch and move on, with judgment deferred to the tracker. 13. Every new sentence exceeds `comment-and-doc-style`'s 25-word cap for new prose, an opt-in check the tree's existing prose predates. Recorded as a coupling rather than a defect: item 2 hard-codes a reviewer footing the evaluation doc marks revisable, and its citation of a hub-only doc from a carried skill falls under no rule `carried-doc-references` states, which the diff pass flagged as uncovered rather than judged. ## Pre-existing findings, filed - #1331, the Merge Gate unit's tracker, 9 items. - #1332, the agent-conduct unit's tracker, 4 items. - #1327 items 88 to 97 for "Verification Discipline", which #1315 will split into a per-unit tracker whose title carries the key. ## Verification Full local gate set per `OPERATIONS.md` "Local Verification", 1060 tests, all green. Three whole-unit passes and one diff pass, each read three times, recorded. Pre-push hook passed both checks. Relates #1311, #1314, #1315, #1317, #1327. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
repo-config/labels.json declares the fleet label set, the triage kinds gate, script, prose, decision, and chore, the review classes introduced and pre-existing, and the labels every fleet repo already shares. configure.sh apply creates or updates each declared label by name and deletes nothing, and check asserts each on name, color, and description while reporting undeclared labels without judging them. A shared pre-flight validator refuses an empty or out-of-contract payload before any write. The repo-config README, docs/repo-config.md, OPERATIONS.md, STANDUP.md, and AUDIT.md section 6 name the label set where they enumerate what the script applies or checks. Part of #1315.
Part of #1317, the mechanism pull request its Scope names first. The inventory it required is posted on the issue in three comments, and the per-class pull requests follow this one. No live include region lands here. ## What changes - **`scripts/build_dist.py` fills include regions.** A skill source may hold `<!-- include: <path> > <heading> -->` ... `<!-- /include -->`, and the generator replaces the region's content with the body under that heading of the named file, one blank line each side. The key is the same `<path> > <section>` vocabulary `canonical_review.py` keys a unit on, and that engine now reads the delimiter from `build_dist` rather than declaring its own. Any heading level from two resolves, matched case-insensitively the way `spec/audit.py` matches a declared section, and the region ends at the next heading of the same or a higher level. A source can be any regular file under the repository root, including a sibling skill, and a source that carries regions of its own is read as its filled text. Fence state comes from `spec/audit.py`'s own step function, so a marker or heading shown inside a code sample is content. - **The fill lands in `.agents/skills/` itself.** Codex and opencode read that tree directly, so a region left empty there would hand them a skill with a hole in it. The mirrors then carry the filled text and the per-skill digests hash it. A file with no region is never rewritten, and a CRLF file keeps its endings. - **`--check` holds every region to its source.** A hand edit inside a region and a source edit nobody regenerated for both exit 1, naming the file. A key that no longer resolves, a cycle, a nested or unterminated region, a path outside the root, through a symlink, or under a generated tree each exit 2, the same code a symlink under the source tree already uses, since regenerating cannot repair any of them. - **The rule has one home.** `AGENTS.md`'s no-restatement sentence now names the include as the one sanctioned full second statement, and the `skill-lifecycle` Skill carries the mechanism, the check, and a third doc-packaging shape, "Included content". `docs/fleet-map.md` and `scripts/README.md` describe the generator accordingly. ## Verification - `scripts/tests/test_build_dist.py` gains 17 cases covering the fill, both generated trees, idempotence, the untouched no-region file, the hand-edited region, the edited source, the renamed heading (raises rather than reads stale), the exit codes 1 and 2 through `main()`, case-folded and nested heading levels, ambiguous headings, markers and headings inside fences, a source with regions of its own, a cycle, four malformed shapes, five refused source paths, CRLF preservation, and a region in a `references/` file. All 83 cases pass. - Watched failing live against the real tree, with a throwaway skill including `GOVERNANCE.md > Representative Data in Agent-Authored Text`: the fill landed the section body, a hand edit inside the region made `--check` exit 1 naming the file, a regenerate restored it, and re-casing the heading in the key made `--check` exit 2 with the unresolved heading named. The probe was then removed and `--check` reports current. - The whole `OPERATIONS.md` "Local Verification" gate set was run. Every gate exits 0 on the final tree, including `build_dist.py --check`, `canonical_review.py check`, `spec/validate.py`, `docker_lint.py`, and both `prose_lint.py` invocations. ## Read record Every pass ran at the strongest tier this session can name, one reviewer per unit, and every pass is recorded whatever it found. Two rounds of edits were the budget, one budget across the carried and diff passes, and the maintainer granted a third, a fourth, and a final code-only round on this pull request. `introduced` over total per read: | Unit | R1 | R2 | R3 | R4 (granted) | R5 (granted) | R6 (granted, code only) | | --- | --- | --- | --- | --- | --- | --- | | `skill-lifecycle > (preamble)` | 0/1 | unchanged | unchanged | unchanged | unchanged | unchanged | | `skill-lifecycle > The Pipeline` | 6/8 | 4/6 | 0/3 | 2/3 | 3/6 | unchanged | | `skill-lifecycle > Changing or Retiring a Skill` | 2/4 | 0/4 | unchanged | unchanged | unchanged | unchanged | | `skill-lifecycle > The Doc-Packaging Pattern` | 4/7 | 4/6 | 2/6 | 2/5 | 1/4 | unchanged | | `copilot-instructions > Reviewing Carried Fleet Content` | not yet edited | 2/6 | 3/5 | 2/5 | 3/5 | unchanged | | Diff pass, diligence read before the first commit | 8/10 | | | | | | | Diff pass, recorded after the first commit | | | 10/10 | | | | | Diff pass, recorded after the first granted round's commit | | | | 10/10 | | | | Diff pass, recorded after the second granted round's commit | | | | | 4/4 | | | Diff pass, recorded after the final round's commit | | | | | | 6/6 | **Introduced and fixed.** Round one: the audit import is lazy so the installer's Python floor is unchanged, cycles compare files rather than spellings, a key must be spelled as the tree spells it, any symlink on the path is refused, a symlinked skill directory is refused before any fill, an indented marker or heading is content, an empty body is refused, mixed line endings in a file holding a region are refused. Round two: the source-set sentence, the ledger-vocabulary claim, the retire and rename bullets, the third doc-packaging shape, the runbook's routing of a defect inside a region. The granted round, commit 9af52db: the `sys.path` insert is guarded, a source holding text around its own region renders single blank lines, a region outside the skills tree is refused when a key reaches it, a missing path is reported as missing, a lone CR is a third ending, a body leaving a fence open is refused, the three "one place hand-edited" sentences except regions, the two exit-2 lists match, the doc-packaging shape states the doc side's sentence and its action, and the runbook names the trees it bans comments on and routes a downstream include-region defect to the summary. **Introduced and fixed in the second granted round, commit 9ff4402:** the blank-line collapse runs outside a fence only, a region in any file the walk does not visit is refused when a key reaches it, the test fixture is a mixin so the base cases run once, `AGENTS.md` says "cannot drift undetected", the scripts README narrows the ledger claim to the delimiter, the skill says the bytes change on the regenerate and reports drift as stale rather than as a refusal, the doc-packaging paragraph tells a disagreement from an edit, the `_exact_case` rationale matches the code, and the runbook drops its redundant clause and names the nested-region case. **Introduced and still open after the second granted round, put here with counts rather than edited further.** Seven, all prose, none on code: 1. `The Pipeline`: "a skill file or source that is not UTF-8" exits 2 only for the Markdown files the walk decodes, so a non-UTF-8 `references/*.txt` or `scripts/` file is copied into both distributions and `--check` exits 0. 2. `The Pipeline`: "exit 2 rather than 1" reads as the unrenderable region's code alone, where a symlink anywhere under the skills tree and an unreadable generated file also exit 2, and the unit names neither. 3. `The Pipeline`: a source need not be tracked, so an untracked or ignored file fills the region locally and exits 2 in CI where the file is absent. 4. `The Doc-Packaging Pattern`: the "Included content" shape has no exemplar and no doc-side sentence exists in the tree, and will not until a per-class pull request lands the first include. 5. `Reviewing Carried Fleet Content`: "that key" has no antecedent, since the appositive shows the marker text without saying that `<path> > <heading>` is the key. 6. `Reviewing Carried Fleet Content`: the nested-region sentence names an inner key no copy shows, because the render drops the source's own markers, so the object it names exists only in the hub's authored tree. 7. `Reviewing Carried Fleet Content`: "When the pull request changes the file the fix belongs in" can never be true downstream once the fix is placed in a hub file, and the unit leaves undecided whether a pull request touching the local copy of that path qualifies. The recorded diff pass after the second granted round raised four, down from ten and ten: three small code items and one design divergence, all fixed in the final round. **Fixed in the final round, commit 616d9c0, code only:** a heading is matched at any indentation, the way `spec/audit.py` and `canonical_review.py` read one, so the three tools split a document alike, and a level-one heading ends a body while a key still names level two down. The blank-line collapse skips an indented code block as it already skipped a fence. The symlink test's docstring gives the reason the include walk left it. The recorded diff pass after the final round raised six, all introduced, none in the granted scope and none a regression of a fix. Listed here with the seven prose items above, the thirteen open items on this pull request, carried by #1380 on the maintainer's decision after the final round: 8. `scripts/build_dist.py` `heading_body`: a body now ends at a level-one heading, where `spec/audit.py` and `canonical_review.py` match only `## ` and run through one, and the heading regex accepts a tab after the hashes where they do not, so the "split alike" claim in two comments holds for level-two headings only. 9. `scripts/build_dist.py` `filled_lines`: a marker may sit up to three spaces indented, but the body is written at column 0 and the closing marker keeps its indent, so a region opened inside a list item renders outside it. Either refuse an indented marker or say the allowance covers the marker, not the region. 10. `scripts/build_dist.py`: a near-miss marker, `<!-- include A.md > B -->` without the colon or one with trailing text, matches nothing and is content, so the region is never filled and `--check` exits 0. Worth refusing any HTML comment line beginning `<!-- include`. 11. `scripts/README.md`: the exit-2 cause list omits a body leaving a fence open, a region in a file the walk does not visit, and a file that is not UTF-8, which the skill lists. 12. `AGENTS.md`'s closing paragraph and `docs/fleet-map.md` still say a skill is "hand-authored" at the skills tree without the include-region qualifier the two READMEs received. 13. `scripts/build_dist.py` `_unindented`: counts spaces only, so a tab-indented code block's doubled blank lines collapse. Narrow, since the Markdown lint keeps hard tabs out of sources. Copilot's round-3 suppressed finding on the doubled include walk in `--check` is deferred to #1379. **Pre-existing, gathered onto the units' trackers** per the Merge Gate's batch rule: #1373 (preamble), #1374 (The Pipeline), #1375 (Changing or Retiring), #1376 (Doc-Packaging), #1377 (Reviewing Carried Fleet Content), 22 lines across the five. **A design consequence the maintainer may want to decide separately:** an include region makes every skill unit carrying it change bytes when its source section changes and the tree is regenerated, so one source edit retires the source unit's pass and each including unit's pass, and each is read again in the skill's own context. The skill states this as the cost. The alternative, excluding a region's bytes from the including unit's digest, is an engine change this pull request does not make. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
… Include Regions (#1382) Part of #1317, class 2 of its inventory. Lands the first live include regions, settles #1380 items 1, 5, and 10, and settles the `agent-conduct` surface of #1237 and the eleven-of-twenty finding in #1164. ## What changed - **`agent-conduct` carries its three `GOVERNANCE.md` sections whole.** "Verification Discipline", "Communicating with the User", and "Durable Knowledge and Self-Improvement" are now include regions `scripts/build_dist.py` fills, replacing the condensed lists the inventory classed as nineteen drifting rows. The skill keeps its own text only where the rule has no home in either document (asking when the user can cheaply confirm, and the irreversible step staying the maintainer's, both listed under #1317's "no home" set for class 14) and where it points at a sibling rather than restating it. - **The doc side states the shape.** Each of the three sections ends with the one sentence naming the skill that includes it, per `skill-lifecycle` "Included content", and that bullet now names `agent-conduct` as its exemplar (#1380 item 10) and states what the shape requires of a source: it is read outside its own document, so it names a sibling section by document and heading rather than as above or below, and links to no file by a relative path. The three sections' two sibling references and one relative link were fixed to match, since the include is what made them wrong. - **A near-miss marker is refused (#1380 item 1).** `build_dist.py` now refuses any line outside a code block that begins like an include marker and matches neither form, in a skill or in a source it reads, since read as content it leaves the region unfilled with `--check` exiting 0. The test was watched failing before the fix. The exit-2 cause list in `scripts/README.md` now also carries the open fence, the unwalked file, and the non-UTF-8 file (#1380 item 5). ## The digest question #1317's closing comment left one design call for this pull request: whether a region's bytes should be excluded from the including unit's digest in `scripts/canonical_review.py`, so a source edit does not retire the pass on every skill that includes it. Decision: **not excluded, engine unchanged**, for three reasons. The ledger's claim is that a reviewer read these bytes, and excluding generated bytes changes that claim to one about authored bytes only. A source that is not itself a carried unit (a section of a hub-only doc, or of a skill file the manifest does not carry) would then be text no pass ever reads whole. And the cost is unmeasured, since this pull request rewrites every including unit anyway. The cost shows on the next edit to one of the three sections, and if it bites, the exclusion is its own engine change, conditional on the source being a unit. Findings a reviewer raises inside a region belong to the source unit and are filed there, which is how the Copilot runbook already routes them. ## Measurement `introduced` over total per read, `fable` tier, one reviewer per unit, the whole-unit pass before the commit and the diff pass after it, two edit rounds as the budget. | Unit | R1 | R2 | R3 | | --- | --- | --- | --- | | agent-conduct > (preamble) | 0/1 | 0/1 | 0/0 | | agent-conduct > Why This Exists | 0/0 | | | | agent-conduct > Before Claiming Done | 2/3 | 0/2 | | | agent-conduct > Before Assuming | 2/3 | 0/0 | | | agent-conduct > When a Failure Surfaces a Lesson | 1/3 | 0/1 | | | agent-conduct > Delegation, in One Paragraph | 0/0 | | | | skill-lifecycle > The Pipeline | 0/1 | | | | skill-lifecycle > The Doc-Packaging Pattern | 0/1 | | | | GOVERNANCE.md > Verification Discipline | 0/1 | 0/2 | | | GOVERNANCE.md > Durable Knowledge and Self-Improvement | 0/3 | 0/5 | | | GOVERNANCE.md > Communicating with the User | 0/0 | 0/2 | | | Diff pass | 1/1 | | | The five introduced findings had three root causes, all in text this change wrote: the doc-side sentence read "This section" from inside the skill, where the pronoun binds to the skill's own section, so it now names its home; my closing sentence counted one review pass where the section requires two; and a pointer claimed the Boundaries section answers a past session's grant, which it does not. Every pre-existing finding is on its unit's tracker: #1361, #1366, #1374, #1376, and the new #1381 for "Communicating with the User". Two units that read clean in round 1 raised findings in round 2 (five on "Durable Knowledge" against three), the non-convergence the pilot measured, all on rule text this branch did not write. ## Open, past the budget The diff pass, run after the second edit round, raised one introduced finding on the new refusal in `scripts/build_dist.py`: `_INCLUDE_LIKE` matches `<!--` and not the three-dash comment opener, so a region written as `<!--- include: ... --->` with a matching `<!--- /include --->` is content on both lines, fills nothing, and passes `--check`, the hole the refusal exists to close. A three-dash open with a two-dash close is already caught as an end marker with no region open. The fix is one regex, `^<!--+\s*/?\s*include\b`, and one test case. The two-round budget is spent, so per the stop rule I have not made it. **Requesting a scoped grant: one code-only round for that regex and its test, watched failing first.** With no grant the branch is mergeable as is, since `develop` refuses nothing today and the gap is one typo shape narrower than before. ## Verification Full local gate set per `OPERATIONS.md` "Local Verification": ruff check and format, mypy, the unit tests with the three selftests under coverage, `build_dist.py --check`, `canonical_review.py check`, `repo_gate.py`, both `prose_lint.py` invocations plus the diff mode, `spec/validate.py`, and `docker_lint.py`. All green at the head this description was written for. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
… Siblings by Heading (#1383) Class 3 of #1317, one pull request under the stop rule. Settles #1288 in full. ## What changes - **`drive-pr` "Disposing of Every Finding" carries `pr-review-conduct`'s five outcomes whole**, as an include region `scripts/build_dist.py` fills from `.agents/skills/pr-review-conduct/SKILL.md > Every finding ends in one of five outcomes`. It is the first include whose source is a sibling skill rather than a governance document, which "The Pipeline" already permits. The condensed mapping it replaces had drifted on outcome 2's scope, outcome 3's trigger and ordering, and a step-ref into its own loop, the three defects #1288 names. - **The source section reads whole outside its file.** Its one reference to "step 1's push" now names `pr-review-conduct` "Expected review loop" by heading, it ends with the sentence naming `drive-pr` as the skill that includes it, per `skill-lifecycle` "Included content", and the dangling "this" in outcome 1 now names the pass it meant. - **Nineteen step-refs become the sibling's document and heading plus what is needed from it**, across `drive-pr` (six), `local-strict-review` (five), and `backlog-burndown` (eight). The five references into `WORKFLOW.md` D-numbers, the write guard's rule 6, and the agent-safety README's requirement 6 are not references between skills and stay, per the issue's own scope line. - **`drive-pr`'s frontmatter** no longer lists four of five outcomes as if complete, names the seat that cannot reach the maintainer, and states the promotion end state as every Merge Gate item except the maintainer's explicit permission, the one item the drive's seat cannot satisfy. Step 8 of "The Drive Loop" states the same end state, since the diff pass found the description had been a faithful restatement of that step's gap. - **Digest engine unchanged**, per the class 2 decision on #1317. The region's bytes stay in the including unit's digest. ## Measurement, `introduced` over total per read Nine units read whole at the `fable` tier, one reviewer per unit, two rounds as the budget, plus a diff pass each round. HEAD was the merge base when the ledger was recorded, and the branch carries one commit. | Read | R1 | R2 | R3 | R4 | | --- | --- | --- | --- | --- | | `drive-pr` (preamble) | 2/2 | 0/0 | | | | `drive-pr` Disposing of Every Finding | 1/3 | 0/2 | 0/2 | | | `drive-pr` The Drive Loop | | 0/7 | | | | `pr-review-conduct` Every finding ends in one of five outcomes | 0/4 | 1/5 | 0/4 | | | `local-strict-review` Disposing of Findings | 1/5 | 0/2 | | | | `local-strict-review` When to Run It | 0/3 | | | | | `backlog-burndown` Dispatching a Worker | 0/4 | | | | | `backlog-burndown` The Promotion Boundary | 0/4 | | 0/5 | 0/8 | | `backlog-burndown` What Invoking This Skill Authorizes | 0/3 | | | | | Diff pass | 1/1 | 1/1 | 1/2 | 0/0 | The four round 1 `introduced` findings had three root causes, all in framing text this change wrote: a seat with no antecedent, an end state that dropped the Merge Gate's review-on-head item, and a sibling rule named without its heading. Round 2 introduced one and the first granted round's diff pass one more, both fixed under grants below. The pre-existing findings are gathered on the four file trackers (#1337, #1343, #1346, #1349), and the `drive-pr` tracker's item 5 is half settled here. ## The two granted rounds Two `introduced` findings were open after the second round, both one-sentence edits and both also raised by Copilot's first round, and the maintainer granted one round for both. Commit 5865970 makes `backlog-burndown` "The Promotion Boundary" step 2 state the end state `drive-pr` step 8 states, and names the `local-strict-review` pass where outcome 1 said "that pass". Three units were read whole again and recorded, and neither edit drew a finding. The diff pass on that commit raised one `introduced` finding, again a pronoun: the rewritten step 2 said "nothing in it terminates on its own" with "it" twenty words from "that loop" and two new nouns nearer, and Copilot's round on the same head raised it as a suppressed finding. The maintainer granted the one-word fix, commit 52ff72e binds it to "that loop", the unit was read whole once more and the diff pass on that commit found nothing. The same passes read the section's opening sentence, "driven to green and left for the maintainer", as a looser statement of the end state, pre-existing, filed on #1337 with the round's other pre-existing findings. Two style notes are taken as they stand, each on a sentence already rewritten twice: "the promotion half of `drive-pr` "The Drive Loop"" where `drive-pr` itself says "promotion steps", and the one-word line the reflow leaves. One round 2 finding is declined on precedent: the include's closing sentence reads as a third-person statement about `drive-pr` from inside `drive-pr`. That is the doc-side sentence the "Included content" shape places inside the section, the same as `agent-conduct` over its three `GOVERNANCE.md` sections, and the price of a byte-identical include. Closes on promotion: #1288 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…r Its Fourteen Restatements (#1384) Class 4 of #1317, scoped to one file, `.agents/skills/backlog-burndown/SKILL.md`, plus its two generated mirrors and digest. ## What changed - **The two `narrowing` rows are cut to the narrowing itself** (#1305). "Scope" says the run is narrower than `GOVERNANCE.md` "Repository Boundaries and Write Safety" requires and no longer repeats what that section says about reads or about the owner bound. "The Two Seats" had no narrowing once the restated rule was cut, since a worker is exactly the dispatched task `AGENTS.md` "Session Scope" describes, so its worker bullet is a plain pointer. - **Thirteen of the fourteen other inventory rows become pointers**, each naming the home by document and heading and keeping only the skill's own consequence: the question-issue prompt in "Ranking", the failed-fetch stop in "Grouping and File Claims", the pre-push pass and the shared-checkout sentence in "Dispatching a Worker", the two tier bullets in "Choosing the Worker's Model Tier", the wait bound and the dirty-tree sentence in "Bounding the Wait on a Worker", the escalation bullet in "Raising a Blocked Question", the operational-model paragraph, step 3, and step 5's rebase sentence in "The Promotion Boundary", and the working-notes bullet in "Run State". - **One row is left as it stands**: the inventory's `AGENTS.md` "Where the Rules Live" condensation at "Dispatching a Worker" is the skill stating its own procedure, and the skill is the home of that. The restatement is `AGENTS.md`'s paragraph about this skill, which is class 8's deletion-and-pointer work. - **One edit outside the inventory's fourteen rows**, requested on #1323: the "Bounding a Prose Group" budget bullet is a pointer at `local-strict-review` "Disposing of Findings", since #1312 landed the number the bullet used to state a second time. ## What did not change The eight step-refs in this file were class 3 (#1383). The "grant is bounded by the session" and "Closing keywords go on the promotion pull request" statements have no home and stay, per the inventory's class 14 list. The pre-existing findings on #1337 are untouched, this change fixes none of them and states no new claim in their sentences. ## Verification - `python3 scripts/build_dist.py --check`, `python3 scripts/prose_lint.py . --diff origin/develop` with the CI check list plus `sentence-length`, `python3 spec/validate.py`: clean. - Carried-content pass: ten units of this file read whole at the `fable` tier, one reviewer per unit, recorded in `reports/canonical-review.json`. Counts are in the pull request's read record below. - Diff pass recorded per `local-strict-review`. ## Read record, `introduced` over total per read Ten units read whole at the `fable` tier, one reviewer per unit, before the first commit. Round 2 read only the two units round 1's introduced findings changed, round 3 read the one unit the first diff pass's finding changed, round 4, a one-round grant past the budget, read the one unit the second diff pass's finding changed, and round 5, a second deletion-only grant, read the two units the third diff pass's findings changed. | Read | R1 | R2 | R3 | R4 | R5 | | --- | --- | --- | --- | --- | --- | | Scope | 0/0 | | | | | | The Two Seats | 1/2 | 0/0 | | | | | Ranking | 0/1 | | | | | | Grouping and File Claims | 0/3 | | | 0/2 | | | Bounding a Prose Group | 0/1 | | | | | | Dispatching a Worker | 0/2 | | | | | | Bounding the Wait on a Worker | 0/3 | | | | 0/3 | | Raising a Blocked Question | 0/1 | | | | | | The Promotion Boundary | 1/7 | 0/6 | 0/4 | | 0/7 | | Run State | 0/1 | | | | | | Diff pass | | 1/1 | 1/1 | 2/2 | 0/0 | The six introduced findings: the worker bullet attributed the one-worktree rule to `AGENTS.md` "Session Scope", which never mentions worktrees, the operational paragraph's pointer left "What the model adds ... a direct push" without the clause that anchored it, step 2 of "The Promotion Boundary" still cited "Bounding a Prose Group" as the discipline that sets a budget after that section stopped setting one, the failed-fetch sentence's "pushed since" lost its time anchor when the restated clause was cut, the operational paragraph's "so confirm" drew a cadence question from a premise that no longer stated one, and "doing it by proxy is still doing it" lost its noun when "reaching into a tree" was cut. The first two were fixed before round 2, the third before round 3, which spent the budget, the fourth under the maintainer's first one-round grant before round 4, and the last two, both deletions, under a second grant before round 5. Five of the six are a reference or a connective left standing when the restated clause beside it was deleted, the class 3 curve again, and the third diff pass found two of them on sentences the first two diff passes had read. Every pre-existing finding is on #1337, items 28 to 46, and the repeats of items 3, 13, 15, 22, and 27 are not listed again. Closes on promotion: #1305 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…1385) Class 5 of #1317, the d-guarantees catalog, on the maintainer's call in this session: include `WORKFLOW.md` section 4 whole, and pointer the skill's `GOVERNANCE.md` restatements. ## What changed - **The condensed catalog is retired for a generated include.** `references/d-guarantees.md` keeps its path and is now a title, one framing sentence, and one include region filled from `WORKFLOW.md > 4. Behavioral Contract: Expected Outcomes`, so the skill carries the contract's own text and the condensation that #1205, #1212, #1250, and #1240 found drifting no longer exists. The include carries all nine D-subsections, byte for byte. - **Section 4 gains the constraints an included source carries.** Its two cross-section references name the document and heading (`WORKFLOW.md` section 3's "Output Seam by Destination" bullet, `WORKFLOW.md` section 5B's S9), the D9 heading's "(See Section 2)" becomes a sentence naming what section 2 resolves for D9.1 and D9.2, and the section ends with the one-sentence formula naming its includer that `GOVERNANCE.md`'s three included sections use. The two `spec/project-types.json` `workflowRef` anchors that named the D9 heading's old slug name its current one. - **The eighteen `SKILL.md` rows against `GOVERNANCE.md` homes become pointers**, each naming the home by document and heading and keeping only the skill's own consequence: "Why This Exists" no longer restates the precedence claim, "Outcomes, not bytes" and "Reached, not carried" point at "Foundational Principles" and "Hub-Hosted Tooling", the nine style bullets become "Style Rules", a pointer at "Workflow YAML Conventions" and `WORKFLOW.md` section 2, the three spine rows point at "Release Model" and "Workflow YAML Conventions", and "After Any Workflow Edit" points at "Verification Discipline" for the whole-gate rule it used to contradict, dropping the single-linter invocation. - **The surfaces that cite the skill as an example say which shape it now uses.** `skill-lifecycle` "The Doc-Packaging Pattern" names it under kept authority for `WORKFLOW.md` outside section 4 and under included content for section 4, and `docs/fleet-map.md`'s G9 resolution and the skill's overlap line say the same. - **The ledger drops six entries** for the retired catalog's sections and the renamed heading, which the engine reports as orphans and leaves to a reader to prune. The ledger's note says it is never written by hand, and the engine has no prune verb, which #1387 files. ## What did not change The spine's condensations of section 4 itself are `SKILL.md`'s summary under `skill-lifecycle` "Split bulk into `references/`", one read from the whole text, and section 4 rows were not in the inventory. `references/test-methodology.md` stays true as written. The skill's frontmatter description is untouched. `docs/fleet-map.md`'s checked G9 roadmap row still says "guarantee catalog", declined as a record of the delivery that closed the gap at the time, the way G8's row records its own history, with the G9 detail block the file's maintenance rule names updated. ## Verification - `python3 scripts/build_dist.py --check`, `python3 scripts/prose_lint.py . --diff origin/develop`, `python3 scripts/repo_gate.py --check eol`, `python3 spec/validate.py`, `python3 scripts/tests/test_build_dist.py`, markdownlint and editorconfig-checker through `scripts/docker_lint.py`: clean. The `sentence-length` check on the diff flags only the included section 4 text, pre-existing sentences on touched lines, and the one-sentence include formula, every other sentence this change wrote is under the cap. - Carried-content pass: nine units read whole at the `fable` tier, one reviewer per unit per round, recorded in `reports/canonical-review.json`. Four diff passes recorded per `local-strict-review`, one after each commit. ## Read record, `introduced` over total per read Eight units in round 1, then only the units the previous round's fixes changed. Rounds 1 and 2 were the budget. Rounds 4, 5, and 6 were three maintainer grants under the stop rule, each scoped to the items the preceding diff pass named. The diff pass row sits in the column of the round it followed. | Read | R1 | R2 | R3 | R4 | R5 | R6 | | --- | --- | --- | --- | --- | --- | --- | | d-guarantees.md (preamble) | 0/0 | | | | | | | Why This Exists | 0/0 | | | | | | | How the Contract Is Read | 1/4 | 1/3 | 0/3 | | 0/1 | | | Style Rules | 3/3 | 1/2 | 0/0 | | | 0/0 | | The Core Behavioral Spine | 0/2 | | | | | | | After Any Workflow Edit | 1/1 | 0/0 | | | | | | WORKFLOW.md section 4 | 1/7 | 1/5 | 0/7 | 0/6 | 0/11 | | | The Behavioral Contract (include) | 0/8 | 1/6 | 0/7 | 0/3 | 0/4 | | | skill-lifecycle, The Doc-Packaging Pattern | | | | 1/2 | 0/0 | | | Diff pass | | | 3/3 | 3/3 | 1/1 | 1/1 | The round 1 introduced findings: the style heading promised rules its pointer body no longer named, its line-ending sentence claimed "Workflow YAML is LF" from a section that does not say so, "the actionlint wrapper" named a single-linter wrapper the hub-only section never describes, the D9 sentence "keeps the conventions behind these items" was false for D9.4, and "section 4" in a rewritten sentence named no document. Round 2: the pointer's "editing a workflow" missed the composite actions the skill also fires on, the rewritten hook sentence had dropped the "for what is its own" clause that made the hook conditional, and deleting the D9 pointer left D9.2's "the suffix rules" with no antecedent, one root cause the two section 4 reads both raised. Round 2 also raised the absence of a summary under the pointer, declined as a preference against the pointer shape, with the four rules the description names each present in the include. The grants. The first diff pass found `skill-lifecycle` still naming this skill as the kept-authority example, `docs/fleet-map.md` describing the removed shape, and the ledger's never-by-hand note against the prune, and the round 4 read of the packaging section found the closing paragraph in three sentences where that section prescribes one. The second diff pass found the D9 rename had broken two `workflowRef` anchors, the example narrowed to section 5 where sections 1, 3, and 6 are summarized the same way, and "Reached, not carried" without the job-graph qualifier that lets a repo own its release task. The third found the style pointer naming `GOVERNANCE.md` alone where the LF rule lives in `WORKFLOW.md` section 2. Every whole-unit read on unchanged text widened again, section 4 going 7, 5, 7, 6, 11 with nothing introduced after round 2, and its pre-existing findings are #1369 items 23 to 51, the skill's own are #1386, and the packaging section's is #1376 item 4. Copilot ran one round with full coverage on the first head and raised one thread, a misparse of the D9 sentence, fixed in 2451e2c. Closes on promotion: #1205, #1212, #1250, #1240 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…1388) Class 6 of #1317, `WORKFLOW.md` section 2 against `GOVERNANCE.md` "Workflow YAML Conventions", on the maintainer's call in this session: pointer, not include, since the include generator walks only `.agents/skills/` and an include into `WORKFLOW.md` would need an engine change first. ## What changed - **Section 2 becomes a pointer.** It keeps its heading and number, so every "section 2" reference and its slug still resolve, and its eleven condensed bullets, the twelve inventory rows against the home, become one paragraph naming `GOVERNANCE.md` "Workflow YAML Conventions" and nothing of its content. The line-endings bullet had no home in that section, its home being the `comment-and-doc-style` Skill's policy that `GOVERNANCE.md` "Documentation Style Conventions" routes to under "Line Endings", so it becomes a pointer at that route rather than a rule moved into the YAML section. The row that contradicted D7.3, the both-forms boolean comparison, goes with the bullets, and the conflict it exposed is now the home's own, on #1367 item 1 and #1369 item 35. - **The sentences that cited section 2 for a rule name the home.** The preamble's opening sentence, its audit verb, and its canonical-scope note, which used to say section 2 restates the conventions so the file reads on its own, the D9 preamble inside section 4, the D8/D9 walkthrough in 5A, and the operational bullet in section 6. The generated include in `references/d-guarantees.md` and the three distributions regenerate from the D9 sentence. - **The two homes stop claiming to be two.** `GOVERNANCE.md`'s section no longer says it and `WORKFLOW.md` keep the full rules with itself winning on overlap, and the skill's "Style Rules" points at the home and at the line-ending policy's skill instead of at section 2. - **The cut line-endings bullet's rule is retired, not moved.** "Workflow YAML is LF (Actions and Dependabot rewrite it that way)" had its only home in section 2, since the line-endings policy's operational section requires a CRLF default in both files and never exempts workflow YAML. A grant moved it into that policy, and the whole-unit reads the move owed showed its reason false under the configuration the policy prescribes: with the paired `* text=auto eol=crlf` git stores LF and checks out CRLF, so a Dependabot commit of LF bytes leaves nothing mixed, and Actions never writes a workflow file. On the maintainer's call the rule is deleted rather than carried without its reason, and the policy file is back at its `develop` text. The fleet's one CRLF config repo carries such a pin by hand, with the same reason in its comment, and that is left to the maintainer. - **The ledger records a whole-unit pass over each of the eleven units this moves**, per `local-strict-review` "The Carried-Content Pass". ## What did not change The "Release Model" overlap in the canonical-scope note stays, since it is a section 3 row set the inventory lists under that home, not this class. D9's five style guarantees in section 4 stay as written, since section 4 rows were not in this class and D9 states outcomes a workflow must meet rather than the conventions' text. `README.md`'s "Conventions" list is class 13. Two phrases the condensed bullets carried and the home does not go with them: "Lowercase, hyphen-separated" on the Filename bullet, which the inventory row already listed as drift the condensation added to a suffix-only rule, and "Grant least privilege" on the permissions bullet, which D7.2 states as the one entry point that needs the scope. The third diff pass raised the first as a rule retired without a home, and it is declined on the inventory's evidence rather than promoted into the home, since adding a case rule to `GOVERNANCE.md` is class 14's decision list. #1369 items 35 and 50 name "section 2" for a rule that now lives at the home alone, noted on that tracker rather than edited. ## Verification - `python3 scripts/build_dist.py --check`, `python3 scripts/prose_lint.py . --diff origin/develop`, `python3 scripts/repo_gate.py --check eol`, `python3 spec/validate.py`, `python3 scripts/tests/test_build_dist.py`, and markdownlint, editorconfig-checker, and cspell through `scripts/docker_lint.py`: clean. - Carried-content pass: eleven units read whole, one reviewer per unit per round, at the `fable` tier through round 10 and at the `opus` tier from round 11, when that tier stopped being reachable mid-drive, recorded in `reports/canonical-review.json`, two of them the line-endings policy sections no pass had read before, which the final diff no longer touches. Three diff passes per `local-strict-review`, one after each commit, the last recorded as the receipt. ## Read record, `introduced` over total per read Eight units in round 1, then only the units the previous round's fixes changed. Rounds 1 and 2 were the edit budget, round 3 is the read the round 2 fix owed, and rounds 4 to 6 are the maintainer's scoped grants under the stop rule, the first two answering the diff pass before them, the third and fourth answering what the grants' own reads found, the fourth a deletion, rounds 7 and 8 are the reads owed by the fix for Copilot's first round, the second push's two-round budget, and round 9 is the maintainer's fifth grant, un-enumerating the tie-break after the round 8 read found the three-section form naming no winner for a conflict with the Skill text a named section routes to, its Release Model half being #1206's own loop, and round 10 the sixth, dropping the line-endings clause the Copilot fix had added to the scope note after the round 9 read found "live in" false for a section that only routes to a Skill. The diff pass row sits in the column of the round it followed. | Read | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 | R11 | R12 | R13 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | WORKFLOW.md (preamble) | 1/5 | 2/4 | 0/4 | 0/2 | | | 1/2 | 1/1 | 1/1 | 0/1 | 0/1 | | | | WORKFLOW.md section 2 | 0/0 | 0/0 | | | | | | | | | 1/1 | 0/0 | | | WORKFLOW.md section 4 | 0/2 | | | | | | | | | | | | | | WORKFLOW.md section 5 | 0/7 | 0/6 | | | 0/2 | | | | | | | | | | WORKFLOW.md section 6 | 0/3 | | | | | | | | | | | | | | GOVERNANCE.md Workflow YAML Conventions | 0/1 | | | 0/2 | | | | | | | 0/3 | | | | Style Rules | 1/1 | 0/0 | | | | | | | | | | | | | The Behavioral Contract (include) | 0/5 | | | | | | | | | | | | | | AGENTS.md Where the Rules Live | | | | 0/3 | | | | | | | | | 0/5 | | line-endings.md Operational (config) repos | | | | | 2/2 | 1/1 | | | | | | | | | line-endings.md Scripts and extensionless executables | | | | | 1/5 | 0/1 | | | | | | | | | Diff pass | | | 2/2 | 2/2 | | 1/1 | | | | 1/1 | | 0/0 | 0/0 | The introduced findings, all on the pointer prose. Round 1: the Style Rules sentence said `GOVERNANCE.md` "Line Endings" keeps the line-ending policy where that subsection only routes to the `comment-and-doc-style` Skill, the same shape in section 2 and 5A, fixed as one class, and the preamble still called the document a mixture that includes code style. Round 2, both on the preamble sentences round 1 rewrote: "the `GOVERNANCE.md` section it points at" named one section where section 2 routes to two and 5C needs a third, and "pointed at rather than carried" was false because D9 carries five style guarantees. Round 3 raised four pre-existing findings and nothing introduced. The first diff pass then raised two introduced findings on surfaces no whole-unit read holds: the `AGENTS.md` "Where the Rules Live" row still said this section and `WORKFLOW.md` keep the full rules, and the two rewritten scope sentences had dropped the tie-break saying `GOVERNANCE.md` wins wherever the two overlap, narrowing the release one to section 3 while sections 3 and 4 still restate that section's bullets and D7.3 contradicts one, an added qualifier where the original had none. Both fixed in the first granted round, the tie-break restored unscoped. The second diff pass raised two more: the cut line-endings bullet, "Workflow YAML is LF", had its only home in section 2, since the line-endings policy's operational section requires a CRLF default in both files and never exempts workflow YAML while the fleet's one CRLF config repo pins its workflows to LF by hand, and the 5A sentence cited D9.5 for `.gitattributes`, which D9.5 does not name. The second grant moved the rule into that policy, its "Operational (config) repos" section stating the pin and its reason and "Scripts and extensionless executables" no longer saying the LF overrides are for POSIX-executed scripts only, and dropped the qualifier. The reads of the two policy sections that grant wrote raised three introduced findings on the granted sentences: the pin was written as a brace glob `.gitattributes` cannot expand, the operational sentence read as the only LF carve-out, and the scripts-section pointer claimed its sibling holds the POSIX-script exception. The third grant rewrote both sentences, and the re-read then showed the pin's reason itself false under the paired attribute, which the fourth grant answered by retiring the rule and returning the policy to its `develop` text, so the two policy sections are not in the final diff and the ledger's two entries for them record passes over text this branch held and no longer does. The granted round's three reads raised seven pre-existing findings and nothing introduced, the restored tie-break judged right on its own terms with the D7.3 conflict it overrules left at the home. One of round 3's four, that "keep workflows legible" mischaracterizes a section that is mostly safety rules, sits on a sentence this change re-routed, and it is classed pre-existing because the claim is #1206's own second item, filed before this change, the edit having touched only the route. The pre-existing findings, 54 in all, are filed: #1336 items 2 to 9, #1367 items 9 to 14, #1369 items 52 to 57, #1370 items 20 to 34, #1371 items 2 to 4, #1389, the tracker this class opens for the line-endings reference, items 1 to 5, and the preamble's on #1206, the open decision issue that already holds most of them, which gains the six it did not. Section 5 widened from 7 to 6 new findings on unchanged text across two reads, and the preamble from 4 to 2 to 4, the pattern #1385 measured. This pull request closes no issue. It removes two of #1206's preamble claims, the "restates them" sentence and the undrawn code-style boundary, and leaves that decision issue open. Copilot ran four rounds, one per head, with full coverage on each. Its first round raised two threads: a missing relative pronoun in two sentences, fixed in 1a8b243, and the opening sentence not naming the style home's section, answered in 1a8b243 by keeping the opening at the document rather than one section, since the round 7 read showed one named section to be one home where section 2 routes to two, and the scope note's attempt to name both drew a finding on each of the next two reads, so it names "Workflow YAML Conventions" alone as it did when rounds 3, 4, and 6 read it clean. Round 10 then raised that one-section form as omitting the line-endings home, the mirror of round 7, and it is classed pre-existing because the same sentence shape and omission stood on `develop` and #1206 already holds section 2's line endings against the overlap partition. The two readings are each right about the sentence and cannot both be satisfied by naming sections, which is the non-convergence #1385 measured, and the home question is #1206's to settle. Its second round raised two threads and one suppressed finding, all wording on sentences this change wrote, fixed in 571e504: the `GOVERNANCE.md` intro sentence split in two, section 2's "every other file" reworded, and "workflow style rules" in the opening. Round 11 read the three units those fixes moved and found one more on this change's own text, section 2's closing clause reworded earlier from a parenthetical into a "since" clause, which fixed the property its "necessary but not sufficient" claim is measured against and made the claim false, so `develop`'s parenthetical is restored verbatim and round 12 read it clean. Its third round raised no thread and two suppressed findings, both on unchanged text: the rules-map row reading as a fragment, fixed in 395024c with the reviewer's own connector, and the canonical-scope note's "(sections 3 to 6)" mislabel, answered in the pull request as byte-identical on `develop` and already #1206's item. Round 13 read the map whole and raised five more, none introduced. Its fourth round raised no thread and re-raised the "(sections 3 to 6)" mislabel alone, declined a second time on the maintainer's call, since the clause is `develop`'s own and #1206 holds both halves of it, the widened labels and the excluded section 1, where this finding would fix only the first. The fourth diff pass raised the un-enumerated tie-break as contradicting "authoritative for sections 3 to 6" two sentences earlier, the pair that stood on `develop` and that #1206 files as one paragraph giving two answers, so it is pre-existing too, and the second diff pass had asked for exactly that unscoped form. The pre-existing findings count is 44, #1206 gaining a fourth. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
First pull request of the #1311 reshape sequence recorded in [this comment](#1311 (comment)). It is one sentence, and the reason it is one sentence is the useful part. ## The change The preamble's verdict clause said a scenario's "observed" output, where 5B is headed "No Execution, Deterministic from the YAML" and tells the reader to "emit the predicted ... table". It also dropped the "applicable" qualifier that N/A handling depends on, omitted the third conjunct section 5's own Assessment carries, and called a mismatch a defect "not a style nit" while D9.1 through D9.5 state style rules as applicable guarantees whose failure is a defect by definition. Conjunct 1 keeps "every *applicable* guarantee holds" rather than Assessment's "every *applicable* 5A item passes". Those are not the same set, since a guarantee can be applicable while its 5A check is recorded N/A, and section 1 uses the guarantee form. Left as it was rather than settled here. ## Four corrections attempted and withdrawn Review disproved the premise under each, which is worth recording because three of the four looked obviously right when written. - **The line-ending fix acted on a tracker finding that is itself wrong.** #1206's L10 called section 2's "same line-ending policy as every other file" a misstatement. The routed-to rule puts YAML "workflow and non-workflow alike, no distinction needed" on the `[*]` default with no override, and `.editorconfig` names `*.bat`/`*.cmd` as "the one CRLF exception". Acting on L10 deleted a true statement. **L10 should be declined.** - **Widening the sibling scope to name `.github/workflows/` evidence** put `pyproject.toml` and the dependency manifests on this file's side of the WORKFLOW/CODESTYLE partition, which nothing in the tree resolves. - **Widening it to the composite actions** claimed territory `CODESTYLE.md` holds: `.github/actions/prose-gate/prose_lint.py` is the real 78 KB implementation, with `scripts/prose_lint.py` a ten-line shim, and it is linted by ruff and on the mypy path. - **Rewriting the two preamble framing sentences** drew 7 findings in one round and 7 in the next, including a dangerous one: dropping D1.3's layer binding would let a reader write `inputs.smoke != 'true'` at the workflow layer, where the operand-type cast to `NaN` makes the smoke gate pass on every smoke run. ## Two decisions this needs from the maintainer None of #1206's ten structural preamble items are settled, because both questions under them have the repository asserting both answers. **1. Does D9 bind as a MUST?** `GOVERNANCE.md` "Workflow YAML Conventions" opens "These conventions describe the target state ... The rest of the repo is expected to be brought up to the same standard." Section 4's preamble says "A workflow that violates any *applicable* guarantee is **not operational**." An unswept legacy workflow gets opposite verdicts. Four findings (P1, P2, L3, L6) are downstream of this. **2. What is this document authoritative for?** The blanket "`GOVERNANCE.md` is authoritative wherever this document overlaps it" decides a live conflict the wrong way: that file's boolean-inputs bullet requires comparing against both forms, D7.3 says the opposite and calls the second comparison dead, and 5A tells the auditor the both-forms shape is "redundant rather than a finding". `GOVERNANCE.md` claims precedence only for its own section. Six findings (P4, P5, P10, P11, L8, L9) are downstream of this. ## Verification Full local gate set from `OPERATIONS.md` "Local Verification": `build_dist --check`, `canonical_review check`, `repo_gate` (eol, eol-coverage, sha-pin), `prose_lint` over 324 files, the JSON parse loop, `spec/validate.py`, and `docker_lint` (7 linters, markdownlint over 178 files). All green. A carried-content pass over the changed unit's whole text and a local strict review of the diff are both recorded. Refs #1206, #1311 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ated Includes (#1392) Pull request 5 of the #1311 reshape sequence, and what `AGENTS.md` already requires of these two surfaces: "A Skill that needs a rule's full text to work in isolation carries it as a generated include from the rule's home rather than as a copy." Only `references/d-guarantees.md` complied. `SKILL.md`'s "The Core Behavioral Spine" restated `WORKFLOW.md` section 3 and parts of section 4 by hand, and `references/test-methodology.md` restated section 5 by hand while describing itself as "an index into them rather than as the sweep itself". Both had already drifted, in both directions at once, and `build_dist.py --check` held neither to its source. The evidence is on #1386. ## What changed - `references/architecture.md` is new and carries `WORKFLOW.md` section 3 whole through an include region. `references/test-methodology.md` now carries section 5 the same way. With the existing `d-guarantees.md` the skill carries sections 3, 4, and 5, and `SKILL.md` says where sections 1, 2, and 6 stay. - The spine is replaced by a routing section. `SKILL.md` drops from 8.2 KB to 5.5 KB, which is the direction `docs/token-efficiency-plan.md` asks for, and the two drifted claims it carried are gone rather than realigned: "repo-owned" for "repo-owned in shape" (#1386 item 5), and a hand-written second statement of D6.4 that nothing held to its source. - Carrying a section moves it outside its own document, so section 3 loses the two reference-style links whose definitions live at the file's foot, and both sections now name a sibling by document and heading rather than as "below" or "this document". Each gains the closing sentence naming the skill that includes it, the shape section 4 already carries. - `docs/fleet-map.md` and `skill-lifecycle`'s doc-packaging examples are swept to match. This also settles #1336 item 2, where `AGENTS.md` claimed the skill surfaces the full `WORKFLOW.md` contract while the skill's own scope said summary plus one include plus an index. The claim is now true, so the map row needed no weakening. The spine's citations of `GOVERNANCE.md` "Workflow YAML Conventions" for the validate-at-entry and consume-then-delete rules go with it, which settles #1386 item 16. ## Review passes Four whole-unit carried-content passes over 12 units and two diff passes, on the strongest tier. They raised roughly 30 findings, 8 of them introduced by this change and fixed here. The rest are pre-existing defects in `WORKFLOW.md` sections 3, 5, and 6, which this change deliberately does not touch, since pull requests 2, 3, and 4 of the sequence own that text. They will be filed as a follow-up issue rather than fixed in passing. Two findings were declined with evidence. `docs/fleet-map.md`'s P2 rollout checkbox still describes the two-split shape G9 actually delivered, and updating a completed checkbox would misreport what that phase shipped. And the five ledger entries this change orphans stay, because `reports/canonical-review.json` says it is "written by `scripts/canonical_review.py record`, never by hand" and that script has no prune, so `report` rendering them for a reader is the designed behavior rather than a defect. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pull request 3 of the #1311 reshape sequence, and the third to ship after PR 1 (#1373) and PR 5 (#1392). ## What it does `WORKFLOW.md` 5A carried nine "Core" bullets restating section 4's D-guarantees and five per-type addenda, roughly 2400 words of a second hand-authored wording of the contract. It is now three paragraphs: how a verdict is recorded, where evidence lives when it is not in the workflow files, and how to cite it. Section 5 drops from about 3000 words to 1000. A section that says where to look cannot disagree with the section that says what must hold, so **32 of #1370's 44 findings are unwritable rather than fixed**: each quotes 5A text that no longer exists. The two finding classes step 14 measured, "5A contradicts or misstates the guarantee it audits" (15 items) and "unsupported check" (8 items), have no surface left to sit on. ## Also fixed, from #1393 - **Item 15** (also #1370 items 2 and 44). S1 and S4 read "validate-release **skipped (smoke), succeeds**", one job with two conclusions. D2.2 makes the check exit early while the job succeeds, and warns against reading that as a job-level skip, which the old wording invited. - **Item 10.** S11 stated merge-bot auto-merge as the required output, contradicting D8.3's `auto-merge: false` tracker, which prefixes the head so no merge-bot rule matches. - **Item 11** (also #1370 item 31). 5C's maintainer-only fence reached only a probe that dispatches or re-runs, so its first bullet told an agent to open a pull request on the repository it audits. - **Items 12 and 13.** The Assessment restated 5A's recording rule more narrowly than 5A states it, and spelled the N/A token two ways. Swept to match: section 1's applicability rule and its two-layer bullet, section 6's three references to the deleted addenda, `AUDIT.md` sections 3 and 5 plus its flowchart node, and the `audit-a-repo` and `workflow-ci-contract` skills. ## Review Sixteen whole-unit carried-content passes over ten units and five diff passes, all on the strongest tier, before this pull request existed. They raised roughly 70 findings. Every one was on this change's own text or on a surface this change put in disagreement; none was against the collapse itself. All ten changed canonical units carry a recorded pass at their current text, and the local review receipt covers the final content. The maintainer settled one design question mid-flight: an interim revision carried a per-guarantee evidence map, and it was deleted because a per-guarantee map is itself a hand-authored second surface and regenerated the same defect class it replaced, at smaller scale. That decision is what the current three-paragraph shape implements. ## Known and filed, not fixed here - **D6.2 now stands unqualified.** The deleted 5A text was the sole home of its publisher exception, and the hub's own publisher stub in `docs/reusable-workflows.md` reads `github.ref_name` in four places. Moving the carve-out into D6.2 was attempted twice and withdrawn twice, each time on verified evidence that the wording was wrong. Section 4 is pull request 2's, and the evidence is filed for it. - **5B carries no counterpart to the pinned-SHA read.** `AUDIT.md` and `audit-a-repo` now tell an auditor to read a called workflow at the SHA the caller pins, and 5A's citation rule admits that evidence, but 5B, where the job graph is actually walked, does not say it. - **Two requirements had no home outside 5A.** The `pypi` environment's deployment-branch rule, which #1370 item 43 shows would block every `.dev0` develop publish D3.4 requires, is genuinely lost. The static-site generator's checksum pin survives as `spec/project-types.json`'s `hugo.generator.pinned`. Full disposition, including the section 6 and `AUDIT.md` items this review surfaced, is on #1370. Refs #1311, #1370, #1393 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…e YAML Conventions (#1395) Collapses pull requests 2, 4 and 6 of the #1311 sequence into one change, which the maintainer agreed to because the three touch the same surfaces and, run sequentially, each would re-sweep what the last swept and pay the seam cost three times. ## What it does **#1206's two maintainer decisions, applied first**, since sections 4 and 6 and `GOVERNANCE.md` all depend on them. D9 binds exactly as D1 through D8 do, so a style violation is a defect and `GOVERNANCE.md`'s target-state framing settles *when* an unswept workflow is fixed rather than *whether* the violation counts. An overlap resolves **by subject** rather than by blanket precedence, and every section 1 to 6 now has a named owner. **Section 4's two longest items shrink to their outcomes**, D1.6 from about 974 words and D4.5 from about 602. Nothing is deleted: the Microsoft.Testing.Platform runner, package floor and its silently-green failure modes move to `dotnet-codestyle`, the `pytest-cov` dependency and coverage selector to `python-codestyle`, and the failed-push recovery routes to `operational-vs-release-workflow`. **Section 6 states only what each type adds, and carries no N/A list at all.** All eight per-type N/A lists are deleted rather than corrected, because such a list is right for a single-type repository and negates a construct a second declared type supplies, which is the defect #1394 shipped through fifteen clean unit passes. Section 1's applicability rule derives the N/A set instead, so no row can take away what another row gives. Rows are added for the seven registry types that had none, `upstream-wrapper` is split out of `docker`, and the construct table keys on the construct being present rather than on a registry field. **`GOVERNANCE.md` "Workflow YAML Conventions" is swept** for the items on #1367. ## What is deliberately not done - **D6.2's publisher exception stays withdrawn.** A fourth wording was attempted here and disproved by `get-version-task.yml`, a called workflow whose branch classification comes from the caller's `GITHUB_REF` exactly as D3.1 requires. The item returns to the text `develop` carries and #1369 records all four disproofs. - **No bullet-to-D-item mapping.** One was added here, proved wrong four ways, drifted between its two copies in the round that wrote it, and was deleted on the maintainer's call. - **No per-guarantee evidence map**, per the decision recorded on #1311 step 16. - **The `pypi` environment's deployment-branch rule is not restored**, per the caveat #1370 records: its one plausible content would block every `.dev0` publish D3.4 requires. ## Review evidence 21 read-only passes on the strongest tier before this pull request existed: 11 in round one (10 whole-unit carried-content plus a cross-unit diff pass briefed to hold `registry/repos.json` open), 9 in round two, and a terminal pair scoped to false claims and unfollowable instructions. Roughly 220 findings, the large majority introduced by this change and disposed of in it. The terminal pass over `GOVERNANCE.md`, `AUDIT.md`, `CODESTYLE.md` and the four skills returned zero. The measurement worth recording: **the deletions were right first time and the reasons drew nearly everything.** Five claims about GitHub Actions behaviour that this change introduced were falsified by the tree and reverted, among them that `always()` and `!failure() && !cancelled()` are interchangeable-with-a-preference (D1.5 *requires* `always()` for the aggregator), and that the registry's `releaseTrigger` decides publish-scenario applicability (it says `two-phase` for this repository while `publish-release.yml` is `workflow_dispatch:` only). A carried-content pass is recorded for all 23 canonical units this change moves. ## Owed on merge `spec/files.json` declares both edited `GOVERNANCE.md` sections at `verbatim` fidelity, so every downstream copy goes stale and a fleet resync follows. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🔵 Needs a closer look
It promotes a broad cross-cutting set of tooling, workflow-contract, and generated-distribution changes where a final human pass is warranted despite no specific defects found in this review.
Pull request overview
Promotes the current develop state to main, completing the “one-home include” mechanism rollout across the skills/distributions and finishing the WORKFLOW.md reshape, while also extending hub tooling and docs to cover the fleet label set and updating canonical-review reporting.
Changes:
- Add fleet label management to
repo-config/configure.sh(newrepo-config/labels.json+ apply/check support) and document it across standup/audit/repo-config docs. - Make canonical-review burn-down a rendered report (stdout / CI job summary) rather than a tracked file, with corresponding test updates.
- Refresh skill packaging + distributions (include-mechanism documentation, new per-skill source digests) and bump
docker/setup-qemu-actionto v4.3.0.
File summaries
| File | Description |
|---|---|
| STANDUP.md | Standup procedure now includes applying the fleet label set via configure.sh. |
| spec/project-types.json | Update WORKFLOW.md anchor refs to the new D9 slug. |
| spec/divergences.json | Mark repo-config/labels.json as hub-hosted/retired for downstream repos. |
| scripts/tests/test_canonical_review.py | Tests updated/added for ledger-only state + rendered report behavior. |
| scripts/local_review.py | Clarify held_lock() docstring (shared lock behavior). |
| repo-config/README.md | Document new labels.json payload and label behavior. |
| repo-config/labels.json | New fleet label-set payload (name/color/description). |
| repo-config/configure.sh | Apply/check now also manages labels from labels.json. |
| OPERATIONS.md | Update local verification guidance for canonical-review report rendering. |
| docs/repo-config.md | Document that configure.sh apply/check now covers labels. |
| docs/pr-reviewer-evaluation.md | Document reviewer scope/tiers and generated-mirror skipping configuration. |
| docs/fleet-map.md | Update skill packaging descriptions to reflect includes/kept-authority mix. |
| CODESTYLE.md | Expand summaries to mention MTP/coverage obligations moved under codestyle skills. |
| AUDIT.md | Update applicability wording + settings/labels/rulesets verification guidance. |
| AGENTS.md | Update cross-cutting rule-map phrasing for workflow/YAML vs WORKFLOW.md contract ownership. |
| .pr_agent.toml | Configure Qodo to ignore generated skill mirrors and tune review routing/guidelines. |
| .husky/pre-commit | Harden pre-commit with set -u in addition to set -e. |
| .github/workflows/build-docker-task.yml | Bump docker/setup-qemu-action pin to v4.3.0 commit SHA. |
| .github/skills/skill-lifecycle/SKILL.md | Generated mirror update reflecting include mechanism + packaging shapes. |
| .github/skills/python-codestyle/references/testing.md | Generated mirror update for coverage guidance. |
| .github/skills/pr-review-conduct/SKILL.md | Generated mirror update for reviewer footing + loop wording. |
| .github/skills/operational-vs-release-workflow/SKILL.md | Generated mirror update for publish behavior wording. |
| .github/skills/operational-vs-release-workflow/references/release-publish-mechanics.md | Generated mirror adds failed-push recovery mechanics section. |
| .github/skills/drive-pr/SKILL.md | Generated mirror switches to include-based outcome rules. |
| .github/skills/dotnet-codestyle/SKILL.md | Generated mirror updates MTP-based xUnit guidance summary. |
| .github/skills/dotnet-codestyle/references/testing.md | Generated mirror adds MTP runner + coverage specifics. |
| .github/skills/audit-a-repo/SKILL.md | Generated mirror aligns audit wording with updated AUDIT.md. |
| .github/copilot-instructions.md | Add explicit guidance to avoid commenting on generated skill mirrors/include regions. |
| .github/actions/validate/action.yml | Render canonical-review burn-down into CI job summary (no --check). |
| .github/actions/prose-gate/prose_lint.py | Teach prose gate about repo-config/labels.json as a path candidate. |
| .coderabbit.yaml | Configure CodeRabbit to skip generated mirrors and adjust review behavior. |
| .claude-plugin/fleet-skills/skills/python-codestyle/references/testing.md | Plugin distribution mirror update for coverage guidance. |
| .claude-plugin/fleet-skills/skills/pr-review-conduct/SKILL.md | Plugin distribution mirror update for reviewer footing + loop wording. |
| .claude-plugin/fleet-skills/skills/operational-vs-release-workflow/SKILL.md | Plugin distribution mirror update for publish behavior wording. |
| .claude-plugin/fleet-skills/skills/operational-vs-release-workflow/references/release-publish-mechanics.md | Plugin distribution adds failed-push recovery mechanics section. |
| .claude-plugin/fleet-skills/skills/drive-pr/SKILL.md | Plugin distribution switches to include-based outcome rules. |
| .claude-plugin/fleet-skills/skills/dotnet-codestyle/SKILL.md | Plugin distribution updates MTP-based xUnit guidance summary. |
| .claude-plugin/fleet-skills/skills/dotnet-codestyle/references/testing.md | Plugin distribution adds MTP runner + coverage specifics. |
| .claude-plugin/fleet-skills/skills/audit-a-repo/SKILL.md | Plugin distribution aligns audit wording with updated AUDIT.md. |
| .claude-plugin/fleet-skills/.source-digests/workflow-ci-contract | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/upstream-contribution-workflow | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/standup-a-repo | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/skill-lifecycle | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/shell-codestyle | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/resync-a-repo | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/repo-worktree | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/python-codestyle | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/pr-review-conduct | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/operational-vs-release-workflow | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/merge-and-release | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/local-strict-review | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/git-commit-conventions | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/fleet-conformance-check | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/drive-pr | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/dotnet-codestyle | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/copilot-instructions-keeper | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/comment-and-doc-style | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/code-review | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/carried-instruction-file-guard | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/backlog-burndown | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/audit-a-repo | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/agent-conduct | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digests/add-host-tool | New per-skill source digest stamp. |
| .claude-plugin/fleet-skills/.source-digest | Remove old single digest stamp in favor of per-skill digests. |
| .agents/skills/skill-lifecycle/SKILL.md | Source-of-truth update documenting include regions and packaging shapes. |
| .agents/skills/README.md | Clarify authored-vs-included content in the skill source tree. |
| .agents/skills/python-codestyle/references/testing.md | Expand coverage requirements guidance (dependency + selector). |
| .agents/skills/pr-review-conduct/SKILL.md | Update merge-gate/reviewer footing prose and loop wording. |
| .agents/skills/operational-vs-release-workflow/SKILL.md | Clarify publish no-op and add recovery pointer. |
| .agents/skills/operational-vs-release-workflow/references/release-publish-mechanics.md | Add failed registry-push recovery mechanics section. |
| .agents/skills/drive-pr/SKILL.md | Replace restated outcomes with an include from pr-review-conduct. |
| .agents/skills/dotnet-codestyle/SKILL.md | Update MTP-based xUnit guidance summary. |
| .agents/skills/dotnet-codestyle/references/testing.md | Add MTP runner and coverage floor/details + diagnostics guidance. |
| .agents/skills/audit-a-repo/SKILL.md | Align skill summary with updated AUDIT.md language and SHA-pinned read rule. |
Review details
- Files reviewed: 103/104 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Review state at
|
Closes #1205.
Closes #1212.
Closes #1240.
Closes #1250.
Closes #1267.
Closes #1268.
Closes #1271.
Closes #1288.
Closes #1305.
Closes #1314.
Sixteen commits, ten issues. Each was driven as its own feature pull request into
develop,reviewed by the PR-hosted reviewers, and merged only with CI green and every finding disposed of
by one of the five outcomes: fixed, declined on evidence, decided by the maintainer, deferred
behind a filed issue, or fixed as a class.
What this promotes
The one-home include mechanism and its first six classes (#1317).
scripts/build_dist.pygained include regions filled from a rule's home and checked by
--check(#1378), so a Skillcarries a rule's whole text without a copy that can drift. Classes 2 to 6 then converted the
restatements:
agent-conduct's three conduct sections (#1382),pr-review-conduct's fiveoutcomes into
drive-prwith every step-ref renamed to a heading (#1383),backlog-burndown's two narrowing rows cut to the narrowing with fourteen restatementspointered (#1384),
WORKFLOW.mdsection 4 intoworkflow-ci-contract(#1385), and section 2cut to a pointer at
GOVERNANCE.md"Workflow YAML Conventions" (#1388).The
WORKFLOW.mdreshape (#1311 step 14's six-pull-request sequence, now finished). Theverdict clause aligned with section 5's Assessment (#1390), sections 3 and 5 carried into
workflow-ci-contractas generated includes (#1392), 5A collapsed to a procedure and an evidencerule (#1394), and the preamble decisions settled alongside the reshape of section 4, section 6 and
the YAML conventions (#1395). Section 4's two longest items shrank to their outcomes with the
displaced knowledge moved rather than deleted, and section 6 now states only what each type adds,
carrying no N/A list at all.
The review loop's stop rule and disposition policy (#1330), rewriting disposal by deletion and
committing the condition under which a whole-unit loop ends, which #1267 filed as missing.
The Merge Gate's bound on an out-of-diff prose finding, with the reviewer footing recorded
(#1333), and reviewer bots scoped away from the generated Skill mirrors (#1329) so a mirror's diff
is never reviewed in place of its source.
The fleet label set, declared and applied through
configure.sh(#1334).The review ledger and skills digest decoupled from the working tree (#1328), so concurrent
branches no longer conflict in a generated report that cannot be hand-merged.
Plus one grouped Dependabot bump,
docker/setup-qemu-action4.2.0 to 4.3.0 (#1325).What is deliberately not closed
#1311,#1317,#1206,#1367,#1369,#1370,#1371,#1386and#1237each stillhold findings this work did not settle. #1317 stands at class 6 of fourteen, and #1311's step 17
comment records what the reshape filed rather than fixed.
Owed on merge
spec/files.jsondeclares both editedGOVERNANCE.mdsections atverbatimfidelity, so everydownstream copy goes stale on this promotion and a fleet resync follows it.
🤖 Generated with Claude Code