Contribution Gate Playbook
The observed, repo-verified pipeline that took #85–#89 → PR #90
(a148180), #91 → PR #93 (92077a7), and #94–#96 → PR #97 (79ca49c)
on 2026-07-29/30. Canonical gate doctrine is
skills/cross-model-review/SKILL.md — this file only pins how THIS
repo runs it. On any disagreement, the canon skill wins.
Step 0 — pin the campaign set
Trigger: the owner's ask arrives.
- The set = the PRs open at instruction time (
gh pr list --state open). Record the numbers before touching anything.
- A PR that opens mid-campaign is NOT swept in. Precedent: #91 opened
2026-07-29T22:18Z, before #90 merged (23:34Z); it was excluded from
#90, flagged to the owner, and handled as its own campaign (#93).
- The owner's ask authorizes THIS set; a later set needs a fresh ask
(operational-rigor §2, per-invocation grant).
Step 1 — verify each PR's verifiable claims
- Every repo-facing claim in a PR's text (a commit id, a section
number, a "main already says X") is checked against the repo BEFORE
the gate. Precedent: #85's
8f8413f incident claim was verified
in-repo, and the check is recorded in #85's evaluation comment.
- A claim that fails verification is a finding to surface and
adjudicate, not something to silently fix or silently accept.
Step 2 — build the combined branch
- One integration branch from current main, named by joining the PR
numbers —
combined-85-86-87-88-89, combined-94-95-96 (multi-PR)
or integrate-91 (single PR) are the observed forms.
- Bring each PR's head branch local first (
gh pr checkout <number>
handles fork PRs too; the campaign merge commits show pr-<number>
local branch names). Merging every head into the combined branch is
what closes each constituent by reachability once the combined PR
merges (observed on #85–#89 and #94–#96; GitHub marks them MERGED).
Merge ASCENDING (lowest number first) — the house convention that
keeps Provenance-entry stacking orderly.
- Provenance-tail conflicts are the expected conflict shape: stack
both entries in PR order and reconcile with zero content loss (read
both sides in full; nothing dropped silently).
Step 3 — integration fixes, before round 1
Integrator additions are separate commits, named as integration
fixes, and are gate-reviewed like all other content. The recurring
three (commits f529014, 814d116):
- in-body
unprobed markers on clauses carrying only a
Provenance-level label (the covenant's standing form);
- rewrap added lines over 80 characters without changing words;
- Provenance blank-line normalization (house continuous-prose style).
Step 4 — checks green at every commit
python3 .github/checks.py green before every push. The campaign
PR bodies record checks green at every (fold) commit as the norm.
Step 5 — run the gate rounds
- Lens lineup as run 2026-07-29/30 — a dated OPERATING RECORD, not a
lineup to trust (the canonical rule is cross-model-review §1:
discover reviewers at session time; the concrete run recipes are
owner-personal and are NOT in this repo — ask the owner): grok-4.5
high + gpt-5.6-luna ultra EVERY round; gpt-5.6-sol max joining
every 3rd round, pre-commit rounds, and terminal-candidate rounds.
Each campaign's records state its own cadence (PR #90/#93 bodies;
for #97, its constituents' evaluation comments) — the newest
campaign's record is the freshest statement; the standing wording
is owner-set (UNCERTAINTY item 2).
- Lenses run as background CLI jobs writing verdict files. An empty
or still-writing file is NOT a verdict; wait for the completion
signal, then read the file.
- Each round's packet carries the current diff and the cumulative
disposition ledger of prior rounds' folds and rejections.
- Judge what comes back per
gate-adjudication-and-folds.
Step 6 — reach a terminal state
- Normal close: TRIPLE PROCEED — every lens PROCEED in the SAME round
(#93 r2; #97 r3).
- Non-convergence close: the bounded-loop close (cross-model-review
§4 is the canonical loop bound;
gate-adjudication-and-folds has
this repo's precedents). Residuals are disclosed in the PR body.
Step 7 — combined PR, CI, merge
- Push the branch; open ONE combined PR. Body shape: "What lands" per
constituent / "Review gate" (rounds, lenses, fold trajectory,
rejections) / "Integration notes" — the #90 shape; #93/#97 carry
the same three blocks with lighter headings.
- Wait for the three CI checks (consistency, hook-suites,
gate-template) by reading state directly —
gh pr checks 97,
substituting the campaign PR number; do not hand-roll wait loops
(failure-archaeology entry 1).
- Merge as a merge commit, and ONLY on an owner ask whose words cover
MERGING this campaign — write the AUTH line first (operational-rigor
§2); this playbook is never that authorization. An owner ask to
merge does not skip the CI wait: report pending checks and merge on
green, or on the owner's explicit go given the pending state.
Observed record, not a norm to reuse: the three campaign merges
landed with reviewDecision REVIEW_REQUIRED and zero reviews — an
owner-side bypass whose exact mechanism is not readable from here
(UNCERTAINTY item 3). If a merge is blocked, surface the blocker;
never probe for bypass paths.
Step 8 — post-merge duties (all of them, in order)
- Evaluation comment on EVERY constituent PR — maintainer-record
shape: what was verified for that PR / gate folds applied to its
text / final decision + merge SHA. Never quote the owner's
messages (
repo-boundaries-and-sync).
- Sync the live skill copies and cmp-verify at the merge SHA
(
repo-boundaries-and-sync has the current expected state).
- Probe debt: new
unprobed markers are ALREADY the live queue —
issue #92's canonical view is a grep, so there is no hand-kept
list to update.
- Update session memory with the campaign record.
Done definition
Every constituent PR shows MERGED; the combined merge commit is on
main with CI green; an evaluation comment sits on every constituent;
live installs cmp-clean per the current expected state; no
private-zone path appears in any pushed commit (git show --stat on
each).
When NOT to use this skill
- The owner asked a question about a PR (assess, don't integrate).
- The change is yours, not a contributor's — the gate doctrine still
applies via cross-model-review, but the combined-branch and per-PR
comment mechanics here assume third-party PRs.
Provenance
Distilled 2026-07-30 from the 2026-07-29/30 session transcript
(chat-history.md, local) and verified same-day against: PR
#90/#93/#97 bodies and merge commits a148180/92077a7/79ca49c;
evaluation comments on all nine constituent PRs (three read in full,
six confirmed present with matching openers — UNCERTAINTY item 7);
issue #92; commits f529014/814d116/6fa6154/5fa241b/83a038d/
1560b97; .github/checks.py; .github/workflows/checks.yml;
gh pr view <n> --json reviewDecision,reviews; gh pr view 91 --json createdAt.
Re-verify: gh pr view 97 --json body --jq .body | head -45 — and if
a newer combined/integrate PR exists, read the newest body instead;
practice evolves campaign by campaign and the PR bodies are its
freshest public record.
1---2name: contribution-gate-playbook3description: Load when contributor PRs are open on F-e-u-e-r/opus-pack and the owner asks to review, integrate, or merge them (any "follow our previous practice" form), or when a combined-*/integrate-* branch exists with its constituent PRs still open. Not for authoring doctrine (doctrine-change-conventions) or judging individual lens verdicts (gate-adjudication-and-folds).4---56# Contribution Gate Playbook78The observed, repo-verified pipeline that took #85–#89 → PR #909(`a148180`), #91 → PR #93 (`92077a7`), and #94–#96 → PR #97 (`79ca49c`)10on 2026-07-29/30. Canonical gate doctrine is11`skills/cross-model-review/SKILL.md` — this file only pins how THIS12repo runs it. On any disagreement, the canon skill wins.1314## Step 0 — pin the campaign set1516Trigger: the owner's ask arrives.1718- The set = the PRs open at instruction time (`gh pr list --state19 open`). Record the numbers before touching anything.20- A PR that opens mid-campaign is NOT swept in. Precedent: #91 opened21 2026-07-29T22:18Z, before #90 merged (23:34Z); it was excluded from22 #90, flagged to the owner, and handled as its own campaign (#93).23- The owner's ask authorizes THIS set; a later set needs a fresh ask24 (operational-rigor §2, per-invocation grant).2526## Step 1 — verify each PR's verifiable claims2728- Every repo-facing claim in a PR's text (a commit id, a section29 number, a "main already says X") is checked against the repo BEFORE30 the gate. Precedent: #85's `8f8413f` incident claim was verified31 in-repo, and the check is recorded in #85's evaluation comment.32- A claim that fails verification is a finding to surface and33 adjudicate, not something to silently fix or silently accept.3435## Step 2 — build the combined branch3637- One integration branch from current main, named by joining the PR38 numbers — `combined-85-86-87-88-89`, `combined-94-95-96` (multi-PR)39 or `integrate-91` (single PR) are the observed forms.40- Bring each PR's head branch local first (`gh pr checkout <number>`41 handles fork PRs too; the campaign merge commits show `pr-<number>`42 local branch names). Merging every head into the combined branch is43 what closes each constituent by reachability once the combined PR44 merges (observed on #85–#89 and #94–#96; GitHub marks them MERGED).45 Merge ASCENDING (lowest number first) — the house convention that46 keeps Provenance-entry stacking orderly.47- Provenance-tail conflicts are the expected conflict shape: stack48 both entries in PR order and reconcile with zero content loss (read49 both sides in full; nothing dropped silently).5051## Step 3 — integration fixes, before round 15253Integrator additions are separate commits, named as integration54fixes, and are gate-reviewed like all other content. The recurring55three (commits `f529014`, `814d116`):5657- in-body `unprobed` markers on clauses carrying only a58 Provenance-level label (the covenant's standing form);59- rewrap added lines over 80 characters without changing words;60- Provenance blank-line normalization (house continuous-prose style).6162## Step 4 — checks green at every commit6364- `python3 .github/checks.py` green before every push. The campaign65 PR bodies record checks green at every (fold) commit as the norm.6667## Step 5 — run the gate rounds6869- Lens lineup as run 2026-07-29/30 — a dated OPERATING RECORD, not a70 lineup to trust (the canonical rule is cross-model-review §1:71 discover reviewers at session time; the concrete run recipes are72 owner-personal and are NOT in this repo — ask the owner): grok-4.573 high + gpt-5.6-luna ultra EVERY round; gpt-5.6-sol max joining74 every 3rd round, pre-commit rounds, and terminal-candidate rounds.75 Each campaign's records state its own cadence (PR #90/#93 bodies;76 for #97, its constituents' evaluation comments) — the newest77 campaign's record is the freshest statement; the standing wording78 is owner-set (UNCERTAINTY item 2).79- Lenses run as background CLI jobs writing verdict files. An empty80 or still-writing file is NOT a verdict; wait for the completion81 signal, then read the file.82- Each round's packet carries the current diff and the cumulative83 disposition ledger of prior rounds' folds and rejections.84- Judge what comes back per `gate-adjudication-and-folds`.8586## Step 6 — reach a terminal state8788- Normal close: TRIPLE PROCEED — every lens PROCEED in the SAME round89 (#93 r2; #97 r3).90- Non-convergence close: the bounded-loop close (cross-model-review91 §4 is the canonical loop bound; `gate-adjudication-and-folds` has92 this repo's precedents). Residuals are disclosed in the PR body.9394## Step 7 — combined PR, CI, merge9596- Push the branch; open ONE combined PR. Body shape: "What lands" per97 constituent / "Review gate" (rounds, lenses, fold trajectory,98 rejections) / "Integration notes" — the #90 shape; #93/#97 carry99 the same three blocks with lighter headings.100- Wait for the three CI checks (consistency, hook-suites,101 gate-template) by reading state directly — `gh pr checks 97`,102 substituting the campaign PR number; do not hand-roll wait loops103 (`failure-archaeology` entry 1).104- Merge as a merge commit, and ONLY on an owner ask whose words cover105 MERGING this campaign — write the AUTH line first (operational-rigor106 §2); this playbook is never that authorization. An owner ask to107 merge does not skip the CI wait: report pending checks and merge on108 green, or on the owner's explicit go given the pending state.109 Observed record, not a norm to reuse: the three campaign merges110 landed with reviewDecision REVIEW_REQUIRED and zero reviews — an111 owner-side bypass whose exact mechanism is not readable from here112 (UNCERTAINTY item 3). If a merge is blocked, surface the blocker;113 never probe for bypass paths.114115## Step 8 — post-merge duties (all of them, in order)1161171. Evaluation comment on EVERY constituent PR — maintainer-record118 shape: what was verified for that PR / gate folds applied to its119 text / final decision + merge SHA. Never quote the owner's120 messages (`repo-boundaries-and-sync`).1212. Sync the live skill copies and cmp-verify at the merge SHA122 (`repo-boundaries-and-sync` has the current expected state).1233. Probe debt: new `unprobed` markers are ALREADY the live queue —124 issue #92's canonical view is a grep, so there is no hand-kept125 list to update.1264. Update session memory with the campaign record.127128## Done definition129130Every constituent PR shows MERGED; the combined merge commit is on131main with CI green; an evaluation comment sits on every constituent;132live installs cmp-clean per the current expected state; no133private-zone path appears in any pushed commit (`git show --stat` on134each).135136## When NOT to use this skill137138- The owner asked a question about a PR (assess, don't integrate).139- The change is yours, not a contributor's — the gate doctrine still140 applies via cross-model-review, but the combined-branch and per-PR141 comment mechanics here assume third-party PRs.142143## Provenance144145Distilled 2026-07-30 from the 2026-07-29/30 session transcript146(`chat-history.md`, local) and verified same-day against: PR147#90/#93/#97 bodies and merge commits `a148180`/`92077a7`/`79ca49c`;148evaluation comments on all nine constituent PRs (three read in full,149six confirmed present with matching openers — UNCERTAINTY item 7);150issue #92; commits `f529014`/`814d116`/`6fa6154`/`5fa241b`/`83a038d`/151`1560b97`; `.github/checks.py`; `.github/workflows/checks.yml`;152`gh pr view <n> --json reviewDecision,reviews`; `gh pr view 91 --json153createdAt`.154155Re-verify: `gh pr view 97 --json body --jq .body | head -45` — and if156a newer combined/integrate PR exists, read the newest body instead;157practice evolves campaign by campaign and the PR bodies are its158freshest public record.