Skip to content

Determinismus

Warum gleicher Input bei CodeCharter immer gleiche Findings liefert.

CodeCharter garantiert: gleicher Source-Code-Stand, gleiche Regelmenge, gleiche CodeCharter-Version und gleiche Analyse-Optionen ergeben exakt die gleichen Findings, unabhängig von Rechner, Tageszeit, Systemlast oder Locale-Einstellungen.

Diese Garantie ist strukturell und kein Best-Effort: Die Analyse ist zustandslos und hängt nie von Uhrzeit, Zufallswerten oder Dateisystem-Reihenfolge ab. Gleicher Input führt immer zum gleichen Output, jedes Ausgabeformat meldet dieselben Findings, und das Schema der Regelpakete bleibt über Patch-Releases stabil, sodass eigene Regeln weiter funktionieren.

Was den Output ändern kann

Ändert sich einer dieser Faktoren, können sich die Findings ändern:

  1. Der Source-Code ändert sich. Dazu gehören auch .codecharter/config.yml und Inline-Unterdrückungskommentare (// codecharter-disable), die mit dem Source-Code versioniert werden und ebenfalls beeinflussen, was gemeldet wird.
  2. Die Regelmenge ändert sich. Eine .ccr-Datei wird hinzugefügt, entfernt oder geändert; ein Profil in .codecharter/config.yml wird angepasst; codecharter.lock.json wird neu aufgelöst; oder der severity-Override oder ignore-Eintrag einer Regel wird geändert.
  3. Die CodeCharter-Version ändert sich. Mit neuen Versionen können sich eingebaute Regeln verfeinern oder neue Schema-Properties dazukommen.
  4. Die Analyse-Optionen ändern sich. --severity, --fail-on, --diff/--git-ref und --baseline beeinflussen, was gemeldet wird, und müssen deshalb in allen Umgebungen übereinstimmen.

Für reproduzierbare Builds: Pinnen Sie Ihre CodeCharter-Version im CI (siehe Versionierung) und committen Sie das Verzeichnis .codecharter (config.yml und codecharter.lock.json). Das Lockfile pinnt jedes Profil über einen Content-Hash; analyze bricht mit Exit-Code 4 ab, wenn ein Regel-Bundle nicht mehr zu dem im Lockfile hinterlegten Hash passt.

Konsequenzen für Ihren Workflow

Wenn ein lokal grüner Build in der CI rot wird, ist einer der Faktoren oben auseinandergelaufen. Typische Ursachen:

  • Lokale und CI-CodeCharter-Versionen sind unterschiedlich.
  • .codecharter/config.yml oder codecharter.lock.json wurde nicht committet. (Das Verzeichnis .codecharter/cache/ ist ein lokaler Cache und gehört nicht in die Versionsverwaltung.)
  • codecharter.lock.json wurde nur in einer Umgebung aktualisiert, zum Beispiel nach codecharter update. Mit codecharter verify prüfen Sie den lokalen Regel-Cache gegen das Lockfile; bei Abweichung ist der Exit-Code 1.
  • Die CI-Pipeline verwendet andere Analyse-Optionen als Ihr lokaler Lauf.

Siehe Lokal andere Findings als in CI für die Debug-Schritte.