Skip to content

Karte 642: Leitplanke gegen den alten Namespace daniel-marthaler - #61

Merged
daniel-marthaler merged 2 commits into
masterfrom
karte-642-namespace-lint
Aug 10, 2026
Merged

Karte 642: Leitplanke gegen den alten Namespace daniel-marthaler#61
daniel-marthaler merged 2 commits into
masterfrom
karte-642-namespace-lint

Conversation

@daniel-marthaler

Copy link
Copy Markdown
Collaborator

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 aus daniel-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 fuer actions/checkout mit repository:, nicht fuer Maven-URLs, nicht fuer git clone. Die Leitplanke muss selbstgebaut sein.

Was drin ist

  • quality/namespace-lint.sh — prueft nur, was funktional wirkt: .github/workflows/*.y*ml, jedes pom.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.
  • Zwei begruendete Ausnahmen: <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:90 erklaert die alte Referenz historisch und soll stehen bleiben. Eine Zeile mit funktionalem Inhalt und angehaengtem Kommentar bleibt ein Verstoss.
  • Job namespace-lint in ci-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).
  • Eigener Workflow 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:

$ namespace-lint.sh <plaintext-scripts vor PR 58>
.github/workflows/ci-cd-pipeline.yaml:336:          repository: daniel-marthaler/plaintext-scripts
.github/workflows/ci-cd-pipeline.yaml:666:          repository: daniel-marthaler/plaintext-scripts
.github/workflows/ci-cd-pipeline.yaml:683:          repository: daniel-marthaler/plaintext-config
::error::Alter Namespace 'daniel-marthaler' in einer funktionalen Referenz...
exit=1

$ namespace-lint.sh <plaintext-app vor PR 589>
pom.xml:588:            <url>https://maven.pkg.github.com/daniel-marthaler/plaintext-mvn</url>
renovate.json:5:    "plaintext-mvn": "https://maven.pkg.github.com/daniel-marthaler/plaintext-mvn"
renovate.json:10:      "registryUrls": ["https://maven.pkg.github.com/daniel-marthaler/plaintext-mvn"]
renovate.json:20:      "registryUrlTemplate": "https://maven.pkg.github.com/daniel-marthaler/plaintext-mvn"
exit=1

Genau der Fund aus Karte 600 waere also gefangen worden. Gegenprobe am heutigen Stand aller neun Repos:

plaintext-app/guild/schuetu/iot/fwtool/root/scripts/config/website   exit=0  "sauber"

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. (In alt-scripts stand ci-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:

$ MUSTER absichtlich auf 'daniel-marthalerXX' verbogen, Repo sauber
::error::Selbsttest fehlgeschlagen — der Check findet die Verstoesse NICHT.
          Er ist wirkungslos, nicht das Repo sauber.
exit=1

Ohne diesen Selbsttest waere ein kaputtes find/grep von 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 der run-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.yaml laesst 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

worker01 and others added 2 commits August 10, 2026 23:13
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
@daniel-marthaler
daniel-marthaler merged commit 20fe68b into master Aug 10, 2026
1 check passed
@daniel-marthaler
daniel-marthaler deleted the karte-642-namespace-lint branch August 10, 2026 21:41
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.

1 participant