Commit Graph
183 Commits
Author SHA1 Message Date
Thore Cimbal f6d843672b feat: add the staleness check decided in the retro
Looks for things that quietly stopped working. Every check mirrors a case that actually happened this month, named in its docstring: a repo that was never mirrored, mirror drift, pipelines with zero jobs, a successful job without artifacts, an npm package too small to contain a build, and Authentik blueprints stuck on error. Nothing is checked on suspicion.

The project list is read from the group at runtime rather than maintained in code - a hardcoded list is exactly where a new repo slips through for years. The first run proved the point by surfacing two projects nobody had in mind.

It aborts when a credential is missing instead of skipping quietly. A check that disables itself reports nothing for years and is indistinguishable from all clear.

Refs axion1337.chat/management#28
2026-08-09 12:00:00 +00:00
Thore Cimbal 0fde69a6f2 docs: first retro, and the ADR the history rewrite should have had
Retro 2026-08-09, the first one under the framework. Main finding: six silent failures in nine days - a green pipeline that uploaded nothing, a broken npm package, a blueprint rejected on every run, a working copy tracking the forbidden remote, empty pipelines going red for nothing, and a release build that nearly overwrote a published image. None was found by monitoring; four surfaced by accident while looking for something else.

ADR-0009 documents the commit conventions and the retroactive anonymisation of 251 commits. It is filed after the fact, which is exactly the mistake the ADR duty exists to prevent - stated in the ADR rather than smoothed over.

Also recorded: assigning status:next and reassigning milestones are forbidden to a session acting alone; both happened here in the refinement with sorb, so the rule stands unweakened.
2026-08-09 12:00:00 +00:00
Thore Cimbal 46c61e1c1e docs: record that moving tags retriggers release builds
Force-pushing the rewritten tags restarted three release pipelines in ThreadNet-Web. Nothing was overwritten, but only because the protected registry variables were unavailable while the v* tag rule was temporarily removed for the push - docker login died after four seconds.

That was luck rather than planning: with tag protection in place, threadnet-web:v0.4.0 would have been rebuilt from old code against today's dependencies and pushed over the published image. Tracked as ThreadNet-Web#14.
2026-08-09 12:00:00 +00:00
Thore Cimbal 2b20f65c4a docs: add the old-to-new commit mapping of the 2026-08-07 rewrite
251 verified pairs, reconstructed from the backup branches: every pair had to match on both tree hash and commit message before being accepted, and all 251 did.

This keeps older references resolvable without editing what was written at the time. Rewriting historical issue comments would remove the record of what someone actually wrote, and a lookup table costs nothing by comparison.
2026-08-09 12:00:00 +00:00
Thore Cimbal d7db11166f docs: repoint commit references after the history rewrite
The anonymisation rewrite of 2026-08-07 gave every touched commit a new SHA, leaving the references in these documents pointing at objects that no longer exist. The mapping was reconstructed from the backup branches and each pair verified by tree and commit message before substituting.

Prefix lookups were built for lengths 7 to 12 and any ambiguous prefix would have been skipped; none were ambiguous across all 251 pairs.
2026-08-09 12:00:00 +00:00
Thore Cimbal c1a604bd19 docs: add commit conventions (English, conventional, anonymised dates)
Applies to every repo in the axion1337.chat group and the ThreadNet services, effective 2026-08-07 (sorb).

Two warnings are part of the rule, not decoration. First: both GIT_AUTHOR_DATE and GIT_COMMITTER_DATE must be set - setting only the author date leaves the committer date in the object, visible via git log --format=%cd and in every web UI. Second: the rule only covers git history. Push times, issue and comment timestamps, pipeline runs and package publishes still carry real times and sit in the same GitLab and on the public Gitea mirror; anyone who genuinely wants no derivable pattern has to address those too.
2026-08-07 12:00:00 +00:00
Thore Cimbal 9cc5ba4fe0 Roadmap: Workshop-Ergebnis und Board-Bereinigung nachtragen
Zwei veraltete Stellen: der Kopf sagte, Milestones wuerden noch angelegt, der Fuss sagte, der Struktur-Workshop stehe aus - beides ist seit dem 2026-08-06 erledigt.

Neu festgehalten: jedes offene Issue haengt jetzt an genau einem Meilenstein, Verteilung M1 33 / M2 21 / M3 4 / M4 12 von 70. Dazu die offene Frage, ob M1 mit fast der Haelfte zu breit ist - elf der Issues sind zusaetzliche Werkzeuge, keine kaputten Schutzmechanismen. Das gehoert ins Refinement, nicht in eine Session.
2026-08-06 12:00:00 +00:00
Thore Cimbal 63fd0b460a Kanban-Regeln: Titel ohne Prioritaet, Meilenstein pflicht
Zwei Luecken, die das Board driften liessen. Erstens: 34 Issues trugen ein [HIGH]/[MEDIUM]/[LOW] im Titel, zwei davon mit anderer Aussage als ihr Label - wer nach Titel sortierte, sah etwas anderes als wer nach Label sortierte. Zwei Wahrheiten ueber dieselbe Sache sind schlimmer als eine unvollstaendige.

