Karte 642: Leitplanke gegen den alten Namespace daniel-marthaler - #61
Merged
Conversation
Karte 606 Phase 1 hat die 16 funktionalen Referenzen auf den persoenlichen Namespace korrigiert. Was fehlte, war die Schranke gegen die naechste: bis zum 10.08.2026 zog genau diese Pipeline ihre Build-Config aus daniel-marthaler/plaintext-config, fuenf POMs ihre Artefakte aus daniel-marthaler/plaintext-mvn. Es funktionierte ueber den Transfer-Redirect — eine Bequemlichkeit, keine Zusage: er faellt weg, sobald der alte Name neu besetzt wird, und dann liefert ein fremdes Repo Build-Config und Java-Artefakte. GitHub bietet dagegen nichts: die Actions-Allowlist der Organisation greift nur fuer uses:, nicht fuer actions/checkout mit repository:, nicht fuer Maven-URLs, nicht fuer git clone. Die Leitplanke muss selbstgebaut sein. - quality/namespace-lint.sh prueft, was funktional wirkt (Workflows, POMs, renovate.json, build/build.sh). Doku bleibt aussen vor, dort stehen die historischen Erklaerungen des Umzugs. - Zwei begruendete Ausnahmen: <username>daniel-marthaler</username> (Auth-Feld gegen GitHub Packages) und reine Kommentarzeilen (schuetu ci-cd.yaml:90 erklaert die alte Referenz historisch). - Der Check testet sich selbst: er legt vor jedem Lauf Verstoesse an und bricht ab, wenn er sie NICHT findet, plus Gegenprobe auf die Ausnahmen. Ein Lint, der nur gruen melden kann, ist von einem sauberen Repo nicht zu unterscheiden. - Job namespace-lint in ci-cd-pipeline.yaml -> greift in jedem Consumer-Repo, ohne dort etwas zu aendern. Haengt an keinem Job, blockiert keinen Deploy, faerbt den Lauf rot — auf dem PR, bevor gemergt wird. - Eigener Workflow namespace-lint.yaml, weil dieses Repo die eigene Pipeline nicht aufruft und ausgerechnet hier der Originalfund stand. Beleg in beide Richtungen, am echten Altstand statt nur synthetisch: Stand vor PR 58 -> rot, meldet ci-cd-pipeline.yaml:336/666/683 Stand vor PR 589 (app) -> rot, meldet pom.xml:588 + renovate.json:5/10/20 heutiger Stand aller neun Repos -> gruen (inkl. der vier Repos mit <username>-Zeile und des schuetu-Kommentars) Muster absichtlich verbogen -> Selbsttest bricht ab statt gruen zu melden Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X5cbBTqqb7eZtzQze6pdmx
…stoeren grep meldet bei einer Binaerdatei 'Binary file ... matches' OHNE Zeilennummer. Die Ausgabe waere dann nicht mehr datei:zeile:inhalt, und der Ausnahmen-Filter (Auth-Feld, Kommentarzeilen) liefe ins Leere. --binary-files=without-match schliesst das aus; dasselbe Flag nutzt secret-scan.yaml aus demselben Grund. Belege unveraendert: Altstand vor PR 58 rot (3 Fundstellen), heutiger Stand aller neun Repos gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X5cbBTqqb7eZtzQze6pdmx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 3 aus Karte 606, erfasst als Karte 642.
Warum
Phase 1 hat die 16 funktionalen Referenzen auf den persoenlichen Namespace korrigiert. Was fehlte, ist die Schranke gegen die naechste. Bis zum 10.08.2026 zog genau diese Pipeline ihre Build-Config aus
daniel-marthaler/plaintext-config, fuenf POMs ihre Java-Artefakte ausdaniel-marthaler/plaintext-mvn. Es funktionierte — ueber den Transfer-Redirect, den GitHub nach einem Repo-Umzug haelt. Ein Redirect ist eine Bequemlichkeit, keine Zusage: er faellt weg, sobald der alte Name neu besetzt wird, und dann liefert ein fremdes Repository Build-Config, Skripte und Maven-Artefakte.GitHub bietet dagegen keine Schranke: die Actions-Allowlist der Organisation greift nur fuer
uses:, nicht fueractions/checkoutmitrepository:, nicht fuer Maven-URLs, nicht fuergit clone. Die Leitplanke muss selbstgebaut sein.Was drin ist
quality/namespace-lint.sh— prueft nur, was funktional wirkt:.github/workflows/*.y*ml, jedespom.xml,renovate.json,build/build.sh. Doku bleibt bewusst aussen vor; dort stehen die historischen Erklaerungen des Umzugs, und ein Lint, der die anmeckert, wird abgeschaltet statt befolgt.<username>daniel-marthaler</username>(Auth-Feld der settings.xml gegen GitHub Packages, kein Namespace — steht so in der Karte) und reine Kommentarzeilen;plaintext-schuetu/.github/workflows/ci-cd.yaml:90erklaert die alte Referenz historisch und soll stehen bleiben. Eine Zeile mit funktionalem Inhalt und angehaengtem Kommentar bleibt ein Verstoss.namespace-lintinci-cd-pipeline.yaml— greift dadurch in jedem Consumer-Repo (app, guild, schuetu, iot, fwtool, root), ohne dass dort etwas geaendert wird. Er haengt an keinem anderen Job und blockiert keinen Deploy; er faerbt den Lauf rot, und zwar auf dem PR, bevor gemergt wird. Kosten: zwei Checkouts und ein grep, auf dem Runner des Callers (die Consumer sind privat — GitHub-hosted Minuten waeren abrechnungspflichtig).namespace-lint.yaml, weil dieses Repo die eigene Pipeline nicht aufruft — und ausgerechnet hier stand der Originalfund.Beleg in beide Richtungen — am echten Altstand, nicht nur synthetisch
Ein Lint, der nur gruen meldet, beweist nichts. Deshalb gegen die historischen Staende gefahren, in denen der Fehler nachweislich drinstand:
Genau der Fund aus Karte 600 waere also gefangen worden. Gegenprobe am heutigen Stand aller neun Repos:
Das schliesst die vier Repos mit der
<username>-Zeile und den schuetu-Kommentar ein — die Ausnahmen sind damit an echten Daten belegt, nicht nur an Testdateien. (Inalt-scriptsstandci-cd-pipeline.yaml:731 <username>daniel-marthaler</username>und wurde korrekt nicht gemeldet, waehrend die drei Checkout-Zeilen darueber gemeldet wurden.)Dritte Richtung — der Selbsttest ist keine Deko:
Ohne diesen Selbsttest waere ein kaputtes
find/grepvon einem sauberen Repo nicht zu unterscheiden. Genau dieser Fehlerklasse verdankt die Leitplanke ihre Existenz: das Dashboard aus Karte 606 meldete zwei Wochen lang „success" und mass dabei den falschen Account.Job-Simulation der Pipeline-Schritte (Workspace mit
projekt/+werkzeuge/, exakt derrun-Befehl des neuen Jobs): gruen am Ist-Stand, rot nach dem Zurueckdrehen einer einzigen POM-Zeile.Was NICHT abgedeckt ist
Repos, die die zentrale Pipeline nicht aufrufen:
plaintext-config,plaintext-all,plaintext-website,plaintext-dockercompose. Dort ist heute keine Referenz mehr (nachgemessen), aber auch keine Leitplanke.namespace-lint.yamllaesst sich dorthin kopieren — ungefragt in vier weiteren Repos wollte ich das nicht.Phase 2 der Karte (Tombstone-Repos unter
daniel-marthaler) kann nur Daniel; kopierfertige Anleitung steht in Karte 642.🤖 Generated with Claude Code
https://claude.ai/code/session_01X5cbBTqqb7eZtzQze6pdmx