ci(backend): Ruff-Scope zwischen PR- und Pre-Push-Gate angleichen - #885
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughDas Backend-PR-Gate lintet nun ChangesCI-Gate-Parität
Estimated code review effort: 3 (Moderate) | ~20 minutes Suggested labels: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches📝 Generate docstrings
Comment |
Root Cause
Das verpflichtende CI-PR-Gate und das lokale Pre-Push-Gate prüften unterschiedliche Ruff-Scopes:
.github/workflows/ci.yml(backend-pr-gate, läuft auf jedem PR):uv run ruff check app/scripts/pre-push-gate.sh→run_backend():uv run ruff check app/ tests/Das lokale Gate war strenger als der verpflichtende CI-Check. Lint-Verstöße unter
backend/tests/passierten CI unbemerkt und landeten aufmain, wo sie danach jeden lokalen Backend-Slice blockierten.Belegter Vorfall: PR #859 (
bf80dd09) brachtebackend/tests/scripts/test_bert_memory_profile.pymit 6 Ruff-Verstößen (2× F401, 4× E101) nachmain. CI war grün. Aufgefallen erst, als ein Worker an #868 daran hängenblieb. Symptom behoben in PR #879 — die Ursache blieb bis jetzt offen.Scope
.github/workflows/ci.yml: Ruff-Step inbackend-pr-gate→uv run ruff check app/ tests/(genau eine Zeile)backend/tests/contracts/test_ci_gate_parity.py(neu): struktureller Regressionstest gegen erneutes Auseinanderlaufendocs/STATUS.md: Autogen-Test-Zähler 3570 → 3573 viascripts/sync-status.shOut-of-Scope
scripts/pre-push-gate.shbleibt unberührt. Das lokale Gate wurde bewusst nicht aufapp/abgeschwächt — die Angleichung zieht das strengere Gate nach vorn.ci.yml:181(Jobbackend,push:main) behältruff check ..ruff check .im PR-Gate: das würdescripts/, generierte Dateien u. a. ungefragt in einen bereits etablierten Contract ziehen. YAGNI.ROADMAP.md/CHANGELOG.md: reine CI-/Tooling-Änderung ohne ausgeliefertes Nutzer- oder Betriebsverhalten.Verifikationsstrategie (TDD)
RED — Test gegen unverändertes
ci.yml:GREEN — nach der Angleichung: 3 passed.
Empirischer Beleg für Akzeptanzkriterium 2 (Probe-Datei mit F401 unter
backend/tests/, bewusst nicht committed, danach gelöscht):Kein absichtlich kaputter Python-Code im Repository.
Tests
Der neue Guard deckt drei Achsen ab:
run_backend()— schlägt an, sobald eine Seite driftettests/im PR-Gate-Scope — greift auch dann, wenn jemand künftig beide Gates gemeinsam aufapp/abschwächt (Fall 1 bliebe dabei grün)sync-status.sh --checkmuss nach den Contract-Tests stehen; geschützt wird die Definition des Jobsbackend-pr-gateals Ganzes, nicht nur die Ruff-Zeilestdlib-only, kein
import yaml.pyyamlist im Repo keine deklarierte Dependency (weder[project].dependenciesnoch[dependency-groups].dev) und käme rein transitiv überhuggingface-hub/transformers/jsonschema-path/pre-commit. Ein Test im verpflichtenden Gate darf keine lautlos entfernbare transitive Kopplung eingehen. Der Test folgt damit der bestehenden Repo-Konventionbackend/tests/dependencies/test_dependency_ssot.py(Rohtext/Regex, stdlib).Ablageort
tests/contracts/: bewusst, weil genau dieses Verzeichnis im verpflichtenden PR-Gate läuft (uv run pytest tests/contracts/ -q) — anderswo wäre der Guard wirkungslos.Gate
Dokumentationssync
docs/runbooks/pre-push-gate.md: NICHT BETROFFEN — Zeile 30 führte im Gate-Katalog bereitsruff check app/ tests/mit CI-Mirror „Backend PR smoke gate". Diese Aussage war vor diesem PR unwahr; die Code-Änderung macht sie korrekt. Das Akzeptanzkriterium fordert Korrektheit, kein Edit.docs/STATUS.md: aktualisiert (Autogen-Zähler, +3 durch die neuen Testfälle)ROADMAP.md/CHANGELOG.md: NICHT BETROFFEN (s. Out-of-Scope)Subagents, Modelle, Skills
.claude/agents/agora-refactor-worker-m3.md), Modellsonnetopus— deckte auf, dasspyyamlnicht deklariert ist und dass bereits eine Konvention für strukturelle Workflow-Tests existiert; führte zu einem Korrekturlaufcode-review(Standards + Spec, parallel)agora-opus-reviewer— APPROVE, mit unabhängig reproduziertem RED-Nachweis und selbst nachgemessenem Test-ZählerRisiken
uv run ruff check app/ tests/ist aufmainbereits grün — das PR-Gate wird durch die Angleichung nicht sofort rot.--select E501) oder ein umformatierter Job-Block führen zu lautem Falsch-Rot (Set-Ungleichheit bzw.AssertionError), nie zu stillem Grün.ruff check .umgestellt, liefe Testfall 2 falsch rot, obwohl.tests/einschließt. Fällt laut auf, Anpassung trivial.Closes #881
🤖 Generated with Claude Code
Summary by CodeRabbit
Verbesserungen
Tests
Dokumentation