Zweitens: 32 von 70 Issues hingen an keinem Meilenstein und tauchten damit in keiner Roadmap-Ansicht auf. Label und Meilenstein beantworten verschiedene Fragen - wie dringend gegen worauf es einzahlt.

Dazu festgehalten, dass M1-M4 bewusst kein Enddatum haben: sie buendeln, Termindruck steht als Datum am einzelnen Issue.
2026-08-06 12:00:00 +00:00
Thore Cimbal 0abd26e416 branding: Authentik-Logo-Rueckbau nachziehen
Die Tabelle behauptete, auch das Logo werde von axion1337.chat referenziert - seit dem Rueckbau stimmt das nicht mehr. Dazu die Begruendung, warum dort kein PNG funktioniert (Authentiks Default ist ein SVG, das sich seiner Box anpasst; ein PNG nimmt Naturgroesse) und der Hinweis, dass eine Auswahl in Authentiks Oberflaeche vom Blueprint ueberschrieben wird.

Refs gitops#55, management#29
2026-08-06 12:00:00 +00:00
Thore Cimbal 3eb27b3a62 branding: Titelbild, Call-Widget und Authentik-Brand nachgehalten
Die Namenstabelle hatte zwei Ebenen, jetzt vier: Call-Widget folgt der In-Anwendung-Regel (aXion1337.Chat), die Anmeldeseite bekommt ThreadNet - man meldet sich am Werkzeug an, nicht in der Gemeinschaft.

Neu dokumentiert: das Unsplash-Titelbild samt Lizenzlage, warum die Danksagung bewusst unuebersetzt bleibt (Elements Schluessel steckt in 32 Sprachdateien, 31 nennen deren Fotografen - en/de allein zu aendern haette in 29 Sprachen eine falsche Attribution stehen gelassen), und dass Authentiks Anmeldeseite an genau dieser Bilddatei haengt.
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 f1b60d815b branding: Icon-Zentrierung als eigener Schritt + Namensgebung erklaert
Zwei Ergaenzungen aus dem v0.4.0-Release.

Das Icon-Rezept war unvollstaendig. Es warnte davor, thumbnail() statt resize()
zu nehmen - aber nicht davor, das Motiv nach dem Beschneiden auch mittig zu
setzen. Genau das ging schief: 81 % Breite gefuellt, aber 3 % Rand oben und 40 %
unten, das Motiv klebte an der Oberkante. Faellt in runden und quadratischen
Icon-Slots sofort auf. Das vollstaendige Rezept steht jetzt da, dazu die Liste
aller elf Icon-Artefakte und wie man per Pruefsumme feststellt, ob eines
nachgezogen wurde und ein anderes nicht.

Die Namensgebung ist gespalten: ThreadNet auf Betriebssystem- und PWA-Ebene,
aXion1337.Chat im Client. Das folgt der Leitplanke aus vision/threadnet.md - das
Programm ist das Tool, die Instanz darin die Community. Wer nur eine der beiden
Stellen sieht, haelt es fuer eine Inkonsistenz und zieht es gerade; deshalb steht
jetzt ausdruecklich da, dass es keine ist.

Dazu die Attribution: seit v0.4.0 in Einstellungen -> Hilfe & Info unter der
Client-Version, bewusst NICHT im Kopiertext der Versionsangabe - der landet in
Fehlerberichten, dort ist die Fork-Herkunft nur Rauschen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 d019bfedda zone: erklaert, was die Mail-Records tun - plus gemessener Ist-Stand
Die Rezepte in ZONE-01 nannten Werte (Null-MX, v=spf1 -all, p=reject), ohne zu
sagen, wogegen sie schuetzen. Wer sie umsetzt, ohne das zu wissen, kann nicht
erkennen, wann ein Halbfertig-Zustand schlechter ist als der Ausgangszustand -
und genau das ist eingetreten.

Ergaenzt: die vier Mechanismen einzeln (SPF, DKIM, DMARC, Null-MX), was jeder
beantwortet und warum keiner allein reicht. Zwei Punkte, die man kennen muss:

- SPF darf nur EINMAL je Name existieren; ein zweiter Record erzeugt PermError,
  und dann pruefen viele Empfaenger gar nicht mehr. Die Haertung schlaegt ins
  Gegenteil um.
- DMARC wird vererbt. Fehlt _dmarc.<name>, gilt die Policy des Apex - und die
  steht auf p=none. Damit erben ALLE Subdomains 'kein Schutz', egal wie sauber
  ihr SPF ist. Der Apex ist damit der groesste Hebel der Zone (ZONE-02), nicht
  die Einzelnamen (ZONE-01).

Dazu der gemessene Ist-Stand (DoH, um den Lab-Resolver zu umgehen): Bei rohana
sind MX und SPF geloescht, die Ersatz-Records fehlen. Vorher gab es wenigstens
ein Softfail-SPF, jetzt gar keine Aussage - keine Aussage ist schwaecher als eine
schlechte. Bei selendis ist nur das www weg, der Mail-Satz steht unveraendert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 ae62727a50 Workshop #17, Punkte 4 und 5: Kadenz, Board-Regeln, ADR-0008, DoD
Vier Entscheidungen aus dem Struktur-Workshop.

