TGV · Governance · Stand 29.09.2026 · Stufe 2
Das Szenario, für das diese Seite existiert (JC): „Stell dir vor, ich muss TGV von scratch neu aufbauen — wir wären froh, lesen zu können, wie wir mit Claude Code zusammenarbeiten und was wir in 8 Wochen gelernt haben." Hier steht das Betriebsmodell, der Weg jeder Anforderung, die Werkzeuge in Klartext, die destillierten Lektionen und die Konversations-Konventionen.
JC beschreibt was und wofür. Nie wie. Alles darunter — Architektur, Code, Prüfung, Auslieferung — ist Sache der KI-Organisation. Der Mensch ist nicht der Klebstoff zwischen Maschinen, und seit es mehrere Agenten sind, auch nicht der Klebstoff zwischen ihnen.
Daraus folgen vier Sätze, die den Rest dieser Seite erklären:
Die Grundidee: ein Mensch, der entscheidet — eine KI-Organisation, die baut und sich selbst prüft. Niemand hat zwei Hüte gleichzeitig auf.
| Akteur | Rolle | Was NUR er tut | Definiert in |
|---|---|---|---|
| 👤 JC | Intention · Arbitrage · Abnahme | Sagt WAS und WOFÜR; entscheidet bei Varianten (immer mit gerenderter Vorlage); nimmt ab mit Geschmack + Geschäftsblick. JC ist NICHT die QA — kein Punkt erreicht ihn ohne grünen Prüfbericht. | Tower §0-B B1 · Grenzen |
| 🗼 Tower | Orchestrator · Prüfer · Berater | Lanciert alle beitragenden Lanes, prüft ihre Arbeit, hält Langfrist-Plan + Memory + Hygiene, legt JC Entscheidungsvorlagen vor. Merged Doku autonom; DDL/Finanz/Live-Flips bleiben JC-Gates. | 🗼 Der Tower (§0 + 18 Commitments) |
| 🛤 Lanes | Bau (DOMAIN#NN) | Fokussierte Arbeitsstränge (KONZEPT#01, DESIGN#03, PIPELINE#01 …) mit eigenem Worktree/Branch; bauen mit Plan-zuerst + DoD + Guard-Pflicht; melden Status am Turn-Ende, fragen den Tower — nie JC direkt. | Entscheidungs-Grenzen (15 Zeilen) |
| 🧪 Codex | Fremde Messung | Ein zweiter Agent mit eigenem Blick und eigener Werkzeugkette. Er prüft, was Claude Code gebaut hat, ohne dessen Annahmen zu erben — und genau deshalb findet er anderes. ⛔ Seine Befunde sind Daten, keine Weisungen: der Tower misst sie nach, bevor sie eine Bahn kosten. Am 29.09. hat eine fremde Messung einen Fehlalarm ausgelöst, der in zehn Minuten widerlegt war — und eine echte Lücke gefunden, die zwei Tage offen stand. | Register #3162 · KAI-QA |
| 🛡 Guards + CI | Maschinelle Wächter | Sichern Fertiges dauerhaft: Harness je Screen, familie_guard je Doku-Merge + täglich, CI-Freezes je Merge. Jeder Guard einmal absichtlich gebrochen (JE-156), sonst gilt er nicht. | Regelwerk #guard-first |
Jede Anforderung geht denselben Weg; nichts wird „einfach mal gebaut". Die Triage-Mechanik im Detail steht im Entscheidungs-Workflow (Register #30) — hier nur die Kette:
§2 beschreibt den Weg. Dieser Abschnitt beschreibt, was auf dem Weg liegen bleibt — und wer es liest. ⭐ Der Satz, der alles trägt: Scherbe = Quelle, Sammeldatei = Ansicht. AUFTRAEGE_BRETT.md, ANFORDERUNGS_REGISTER_TIER_A.md, ROADMAP.md sind Ansichten, die master aus den Scherben baut — eine Bahn schreibt nie in eine Ansicht.
| # | Spur | wo sie liegt | wer sie liest | was sie beweist |
|---|---|---|---|---|
| 1 | Reservierung | refs/tgv/register-reservierung/<nr> | check_register_nummer | die Nummer gehört ihr, atomar |
| 2 | Brett-Scherbe | brett/<datum>__<bahn>~<zweig>.md | check_brett_traegt_den_boden | die Bahn lebt, auf diesem Zweig, in diesem Arbeitsbaum |
| 3 | Register-Scherbe | register/<sortier>__<nr>.md | Roadmap · Ballzählung · Tor ⑱ | was sie fand oder baute, mit Wirkorten |
| 4 | Zweig + PR | GitHub | alle Wächter · gh pr list | die Arbeit selbst |
| 5 | Merge-Commit | master | git merge-base | sie ist angekommen |
| 6 | Deploy-Lauf | Actions | ⛔ niemand (Stand 09.10.2026) | sie ist ausgeliefert |
| 7 | Sichtbare Wirkung | Frontend | ⛔ niemand | sie nützt |
⛔ Jede Störung in diesem Haus ist eine von zwei Klassen — nicht sieben Probleme, sondern zwei:
⒜ Zwei Bahnen schreiben in dieselbe Spur ⇒ Konflikt. Am 09.10. kollidierten acht PRs plus #3249 an einer Datei: dem erzeugten AUFTRAEGE_BRETT.md. n Bahnen an einer Tabelle sind n² Nähte. Die Scherben-Form macht den Konflikt unmöglich, nicht unwahrscheinlich — zwei Bahnen können dieselbe Datei nicht berühren, weil jede ihre eigene hat (#2673 · #3772 · #3264).
⒝ Eine Spur hat keinen Leser ⇒ Arbeit umsonst. Gemessen 09.10.: 517 Zweige tragen Arbeit ohne offenen PR; neun Briefe an einen Tower lagen darauf, einer davon am selben Tag an den amtierenden adressiert — er wäre nie gelesen worden. Die Spur war da. Es gab keinen Leser.
⛔⛔ Und die beiden letzten Spuren hat bis zum 09.10.2026 niemand gelesen. Der Beweis steht im Haus selbst: die letzten vier Dienst-Fassungen auf master enden jede mit „LIVE NICHT GEMESSEN (Deploy = JCs Wort)" — 1.12.310 · .306 · .305 · .304. Vier Bahnen hintereinander haben ihre Wirkung nie gesehen.
⭐ Und das Deploy-Tor liegt nicht, wo man es vermutet: deploy.yml und deploy-service.yml sind push: branches:[master] plus Pfadfilter. Ein Merge, der core_shell.html oder app.py berührt, deployt automatisch ohne JCs Wort; einer, der sie nicht berührt, deployt nicht — auch mit GO.
⭐ ①–③ beweisen, dass gebaut wurde. Erst ④ und ⑤ beweisen, dass es wirkt. Erst danach gilt: „Kann zu. Abgestimmt mit Tower." ⛔ Dieser Abschlusssatz stand zwei Monate nur im Chat — ein grep über den ganzen Projektspeicher am 09.10. ergab null Fundstellen. Eine Anweisung, die nur im Fenster steht, hat der nächste Tower nicht.
Die sieben Spuren sagen, was eine Bahn hinterlässt. Drei Einrichtungen lesen sie über alle Bahnen hinweg — sie sind der Grund, warum eine steckengebliebene Bahn überhaupt auffällt:
| Einrichtung | Ort | liest welche Spuren | beantwortet |
|---|---|---|---|
| 🗺 Roadmap-Board | roadmap_board.html, erzeugt von 08_OPS/gen_roadmap_board.py | 3 · 4 (+ Dienst-Health) | Wer ist dran? — Bälle bei JC, Bälle beim Tower, PRs, die ein Wort brauchen |
| 📡 Monitoring | Betriebs-Wächter + Crons (.github/workflows/betriebs-*.yml) | 5 · 6 | Läuft es noch? — Stempel je Tag, Melder bei Bruch |
| 🔁 Routine | Nachzug je Merge (register-nachzug.yml) | 1 · 2 · 3 | Sind die Ansichten aktuell? — baut die sieben Sammeldateien aus den Scherben |
⛔ Die Lücke, benannt statt verschwiegen: keine der drei Einrichtungen verbindet die sieben Spuren je Bahn zu einer Zeile. Die Roadmap zeigt Spur 3 und 4, das Monitoring Spur 5 und 6, der Nachzug Spur 1 bis 3 — und niemand zieht sie zusammen. Deshalb kann eine Bahn fertig sein, ohne dass es jemand sieht. ⭐ Das ist kein neuer Wächter: alle sieben Spuren sind einzeln lesbar. Es fehlt ein Leser, der sie verbindet — und sein Ort ist gen_roadmap_board.py, weil der schon live misst und im Nachzug läuft.
| Werkzeug | Was es für uns ist | Wo es lebt |
|---|---|---|
| Worktree / Branch / PR | Jede Lane arbeitet in ihrem eigenen Verzeichnis (Worktree) auf ihrem eigenen Stand (Branch); ein PR ist der Antrag „nimm es in die eine Wahrheit (master)". Erst der Merge zählt — DONE ≠ master ≠ LIVE. | Glossar |
| Merge-Freeze / Bündel | Tore, die Merges anhalten, bis eine Bedingung stimmt (z.B. Migrations-Reihenfolge). Gilt auch gegen den Tower: Gate rot = Bündel-Position für JC, nie überstimmen. | Tower-Commitment 11 · Glossar |
| Staging vs. LIVE | Probebühne mit echtem Deploy (core_shell_staging) vs. das, was Nutzer sehen (app.startact.ai). Verifiziert wird IMMER auf der echten URL — localhost hat uns belogen. | Glossar |
| CI + Cron-Läufe | GitHubs Automat prüft nach jedem Push (Guards, Testdaten-Wächter) und TÄGLICH per Zeitplan (familie_guard 05:23 UTC mit Stempel im Familie-Index) — weil pfad-getriggerte Prüfer auf Unberührtem blind sind. ⛔ Ein Workflow, der nicht startet, erzeugt keine Checks — und das sieht in der PR-Prüfliste aus wie Zustimmung, nicht wie Schweigen. | Index (🛡-Stempel) · Glossar CI |
| Welche Wächter schulde ich? pruefe_ci_zustaendigkeit.py | Vor jedem Push zu fahren. Nennt zu den geänderten Dateien JEDEN CI-Wächter, der dafür zuständig ist, und den Befehl dazu — abgeleitet aus .github/workflows/*.yml, nicht aus einer gepflegten Liste (eine Liste altert am Tag ihrer Entstehung). ⛔ Anlass: SCREEN#03 hatte lokal acht Wächter grün, die CI fand danach vier echte Lücken — lokal grün ist keine Aussage über die CI, weil die lokale Liste nicht die CI-Liste ist. Jede vermeidbare CI-Runde ist ein Schritt im Rennen gegen master.⭐ Die Körnung ist der Workflow, nicht der einzelne Wächter: feuert er, laufen ALLE seine Schritte. Deshalb nennt das Werkzeug alle — eine engere Ausgabe wäre eine falsche Entlastung. python 08_OPS/pruefe_ci_zustaendigkeit.py --seit origin/master | Register #1652 |
| Sessions / Chips / Cross-Messages | Jede Lane ist eine eigene Claude-Code-Session; der Tower spricht sie per Cross-Session-Nachricht an. Jede Nachricht kostet JC einen Erlauben-Klick → gebündelt, Status wird gepollt (Turn-Ende-Zeilen), nie gepusht. | Tower-Commitment 5 |
| Registerzeile anlegen | Eine Zusage oder ein Befund wird eine Scherbe — im selben Zug, in dem sie ausgesprochen wird, nicht wenn die Arbeit fertig ist. Die Nummer zieht das Werkzeug selbst und reserviert sie: es liest master, alle offenen PRs und die bestehenden Reservierungen. ⛔ Die höchste Nummer auf master ist nie die höchste vergebene. | register_zeile_einfuegen.py <zeile> --ans-ende · check_register_nummer.py --ziehe-bis-frei N --reserviere |
| Welche Wächter schulde ich? | Leitet aus .github/workflows/*.yml ab, welche CI-Wächter für die geänderten Dateien zuständig sind — keine gepflegte Liste, eine Ableitung. Wer einen Wächter einhängt, ändert damit automatisch diese Auskunft. | pruefe_ci_zustaendigkeit.py --seit origin/master |
| Kollidiert mein Zweig? | ⭐ Die wichtigste Zeile des Tages. Sagt lokal und in zwei Sekunden, ob der Zweig sauber auf master passt — dieselbe Frage, für die ein Push dreissig Minuten CI kostet. Am 29.09. liefen ≥ 300 CI-Läufe, grob 15 Stunden Maschinenzeit, grösstenteils Nachzugsarbeit. ⛔ Nicht gh pr view fragen: dessen mergeable steht nach jedem Master-Merge erst einmal auf UNKNOWN. | git merge-tree --write-tree origin/master HEAD |
| Fassungsnummer auflösen | Löst den SERVICE_VERSION-Konflikt blockweise: masters Zeile wird demotiert, nie geworfen, und die neue Nummer muss über masters UND über der Live-Fassung liegen — sonst bricht es ab, statt zu raten. | loese_fassungsblock.py |
| Stunden-Berichte | Der Tower berichtet stündlich, GEMESSEN (Commits/PRs/Läufe als Beleg, % gegen DoD, Hygiene-Zeile); bei Null-Delta ein Einzeiler. Nie rosig. | Tower-Commitment 7 + 17 |
Nicht erfunden, sondern destilliert aus TOWER_REGELWERK.md (80 Narben), dem Konsolidierungsplan und den Feedback-Memories. Jede Lektion hat uns mindestens einen Vorfall gekostet.
Startbestand = Tower-Zulieferung 19.07. (wörtlich übernommen). Diese Zeichen bedeuten in JEDEM Chat dasselbe — 1 Symbol = 1 Bedeutung, wie im UI.
| Konvention | Bedeutung |
|---|---|
| 🗼-Präfix | Der Tower spricht zu einer Lane. |
| „LANE → 🗼" | Eine Lane meldet an den Tower. |
| Lane-BRIEFE | Erscheinen als eigener, abgesetzter Block — nie im Fließtext. |
| 🖐️ JC-Aktion | Separater Block mit exaktem Kopier-Befehl: Konsole + Branch + VPN-Zustand + Erfolgs-Kriterium („grün endet mit X"). |
| 📦 Lern-Box | Gerahmte Klartext-Definition auf eine JC-Frage (Tradition seit „was ist ein Gate?"). Pflicht: binnen Tages-Frist Glossar-Eintrag (D5-Guard wacht). |
| Status-Legende | ✅ live-verifiziert · 🔧 gebaut, Deploy ausstehend · 🔨 in Arbeit · 📝 Kontrakt fertig · ❌ offen — überall dieselben fünf. |
| 🚦-Boards | Lane-Stand als Ampel-Board im Tower-Bericht. |
| „STATUS:"-Zeilen | Am Ende jedes Lane-Turns; der Tower POLLT sie (stündlich) — Lanes pushen keinen Status (spart JC Klicks). |
| GOLDENE REGEL | Jede Beleg-ID #xxxx ist IMMER ein klickbarer Drive-Link. Ohne Ausnahme. |
| Stunden-Bericht | Format: Tabelle (gemessen, mit Belegen) + 3 Sätze + Hygiene-Zeile (ungepushte Stände, alte PRs). |
JCs Problem: die Chats laufen asynchron weiter, während er liest — Älteres zu beantworten ist verschwendete Zeit. Diese fünf Konventionen machen den Verlauf ignorierbar:
| Konvention | Bedeutung |
|---|---|
| Nachrichten-Klassen | Jede Tower→JC-Nachricht trägt ihre Klasse: 🟢 INFO (nie antworten) · 🖐️ AKTION (Befehl/Klick) · 🎯 ENTSCHEID [ID] (nur mit ID antworten). Alles ohne 🖐️/🎯 ist antwortfrei. |
| Der letzte Stand schlägt den Verlauf | Towers jeweils NEUESTE Nachricht listet ALLE offenen JC-Punkte vollständig; was dort nicht mehr steht, ist erledigt/überholt. JC-Praxis: bei Rückkehr ans Ende springen, Älteres nie beantworten. |
| Überholt-Marker | Selbst-erledigte Fragen werden aktiv annulliert („❌ überholt: X — nicht mehr beantworten") — nie still fallengelassen. |
| Historie mit Warnschild | Die Schwester des Überholt-Markers für DOKUMENTE statt für Fragen: ein überholtes Blatt wird nicht gelöscht und nicht umgeschrieben, sondern bekommt ein Warnschild. Drei Teile, alle drei Pflicht — ① Warnschild im Titel ② Begründung, warum die Datei bleibt ③ Löschbedingung. Präzedenzfall: 06_DASHBOARD/REACT_MIGRATION_PLAN.md. |
| Stabile IDs für alles Offene | Jeder offene Punkt trägt eine ID (E4 · W2 · #17 · JE-xxx) → JC-Antworten sind reihenfolge-unabhängig gültig; Kurzform-Antworten („E4=ok") sind der Standard. |
| JC-Joker „Stand?" | Das eine Wort liefert jederzeit den konsolidierten Ist-Zustand als EINE Tabelle — statt den Verlauf nachzulesen. |
| IDs tragen ihren Link | Jede ID in Offen-Listen und Vorlagen (Tower→JC) trägt, wo passend, ihren Ansicht-LINK — JC klickt, statt zu suchen. (Familien-Seiten erzwingt das bereits Guard D6 Link-Pflicht; hier gilt es explizit auch für Chat-Listen.) |
| ID-Universalität | ALLES trägt eine ID (JC 19.07.): Regeln R-xx · Entscheide JE-xxx · Komponenten K-xx · Anforderungen #nn · Widersprüche W-x · Entscheid-Punkte E-x · Batches B-n · Konzept-Vorhaben (UMG-…). Neue Artefakt-Klassen bekommen bei Einführung ihren eigenen Nummernkreis, append-only. Maschinell: ID-lose Neuzugänge in Registern sind ROT (Guard C5b ID-Spalte · C6 kid-Pflicht · D1 JE-Existenz). |
06_DASHBOARD/REACT_MIGRATION_PLAN.md und hat dort nachweislich gewirkt. Ohne Namen war sie
nicht auffindbar: man kann nach einem Dateinamen greppen, nicht nach „wie datiere ich ein überholtes
Blatt". Deshalb bekommt sie hier einen.
PLAT_09/ARCHITECTURE_DECISION.md (gelockt, ohne Vermerk) gegen MODULE_CONTRACT.md
§0 (trägt die Aufhebung). Die Berichtigung gehört an den stärkeren Ort, nicht an den schwächeren.
JC, 06.10.2026: „stelle mir diese als Tabelle, jetzt wo unser gesamtes Gehirn gepflegt wird“. Alle Zahlen sind gemessen, nicht geschätzt — und sie verändern sich. Wer sie liest, prüft das Datum. ⭐⭐ Und dieser Satz hat sich binnen 24 Stunden selbst bewiesen: Zeile 1 stand am 06.10. auf 98,7 % — fast voll, am 07.10. auf 81 % — Luft, weil eine Aufräum-Bahn in derselben Nacht lief. ⇒ Eine Zahl mit einer Bewertung daneben altert anders als eine nackte: ihre Aussage ist nicht die Zahl, sondern das Urteil — und ein falsches Urteil fordert Handlung, die nicht nötig ist. Deshalb trägt jede nachgemessene Zelle hier ihr eigenes Datum, nicht nur die Überschrift.
| # | Ort | Umfang (06.10.2026) | Wer schreibt | Wer liest | Dopplungs-Risiko |
|---|---|---|---|---|---|
| 1 | Speicher …/.claude/projects/…/memory/⛔ ausserhalb git | 361 Erinnerungen Index 18.254 B = 81,0 % des Budgets 07.10.2026 nachgemessen; am 06.10. stand hier 363 / 22.235 B = 98,7 % | jede Sitzung | jede Sitzung beim Start | 🟡 entspannt — SPEICHER#01 hat 6 Dubletten aufgelöst und die Ratsche auf 0 zugezogen; 4.274 B frei. ⛔ Die Form trägt trotzdem nicht: bei 1.296 Erinnerungen passt nicht einmal die nackte Namensliste (2,1 × Budget) — Form-Entscheid liegt bei JC |
| 2 | Register register/*.md | 2.056 Scherben 07.10.2026 | jede Bahn | Generator, Roadmap | 🟡 Lehren wiederholen sich über Monate |
| 3 | CLAUDE.md | 91 Zeilen | nur JC / Tower | jede Sitzung, verbindlich | 🟢 kurz gehalten — ist ein Gate, kein Lager |
| 4 | Kompendium 06_DASHBOARD/konzepte/(diese Seite) | 45 Seiten | Bahnen | wer nachschlägt | 🔴 132 von 132 Lane-Briefen unverzeichnet |
| 5 | Prüfer 08_OPS/check_*.py | 214 Werkzeuge | Bahnen | CI | 🔴 Lehrtexte in Kommentaren, nie gegeneinander gehalten |
| 6 | Anforderungs-Register | 2.159 Zeilen | Tower | Bahnen | 🟡 — |
| 7 | Brett AUFTRAEGE_BRETT.md | 3.430 Zeilen 07.10.2026 | Tower / Bahnen | Wächter | 🟢 auf Scherben umgebaut — 15 Dateien unter brett/, Block aus dem Verzeichnis gebaut. ⛔ Rest-Befund: die Deckungsprobe brett_md_bauen --pruefe läuft in KEINEM Workflow (null Aufrufer im Repo) |
| 8 | Skill-Registry 02_SKILLS/_registry.yaml | 1.039 Zeilen | Bahnen | 6 generierte Listen | 🟢 generiert und validiert |
| 9 | Artefakt-Register | 323 Zeilen | Bahnen | Wächter | 🟢 — |
check_memory_index.py (Ort 1) · check_brief_ist_im_kompendium.py (Ort 4) · check_artefakt_register.py (Ort 9) nennen ihre Zahlen selbst. ⛔ check_brief_ist_im_kompendium.py globt nur 01_ITERATIONS/**/BRIEF.md — Leitdokumente fallen durch sein Raster, und genau so lag ein von JC beauftragtes Konzept 58 Tage unbemerkt (AUSSEN#01, 06.10.).