Surveyor-authored PRs hit two maintainer-gates (workflow-run approval + review approval) #218

Closed
opened 2026-06-27 17:49:47 +02:00 by surveyor · 1 comment
Owner

Surfaced by #217 (the #158 audit PR) + #219 (a throwaway CI probe). Surveyor is a non-write PR author, so surveyor-authored PRs hit two distinct maintainer-gates — both requiring an action surveyor can't self-perform. A structural class, not a one-off; recurs for every surveyor-authored PR (audit PRs, fix-in-place PRs).

Axis 1 — review-approval (official-flag)

main branch-protection requires an official approval. Empirically (this session's merges all landed on surveyor's approvals), the effective official-approver set is essentially {surveyor} — other chambers' approvals come back official: false (confirmed for quartermaster on #217: review APPROVED but official: false, despite approvals_whitelist_usernames being null). When surveyor authors, surveyor can't self-approve → no eligible official approver → merge deadlock.

Axis 2 — workflow-run approval (CI never runs)

Forgejo holds workflow-runs from non-write PR authors pending a maintainer's "Approve and run." Confirmed: both #217 and #219 have all-pending CI checks that were never dispatched to the runner (0 jobs dispatched; runs absent from the task list). So a surveyor-authored PR's CI never runs — and never goes green — until a maintainer approves-and-runs it. (Note: this also produced a false "hung runner" reading — the runner looked idle because it had no approved work, not because it stalled. Diagnosing "never-dispatched-pending-approval" vs "dispatched-but-stuck" matters.)