Kadenz: Refinement sonntagabends, woechentlich. Sonntag, weil die GitLab-Backups
dort ohnehin laufen und die Woche an der Stelle eine Kante hat. Die Retro light
bekommt bewusst KEINEN eigenen Termin, sondern haengt am ersten Refinement des
Monats - ein monatlicher Extra-Termin im Solo-Betrieb ist ein Termin, der
ausfaellt.

Board-Pflege bei Abwesenheit: Eine Session darf abbilden, aber nicht zusagen.
Erlaubt sind status:wartet, Schliessen, Fristen nachtragen, Issues anlegen;
nicht erlaubt sind status:doing und status:next. Die Trennlinie ist nicht
Vorsicht, sondern Bedeutung - doing und next sagen, was als Naechstes wirklich
passiert, und das entscheidet sorb. Jede Aenderung wird im Issue begruendet.

ADR-0008 zu #14: Agenten-Sessions auf CFGMON laufen root-aequivalent ueber die
docker-Gruppe, und das bleibt so - ausdruecklich. Damit gilt 'sudo mit Passwort'
auf diesem Host nicht als Kontrollmechanismus. Option B haette das Auditproblem
geloest, indem sie den Arbeitsweg entfernt (sudo braucht ein TTY, das eine
Session nicht hat); Option C bleibt Ziel, lohnt aber erst bei einem zweiten
Menschen - ihr Nutzen ist Zuordnung, und im Ein-Personen-Betrieb gibt es
niemanden, gegen den sie schuetzen wuerde. Als ADR und nicht als Absatz in
hosts/cfgmon.md, weil eine Ausnahme nur zu dokumentieren statt sie zu
entscheiden genau der Fehler ist, den die ADR-Pflicht adressiert.

Die im Issue geforderte Vorklaerung - welche Konten sonst in der docker-Gruppe
sind, gilt dasselbe auf MATRIX - ist ausdruecklich als offen vermerkt statt
stillschweigend uebergangen.

Definition of Done: Baustein 4 der Textbausteine IST die kurze DoD fuer
Aenderungen ohne Deploy, statt eines eigenen Dokuments. Ein drittes Dokument
waere die dritte Fassung derselben Regeln und damit die dritte, die driftet.

