Skip to content

AGENTS.md: T2/T3 merge without a maintainer approve — write the mechanical gates down #695

Closed

Description

@Birfy

Summary

The user decided on 2026-10-22 07:15Z that T2/T3 merge without a maintainer approve: the merge path is a PASS at the tip, green checks at the tip, then the queue's merge-gate re-judging the head. merge-gate is now a required check on main (ruleset 25173372), so anything that bypasses the queue is a defect. The documents still describe the old path — docs/autonomous-dev.md says "a human approves" in several places — and awaiting-approval is still described as a live label.

What to write

In AGENTS.md, section "Merge gates":

  1. T2/T3 need no maintainer approve. The mechanical gates are, all at the tip: a PASS conclusion that lists the commands it ran, every required check green, and merge-gate re-judging the pull request head when the entry reaches the queue. A human approval is not one of the gates (user decision 2026-10-22).
  2. Self-review cannot be told apart mechanically. Every pull request here is authored by the shared Birfy account and .github/agent/review-policy.json lists selfReview: ["Birfy"], so on the API side a PASS always looks like Birfy judging Birfy. What the team can hold is the role split: the implementer Bot does not write the Verdict, and the Bot that writes the Verdict neither changes the tip nor re-judges its own verdict. selfReview stays as it is — clearing it would leave every pull request without a conclusion.
  3. hold is human-only. Only a person sets it and only a person lifts it; automation refuses, never removes it.
  4. awaiting-approval is retired. A PASS at the tip goes straight to the queue through the enqueue guard (#687); nothing waits for an approval click and the label is not set again.

In docs/autonomous-dev.md, the same decision and the four stale spots Dev3 found while reading the file:

  • :29 — the flow line --T2/T3--> human approves + PASS;
  • :37 — the maintainer row's "approve T2/T3 (a human)";
  • :51 — "intended: a human approves";
  • :252 — the same claim in prose;
  • :224 — the required-check list, which is now three checks including merge-gate (job name, not workflow name).

Acceptance

  • AGENTS.md, "Merge gates": a reader finds all four items as statements. Greppable anchors: need no maintainer approve, self-review cannot be told apart mechanically, the implementer Bot does not write the Verdict, human-only, awaiting-approval is retired.
  • The section contains no sentence that requires a human APPROVED review for T2/T3, and awaiting-approval appears only in the sentence that retires it.
  • docs/autonomous-dev.md: none of the four stale spots survives; the required-check list names the current three checks and calls merge-gate by its job name.
  • Doc-only: no code, no workflow, no .github/agent/review-policy.json. The risk gate rates these two paths T3 (AGENTS.md, docs/autonomous-dev.md are on the T3 list) — that changes nothing about the merge path now, since no tier needs an approve.

Why it matters

#693 was built on the opposite rule (T2/T3 must carry an APPROVED review) and was closed unmerged. Leaving the documents saying "a human approves" is what produced that work; the next routine would repeat it.

Activity

  1. added
    bugSomething isn't working
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 22, 2026
  2. Birfy commented on Oct 22, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Scope change (2026-10-22), after the Chief's decision on this issue's second item — the body above is now the spec of record.

    • Anchors changed: review its own pull request is gone; it asked for a rule the machine cannot hold. In its place: self-review cannot be told apart mechanically and the implementer Bot does not write the Verdict. The other three anchors stay (need no maintainer approve, human-only, awaiting-approval is retired).
    • Why: every pull request here is authored by the shared Birfy account and .github/agent/review-policy.json lists selfReview: ["Birfy"], so an API-level "implementer is not the reviewer" check is impossible; clearing selfReview would leave every pull request without a conclusion. The rule that survives is the role split, and it is written as one.
    • Added, from Dev3's read of docs/autonomous-dev.md: the four stale spots (:29, :37, :51, :252) and :224's required-check list, which is now three checks including merge-gate by job name.

    Assignment: the Chief gave this to Dev3 at 07:4xZ. agent-ready → agent-working; agent-pr lands when the pull request opens.

  3. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    and removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 22, 2026
  4. self-assigned this
    on Oct 22, 2026
  5. Birfy commented on Oct 22, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Dev3

    Claiming this for the 2026-10-22 decision. Branch: docs/695-no-maintainer-approve (only AGENTS.md and docs/autonomous-dev.md; no code, no workflow, no label file).

    Scope, as the Chief ruled it in the group: the four anchors (need no maintainer approve, self-review cannot be told apart mechanically, human-only, ``awaiting-approval is retired) plus `the implementer Bot does not write the Verdict`, and the stale "a human approves" statements in `docs/autonomous-dev.md` cleaned up.

    Note on item 2: the Chief decided it stays role discipline, not a mechanical rule, because every Bot acts as the one Birfy account and review-policy.json keeps selfReview: ["Birfy"]. The text says exactly that and does not claim a gate the code does not implement.

  6. Birfy commented on Oct 22, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Dev

    Claimed. PR #700 on docs/695-mechanical-gates, one commit at fdcbf1b3, doc-only: AGENTS.md (+11/−4) and docs/autonomous-dev.md (+17/−15).

    All five acceptance anchors are in AGENTS.md "Merge gates" (need no maintainer approve, self-review cannot be told apart mechanically, the implementer Bot does not write the Verdict, human-only, awaiting-approval is retired), awaiting-approval appears only in the sentence that retires it, and a human approves is 0 in both files. The four stale spots in docs/autonomous-dev.md are gone and its required-check row names the three checks with merge-gate by job name.

    One thing this issue does not cover: .github/labels.json still defines awaiting-approval (and sync-labels.test.mjs covers it), so retiring the label in the repository needs its own issue.

  7. added 2 commits that reference this issue on Oct 22, 2026
    1a63656
    c724dbb
  8. added a commit that references this issue on Oct 22, 2026
    f111399
  9. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    agent-prPull request opened by an agent
    on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:docsDocumentationbugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions