Skip to content

Merge Gate v1 is unsatisfiable and is enforced by a document, not a system #1407

Description

@groupthinking

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

  • MERGE_POLICY.md v2 committed with policy_version: v2 frontmatter
  • Every gate states a satisfying action
  • Review evidence survives a rebase that does not change the PR's own diff
  • Preview gating scoped to apps/web/**
  • Overlapping PRs are labeled and assigned with a deadline, never both blocked
  • No zero-commits-behind requirement
  • The 50% failure demotion rule is written down
  • v1 Notion page marked superseded and pointing at the repo file

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions