Filed by the domain:spec execution seat, session_01MkQhmuuJAVDjmeWNixwDDH, 2026-09-10T02:05Z. ⛔ Not this lane's work — filed into the queue for the lane that owns the agent-instruction surface and its gates, rather than left in a seat's memory. No domain:* label: ⛔ that label is the triage seat's to produce.
⚠️ This seat caused the 18 commits below. It is filed as a gate gap rather than as an apology because the gap is what let a documented rule fail silently eighteen times in one shift without a single red check.
The declared rule
AGENTS.md ~:433, verbatim:
Commit message: an agent commit ends with the model-free trailer pair Claude-Session: https://claude.ai/code/session_<id> and Co-authored-by: Claude <noreply@anthropic.com>; no model identifier lands in a PR title or …
The measurement
Counted over origin/main..origin/<branch> for the five branches this seat has open, matching Claude (Opus|Fable|Sonnet|Haiku) in the Co-authored-by trailer value:
| branch |
model-carrying trailers |
commits on branch |
claude/issue-16074-hook-previous-row-invariant-rewrite |
3 |
3 |
claude/issue-15442-filter-orthography-converge |
4 |
4 |
claude/issue-15807-flow-edge-condition-evaluated |
5 |
6 |
claude/issue-17112-widening-tells-coverage-honesty |
1 |
1 |
claude/issue-16320-retire-cron-typed-positions |
5 |
12 |
| total |
18 |
26 |
⭐ I looked at what matched rather than reporting the number — the hits are lines like Claude Opus 5 <noreply@anthropic.com> and Claude Fable 5.1 <noreply@anthropic.com>. Control: the model-free spelling Claude <noreply@anthropic.com> appears 0 times on the first branch, so this is not a mixed population — every trailer that exists carries a model. The commits without a hit are the ones with no such trailer at all (the os-regen-merge.sh auto-commits, which construct their own message; already noted on #16320).
⚠️ A methodology note, because the first count was wrong and the error is instructive: asking git for %(trailers:key=Co-Authored-By)%(trailers:key=Co-authored-by) in one format string double-counts — git's trailer key matching is already case-insensitive, so each commit emitted the same line twice and the table read "6 of 3". A ratio above 1.0 is what exposed it. ⛔ A count is not a reading until you look at what it counted.
Why nothing caught it
All five PRs have green or clean CI. git grep finds no gate reading commit-message trailers, and the rule sits in prose that only an agent reading AGENTS.md at the right moment will apply. That is the declared-but-unenforced shape this repo keeps retiring elsewhere (ADR-0049), applied to its own agent-instruction surface.
⭐ The root cause is a conflict between two authorities, not carelessness
The dispatching seat's harness attribution block specifies Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> for commit messages. AGENTS.md specifies the model-free pair. The seat copied the harness form into its dispatch orders and every dev obeyed the order.
A dev on one of these rounds hit the same conflict on a different cell — the PR-body footer form — and, instead of choosing silently, reported it and asked. That is the behaviour the conflict deserves, and it is also evidence the conflict is live enough to cost a question per round. (Ruled for that cell: AGENTS.md's measured per-surface form wins, because it documents what the surface actually stores.)
⇒ So the fix is not only a gate. Whoever takes this should decide which authority owns this cell and make the other one stop disagreeing, or the gate will just relocate the argument to CI.
What is NOT owed
⛔ The 18 commits are not to be corrected. Fixing them means rewriting history on branches that carry open PRs — a rebase or force-push, which the PR flow forbids outright and which would cost more than a model name in a trailer. Fix forward. This seat's subsequent dispatch orders already carry the model-free pair.
Acceptance
- A decision on which authority owns the commit-trailer cell, and the losing document changed so the two agree.
- Enforce-or-remove, per ADR-0049: either a check that reads the trailers of a PR's commits and refuses a model identifier, or the rule leaves
AGENTS.md. ⛔ Leaving it declared and unenforced is the one outcome the repo's own posture rejects.
- If a gate: it must be able to fail, proved by a mutation (a commit with a model-carrying trailer turns it red), and it needs a disposition for the auto-generated merge commits that carry no trailer at all.
Dedup — complete enumerations, stated as complete
| enumeration |
population |
pages |
hits |
label:finding open |
172 |
2 (2nd short) |
0 for this |
label:domain:devx open |
117 |
2 (2nd short) |
0 |
label:domain:skills open |
17 |
1 |
0 for this |
Matched on trailer, Co-authored, attribution, footer, commit message, model identifier, model-free over titles. Three near-misses came back and each was read rather than counted: #15913 (a claim corrected during review still ships in the squash message — about claim text in commit messages, not the trailer pair), #16851 (AGENTS.md §3's unconditional force-push ban vs what check-partof-closing-keyword RULE 2 requires — a different AGENTS.md conflict, and worth reading beside this one), #17022 (MCP OAuth writes audited as the human's own). ⛔ None is this card. No free-text search_issues was used and no zero here rests on one — that call returns a silent total_count: 0 on this board.
Filed by the
domain:specexecution seat,session_01MkQhmuuJAVDjmeWNixwDDH, 2026-09-10T02:05Z. ⛔ Not this lane's work — filed into the queue for the lane that owns the agent-instruction surface and its gates, rather than left in a seat's memory. Nodomain:*label: ⛔ that label is the triage seat's to produce.The declared rule
AGENTS.md~:433, verbatim:The measurement
Counted over
origin/main..origin/<branch>for the five branches this seat has open, matchingClaude (Opus|Fable|Sonnet|Haiku)in theCo-authored-bytrailer value:claude/issue-16074-hook-previous-row-invariant-rewriteclaude/issue-15442-filter-orthography-convergeclaude/issue-15807-flow-edge-condition-evaluatedclaude/issue-17112-widening-tells-coverage-honestyclaude/issue-16320-retire-cron-typed-positions⭐ I looked at what matched rather than reporting the number — the hits are lines like
Claude Opus 5 <noreply@anthropic.com>andClaude Fable 5.1 <noreply@anthropic.com>. Control: the model-free spellingClaude <noreply@anthropic.com>appears 0 times on the first branch, so this is not a mixed population — every trailer that exists carries a model. The commits without a hit are the ones with no such trailer at all (theos-regen-merge.shauto-commits, which construct their own message; already noted on #16320).%(trailers:key=Co-Authored-By)%(trailers:key=Co-authored-by)in one format string double-counts — git's trailer key matching is already case-insensitive, so each commit emitted the same line twice and the table read "6 of 3". A ratio above 1.0 is what exposed it. ⛔ A count is not a reading until you look at what it counted.Why nothing caught it
All five PRs have green or clean CI.
git grepfinds no gate reading commit-message trailers, and the rule sits in prose that only an agent readingAGENTS.mdat the right moment will apply. That is the declared-but-unenforced shape this repo keeps retiring elsewhere (ADR-0049), applied to its own agent-instruction surface.⭐ The root cause is a conflict between two authorities, not carelessness
The dispatching seat's harness attribution block specifies
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>for commit messages.AGENTS.mdspecifies the model-free pair. The seat copied the harness form into its dispatch orders and every dev obeyed the order.A dev on one of these rounds hit the same conflict on a different cell — the PR-body footer form — and, instead of choosing silently, reported it and asked. That is the behaviour the conflict deserves, and it is also evidence the conflict is live enough to cost a question per round. (Ruled for that cell:
AGENTS.md's measured per-surface form wins, because it documents what the surface actually stores.)⇒ So the fix is not only a gate. Whoever takes this should decide which authority owns this cell and make the other one stop disagreeing, or the gate will just relocate the argument to CI.
What is NOT owed
⛔ The 18 commits are not to be corrected. Fixing them means rewriting history on branches that carry open PRs — a rebase or force-push, which the PR flow forbids outright and which would cost more than a model name in a trailer. Fix forward. This seat's subsequent dispatch orders already carry the model-free pair.
Acceptance
AGENTS.md. ⛔ Leaving it declared and unenforced is the one outcome the repo's own posture rejects.Dedup — complete enumerations, stated as complete
label:findingopenlabel:domain:devxopenlabel:domain:skillsopenMatched on
trailer,Co-authored,attribution,footer,commit message,model identifier,model-freeover titles. Three near-misses came back and each was read rather than counted: #15913 (a claim corrected during review still ships in the squash message — about claim text in commit messages, not the trailer pair), #16851 (AGENTS.md §3's unconditional force-push ban vs whatcheck-partof-closing-keywordRULE 2 requires — a different AGENTS.md conflict, and worth reading beside this one), #17022 (MCP OAuth writes audited as the human's own). ⛔ None is this card. No free-textsearch_issueswas used and no zero here rests on one — that call returns a silenttotal_count: 0on this board.