Skip to content

ci(status): STATUS.md-Drift im PR-Gate prüfen statt nach dem Merge#884

Merged
arn0ld87 merged 1 commit into
mainfrom
ci/status-sync-pr-gate
Jul 25, 2026
Merged

ci(status): STATUS.md-Drift im PR-Gate prüfen statt nach dem Merge#884
arn0ld87 merged 1 commit into
mainfrom
ci/status-sync-pr-gate

Conversation

@arn0ld87

Copy link
Copy Markdown
Owner

Closes #883

Release-Ziel

0.9.0 Stability Beta. ROADMAP-Kriterium: "docs/STATUS.md wird automatisch erzeugt oder CI-geprüft".

Root Cause

Der status-sync-Job wurde am 17.05.2026 mit PR #516 ("PR-Pipeline entschlacken, 13 → 6 Checks") entfernt. Die Begründung im Code war korrekt: er lief nur auf push:main und doppelte sich mit dem ebenfalls entfernten contract-gates::status-sync-drift.

Übrig blieb allerdings gar keine automatische Prüfung. docs/STATUS.md driftete daraufhin unbemerkt: Backend-Testanzahl stand auf 3508, real waren es 3570 — 62 Tests Differenz, aufgelaufen über viele PRs. Aufgefallen ist es erst, als ein Backend-Slice am lokalen Gate hängenblieb.

Warum nicht der alte Job zurück

Auf push:main läuft die Prüfung nach dem Merge. Sie hätte den Drift protokolliert, nicht verhindert — genau das ist passiert. Die Prüfung gehört auf den PR.

Scope

1. Drift-Check als Step im bestehenden backend-pr-gate
Kein eigener Job. Das Gate setzt uv, Dependencies und Checkout bereits auf, und der Frontend-Zähler braucht nur das Repo — der Step kostet damit kein zweites Setup. Nebeneffekt: die von #516 kritisierte Job-Doppelung entsteht gar nicht erst wieder.

2. sync-status.sh gehärtet — Messfehler ist kein Drift
Bisher setzte das Skript bei fehlgeschlagenem oder ins 180s-Timeout gelaufenem pytest --collect-only still BACKEND_TESTS="unknown" und fuhr fort. --check diffte dann "unknown" gegen die dokumentierte Zahl und meldete "DRIFT: docs/STATUS.md weicht von autogenerated Inhalt ab" — obwohl kein Drift vorlag, sondern die Messung fehlgeschlagen war.

Als blockierendes Pflicht-Gate wäre das flaky mit irreführender Fehlermeldung gewesen. Das ist exakt die Art Flakiness, gegen die #516 antrat; ohne diese Härtung hätte der Wiedereinbau den alten Fehler reproduziert.

--check unterscheidet jetzt:

  • exit 0 — in sync
  • exit 1 — echter Drift, mit Diff
  • exit 2 — Messfehler, mit Grund und dem expliziten Hinweis, dass es kein Drift ist

3. STATUS.md einmalig synchronisiert (3508 → 3570)
Ohne das wäre das neue Gate ab dem ersten PR rot.

Out-of-Scope

Tests

Alle drei Pfade gezielt provoziert und verifiziert:

Fall Erwartet Ergebnis
STATUS.md in sync exit 0 OK: docs/STATUS.md in sync
uv nicht auffindbar (Messfehler) exit 2, kein "DRIFT" MESSFEHLER: … Das ist KEIN STATUS.md-Drift
Zahl manuell auf 9999 verfälscht exit 1 DRIFT: …

YAML-Syntax per yaml.safe_load validiert, Step-Reihenfolge im backend-pr-gate geprüft.

Gate

bash scripts/pre-push-gate.sh backendALL GREEN, exit 0. Der sync-status --check-Schritt meldet OK: docs/STATUS.md in sync.

