From 3be58befb5e65c450cd623de5a7ea15b771f7527 Mon Sep 17 00:00:00 2001 From: rrs <276464689+robotrocketscience@users.noreply.github.com> Date: Tue, 5 May 2026 09:45:56 -0700 Subject: [PATCH] ci(replay-soak-gate): scope to #264-touching paths only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gate's docstring says it gates "#264-touching merges" but the trigger had no paths filter, so it fired on every PR — turning a not-yet-required advisory check into noise on PRs unrelated to the derivation contract (retrieval, BM25F, edge rerank, contradiction detector, UX, docs). Add a paths filter scoped to the actual derivation-contract surface: derivation.py, derivation_worker.py, replay.py, ingest.py, scanner.py, the soak fixture / runner / streak scripts, and the two soak workflows themselves. PRs outside that surface no longer see the check at all. Residual risk: additive edits to store.py / models.py that affect the derivation contract aren't soak-gated; the regular pytest matrix catches those via replay_full_equality tests, and drift surfaces on the next daily cron entry on main. Refs #403, #264. --- .github/workflows/replay-soak-gate.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/replay-soak-gate.yml b/.github/workflows/replay-soak-gate.yml index 50ed1bdb4..b8b42e961 100644 --- a/.github/workflows/replay-soak-gate.yml +++ b/.github/workflows/replay-soak-gate.yml @@ -5,11 +5,34 @@ name: Replay Soak Gate # `replay-soak / consecutive-green ≥ 7d`. Per the 2026-05-04 # ratification, that name is added to the branch ruleset's # required_status_checks list (admin step, separate from this PR). +# +# Path scope: only fires on PRs that touch the derivation contract +# surface (the actual #264 risk surface), the soak fixture, the soak +# runner / streak scripts, or the soak workflows themselves. Out-of- +# scope PRs (retrieval, BM25F, edge rerank, contradiction detector, +# UX, docs) don't see this check at all — keeps the gate honest to +# its stated intent rather than firing on every PR. Residual risk: +# additive edits to `store.py` / `models.py` that touch the +# derivation contract aren't soak-gated; the regular pytest matrix +# (`replay_full_equality` tests) catches those, and any drift +# surfaces on the next daily cron entry on main. on: pull_request: branches: [main] types: [opened, synchronize, reopened] + paths: + - 'src/aelfrice/derivation.py' + - 'src/aelfrice/derivation_worker.py' + - 'src/aelfrice/replay.py' + - 'src/aelfrice/ingest.py' + - 'src/aelfrice/scanner.py' + - 'tests/replay_soak_runner.py' + - 'tests/corpus/replay_soak/**' + - 'scripts/replay_soak_run.py' + - 'scripts/replay_soak_streak.py' + - '.github/workflows/replay-soak.yml' + - '.github/workflows/replay-soak-gate.yml' permissions: contents: read