Gate 4, slice 2: decisions/0001-0011 moved via git mv with schema
frontmatter prepended (status and date taken from each body's own
Status line - 0007 stays proposed, its decision is open in #20; bodies
unchanged except relative links gaining one directory level). The old
scheme's README and template retire - their rules already live in
AGENTS.md section 6 and the neckbeard ADR template. Every reference to
decisions/ across the tree retargeted (root files, not-yet-moved
verfahren/hosts/shared files, design doc and session ADR frontmatter).
Verified: validate 0 errors (11 ported + 2 session ADRs + duplicate-id
guard), gen_status --check current with all 13 ADRs listed, drift
check 0 findings, negative test shows a cloned id 0012 firing the
duplicate check.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tracer bullet of the migration design (Gate 4, slice 1): pinned v0.1.1
baseline under docs/sources/upstream/ with provenance note, the
Karpathy block moved verbatim to docs/sources/regelwerk/ (standing
rule mapped onto the sources read-only mechanism), AGENTS.md assembled
from the byte-true upstream sections plus the project section 6
(group rules condensed from the old CLAUDE.md), CLAUDE.md reduced to
the upstream pointer, WORKFLOW.md and all four templates copied,
schema.yaml extended (issue milestone/priority/status columns,
component type, wiki area vision - all flagged in the header),
validate.py and gen_status.py forked with marked extensions,
pruefe_upstream_drift.py added, STATUS.md generated, CI gains the
offline validate job, README directory link defused.
Verified: validate 0 errors 0 warnings (the three pre-existing
directory-link errors are gone), gen_status --check current,
drift check 0 findings, baseline byte-identical to the reference
checkout (10/10 files), four negative tests fire (WIP limit 3x
in-progress, waiting without wartegrund, component slug mismatch,
single-byte drift in WORKFLOW.md). gen_status needs Python >= 3.10
locally (write_text newline) - noted for the design AAR.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reality moved after the Gate-3 approval (flagged by the human, verified
read-only): main gained decisions/0011 plus a new AAR, gitops gained two
commits, and the live backlog shows gitops#61 without a milestone - the
first real break of the 100% milestone discipline. Session ADRs
renumbered to avoid the id collision, counts updated (11 old ADRs, 6
AARs), gruppenpruefung gains the group-wide milestone/priority duty
check backed by that real case. Addendum in the design doc records all
of it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Complete target file map, exact schema extensions, script signatures
without bodies, CI flow, per-check assertions including the four
pattern demonstrations and negative tests, DO NOT CHANGE boundaries,
and the six shakiest calls named.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Amendments decided with the human at the Gate-2 STOP: docs/sources/
gets a by-source-type taxonomy (regelwerk/upstream/protokolle/
migration, proposed by sorb), the pinned v0.1.1 originals become a
byte-compare baseline against silent framework-file rewrites, AGENTS.md
carries the change-only-with-sorb rule forward, and the issue import
may read descriptions via the token (read-only). ADR-0011 and ADR-0012
flipped to accepted.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two-way harvest as mandated by the Session-1 handoff: failure patterns
of both approaches tabled with the mechanism that closes each, all
seven neckbeard gaps dispositioned (plus two new ones found this
session), and the old approach's proven value folded into the target
architecture. Two directional decisions filed as proposed ADRs: issues
live in-repo with GitLab as a deterministically mirrored view (0011),
group rules canonical here with pointer components and a checkable
components artifact (0012). Migration map, check architecture split
offline/runtime, constraints, upstream feedback candidates.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Problem statement built on the four drift patterns from the Session-1
field test, six numeric acceptance criteria, non-goals (no history
rewrite, no push, no component rollout, no forge-state destruction),
announcement paragraph. Gates 2-5 deliberately not pre-filled, per
WORKFLOW.md. Frontmatter validates against neckbeard v0.1.1 schema
with 0 errors for this file.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Answers recorded from the Gate 0 questions, asked and confirmed by the
human on 2026-08-11: language de, size-S exception granted, purpose and
audience as stated in the frontmatter. Validated against neckbeard
v0.1.1 schema.yaml (823a08c) with 0 errors, 0 warnings; the framework
files themselves enter this repo only after the two-way harvest mandated
by the Session-1 handoff.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Records on_conflict: fail as standing policy (identity provisioning never links
a new upstream identity to an existing local account), the residual prompt-stage
uniqueness check, and the SOPS-secret-needs-restart rule. Decided by sorb.
The SOPS secret updated via Flux but MAS kept the old config in memory until a
rollout restart. Records committed != deployed != active for the security fix.
Root cause proven end to end: a pre-Authentik account that lost its profiles
row (deactivate clears it, reactivate does not recreate it) crashes the
displayname write path, so it never gets a display name and the Element Call
widget never initialises. Fixed with a cross-checked INSERT; open_id_tokens
went 0 -> 6 and the call joined. Records the ruled-out suspects, what led to
the solution, and the lessons - chief among them: compare old accounts against
freshly provisioned ones, and reproduce in a cleartext room before blaming
crypto. Also notes the account-takeover finding (gitops#61) surfaced along the
way.
Records the refinement decision of 2026-08-09 (M5 created, 14 issues
moved out of M1, dividing line documented). Drafted during the
neckbeard field-test analysis (finding F-001); placement decided by
sorb on 2026-08-10: old scheme, nothing migrated yet.
Eleven findings, two false leads recorded as such (a wrong first diagnosis on #60, a false-clean secret scan caused by a wrong raw path), and the methods that actually surfaced each finding - most came from reading live state (database, ak apply_blueprint, the served config.json) rather than trusting green status.
game-operating got its push mirror today. gameserver (the group's eighth project) still has none - pointed at management#32 instead of duplicating that finding here.
game-operating was made private on Gitea, and the check quietly skipped the mirror comparison. A repo that IS mirrored but whose far side cannot be read is unverified, and unverified must not look like fine. It is now a finding that names the missing GITEA_TOKEN.
While testing that, a second bug surfaced: the header helper built 'Authorization: token: <value>' from a name that already contained the schema, producing a silently invalid header. The Authentik check had the same defect and would have failed the moment a token was added - it never ran, so nobody would have connected the two.
Refs axion1337.chat/management#28, #31
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
- 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
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.
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.
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.
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>
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
- 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
Nach dem Deploy der CVE-Pipeline (gitops#47) als Verfahren festgehalten. Der
Stand war korrekt und gelintet; der Blocker entstand erst aus der Datenmenge,
gegen die er lief -- eine Alarm-Instanz pro CVE, real 126 CRITICAL und 1222
HIGH. So etwas faellt in keinem Diff auf, nur beim Messen vor dem Deploy.
Neu:
- .gitea/ISSUE_TEMPLATE/deploy-uebergabe.yaml -- Uebergabe-Issue mit
Pflichtfeldern Mengengeruest, vollstaendiges Deploy-Kommando, Verifikation
im laufenden Dienst, Aussenwirkung samt Not-Aus, Rollback
- verfahren/deploy-uebergabe.md -- Ablauf und Pruefliste
- verfahren/aar-vorlage.md -- AAR-Vorlage
- verfahren/aar/2026-08-01-cve-pipeline-gitops47.md -- der ausloesende AAR
Abgrenzung im README ergaenzt: hosts/ und shared/ halten offene Punkte,
verfahren/ haelt, wie wir arbeiten. Die Uebergabe-Issues laufen bewusst hier
statt im Projekt-Repo, weil das Verfahren repo-uebergreifend gilt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Vom neuen Alerting (gitops#32) aufgedeckt, von CFGMON aus diagnostiziert
(kein kubectl dort, also per kube-state-metrics und Remote-Write-Serien).
Zwei getrennte Probleme:
- chronisch: DaemonSet-Pod in CrashLoopBackOff, 4880 Restarts, ~12/h,
reason=Error ohne OOM, laeuft seit mindestens 30 Tagen. Vermutlich
Portkonflikt auf 9100 mit dem eigenstaendigen node-exporter (hostNetwork).
Nicht verifiziert -- Pod-Logs brauchen Hostzugriff.
- akut: der Service-Endpoint auf 49.13.132.245:9100 antwortet seit
2026-08-01 01:19 UTC nicht mehr, 10.0.0.2:9100 dagegen schon. Kein Reboot
(77,6 Tage Uptime), faellt ins Fenster der Synapse-Portkorrektur.
Plus Nebenbefund: Job-Label prometheus.scrape.node_exporter existiert auf
CFGMON und MATRIX doppelt, External Label cluster= wuerde das trennen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Neue Befunde von CFGMON aus:
- Host lebt: Port 80/443 offen, antworten sofort -> Ursache 3 (Host weg) raus
- 8080/9100/22 laufen ins Timeout statt connection refused -> Signatur eines
Paketfilters, nicht eines toten Exporters -> Ursache 1 wahrscheinlich
- 10.0.0.0/24 abgeklopft: nur k3s (.2) und CFGMON (.3) -- der Host ist nicht
im vSwitch, damit ist die Zeile "Privat: unbekannt" beantwortet
- beide Targets waren im gesamten 45-Tage-Retentionfenster nie up
Seit dem Alerting-Rollout (gitops#32) erzeugen die Targets alle 4h echte
Alarme im Matrix-Raum. Zwei Alertmanager-Silences bis 2026-08-04 01:30 UTC
gesetzt, IDs im Eintrag vermerkt -- laufen bewusst ab, damit der Punkt nicht
still liegen bleibt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Stack laeuft versioniert und gepinnt aus sorb/thread-net-git statt aus
Portainer (verifiziert ueber Compose-Labels und docker compose ls),
Runner builder-1 ist registriert und meldet sich erfolgreich an Gitea
an. Dienste-Tabelle nachgezogen, CFGMON-01-Querverweis aktualisiert.
Workflow-Durchlauf weiterhin unbelegt, Tracking in gitops#33.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Schliesst die Doku-Luecke "Runner-Setup nur im Chat": Linux-Runner-Stolpersteine
(Docker-DNS/extra_hosts, CA-Pfad im Config-Volume), Windows-Runner-Plan mit
Image-Pin und Runbook-Verweis, Repo-Topologie-Kontext (git.lab kanonisch fuer
die 5 gespiegelten Repos).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Entscheidung 2026-07-30: Build-CI zieht ins Homelab-GitLab
(git.lab/axion1337.chat). CFGMON-11 haelt fest, was auf Gitea-Seite danach
zurueckgebaut werden kann (Actions-Toggles, Workflow-Dateien, ggf. der
Runner-Service) inkl. Token-Bilanz (npm-Token in .npmrc revoken, neuer
Registry-Push-Token fuer GitLab-CI als Gegenstueck). CFGMON-10 als
verworfen geschlossen - die Ressourcen-Hypothese wurde durch den
ThreadNet-Web-Webpack-OOM (Job 3442, heap out of memory bei 92%) im Kern
bestaetigt, aber der Fix entfaellt durch den Umzug.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Frueherer Stand ging von "kein Runner registriert, Standort offen" aus
(CFGMON-08). Beides falsch: builder-1 laeuft bereits auf CFGMON, als Teil
von thread-net-git's rework/stack-Branch (noch nicht in main gemergt, aber
produktiv aktiv, mit gezielt fuer Electron-Builds eingerichteten Labels).
CFGMON-02 entsprechend aktualisiert (in Arbeit statt offen, Merge-Rueckstand
als eigener Punkt benannt), CFGMON-08 nach Erledigt verschoben mit klarer
Korrektur-Notiz statt geloescht. Neuer Punkt CFGMON-10 fuer die dabei
entdeckten threadnet-call-CI-Fehlschlaege (Artifact-Schritt), verlinkt zum
neuen Issue threadnet-call#1.
Cross-referenziert in gitops#33 (korrigiert und geschlossen), gitops#44
(geschlossen als Duplikat), ThreadNet-Web#2 (praezisiert).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Der naechtliche Gitea-Backup-Cron ist auskommentiert, bis das Borg-Repo
auf der Storage Box steht — bis dahin laufen keine Backups, letzter
Stand ist der Dump vom 2026-07-30.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Stale K3S-01-Beispiel entfernt (hosts/k3s.md existiert seit 1c5e21c nicht mehr)
- Neuer Status "verworfen" fuer bewusst nicht umgesetzte Punkte, getrennt von
"erledigt"
- Explizite Konvention: Gegenstuecke in anderen Host-Dateien beim Schliessen
mitaktualisieren, nicht nur verlinkt stehen lassen
- Neuer Abschnitt "Verhaeltnis zu Gitea-Issues": Faustregel, wann etwas nur als
Issue, nur hier, oder als Eintrag mit Issue-Verweis landet
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
MATRIX-01 (Mail-Absender-Frage): per Config verifiziert, dass weder Synapse
noch MAS Mail versenden - kein Konfigurationsblock in den deployten Werten.
MATRIX-02: Korrektur einer falschen Annahme - "k3s-Host (10.0.0.2)" und
"matrix" sind dieselbe Maschine, nicht zwei getrennte. Remote-Write nutzt
bereits die private IP. MATRIX-04 neu: Host-Level Pre-Update-Benachrichtigung
(Issue #24). Cross-Referenzen in zone-axion1337.md (ZONE-02 entblockt) und
cfgmon.md (CFGMON-03-Update, neues CFGMON-08 fuer die Gitea-Runner-Standortfrage)
aktualisiert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Beides ging ueber den Auftrag hinaus: die Vorlage war nicht gefragt, und
k3s.md beschrieb einen Host, auf dem nichts geprueft wurde -- die
Eintraege dort waren von mir abgeleitet, nicht migriert.
Mitgezogen, weil durch die Loeschung verwaist: die TEMPLATE-Zeile im
Aufbau-Block und die k3s-Zeile in der Host-Tabelle des README. Die
uebrigen k3s-Erwaehnungen bleiben -- sie stehen als Kontext in
cfgmon.md, game.md und matrix.md und haengen nicht an der Datei.
Damit verschwindet k3s ganz aus dem Index. Falls der Host dort als
bekannt gelistet bleiben soll, ohne eigenen Backlog, waere eine Zeile
ohne Link die Alternative.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die Inbound-Regel fuer TCP 443 in der Hetzner-Cloud-Firewall enthaelt
laut Console beide Eintraege, 0.0.0.0/0 und ::/0. Der vermutete
IPv6-Fallstrick besteht also nicht.
Quelle ist ausdruecklich die Console, keine Messung: vom Host aus ist
die Cloud-Firewall unsichtbar, es gibt keinen zweiten Host fuer eine
Rueckverbindung und Traefik laeuft ohne Access-Log. Ebenso festgehalten,
dass die Ausstellung vom 30.07. um 12:00 UTC nichts ueber IPv6 aussagt --
zu dem Zeitpunkt hatte selendis noch keinen AAAA-Record.
Damit bleibt als Risiko nur, ob die Ports bis zur Erneuerung offen
bleiben; der Normalzustand ist hier eingeschraenkt. Option A um einen
Kalendereintrag auf Mitte September ergaenzt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bisher lag der Backlog als BACKLOG.md in threadnet-operating und damit
in einem Repo, das nur einen Stack auf einem Host beschreibt. Da die
Arbeit inzwischen mehrere Hosts umfasst, hier ein File pro Host plus
shared/ fuer Themen, die sich nicht pro Host trennen lassen.
Uebernommen und auf die Hosts verteilt:
- CFGMON: Cert-Erneuerung inkl. IPv6-Firewall, nicht versionierter
Portainer-Stack (traefik/gitea/cadvisor), offener Remote-Write-
Receiver, Grafana-API-Credentials; dazu drei erledigte Punkte von
heute als Historie
- game: Host von CFGMON aus nicht erreichbar, 2 Targets down
- matrix: Mailversand klaeren, bevor die Zone gehaertet wird
- k3s: pusht auf den offenen Receiver, liegt aber schon im privaten Netz
- shared/zone-axion1337: DNS-Bereinigung und Apex-DMARC-Policy
Konventionen in README.md, Vorlage in TEMPLATE.md. IDs sind pro File
fortlaufend und werden nicht wiederverwendet. Praefix fuer DNS-Themen
ist ZONE-, nicht DNS-, weil DNS-01 der Name eines ACME-Challenge-Typs
ist und hier laufend als Fachbegriff vorkommt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>