ci(replay-soak-gate): scope to #264-touching paths only - #443
Conversation
Reviewer's GuideScopes the Replay Soak Gate GitHub Actions workflow so it only runs for pull requests that touch the derivation-contract / soak-related paths, and documents the new path scope and residual risk in the workflow header comments. Sequence diagram for conditional triggering of Replay Soak Gate on PRssequenceDiagram
actor Developer
participant GitHub
participant ReplaySoakGateWorkflow as Replay_Soak_Gate_workflow
Developer->>GitHub: open or update pull request to main
GitHub->>GitHub: check changed_paths against configured_paths
alt any changed_path in derivation_contract_or_soak_paths
GitHub->>ReplaySoakGateWorkflow: dispatch pull_request event
ReplaySoakGateWorkflow->>ReplaySoakGateWorkflow: run gate jobs
ReplaySoakGateWorkflow->>GitHub: report consecutive_green_status
else no changed_path in derivation_contract_or_soak_paths
GitHub->>Developer: do not show Replay Soak Gate check on PR
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe replay-soak-gate workflow trigger is configured to run only for PRs targeting ChangesReplay Soak Gate Trigger Configuration
Estimated code review effort🎯 2 (Simple) | ⏱️ ~5 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This PR is now behind Auto-rebase was removed because the bot has no signing key; rebasing as the bot strips author signatures and the |
|
[claim:review:Toug:2026-05-05T17:23:55Z] |
8dc6517 to
b9084df
Compare
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.
b9084df to
3be58be
Compare
|
[release:review:Toug:2026-05-05T17:32:33Z] |
Summary
Adds a
paths:filter to.github/workflows/replay-soak-gate.ymlso the gate fires only on PRs that touch the derivation-contract surface (the actual #264 risk surface), the soak fixture, the runner/streak scripts, or the soak workflows themselves.Why
The gate's own docstring says it gates "#264-touching merges" but the trigger had no path filter, so every open PR shows a red
consecutive-green ≥ 7dcheck — including six unrelated PRs in flight today (#426, #428, #429, #430, #431, #432) covering retrieval, BM25F, edge rerank, contradiction detector, UX, and docs. None of those touch the derivation contract; the gate firing on them is noise.The check is not in the branch ruleset's
required_status_checkslist (verified viagh api .../rules/branches/main), so the red state is advisory rather than blocking. But it's misleading to reviewers and makesmergeStateStatus: BLOCKEDappear ingh pr view.Path scope
Files where a change can plausibly affect
replay_full_equality:src/aelfrice/derivation.py—derive()itselfsrc/aelfrice/derivation_worker.py— synchronous worker after each batchsrc/aelfrice/replay.py— replay logicsrc/aelfrice/ingest.py— ingest entry points that write toingest_logsrc/aelfrice/scanner.py— onboard path that callsrecord_ingesttests/replay_soak_runner.py— the harness invoked by the crontests/corpus/replay_soak/**— the v0.1 fixturescripts/replay_soak_run.py/scripts/replay_soak_streak.py.github/workflows/replay-soak.yml/replay-soak-gate.ymlThis PR itself is in scope (it edits
replay-soak-gate.yml), so the gate fires on it — and currently the streak is 0 so the check fails. That is fine: the failure is advisory, not blocking, since the check is not inrequired_status_checks.Residual risk
Additive edits to
store.py/models.pythat do affect the derivation contract aren't soak-gated by this filter. Mitigations:replay_full_equalitytests on every PR via thereplay_full_equalityprobe shipped at v1.6.0 ([v2.x] Implement replay_full_equality — flip-readiness probe #262 / feat: replay_full_equality probe — flip-readiness gate for #262 #304). That catches schema and write-path drift before merge.store.pychange surfaces within 24h on the next entry; subsequent PRs see streak reset to 0.If a particular
store.pyPR is high-risk for derivation drift (e.g.record_ingestrewrite), the operator can manually invoke the gate by pushing a no-op edit to one of the in-scope files alongside the change.Out of scope
Replay Soakcron workflow itself — keep firing daily on main regardless of touched paths; the cron is the source of streak truth.7dthreshold — separate question; this PR doesn't touch the threshold.required_status_checks— explicitly deferred perreplay-soak-gate.ymldocstring ("admin step, separate from this PR"). Not relevant until the threshold is operationally satisfiable.Test plan
yaml.safe_loadparses cleanly.ci:) — passes thecommit-msg-prefixcheck.git log --format=%G?→G).Refs
Summary by Sourcery
CI:
Summary by CodeRabbit
main.