Das ist der erste vollständig grüne Backend-Gate-Lauf dieser Serie — vorher blockierten nacheinander der ruff-Verstoß (PR #879) und dieser Drift.

Build-Verifikation

Entfällt — CI- und Skript-Änderung ohne Bundle-Auswirkung.

Subagents und Modelle

Vollständig vom Lead (Opus 5). Kleiner, präziser CI-Eingriff mit Design-Entscheidung (Step statt Job, Messfehler-Trennung) — ein Worker-Briefing wäre teurer als die Umsetzung gewesen.

Matt-Pocock-Skills

Keiner. Die Verifikation läuft über die drei provozierten Exit-Pfade, nicht über eine Testsuite; sync-status.sh hat keine.

Dokumentationssync

docs/STATUS.md auf den realen Stand gebracht. Der ci.yml-Kommentar zur Entfernung von 2026-05-17 wurde nicht gelöscht, sondern um Rückkehr und Begründung ergänzt — die Historie bleibt nachvollziehbar.

Review-Ergebnis

Lead-Review. Der kritische Punkt war nicht der Wiedereinbau selbst, sondern dass ein naiver Wiedereinbau ein flakiges Pflicht-Gate erzeugt hätte. Deshalb die Härtung im selben Slice.

Risiken

pytest --collect-only kostet im Gate rund 50 Sekunden. Vertretbar, weil kein zusätzliches Setup anfällt.

Bleibt die Gesamt-Testanzahl in CI aus Umgebungsgründen hinter dem lokalen Wert zurück (etwa durch Import-Fehler bei optionalen Dependencies), meldet das Gate Drift statt Messfehler — der Collect-Lauf war ja erfolgreich, nur mit anderem Ergebnis. Sollte das auftreten, ist der nächste Schritt, die Backend-Zahl aus dem Auto-Block zu nehmen und nur die deterministischen Werte zu prüfen. Der erste PR gegen dieses Gate zeigt es.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Vo55HzjhQwyXQEJAzrF8TJ

Der status-sync-Job wurde am 17.05.2026 mit PR #516 entfernt, weil er nur
auf push:main lief und sich mit contract-gates::status-sync-drift doppelte.
Beides stimmte — nur blieb danach gar keine automatische Pruefung uebrig.

Folge: docs/STATUS.md driftete unbemerkt. Backend-Testanzahl stand auf 3508,
real waren es 3570. Aufgefallen ist das erst, als ein Backend-Slice am
lokalen Gate haengenblieb.

Der alte Job kommt nicht zurueck. Auf push:main haette er den Drift
protokolliert, nicht verhindert. Die Pruefung laeuft jetzt als Step im
backend-pr-gate, also auf dem PR. Kein eigener Job: uv, Dependencies und
Checkout stehen dort bereits, der Frontend-Zaehler braucht nur das Repo —
damit entfaellt auch die urspruenglich kritisierte Doppelung.

Zusaetzlich sync-status.sh gehaertet: bisher setzte das Skript bei
fehlgeschlagenem oder getimeoutetem `pytest --collect-only` still
BACKEND_TESTS="unknown" und fuhr fort, worauf --check faelschlich DRIFT
meldete. Als blockierendes Gate waere das flaky mit irrefuehrender
Begruendung gewesen — genau die Flakiness, gegen die #516 antrat. --check
unterscheidet jetzt Messfehler (exit 2, eigene Meldung) von echtem Drift
(exit 1).

STATUS.md einmalig synchronisiert, sonst waere das neue Gate ab dem ersten
PR rot.

Refs #883

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vo55HzjhQwyXQEJAzrF8TJ
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@arn0ld87, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 6 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 99087d67-c302-4f92-afcc-2057965ae50d

📥 Commits

Reviewing files that changed from the base of the PR and between f55c69d and 2ae8428.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • docs/STATUS.md
  • scripts/sync-status.sh

Comment @coderabbitai help to get the list of available commands.

@arn0ld87
arn0ld87 merged commit 7cb7a73 into main Jul 25, 2026
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci(0.9): STATUS.md-Drift im PR-Gate prüfen (status-sync wieder aktivieren)

1 participant