diff --git a/docs/skills/human-gates.md b/docs/skills/human-gates.md index e99257ce..a8763f46 100644 --- a/docs/skills/human-gates.md +++ b/docs/skills/human-gates.md @@ -1,7 +1,7 @@ --- name: human-gates -version: "1.0" -last_updated: "2026-06-23" +version: "1.1" +last_updated: "2026-08-08" id: human-gates one_line_purpose: Decide when to stop for Design, Security, Breakage, or Merge review. entry_point: docs/skills/human-gates.md @@ -87,6 +87,13 @@ This gate is always human. CI passing plus an approving review from a human revi Agents never self-merge, never bypass branch protection, and never force-push to a protected branch. +This gate binds agents, not the maintainer's own hands. A review tool that +executes a merge or close only on the maintainer's explicit per-item keypress +— with rulesets and branch protection still enforced by GitHub — is the human +acting at the gate, not an agent self-merging. What remains forbidden for any +tool: `--admin` overrides, submitting an approving review, and any +non-interactive batch mutation. + --- ## How to Signal a Gate diff --git a/docs/skills/index.json b/docs/skills/index.json index 1a48a4b6..72a1cfbc 100644 --- a/docs/skills/index.json +++ b/docs/skills/index.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-08-06", + "generated_at": "2026-08-08", "schema_version": "1.0", "skills": [ { @@ -362,8 +362,8 @@ "security" ], "description": "The four human decision gates \u2014 Design, Security, Breakage, and Merge \u2014 when an agent must stop and request human input. Use when uncertain whether a change requires human review, or to verify evidence requirements before opening a PR.", - "version": "1.0", - "last_updated": "2026-06-23", + "version": "1.1", + "last_updated": "2026-08-08", "doc_type": "reference" }, { @@ -503,8 +503,8 @@ "backlog" ], "description": "Human-decides, agent-lands PR and issue backlog review. Present one card at a time, take the human verdict, execute it immediately, then advance. Use when reviewing the PR queue or triaging the issue backlog.", - "version": "3.4", - "last_updated": "2026-08-07", + "version": "3.5", + "last_updated": "2026-08-08", "doc_type": "procedure" }, { diff --git a/docs/skills/index.md b/docs/skills/index.md index e81d183b..0b5b3bcf 100644 --- a/docs/skills/index.md +++ b/docs/skills/index.md @@ -3,7 +3,7 @@ This file is a human-readable mirror of `index.json`. Both are generated by `scripts/generate_skill_index.py` — do not hand-edit either file. -Generated: 2026-08-06 · schema 1.0 · 39 skills +Generated: 2026-08-08 · schema 1.0 · 39 skills | id | category | status | one-line purpose | |---|---|---|---| diff --git a/docs/skills/pr-review/SKILL.md b/docs/skills/pr-review/SKILL.md index 552fe02e..65a9ec94 100644 --- a/docs/skills/pr-review/SKILL.md +++ b/docs/skills/pr-review/SKILL.md @@ -1,7 +1,7 @@ --- name: pr-review -version: "3.4" -last_updated: "2026-08-07" +version: "3.5" +last_updated: "2026-08-08" id: pr-review one_line_purpose: Run human-decides, agent-lands backlog review one card at a time. entry_point: docs/skills/pr-review/SKILL.md @@ -130,6 +130,13 @@ On any overlap, print `⚠️ COMPETING PAIR` between both cards. The human must resolve the pair (defer one, or explicitly acknowledge) before both can be voted `merge`. +#### Duplicate-cluster resolution + +A competing pair sharing a *closing issue* — or two Renovate PRs normalizing to the *same dependency* — is one piece of work twice, not an ordering hazard. Resolve the cluster as a unit, halting on the first failure: +**(1)** the human names the survivor from presented diff evidence (`gh pr diff` works for fork heads); **(2)** arm the survivor first: `gh pr merge --squash --auto --match-head-commit ` with the SHA read live, so a push before landing is a server-side refusal; +**(3)** comment on each superseded PR naming survivor and evidence (`--body-file`, never `--body` with prose through a shell); **(4)** close it — never `--reason "not planned"`, never a label swap; +**(5)** re-check linked issues per rule 3 below — a still-open issue with no remaining open PR is a finding to report, not something to silently fix. + #### CI card classification Classify every red before it costs the human a slot. Full triage procedure, @@ -164,7 +171,6 @@ git diff ... Full procedure and the table of regressions CI cannot see: [references/dismissed-approval.md](references/dismissed-approval.md). - ### 2 — Verdict Prompt the human **per PR, one at a time**. Use `gum choose` when available: