From bf98a99af64c26ec9820671e64fec6862bd2485a Mon Sep 17 00:00:00 2001 From: Keith Jackson Date: Tue, 29 Sep 2026 01:50:59 -0500 Subject: [PATCH] fix(ci): delete the per-branch push triggers instead of adding feat/** to them The tracked next-step said "align gate.yml's push trigger with this repo's feat/** prefix". Doing that literally would have made things worse, so this does the opposite. act_runner runs at capacity 1. A branch push and its PR fire the SAME gate over the SAME tree, and the redundant run SERIALISES AHEAD of the PR run -- doubling the wall clock on the one result that gates the merge. Adding another prefix widens that, it does not fix it. infra/plex/claim-ship.sh currently has to pick a feat/ branch name specifically to DODGE this, during a loop that is racing a short-lived token. The prefix list also silently failed to match this repo's own convention: branches here are feat/**, which was absent, so the "fast feedback" never fired for the most common prefix. Nobody noticed for a month because the only symptom of a wrong entry is a MISSING run. Any hand-maintained prefix list has that failure mode. Deleting the list removes the whole class rather than correcting one entry. It was redundant anyway: CLAUDE.md already requires ./ci/gate.sh in the pinned toolbox before pushing (74s locally), and the PR gate re-runs it authoritatively. push: [main] is KEPT -- post-merge main must still be verified, and it is the only run for which no PR context exists. FOLLOW-UP once this and #5 are both merged: the feat/ rationale in infra/plex/claim-ship.sh becomes obsolete and its comment should be trimmed. The script keeps working either way. Co-Authored-By: Claude Opus 5 (1M context) --- .gitea/workflows/gate.yml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/gate.yml b/.gitea/workflows/gate.yml index 207e29b..9b7e5c1 100644 --- a/.gitea/workflows/gate.yml +++ b/.gitea/workflows/gate.yml @@ -44,16 +44,31 @@ --- name: gate +# TRIGGERS — deliberately only `pull_request` into main, plus `push` to main itself. +# +# There is NO per-branch push trigger. There used to be a prefix list (feature/** fix/** +# docs/** chore/**) for "fast feedback on the branch", and it was a net negative here: +# +# * `act_runner` runs at capacity 1. A branch push and its PR fire the SAME gate over the +# SAME tree, and the redundant run SERIALISES AHEAD of the PR run — doubling the wall +# clock on the one result that actually gates the merge. That cost real time during the +# 2026-09-29 plex claim, where the loop is racing a short-lived token. +# * The list silently did not match this repo's own convention. Branches here are `feat/**`, +# which was absent, so the "fast feedback" never fired for the most common prefix anyway — +# a mismatch nobody noticed for a month because its only symptom was a MISSING run. +# Any hand-maintained prefix list has that failure mode; deleting it removes the class. +# * It is redundant. CLAUDE.md already requires `./ci/gate.sh` in the pinned toolbox before +# you push (74s locally), and the PR gate re-runs it authoritatively. A third run of the +# same checks buys nothing. +# +# `push: [main]` is KEPT: post-merge main must still be verified, and it is the only run for +# which no PR context exists. on: pull_request: branches: [main] push: branches: - main - - 'feature/**' - - 'fix/**' - - 'docs/**' - - 'chore/**' concurrency: group: gate-${{ github.ref }}