62 relative Links geprueft, keiner tot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 889cd47be7 verfahren: Textbausteine fuer Sessions (Workshop #17, Punkt 6)
Die Konventionen stehen kanonisch in CLAUDE.md, aber eine Session liest sie nur,
wenn sie dazu aufgefordert wird. Diese fuenf Bloecke sind die Aufforderung:
Session-Start, Host-Session, Deploy-Uebergabe, Abschluss, Entscheidungsvorlage.

Zwei Gestaltungsentscheidungen, beide aus Fehlern dieser Woche:

Die Bausteine VERWEISEN auf die Regeln, statt sie zu wiederholen. Waeren sie
ausgeschrieben, gaebe es eine zweite Fassung, die driftet - genau das ist am
2026-08-02 passiert, als gitops/CLAUDE.md 'keine Gitea-Ausnahme mehr' behauptete,
waehrend management/CLAUDE.md zwei nannte.

Und hoechstens acht Zeilen je Block, maschinell geprueft. Der Test ist banal: Wer
zum Kopieren scrollen muss, benutzt es nicht. Der Host-Block musste dafuer zweimal
umgeschrieben werden; die Deploy-/AAR-Zeile ist rausgeflogen und steht jetzt als
Prosa daneben - Prosa muss niemand kopieren.

Die Inhalte sind nicht ausgedacht, sondern die Fehler der Woche: erfundene
Theme-Paletten statt gelesener Quelle, ein Sweep nach dem Pfad statt nach dem
Namen, ein zur Haelfte gelesenes Issue samt uebersehenem Korrekturkommentar, die
.netrc-gegen-PRIVATE-TOKEN-Falle und der Ping, der immer fehlschlaegt.

Pflegeregel dabei: ergaenzt wird ein Baustein, wenn derselbe Fehler ZWEIMAL
passiert ist - nicht vorsorglich. Sonst wachsen sie, bis sie niemand mehr kopiert.

Verlinkt aus CLAUDE.md und verfahren/README.md. 59 relative Links geprueft,
keiner tot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 d31fef4b28 vision: drei Linien vom Entwurf zur getragenen Fassung (Workshop #17)
Erster Teil des Struktur-Workshops. Die Entwuerfe vom 2026-08-01 trugen je zwei
offene Fragen; vier davon sind entschieden, die Dokumente sind damit nicht mehr
Entwurf.

axion1337.chat - kontrolliert wachsend: offen fuer Neue, aber jeder Eintritt
wird freigegeben. Das war faktisch schon gebaut (Invite-Workflow, @concierge,
befristete Gast-Accounts) und ist jetzt auch so beschlossen; die Alternativen
haetten entweder den Workflow ueberfluessig gemacht oder Moderationskapazitaet
verlangt, die es nicht gibt.

ThreadNet - die Forks werden oeffentlich, aber erst nach einem History-Audit.
Ausschlaggebend war ein Widerspruch im eigenen Dokument: Das Prinzip
'reproduzierbar fuer Dritte' zahlt sich nur oeffentlich aus, blieben die Forks
privat, waere dauerhaft fuer einen Zweck gebaut worden, den es nicht gibt.
Der Audit ist als Bedingung vermerkt, samt konkretem Fund: Commit 0242238
entfernte ein Klartext-TURN-Secret, das weiter in der Historie steht.

ThreadNet - das Rebranding wird in M4 zu Ende gebracht statt separat terminiert.
Halbfertig ist der schlechteste Zustand: Der Desktop-Client heisst ThreadNet,
der Web-Client zeigt Element.

Homelab - konsolidieren vor ausbauen. Massstab ist nicht 'laeuft es', sondern
'ueberlebt es den Verlust der Maschine'. Mit sorbs Nachtrag, dass die Git-Daten
bereits nach S3 gesichert werden - was den Befund aus #10 entschaerft, aber die
Frage offen laesst, was diese Sicherung nicht umfasst.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-05 12:00:00 +00:00
Thore CimbalandClaude Fable 5 9e0af1370b game: Verweis auf das neue Repo game-operating
Die Stacks sind jetzt unter axion1337.chat/game-operating abgebildet. Der
Bestandseintrag sagt ausdruecklich, dass es ein Abbild und keine Quelle ist und
was ihm noch fehlt - sonst liest sich der Verweis wie eine Zusicherung, die er
nicht einloest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 cbfbf4b36e game: inventarisiert - zwei Coolify-Stacks, vSwitch-IP, Ursache von GAME-01
Der Host ist seit 2026-08-02 im vSwitch (10.0.0.4). Damit liessen sich die
Compose-Definitionen einsehen, und die Ursache von GAME-01 steht fest: In keinem
der beiden Stacks gibt es einen ports:-Block. Coolify haengt alles an sein
eigenes Docker-Netz, auf 9100/8080 des Hosts lauscht nichts. CFGMONs Scrape-Ziele
auf der oeffentlichen IP konnten also nie funktionieren - was zum Befund passt,
dass up == 1 in 45 Tagen Retention nie vorkam. Die Firewall war eine zweite,
unabhaengige Schicht darueber.

Nachgetragen: beide Stacks mit Images, der Hinweis dass sie aus Coolify-Templates
stammen und nur dort existieren, und dass der Umzug nach Git bewusst zurueckgestellt
ist, bis das Matrix-Projekt fertig ist.

Der Host bleibt bewusst nur teil-inventarisiert - er wurde weiterhin nicht
betreten, OS-Stand und Plattenbelegung fehlen. Das steht jetzt explizit da,
statt ihn faelschlich als erfasst auszuweisen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 bd83975b2f game: Erreichbarkeit gemessen - die Firewall ist quellbewusst
Gegenprobe vom Hausanschluss (178.25.213.70) zur CFGMON-Messung vom 01.08.
(188.245.193.243). Neu und aufschlussreich: Port 22 antwortet meiner Quelle
sofort und laeuft bei CFGMON in einen Timeout.

Zwei Schluesse, die die bisherige Vermutung praezisieren:

- Ein pauschaler Bann von CFGMON ist ausgeschlossen - waere die IP komplett
  gesperrt, waeren auch 80/443 von dort tot. Es ist eine portbezogene Regel mit
  Quellliste, keine IP-Sperre.
- 8080/9100 sind fuer NIEMANDEN freigegeben, auch nicht fuer den Hausanschluss.
  Die Exporter sind also nicht versehentlich fuer CFGMON zu, sondern nirgends
  offen.

Damit fehlt keine Ausnahme fuer CFGMON - die Empfehlung aus GAME-01 (Host in den
vSwitch statt oeffentliche Freigabe) traegt weiterhin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 3fe05e7bd1 LABNET-03: Uebergabe-Issues nach git.lab, Gitea-Ausnahme zurueckgebaut
Die letzte Ausnahme von ADR-0002 ist erledigt. Sie bestand, weil CFGMON git.lab
nicht erreichte; mit dem Site-to-Site-Tunnel (ADR-0004) ist der Grund weg.

Umgezogen mit dem Werkzeug der ersten Migration (verfahren/issue-migration/
migrate.py), damit derselbe Fusstext und dieselbe Idempotenz gelten:
- sorb/management#1 (offen)      -> management#25
- sorb/management#2 (geschlossen) -> management#26, mit allen 11 Kommentaren

Original-Autor und -Zeitstempel sind erhalten (der Admin-Token darf created_at
setzen); die Gitea-Issues sind geschlossen und verweisen auf ihr Gegenstueck.
Der Gitea-Tracker ist damit leer.

Issue-Vorlage konvertiert statt kopiert: Gitea nutzt YAML-Issue-Forms, GitLab
Markdown-Templates. Die Feld-Begruendungen - der eigentliche Wert der Vorlage,
weil jedes Feld fuer eine real schiefgegangene Uebergabe steht - sind als
Kommentare erhalten. .gitea/ ist entfernt, damit dort keine neuen Uebergaben
mehr angelegt werden koennen.

Nachgezogen: README, roadmap, CLAUDE.md, ADR-0002 (Ausnahme durchgestrichen +
als zurueckgebaut markiert), ADR-0004 (Ernte eingeloest), hosts/overmind.md,
hosts/cfgmon.md, verfahren/README.md, verfahren/deploy-uebergabe.md.
55 relative Links geprueft, keiner tot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 164d96dddd lab-netzwerk: VPN-Thema als abgeschlossen und validiert festgehalten
sorb hat das VPN-Thema am 2026-08-02 fuer abgeschlossen und validiert erklaert.
Das Dokument trug das nicht: Es listete unten 'Offene Punkte' mit #11 und #12,
und der abgearbeitete Diagnose-Plan von LABNET-01 stand ohne Kennzeichnung
mitten im Text, als waere er noch zu tun.

- Banner oben: abgeschlossen und validiert, keine offenen Issues, alles
  Folgende ist Bestand und Historie
- Die Abschnittsueberschrift 'Offene Punkte' war schlicht falsch - jetzt
  'Zugehoerige Issues - alle geschlossen', mit Tabelle statt Liste
- Der Diagnose-Plan bekommt einen Warnhinweis: abgearbeitet und ueberholt,
  steht nur als Beleg der Ursachensuche da

Abgegrenzt: #13 (LABNET-03) und #15 (CFGMON-15) tragen LABNET im Text, gehoeren
aber nicht zum VPN-Thema und bleiben offen - der eine ist der Rueckbau der
Gitea-Ausnahme, der andere Credential-Hygiene, bei der ein Widerruf still einen
Push-Mirror brechen kann. Beides steht jetzt ausdruecklich da, damit die
Abnahme nicht faelschlich auch diese beiden mit einschliesst.

Issues #11 und #16 sind mit Begruendung geschlossen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 83cee828b8 ADR-0004: Nachtrag - die TURN-Ausnahme ist automatisiert, nicht mehr terminiert
Die Konsequenz-Zeile sagte, die Gitea-PR-Ausnahme bleibe bestehen und der
CronJob treffe git.lab nur bei eingeschaltetem Tunnel. Ersteres stimmt weiter,
Letzteres ist seit dem Schedule-Job canonize_rotation ohne Bedeutung: Der Job
laeuft im Lab und erreicht Gitea oeffentlich, die Rotation haengt also nicht
mehr am Tunnelzustand.

Nachtrag statt Umschreiben - die Entscheidung von damals war richtig, nur ihre
Folge hat sich geaendert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 4f7500c00c CLAUDE.md: Begruendung der Gitea-Kopie + Rotation ist automatisiert
Spiegelt gitops-Commit. Zwei Ergaenzungen:

Warum zwei Orte: git.lab haelt die Bauplaene, Gitea eine Kopie, die der Cluster
ohne verfuegbares Lab erreicht - die Produktion darf nicht an einem Host haengen,
der nur im Lab antwortet. Mit ausdruecklicher Warnung, die Flux-Quelle nicht auf
git.lab 'geradezuziehen'.

Die TURN-Ausnahme ist keine Handarbeit mehr: der taegliche CI-Job
canonize_rotation erledigt die Kanonisierung. Rote Pipeline statt Kalendereintrag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 f3c5603955 hosts: Altbestaende der Umbenennung Backlogs -> management bereinigt
Die Umwidmung ist in ADR-0002, ADR-0005 und dem README beschrieben - die
Verweise darauf hatte ich beim Umbau aber nie nachgezogen. Drei Stellen nannten
weiter den alten Namen, eine davon mit gleich drei falschen Aussagen im Praesens.

overmind.md, 'Repo-Topologie (Kontext)': sprach von '5 gespiegelten Repos' und
'Gitea bleibt: ... Issues, Backlogs (dieses Repo, ungespiegelt)'. Es sind sechs
(die fuenf Produkt-Repos plus management), die Issues liegen seit ADR-0002 auf
git.lab, und dieses Repo wird seit der Umwidmung selbst gespiegelt - es
behauptete also das Gegenteil des heutigen Zustands.

cfgmon.md: zwei Nennungen entschaerft. Beide stehen in Analyse-Abschnitten vom
2026-07-31 und sind als Historie richtig, lasen sich aber wie Gegenwart -
'Explizit nicht rueckbaubar' galt fuer den damaligen Gitea-CI-Rueckbau, nicht auf
Dauer. Datierte Marker statt Umschreiben.

Ausserdem trug der CFGMON-12-Abschnitt eine Liste 'Noch auf Gitea: Issues,
Meilensteine, Wiki', obwohl die Migration am 2026-08-02 mit 62 Issues durch ist.
Ergebnis vorangestellt, der Rest bleibt als Vorher-Stand stehen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 e549de8247 lab-netzwerk: Rollenverteilung zu homelab/docs explizit gemacht
Beide Dokumente beanspruchten schriftlich 'Bestand': das README von homelab/docs
('hier steht, was Bestand hat') und dieses Repo (README: hosts/ und shared/ =
'Bestand + Historie'). Die WireGuard-Tabelle stand entsprechend doppelt, ohne
dass irgendwo stand, welche Fassung gilt - der Zustand, den ADR-0002 fuer Issues
gerade aufgeloest hat.

Die Doppelung ist berechtigt, aber aus einem Grund, der nirgends stand: die
Gruppe homelab hat bewusst keine Mirrors und ist von ausserhalb des Labs nicht
lesbar. Wer ohne Tunnel nachsehen will, welcher Tunnel auf welchem Port liegt,
braucht die Kurzfassung hier. Also nicht entdoppelt, sondern die Rollen benannt:
homelab/docs fuehrt die Soll-Konfiguration und gewinnt bei Widerspruch, dieses
Repo die Historie plus einen bewusst knappen Ueberblick.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 92dac0be23 branding: von vision/ nach shared/ verschoben + AAR-Nachtrag
vision/ ist laut README 'eine Vision je Linie' - drei Linien, drei Dateien, alle
als Entwurf fuers Refinement markiert. branding.md ist keine Vision, sondern
Bestand und Historie eines uebergreifenden Themas, also genau das, was shared/
beschreibt (neben lab-netzwerk.md und zone-axion1337.md).

Der Beleg fuer den Fehlgriff steckte im letzten Commit selbst: ich musste die
README-Beschreibung von vision/ um einen Zusatz erweitern, damit die Datei
hineinpasst. Eine Kategorie aufzubohren, damit ein Artefakt hineinpasst, heisst,
dass es in die falsche Kategorie sollte. Die Zeile ist zurueckgebaut.

Ausserdem praezisiert, warum das Dokument in genau diesem Repo liegt: management
ist gespiegelt, homelab/wiki-bookstack nicht - die dortige theme/sorbs-palette.md
ist von ausserhalb des Labs nicht lesbar (CLAUDE.md, Mirror-Geltungsbereich).
Beide Rollen stehen jetzt explizit da.

AAR 2026-08-02: Nachtrag zur Theme-Korrektur. Die Ergebniszeile behauptete '11
neue Themes, Web live' - die Paletten waren aber erfunden. Statt die Historie
umzuschreiben ein datierter Nachtrag mit Verweis in der Zeile. Er schaerft das
Muster aus Abschnitt 4: erfundene Vorlagen erzeugen kein Symptom, an dem man sie
bemerkt - deshalb ist bei Vorlagen die Quelle zu pruefen, nicht nur das Ergebnis.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 d3869e081e vision: Branding-Dokument — Marke, Paletten, wo was eingestellt ist
Bislang lag verstreut, welche Farbe wo gilt: Element-Themes in der gitops-YAML,
Desktop in einer zweiten Kopie, das BookStack-Schema ausschliesslich in einer
Datenbank. Dieses Dokument buendelt es hier, weil das Repo jede
Werkzeugentscheidung ueberlebt - wird BookStack nach ADR-0007 abgeraeumt, bleiben
Marke und Palette bestehen.

Enthaelt die zehn theme-factory-Paletten woertlich, sorbs aus der laufenden
BookStack-Instanz extrahiertes Schema, die Tabelle 'wo was eingestellt ist' und
zwei Fallen: is_dark laesst sich nicht aus den Skill-Beschreibungen ableiten
(nur aus theme-showcase.pdf), und Icons brauchen resize() statt thumbnail().

Nebenbefund, festgehalten weil er die Diskussion aufloest: sorbs von Hand
eingestelltes Schema und die offizielle Sunset-Boulevard-Palette sind bis auf zwei
Ziffern identisch - beide auf demselben Coolors-Satz gelandet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 b6aaad7abe ADR-0007: Einweg-Import erlaubt, Homelab-Scope bestaetigt
Ohne Inhalte kein Vergleich - der Importer ist damit Teil des Versuchs, nicht
sein Vorgriff. Ein wiederholter Sync bleibt weiterhin ausgeschlossen. Dazu sorbs
Bestaetigung, dass beide Stacks im Homelab bleiben, bis entschieden ist, ob
ueberhaupt eine der Varianten dauerhaft eingebaut wird.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 786ca28895 CLAUDE.md: Aufzaehlung repariert und Wiki-Adresse korrigiert
Der Kanonisierungs-Absatz war beim Einfuegen der Mirror-Regel versehentlich in
den homelab-Punkt gerutscht; axionwiki.lab statt wiki.lab.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 0b518bb3b1 CLAUDE.md: Mirror-Geltungsbereich fuer die homelab-Gruppe entschieden
Die Konventionspruefung zeigte: homelab/docs, /wiki und /wiki-bookstack haben
keine Push-Mirrors - das war weder entschieden noch dokumentiert, sondern
stillschweigend so. Jetzt bewusst festgehalten: gespiegelt wird nur
axion1337.chat; die homelab-Gruppe ist lab-intern und seit ADR-0004 auch fuer
Host-Sessions ueber den Tunnel erreichbar. Konsequenz benannt: Betriebslehren
gehoeren in die AARs (gespiegelt), nicht nur in Lab-READMEs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 71975d5d41 AAR: BookStack laeuft, Rebrand auf allen vier Plattformen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 c079ec2d7d AAR-Nachtrag: BookStack-Inbetriebnahme und Rebrand-Runden
Fuenf Ursachen bei BookStack, die einander maskierten; wichtigste neue Lehre:
ein unhealthy Container ist fuer Traefik unsichtbar und sieht dabei exakt aus wie
ein fehlendes Netz. Dazu die electron-builder-Feinheit name vs. productName und
das Muster hinter meinen teuersten Fehlern: ungeprueft geaenderte Dinge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 9c3d2529b4 ADR-0006: Wiki-Adresse auf axionwiki.lab korrigiert
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 8aebe3b03d AAR fuer die Wiki-/Client-Nacht + Wiki-Adresse korrigiert
Das Verfahren verlangt einen AAR nach Deploys; er fehlte und ist damit die
Luecke, die die zweite Konventionspruefung aufgedeckt hat. Neun Befunde, sieben
Lehren - darunter 'zuerst in die Traefik-Logs', 'thumbnail vergroessert nicht'
und 'Testumgebung ist nicht Zielumgebung'.

Nebenbei: Verweise auf wiki.lab auf die real genutzte Adresse axionwiki.lab
korrigiert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 8e489415cd roadmap: Rebrand-Fortschritt und macOS-Build-Thema aufgenommen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 5091ba8f3f ADR-0007: Wiki-Oberflaeche - Docusaurus laeuft, BookStack als Gegenentwurf
Die Entscheidung wird bewusst vertagt, weil sie an einer Frage haengt, die sich
am Reissbrett nicht beantworten laesst: entsteht Dokumentation im Repo oder im
Browser? Mit BookStack entstuende eine zweite Quelle der Wahrheit neben git.lab -
das kann richtig sein, muss aber entschieden werden. Verfallsdatum fuer den
Parallelbetrieb: Ende August (DOC-03/#20).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-02 12:00:00 +00:00
Thore CimbalandClaude Fable 5 7d7c1e86b0 ADR-0006: Wikis ins Lab konsolidiert, Docusaurus als gemeinsame Leseflaeche
Drei auseinandergelaufene Dokustaende aufgeloest: Gitea-Wiki-Repo (gepflegt,
nicht gespiegelt), wiki-Branch (Mai-Abzug von docs/), docs/ im main. Wiki liegt
jetzt im GitLab-Wiki; homelab/wiki baut daraus + homelab/docs + diesem Repo eine
Docusaurus-Seite. Damit entfaellt die letzte direkt-zu-Gitea-Ausnahme.

CLAUDE.md + README entsprechend nachgezogen; Rollout-Restarbeit als #18,
Branch-Entscheidung als #19.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 cd7b2d0b75 verfahren: Refinement/Retro-Termine ausgearbeitet, Struktur-Workshop vorbereitet (#17)
- verfahren/refinement.md: Ablauf und Timeboxes fuer Refinement (woechentlich),
  Retro light (monatlich), AAR-Anlass; Zusammenspiel der parallelen Sessions
- roadmap.md + README: Kadenz-Abschnitt verweist darauf, Workshop-Einstieg verlinkt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 1b8ef35e9b roadmap: LABNET-02 erledigt, Sicherheits-Nachlese als Issues #14-#16 verlinkt
Konventions-Nachzug (ADR-0005 'alles Offene ist ein Issue'): die in den AARs
notierten offenen Punkte sind jetzt Issues, nicht nur Prosa.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 830c740a58 LABNET-02 abgeschlossen: ADR-0004 akzeptiert (Architektur v2), AAR Lab-Seite
- ADR-0004: Status akzeptiert; real gebaute Architektur v2 dokumentiert
  (UniFi bietet kein WG-Site-to-Site -> UDM-Server + CFGMON als Client mit
  'Networks Behind Client'), inkl. Messwerten aus dem Negativtest
- AAR Lab-Seite: 5 Befunde, Eingrenzungsmethodik, 5 Lehren (u.a. 'Server'-Auswahl
  erfasst nur das Tunnel-Subnetz; Portbedingung gehoert in beide Portfelder)
- README: Uebergabe-Issue-Ausnahme als auslaufend markiert
- shared/lab-netzwerk.md: beide WG-Zugaenge tabellarisch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore Cimbal 97fe9e0fa8 verfahren: AAR LABNET-02 -- Nachtrag 3: Reboot-Beweis erbracht
Host-Neustart 2026-08-01 ~21:57 CEST. Tunnel, Bootfix (After=docker.service),
Firewall-Regeln und Split-DNS kamen ohne manuellen Eingriff hoch; Handshake
2 s nach Messbeginn. Bootfix und Persistenz damit im Ernstfall verifiziert.
2026-08-01 12:00:00 +00:00
Thore Cimbal fa5c7a8681 verfahren: AAR LABNET-02 -- Aufloesung: Server-Key der Uebergabe war falsch
Der Handshake stand am 2026-08-01 ~21:15. Ursache des tagelangen Schweigens
war der in management#2 (Kommentar 399) als bestaetigt uebergebene UDM-Server-
PublicKey, der zu keinem Server auf der UDM gehoert. Nachtrag 2 dokumentiert
Eingrenzungsweg (tcpdump beidseitig, wg show am Geraet), Endzustand und Lehren.
Der Portversatz Fritzbox/UDM war ein realer zweiter Fehler, allein aber nicht
hinreichend.
2026-08-01 12:00:00 +00:00
Thore Cimbal ea026a0057 verfahren: AAR LABNET-02 -- Annahme "enabled => reboot-fest" korrigiert
Der AAR und der Kommentar an management#2 legten nahe, der Tunnel komme nach
dem Reboot von allein wieder, weil wg-quick@lab "enabled" war. Der Neustart am
2026-08-01 hat das widerlegt: der Dienst war ab 19:36 failed, weil wg-quick vor
dockerd startet und die PostUp-Regel an der noch fehlenden Kette DOCKER-USER
scheiterte -- wg-quick raeumte das Interface daraufhin ab.

Nachtrag als Abschnitt 6 ergaenzt, Fundstellen in Abschnitt 1 und Pruefpunkt 5
verweisen darauf. Behebung (systemd-Drop-in After=docker.service plus
idempotentes "iptables -N DOCKER-USER" in lab.conf) ist dort dokumentiert und
auf CFGMON umgesetzt.
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Opus 5 3e226fba40 verfahren: AAR LABNET-02 CFGMON-Seite (management#2)
Schritte 1-3 ausgefuehrt, Tunnel gestartet und enabled. Kein Handshake --
der Public Key von CFGMON ist noch nicht als UniFi-Client hinterlegt.

Drei Befunde ueber den Auftrag hinaus:
- enp7s0 seit 18:11 DOWN, ausgeloest durch die Hetzner-Range-Umstellung
  (NIC neu angehaengt, hc-net-ifup wegen unmet condition uebersprungen).
  Zeitstempel belegen: 29 Minuten VOR dem Tunnelstart, kein Zusammenhang.
- ufw ist auf CFGMON inaktiv; das Briefing setzte eine erzwingende
  Forward-Policy voraus. Regeln liegen jetzt als iptables-ACCEPT in
  PostUp/PreDown der lab.conf statt in ufw.
- sudo ist aus einer Agenten-Session nicht bedienbar (kein TTY); die
  Schritte liefen ueber die docker-Gruppe, die root-aequivalent ist.
  Die sudo-Passwortabfrage ist damit keine wirksame Grenze -- Entscheidung
  darueber liegt bei sorb.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 cc0d4d3e02 CLAUDE.md: kanonische Arbeitskonventionen fuer alle Agenten-Sessions
Uebergreifende Teile der gitops-CLAUDE.md (ThreadNet Server Suite) hierher
gehoben und erweitert: Topologie-Regeln, Kanban-Framework (ADR-0005),
Secrets-Handling, gelebte Lehren; Karpathy-Guidelines wortgleich uebernommen
(unantastbar). Lesbar von ueberall via Gitea-Mirror sorb/management.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 fdf30d42e1 Framework-Umbau: Backlogs wird management-Repo (ADR-0005, Kanban + Scrum-Elemente)
- decisions/: ADR-Verzeichnis mit Template + 0001-0005 (git.lab-Kanonik,
  Lab-Cutover, CVE-Meldeweg, Site-to-Site-VPN-Design, Framework-Wahl)
- vision/: je eine Vision fuer Community/Tool/Plattform (Entwuerfe)
- roadmap.md: Linien, Meilenstein-Kandidaten, Kadenz
- hosts/+shared/: offene Punkte -> Issues #1-#12 im management-Projekt
  (IDs bleiben in den Titeln), Dateien halten Bestand + Historie
- README: Framework, Board/status-Labels (WIP-Limit 2), Topologie

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 0f3f155bc5 Umzug ins Lab: git.lab kanonisch, Gitea wird Push-Mirror; Migrations-Stand komplett
- README: Repo-Topologie-Abschnitt (git.lab = Quelle der Wahrheit, nie direkt
  zu Gitea pushen); Ausnahme Deploy-Uebergabe-Issues bleiben auf dem Gitea-Tracker
  (CFGMON erreicht git.lab nicht)
- issue-migration: alle 4 Repos migriert (62 Issues), gitops-Nummernverschiebung
  dokumentiert, Cutover-Stand

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 aecbea0c89 verfahren: Kanonisierungs-Pflichtschritt nach CFGMON-Deploys ergaenzt (2x gelebt am 01.08.)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 e4991c050f verfahren: Issue-Migrations-Skript Gitea->GitLab (gitops#48) + Testlauf-Stand
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 77a9a94a7f labnet: LABNET-01 GELOEST - drei gestapelte Ursachen dokumentiert, git.lab vom Handy erreichbar
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00
Thore CimbalandClaude Fable 5 777f8c375f labnet: LABNET-01 Durchbruch - Port-Konflikt mit FritzOS-WireGuard, Tunnel steht auf 51840
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-01 12:00:00 +00:00