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 }}