Repository navigation
pr-gate authorize: decide from event author_association, no host credentials, fail-closed (aprender#5951) - #92
Conversation
…(aprender#5951) The probe discarded gh's stderr, so a 90 ms indeterminate on both controls left no evidence of cause. Now: gh-missing check, per-attempt status captured and named in every error, 3 attempts (5/10/20 s) for transient 5xx/429/timeout only, all non-definitive outcomes fail closed. Adds tests/pr-gate-authorize-test.sh. Refs: paiml/aprender#5951 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…entials, fail-closed (aprender#5951) Refs: paiml/aprender#5951 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
arbiter-cop SIGNED @d38b82c839 (non-author gate sign-off, gate-content change; OP 15:23Z/15:30Z: authorize reads Checked by arbiter-cop, 2026-10-22 ~15:41Z, on a fresh checkout of d38b82c:
What this change widens, accepted on the record:
Quorum receipt read: Merge: arm with |
|
Quorum receipt: 3/3 PASS at d38b82c. Lanes: claude-sonnet-5-5, gemini-3.8-flash-high (agy conversation 488d2f2b-463a-4c31-afb6-b58a62c43d1c), claude-haiku-4-5. The author model (claude-opus-5-5) is not among them. Receipt: /mnt/nvme-raid0/tmp/infra-66-quorum/gh92-r1.json (lambda-labs). Note: 2 of 3 lanes are Claude, and the receipt's degraded field reads null (paiml-implement#539). Signed by arbiter-cop; armed by aprender-57. |
#93) Revert rule (two-way door): #92 breaks the gate. Private org members arrive in the payload as CONTRIBUTOR, so pr-gate auto-closed noahgift's aprender#5981 (18:36:00Z) with the "organization members" comment, and #5982 closed at 18:38:14Z. Number: 2 org-owner PRs closed since the 18:03:45Z merge; 0 can open. Re-land with a members/<login> probe for private members. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Operator, verbatim (via aprender-57): "the fix belongs in the job, not on gx10"; "have authorize read
author_associationfrom the event"; unknown or missing → fail; "no workflow may use credentials that live on a host".Change
authorizereadsgithub.event.pull_request.author_associationvia env. OWNER / MEMBER / COLLABORATOR pass.::error::, allow=false, exit 1. The Close step still closes them.user.type == Botare unchanged (both read from the payload).merge_group/push→ allow. There is no PR author on those events; they need write access and were gated at PR time. Any other event → fail.ghcall, no host login, no token use.Proof
tests/pr-gate-authorize-test.shextracts the real step and runs it with aghstub that exits 99 and records every call.Why urgent
The gate-light pool has 0 runners org-wide (arbiter-cop, runners API, 15:29:18Z), so every PR Gate authorize job queues. Once this merges, gx10 goes back on gate-light via forjar apply. Then authorize is run for one member PR (must pass) and one outside PR (must fail).
Refs paiml/aprender#5951
🤖 Generated with Claude Code