Problem
Merge Gate v1 lives only as a Notion page. None of its eleven implementation tasks shipped:
| Task |
Status |
MG-1 commit MERGE_POLICY.md |
❌ no such file in the repo |
| MG-2 branch protection, 6 required checks |
❌ PRs merge with red checks (#1368) |
| MG-3 merge queue |
❌ zero merge_group triggers in .github/workflows/ |
| MG-4 … MG-11 |
❌ no gate workflow, classifier, or authorization records |
What actually enforced it was an agent reading the Notion page and returning PRs to draft. The daily control logs record this directly: "Six newly ready PRs were returned to draft."
Measured impact
Root causes
1. Evidence reset on every push. Gate 2 ("any new commit resets all gates") plus gate 7 (zero commits behind) against a main moving ~5.5 commits/day. Rebasing to satisfy freshness discards the review approval and preview just earned; re-earning them takes longer than main stays still. Only a PR born and merged inside one quiet window could pass.
2. Gates with no satisfying action.
3. Mutual quarantine. Gate 6 quarantined both PRs on surface overlap, so every duplicate pair blocked itself permanently — and duplicates were what the draft backlog kept producing.
4. Unclassifiable → Class C. Everything unfamiliar silently became a human bottleneck, which is the backlog the policy existed to remove.
Fix
Replace with a policy where every gate names an action the author can take, and evidence is invalidated only by a change to what it attests to. See the PR.
The key addition: any required check failing on >50% of PRs over 7 days is automatically demoted to advisory, with an issue opened against its owner. agent-completion/truth-gate was red on ~100% of PRs for weeks and nobody noticed, because everyone had learned to ignore it.
Acceptance criteria
Follow-ups (not blocking)
- Branch protection with the six required checks
- GitHub merge queue (makes freshness structural)
- Scheduled workflow implementing the demotion rule
- Retire the
agent-completion/truth-gate apparatus (~7,400 lines) — separate PR
Problem
Merge Gate v1 lives only as a Notion page. None of its eleven implementation tasks shipped:
MERGE_POLICY.mdmerge_grouptriggers in.github/workflows/What actually enforced it was an agent reading the Notion page and returning PRs to draft. The daily control logs record this directly: "Six newly ready PRs were returned to draft."
Measured impact
mainRoot causes
1. Evidence reset on every push. Gate 2 ("any new commit resets all gates") plus gate 7 (zero commits behind) against a
mainmoving ~5.5 commits/day. Rebasing to satisfy freshness discards the review approval and preview just earned; re-earning them takes longer thanmainstays still. Only a PR born and merged inside one quiet window could pass.2. Gates with no satisfying action.
agent-completion/truth-gatefailedinvalid_payloadon every PR without a dispatch contract, including merged ones. Fixed in fix(ci): unblock the merge gate, consolidate its competing fixes, and audit 337 branches #1377 / agent-completion/truth-gate is unsatisfiable for PRs with no linked dispatch contract #1384.3. Mutual quarantine. Gate 6 quarantined both PRs on surface overlap, so every duplicate pair blocked itself permanently — and duplicates were what the draft backlog kept producing.
4. Unclassifiable → Class C. Everything unfamiliar silently became a human bottleneck, which is the backlog the policy existed to remove.
Fix
Replace with a policy where every gate names an action the author can take, and evidence is invalidated only by a change to what it attests to. See the PR.
The key addition: any required check failing on >50% of PRs over 7 days is automatically demoted to advisory, with an issue opened against its owner.
agent-completion/truth-gatewas red on ~100% of PRs for weeks and nobody noticed, because everyone had learned to ignore it.Acceptance criteria
MERGE_POLICY.mdv2 committed withpolicy_version: v2frontmatterapps/web/**Follow-ups (not blocking)
agent-completion/truth-gateapparatus (~7,400 lines) — separate PR