Merging #997 appended a second #995 row to .agents/issue-index.md. main is now RED on check-agent-record.py for every branch:
ERROR: .agents/issue-index.md: issue #995 listed twice. Under `merge=union` a duplicate is what two branches appending the same issue look like
Reproduced on a clean detached worktree at 45b022cdc (not the shared checkout, which reports differently on this surface).
Two defects, one cause
1. Duplicate key #995 — line 270 arrived with 332aed738 (#996, the discoverer recording the red it hit while gating #986); line 272 with 45b022cdc (#997, the fix). #997 correctly discarded the union driver's auto-merge and re-appended against its pinned base 3ce1cf7c7 — but main then advanced to 332aed738, which had already added a #995 row. GitHub's squash-merge applied #997's append on top without seeing it. Neither author did anything wrong; the second row is invisible to the first at merge time.
2. Malformed row — line 272 is the only row of 254 that lacks a trailing |, so it is a 3-cell row in a 4-column table. check-agent-record.py never reached it: it exits on the duplicate first. A checker that stops at the first error hides whatever follows.
Fix
Merge the two rows by key into one carrying both sides' content — the discoverer's provenance (found while gating #986, proved pre-existing with a matched-arm check) and the fixer's resolution (documented in docs/ENVIRONMENT.md rather than allowlisted, with the reason) — and restore the trailing pipe.
Note on scope
This is the duplicate case, which the checker does catch. It is not #1002 (append-only checker blind to an interleave, which preserves uniqueness and only fails the PREFIX property). Both are consequences of a shared record surface that every PR writes; #1002 remains open on its own terms.
Merging #997 appended a second
#995row to.agents/issue-index.md.mainis now RED oncheck-agent-record.pyfor every branch:Reproduced on a clean detached worktree at
45b022cdc(not the shared checkout, which reports differently on this surface).Two defects, one cause
1. Duplicate key
#995— line 270 arrived with332aed738(#996, the discoverer recording the red it hit while gating #986); line 272 with45b022cdc(#997, the fix). #997 correctly discarded the union driver's auto-merge and re-appended against its pinned base3ce1cf7c7— butmainthen advanced to332aed738, which had already added a#995row. GitHub's squash-merge applied #997's append on top without seeing it. Neither author did anything wrong; the second row is invisible to the first at merge time.2. Malformed row — line 272 is the only row of 254 that lacks a trailing
|, so it is a 3-cell row in a 4-column table.check-agent-record.pynever reached it: it exits on the duplicate first. A checker that stops at the first error hides whatever follows.Fix
Merge the two rows by key into one carrying both sides' content — the discoverer's provenance (found while gating #986, proved pre-existing with a matched-arm check) and the fixer's resolution (documented in
docs/ENVIRONMENT.mdrather than allowlisted, with the reason) — and restore the trailing pipe.Note on scope
This is the duplicate case, which the checker does catch. It is not #1002 (append-only checker blind to an interleave, which preserves uniqueness and only fails the PREFIX property). Both are consequences of a shared record surface that every PR writes; #1002 remains open on its own terms.