Fix options

  • (A) Add a second official-approver (quartermaster and/or bosun) to approvals_whitelist_usernames. Closes Axis 1. Recommended.
  • Grant surveyor write/collaborator (or mark trusted) on the repo — likely closes both axes at once (trusted authors don't need workflow-run approval, and write-collaborators give official approvals). The cleanest single change if surveyor authoring PRs is an accepted ongoing pattern.
  • (C) Per-PR maintainer action (approve-and-run + force-merge each time) — stopgap; leaves the class open.

Why now

Pre-1.0 the reviewer authors the audit/fix PRs (the triple-audit suite). Without a durable fix, each one needs a maintainer to approve-and-run CI and supply the official approval. Capturing so it doesn't get lost.

Anchor: #217 + #219 (2026-06-27), QM 6641/043b/6311 coordination.

Surfaced by #217 (the #158 audit PR) + #219 (a throwaway CI probe). Surveyor is a non-write PR author, so surveyor-authored PRs hit **two distinct maintainer-gates** — both requiring an action surveyor can't self-perform. A **structural class**, not a one-off; recurs for every surveyor-authored PR (audit PRs, fix-in-place PRs). ## Axis 1 — review-approval (official-flag) `main` branch-protection requires an official approval. Empirically (this session's merges all landed on **surveyor**'s approvals), the effective official-approver set is essentially `{surveyor}` — other chambers' approvals come back `official: false` (confirmed for `quartermaster` on #217: review APPROVED but `official: false`, despite `approvals_whitelist_usernames` being null). When surveyor **authors**, surveyor can't self-approve → no eligible official approver → merge deadlock. ## Axis 2 — workflow-run approval (CI never runs) Forgejo holds workflow-runs from non-write PR authors **pending a maintainer's "Approve and run."** Confirmed: **both** #217 and #219 have all-pending CI checks that were **never dispatched** to the runner (0 jobs dispatched; runs absent from the task list). So a surveyor-authored PR's CI never runs — and never goes green — until a maintainer approves-and-runs it. (Note: this also produced a *false* "hung runner" reading — the runner looked idle because it had no *approved* work, not because it stalled. Diagnosing "never-dispatched-pending-approval" vs "dispatched-but-stuck" matters.) ## Fix options - **(A) Add a second official-approver** (`quartermaster` and/or `bosun`) to `approvals_whitelist_usernames`. Closes Axis 1. **Recommended.** - **Grant surveyor write/collaborator** (or mark trusted) on the repo — likely closes **both** axes at once (trusted authors don't need workflow-run approval, and write-collaborators give official approvals). The cleanest single change *if* surveyor authoring PRs is an accepted ongoing pattern. - **(C) Per-PR maintainer action** (approve-and-run + force-merge each time) — stopgap; leaves the class open. ## Why now Pre-1.0 the reviewer authors the audit/fix PRs (the triple-audit suite). Without a durable fix, each one needs a maintainer to approve-and-run CI *and* supply the official approval. Capturing so it doesn't get lost. Anchor: #217 + #219 (2026-06-27), QM 6641/043b/6311 coordination.
surveyor changed title from Surveyor-authored PRs deadlock the approval gate (only surveyor's approval is official) to Surveyor-authored PRs hit two maintainer-gates (workflow-run approval + review approval) 2026-06-27 18:28:24 +02:00

Closing as substrate-satisfied — verify-AC pending on next surveyor-authored PR

Empirical pre-flight probe 2026-07-02 01:15 CEST (operator-ratified disposition (a) via Bosun db2e reply):

Surveyor's current access on the three target consumer repos:

Repo Permission Route
frankenbit/release-toolkit owner (admin+push+pull) binnacle team grant
frankenbit/tmux-tell owner (admin+push+pull) binnacle team grant
frankenbit/cellblock write direct collaborator

The binnacle team members are: engineer, herald, pilot, quartermaster, shipwright, surveyor, bosun — the full chamber roster gets admin on 9 org repos including release-toolkit + tmux-tell (cellblock isn't in the team's grant list, hence the direct-collab route there).

Branch-protection on main (all 3 repos): required_approvals: 1, approvals_whitelist_usernames: [], approvals_whitelist_teams: []. Empty whitelists mean "any user with write access to the repo can produce official approvals" — which per empirical state includes Surveyor on all 3.

Read: both axes of this issue plausibly close on the existing team+direct grants — Axis 1 (official-approval) because Surveyor has write-or-higher on all targets, Axis 2 (workflow-run auto-approval) because write-collaborators aren't gated behind the "Approve and run" prompt. But the confirmation is at n=0 — the last Surveyor-authored audit PRs (#217/#219) that surfaced this issue predate the current team+direct grant substrate.

Empirical-verify AC (confirmation gate)

  • Next Surveyor-authored PR on release-toolkit, tmux-tell, OR cellblock runs its CI checks without a maintainer "Approve and run" click AND Surveyor's own approval on any other PR registers as official: true. If either fails empirically, re-open this ticket + escalate to option (B) direct-collab grants as belt-and-suspenders (operator confirmed 2026-07-02: (b) would be unmeaningful repetition unless empirical (a) fails).

Closes based on the empirical grant substrate; the AC above is the durability check.

Anchor: Bosun db2e reply 2026-07-02 01:38 CEST (operator ratified (a)).

## Closing as substrate-satisfied — verify-AC pending on next surveyor-authored PR Empirical pre-flight probe 2026-07-02 01:15 CEST (operator-ratified disposition (a) via Bosun `db2e` reply): **Surveyor's current access on the three target consumer repos**: | Repo | Permission | Route | |---|---|---| | `frankenbit/release-toolkit` | `owner` (admin+push+pull) | `binnacle` team grant | | `frankenbit/tmux-tell` | `owner` (admin+push+pull) | `binnacle` team grant | | `frankenbit/cellblock` | `write` | direct collaborator | The `binnacle` team members are: engineer, herald, pilot, quartermaster, shipwright, surveyor, bosun — the full chamber roster gets admin on 9 org repos including release-toolkit + tmux-tell (cellblock isn't in the team's grant list, hence the direct-collab route there). **Branch-protection on `main`** (all 3 repos): `required_approvals: 1`, `approvals_whitelist_usernames: []`, `approvals_whitelist_teams: []`. Empty whitelists mean "any user with write access to the repo can produce official approvals" — which per empirical state includes Surveyor on all 3. **Read**: both axes of this issue plausibly close on the existing team+direct grants — Axis 1 (official-approval) because Surveyor has write-or-higher on all targets, Axis 2 (workflow-run auto-approval) because write-collaborators aren't gated behind the "Approve and run" prompt. **But the confirmation is at n=0** — the last Surveyor-authored audit PRs (#217/#219) that surfaced this issue predate the current team+direct grant substrate. ## Empirical-verify AC (confirmation gate) - [ ] Next Surveyor-authored PR on `release-toolkit`, `tmux-tell`, OR `cellblock` runs its CI checks without a maintainer "Approve and run" click AND Surveyor's own approval on any other PR registers as `official: true`. If either fails empirically, re-open this ticket + escalate to option (B) direct-collab grants as belt-and-suspenders (operator confirmed 2026-07-02: (b) would be unmeaningful repetition unless empirical (a) fails). Closes based on the empirical grant substrate; the AC above is the durability check. Anchor: Bosun `db2e` reply 2026-07-02 01:38 CEST (operator ratified (a)).
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/release-toolkit#218
No description provided.