Implement design_docs/009-games-merge-without-a-click.md nf-uant ← Beads

closed priority 2 task unassigned

Twinned from https://github.com/cfsh/ninefold/issues/935 by tools/beads/import_github.py's reconcile pass.

design_docs/009 (PR #934) covers two independent things:

Stage 1 — real approval, one line. ./dev.py ack <n>... fires a real gh pr review --approve under Aedan's own identity (refuses loudly under any other), closing the browser-click friction on games//shared/ PRs with zero governed-file changes. Self-contained, one PR, no dependencies.

Stage 2 — a rubric-gated third merge authority, shadow before live. The reviewer bot gains a second verdict axis: given a PR body citing one of a closed, Aedan-owned rubric category ("no behavior change", "a standing ack already covers this", "probe-verified bugfix"), it judges the cited evidence and emits SELFMERGE=ok/deny — judged by the same stateless reviewer that already re-reads code, never by the proposing agent. Mechanical prerequisites (single games/<name>/*, never shared/*, no new folder, presubmit + probe gate clean, content verdict CONVERGED) apply regardless of the rubric. Runs in **shadow mode first** (verdict posted, merge behavior unchanged) until Aedan has skimmed enough of them to judge the agreement rate; only then does a third authority (merged:rubric) activate in merge_pr.py.

Shape: roughly 8 PRs across 3 stacks — Stage 1 (1 PR, standalone), Stage 2a/shadow (4 PRs, stacked: CHARTER rubric section → verdict parsing → PR-body convention + governance-lock the new note → dispatch wiring), a manual calibration checkpoint (not a PR), then Stage 2b/live (2 PRs, stacked: mechanical eligibility check → wire into merge_pr.py). Full task cards with files/tests/PR shape are in the doc's §8 — the session taking this splits them into issues in order, not all at once.

Not claimed. Not labelled.

Dependencies

None.

Comments

No comments.

Add a comment