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.
None.
No comments.