From 00ddf893788e6372314e7e592a3e3811ffe42c46 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 21 Jul 2026 06:44:12 +0100 Subject: [PATCH 1/2] =?UTF-8?q?feat(scripts):=20fix-actions-policy.sh=20?= =?UTF-8?q?=E2=80=94=20repair=20the=20estate=20Actions-policy=20outage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements the "fastest shippable" item of gitbot-fleet#362. ## The fault An onboarding stamp set `allowed_actions=selected` + `sha_pinning_required=true` but never populated `patterns_allowed`, leaving it `[]`. An empty selected-list rejects every non-github-owned `uses:` at workflow-parse time, so runs die as `startup_failure` with ZERO jobs — looks like "CI is broken", is actually a settings fault, and no amount of workflow editing fixes it. MEASURED 2026-07-21: 80 of 306 scanned hyperpolymath repos are in this state. ## Why this fixer is shaped unlike the others Every other fix-*.sh takes a REPO_PATH and edits files, so its blast radius is a reviewable diff. This one writes repository *settings* via the API: no diff, no branch, no PR. Per #362 that demands gating, so: * default mode is --list (READ ONLY; never writes) * --apply is required to write * HYPATIA_AUTOMATION={off,disabled,0} halts writes (exit 4) * the estate exclusion registry is consulted FAIL-CLOSED before any write (unreadable registry => refuse to write, exit 5) * every PUT is GET-verified and the sweep ABORTS (exit 3) if sha_pinning was silently reset — never trade pinning away for permissiveness ## Dual invocation contract dispatch-runner.sh calls fixers as `