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:
- Der Source-Code ändert sich. Dazu gehören auch
.codecharter/config.ymlund Inline-Unterdrückungskommentare (// codecharter-disable), die mit dem Source-Code versioniert werden und ebenfalls beeinflussen, was gemeldet wird. - Die Regelmenge ändert sich. Eine
.ccr-Datei wird hinzugefügt, entfernt oder geändert; ein Profil in.codecharter/config.ymlwird angepasst;codecharter.lock.jsonwird neu aufgelöst; oder derseverity-Override oderignore-Eintrag einer Regel wird geändert. - Die CodeCharter-Version ändert sich. Mit neuen Versionen können sich eingebaute Regeln verfeinern oder neue Schema-Properties dazukommen.
- Die Analyse-Optionen ändern sich.
--severity,--fail-on,--diff/--git-refund--baselinebeeinflussen, 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.ymlodercodecharter.lock.jsonwurde nicht committet. (Das Verzeichnis.codecharter/cache/ist ein lokaler Cache und gehört nicht in die Versionsverwaltung.)codecharter.lock.jsonwurde nur in einer Umgebung aktualisiert, zum Beispiel nachcodecharter update. Mitcodecharter verifyprüfen Sie den lokalen Regel-Cache gegen das Lockfile; bei Abweichung ist der Exit-Code1.- Die CI-Pipeline verwendet andere Analyse-Optionen als Ihr lokaler Lauf.
Siehe Lokal andere Findings als in CI für die Debug-Schritte.