feat: slice 3 - wiki, sources and AARs in their neckbeard homes

Gate 4, slice 3: verfahren/, hosts/, vision/ and shared/ moved via git
mv - six AARs to docs/aar/ (four harvested by the 2026-08-09 retro,
two open), procedures and host knowledge to docs/wiki/ (admin,
deployment, architecture, new area vision), the retro protocol and the
commit mapping table to docs/sources/ (protokolle/, migration/). New:
the wiki index linking every page, and the mirror-topology page
carrying the why-two-places reasoning verbatim from the old CLAUDE.md
(F-013 preserved). All moved-path references retargeted; the link
checker drove the sweep to zero.

pruefe_prosa.py added (pattern C+D): SHA citations resolve via repo,
mapping table, optional component clones or a curated exemption list
(documented dead Gitea-force-push commits, a vendor-repo tag, an
Authentik uid that is hex but no git SHA, the external neckbeard
reference); wiki task prose without an issue reference errors, with a
visible pragma for deliberate checklists; the dead-tracker denylist
now covers every mirrored repo's retired Gitea tracker (F-005) - two
links re-verified against live GitLab titles and retargeted, five
defused into honest historical citations.

Verified: validate 0/0, gen_status --check current, drift 0. Demo on
the pre-migration state fires 6 findings (3 orphaned SHAs, 3 task
blocks); on the current tree exactly the 3 F-004 task blocks remain -
they turn green in slice 4 when the issues exist, which is why
pruefe_prosa joins CI only then.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Thore Cimbal
2026-08-11 12:00:00 +00:00
co-authored by Claude Fable 5
parent 70e81e2ff1
commit 92b448fe30
37 changed files with 424 additions and 120 deletions
+2 -2
View File
@@ -129,7 +129,7 @@ Ohne Lab-Zugang: dieses Repo ist als Push-Mirror unter
nicht an der Lab-Verfügbarkeit hängen.
- **Nie direkt zu Gitea pushen** (der Mirror überschreibt per Force).
Landet doch ein Commit dort: Kanonisierungs-Verfahren in
[verfahren/deploy-uebergabe.md](verfahren/deploy-uebergabe.md).
[verfahren/deploy-uebergabe.md](docs/wiki/deployment/deploy-uebergabe.md).
- Einzige bewusste Ausnahme: der TURN-Rotations-CronJob schreibt nach
Gitea; der tägliche CI-Job `canonize_rotation` holt es zurück. Seine
rote Pipeline **ist** der Alarm — es gibt bewusst keinen zweiten Meldeweg.
@@ -165,7 +165,7 @@ Ohne Lab-Zugang: dieses Repo ist als Push-Mirror unter
kanonische Autor-Identität. Historien-Rewrites nur mit
alt→neu-Zuordnung
([ADR-0009](docs/adr/0009-commit-konventionen-und-historien-anonymisierung.md),
Tabelle: [shared/commit-zuordnung-2026-08-07.md](shared/commit-zuordnung-2026-08-07.md)).
Tabelle: [shared/commit-zuordnung-2026-08-07.md](docs/sources/migration/commit-zuordnung-2026-08-07.md)).
- ⚠️ Das schützt nur die Git-Historie; Plattform-Zeitstempel (Push,
Issues, Pipelines, Pakete) tragen die echte Uhrzeit (ADR-0009).
+3 -3
View File
@@ -17,7 +17,7 @@ Lab bzw. via VPN erreichbar — das Lab ist die Quelle der Wahrheit,
überschreibt ihn bei jedem Push per Force. Deshalb **nie direkt zu Gitea
pushen** — solche Commits gehen beim nächsten Mirror-Lauf verloren (Rettung:
`.patch` von Gitea ziehen + `git am`, siehe
[Kanonisierung](verfahren/deploy-uebergabe.md)).
[Kanonisierung](docs/wiki/deployment/deploy-uebergabe.md)).
**Keine Ausnahmen mehr.** Die **Deploy-Übergabe-Issues** liefen bis 2026-08-02 auf
dem Gitea-Tracker, weil Hosts außerhalb des Labs `git.lab` nicht erreichten. Mit dem
@@ -34,8 +34,8 @@ GitLab-Issue-Template. **Alle Issues leben auf git.lab.**
| `vision/` | Eine Vision je Linie: Community (axion1337.chat), Tool (ThreadNet), Plattform (Homelab) |
| `roadmap.md` | Linien, Meilenstein-Kandidaten, Kadenz — GitLab-Milestones halten den Stand |
| `decisions/` | ADRs — Pflicht bei Architekturentscheidungen **und dauerhaften Ausnahmen** |
| `verfahren/` | Wie wir arbeiten: [Deploy-Übergabe/DoD](verfahren/deploy-uebergabe.md), [Refinement & Retro](verfahren/refinement.md), AARs (`verfahren/aar/`), Werkzeuge |
| `hosts/`, `shared/` | **Bestand + Historie** je Host/Thema — u. a. [Branding](shared/branding.md) (Marke, Paletten, wo welches Theme eingestellt ist); offene Punkte sind Issues |
| `verfahren/` | Wie wir arbeiten: [Deploy-Übergabe/DoD](docs/wiki/deployment/deploy-uebergabe.md), [Refinement & Retro](docs/wiki/admin/refinement.md), AARs (`docs/aar/`), Werkzeuge |
| `hosts/`, `shared/` | **Bestand + Historie** je Host/Thema — u. a. [Branding](docs/wiki/architecture/branding.md) (Marke, Paletten, wo welches Theme eingestellt ist); offene Punkte sind Issues |
Gelesen wird das alles auch gebündelt unter **[axionwiki.lab](https://axionwiki.lab)** —
dort stehen Plattform-Wiki, Homelab-Doku und dieses Repo nebeneinander
+3 -2
View File
@@ -30,6 +30,7 @@ _none open_
| [0012](docs/adr/0012-issues-im-repo-gitlab-als-spiegel.md) | accepted | ADR-0012: Issues leben im Repo; GitLab wird deterministisch bespiegelt |
| [0013](docs/adr/0013-gruppenregeln-kanonisch-mit-pruefung.md) | accepted | ADR-0013: Gruppenregeln kanonisch im management-Repo, Komponenten zeigen und werden geprüft |
## Open AARs (0)
## Open AARs (2)
_none — nothing awaiting harvest_
- [AAR — Refinement, Betrieb voranbringen, Git-Historie anonymisiert](docs/aar/2026-08-09-refinement-und-betrieb.md)
- [AAR — `@apo` konnte nicht telefonieren: fehlende Synapse-`profiles`-Zeile](docs/aar/2026-08-11-apo-calls-profile-zeile.md)
@@ -1,3 +1,10 @@
---
type: aar
status: harvested
date: 2026-08-01
related: []
---
# AAR — CVE-Pipeline `gitops#47`
**Datum:** 2026-08-01 · **Host/Stack:** CFGMON, `/opt/threadnet-operating/monitoring`
@@ -51,7 +58,7 @@ Befund 2 wurde nur sichtbar, weil die Config **im Container** geprüft wurde
aus, `up -d` meldete `Running`, und ein SIGHUP-Reload lud klaglos den alten Inhalt.
Diese beiden Punkte sind als Verfahren festgehalten:
[../deploy-uebergabe.md](../deploy-uebergabe.md).
[../deploy-uebergabe.md](../wiki/deployment/deploy-uebergabe.md).
## 5. Offen
@@ -1,3 +1,10 @@
---
type: aar
status: harvested
date: 2026-08-01
related: []
---
# AAR — LABNET-02, CFGMON-Seite (Übergabe `sorb/management#2`)
**Datum:** 2026-08-01 · **Host/Stack:** CFGMON, WireGuard-Client gegen UDM
@@ -56,7 +63,7 @@ wurde statt der Briefing-Annahme zu folgen. `ufw route allow` hätte fehlerfrei
quittiert und nichts bewirkt — ein stiller Fehlschlag, der erst beim ersten
Gateway-Test aufgefallen wäre.
Beides sind die Punkte 1 und 2 aus [../deploy-uebergabe.md](../deploy-uebergabe.md)
Beides sind die Punkte 1 und 2 aus [../deploy-uebergabe.md](../wiki/deployment/deploy-uebergabe.md)
in der Praxis: Mengengerüst bzw. Verifikation dort, wo der Dienst liest.
## 5. Offen
@@ -1,3 +1,10 @@
---
type: aar
status: harvested
date: 2026-08-01
related: []
---
# AAR — LABNET-02, Lab-Seite (UDM/UniFi, Einzäunung und Abnahme)
**Datum:** 2026-08-01 · **Host/Stack:** MorninglightMountain (UDM Pro), UniFi Policy Engine
@@ -1,3 +1,10 @@
---
type: aar
status: harvested
date: 2026-08-02
related: []
---
# AAR — Wiki-Rollout, Themes und Desktop-Clients (Nacht 2026-08-01/02)
**Datum:** 2026-08-01 22:00 2026-08-02 09:30 · **Beteiligt:** sorb + Mac-Session
@@ -132,7 +139,7 @@ erfundene Palette kein Symptom, auf das man stoßen könnte.
in den Skill-Beschreibungen **nicht verlässlich** — „Warm Sand · backgrounds"
findet sich bei einem Theme, dessen Showcase-Seite dunkel ist. Belastbar ist nur
`theme-showcase.pdf`: Seiten rendern, Hintergrundfarbe messen. Werte und Fallen
stehen in [`shared/branding.md`](../../shared/branding.md).
stehen in [`shared/branding.md`](../wiki/architecture/branding.md).
**Bestätigung des Musters aus Abschnitt 4.** Auch das war kein Analysefehler,
sondern eine **ungeprüfte Änderung** — dieselbe Wurzel wie Healthcheck, toter
@@ -1,3 +1,10 @@
---
type: aar
status: open
date: 2026-08-09
related: []
---
# AAR — Refinement, Betrieb voranbringen, Git-Historie anonymisiert
**Datum:** 2026-08-09 · **Host/Stack:** git.lab, Gitea, K3s-Cluster (Authentik,
@@ -1,3 +1,10 @@
---
type: aar
status: open
date: 2026-08-11
related: []
---
# AAR — `@apo` konnte nicht telefonieren: fehlende Synapse-`profiles`-Zeile
**Datum:** 2026-08-11 · **Beteiligt:** sorb + Mac-Session · **Stack:** Synapse,
@@ -73,4 +73,4 @@ Client". Die Richtung wurde deshalb gedreht:
- Tunnel dauerhaft an: widerspricht dem Bedarfsfall-Prinzip ohne echten Gewinn.
- git.lab öffentlich exponieren: größte Angriffsfläche, klar verworfen.
- Eigene UniFi-Zone für den Tunnel: technisch nicht möglich (VPN-Server bleiben in der
VPN-Zone), siehe [AAR Lab-Seite](../../verfahren/aar/2026-08-01-labnet02-lab.md).
VPN-Zone), siehe [AAR Lab-Seite](../aar/2026-08-01-labnet02-lab.md).
@@ -29,7 +29,7 @@ Konfigurationsfehler — aber es hat zwei Folgen, die benannt gehören:
docker-Gruppe geschieht, ist im Nachhinein nicht aus den üblichen
Protokollen rekonstruierbar.
Aufgedeckt im [CFGMON-AAR](../../verfahren/aar/2026-08-01-labnet02-cfgmon.md)
Aufgedeckt im [CFGMON-AAR](../aar/2026-08-01-labnet02-cfgmon.md)
(Befund 3, MEDIUM), erfasst als
[#14](https://git.lab/axion1337.chat/management/-/issues/14).
@@ -12,7 +12,7 @@ related: []
**Status:** akzeptiert · **Datum:** 2026-08-07 (Regel) / 2026-08-09 (Durchführung) · **Entscheider:** sorb
> Nachgetragen am 2026-08-09 in der [Retro](../../verfahren/retro/2026-08-09.md). Die
> Nachgetragen am 2026-08-09 in der [Retro](../sources/protokolle/retro-2026-08-09.md). Die
> Entscheidung war getroffen und ausgeführt, bevor sie als ADR vorlag — das ist
> genau der Fehler, den die ADR-Pflicht verhindern soll, und wird hier benannt
> statt geglättet.
@@ -61,7 +61,7 @@ Uhrzeit verschwindet.
- **Alle SHAs im Bereich sind neu.** Verweise in Issues, Doku und Commit-Texten
zeigen ins Leere. Die Doku wurde nachgezogen (12 Stellen); für alles andere gibt
es die dauerhafte Zuordnungstabelle
[`shared/commit-zuordnung-2026-08-07.md`](../../shared/commit-zuordnung-2026-08-07.md).
[`shared/commit-zuordnung-2026-08-07.md`](../sources/migration/commit-zuordnung-2026-08-07.md).
- **Issue-Kommentare wurden bewusst NICHT umgeschrieben.** Eine Tabelle
nachzuschlagen ist zumutbar; nachträglich zu ändern, was jemand geschrieben hat,
beschädigt dieselbe Nachvollziehbarkeit ein zweites Mal.
@@ -137,8 +137,8 @@ bleibt GitLab/Obsidian/Editor. Mockups entfallen.
Alt-Ansatz: `CLAUDE.md`, `roadmap.md`, `decisions/README.md` und die
tragenden Entscheidungen 0001, 0002, 0005, 0009, 0010,
[verfahren/refinement.md](../../verfahren/refinement.md),
[verfahren/stillstandspruefung.md](../../verfahren/stillstandspruefung.md),
[verfahren/refinement.md](../wiki/admin/refinement.md),
[verfahren/stillstandspruefung.md](../wiki/admin/stillstandspruefung.md),
`.gitlab-ci.yml`, Auszüge aus `hosts/`. Neckbeard v0.1.1: AGENTS.md,
WORKFLOW.md, ADR-0001…0004/0006, `schema.yaml`, `validate.py`,
`gen_status.py`, Schöpfungs-AAR, `docs/wiki/index.md`. Session-1-Daten
+14 -8
View File
@@ -1,3 +1,9 @@
---
type: wiki-page
area: admin
related: []
---
# CFGMON
Monitoring-Stack, Gitea und der Reverse Proxy für alles Öffentliche.
@@ -136,14 +142,14 @@ Gitea selbst, gitops-Repo als Flux-Source, Issues/Wiki/dieses Repo, der
API-Token für Issue-Verwaltung, das Gitea-Backup-Script (CFGMON-09).
*(Stand der Analyse 2026-07-31. Issues und dieses Repo sind seitdem doch
umgezogen — [ADR-0002](../docs/adr/0002-issues-und-management-ins-lab.md) —,
umgezogen — [ADR-0002](../../adr/0002-issues-und-management-ins-lab.md) —,
das Repo dabei von `Backlogs` zu `management` umgewidmet
[ADR-0005](../docs/adr/0005-pm-framework-kanban.md). „Nicht rückbaubar" galt für
[ADR-0005](../../adr/0005-pm-framework-kanban.md). „Nicht rückbaubar" galt für
den damaligen Rückbau der Gitea-CI, nicht auf Dauer.)*
Betroffene Issues (werden bei der GitLab-Migrations-Planung umformuliert):
[ThreadNet-Web#2](https://rohana.axion1337.de/sorb/ThreadNet-Web/issues/2),
[threadnet-call#1](https://rohana.axion1337.de/sorb/threadnet-call/issues/1).
`ThreadNet-Web#2` (Gitea-Zählung, Tracker stillgelegt — verbindlich: Migrations-Fußtext im GitLab-Issue),
`threadnet-call#1` (Gitea-Zählung, Tracker stillgelegt).
**Nächster Schritt:** die drei manuellen Schritte oben, dann → erledigt.
@@ -151,7 +157,7 @@ Betroffene Issues (werden bei der GitLab-Migrations-Planung umformuliert):
**Status:** entschieden (2026-08-01, sorb) — **gleicher Bot (`@alerts`), eigener Raum**
`!YRJvcEbVXtRlUIkNld:axion1337.chat`. Umsetzungsplan inkl. CVE-Metriken/Grafana/
Alertmanager-Routing: [gitops#47](https://rohana.axion1337.de/sorb/axion1337.chat-gitops/issues/47).
Alertmanager-Routing: [gitops#45 auf git.lab](https://git.lab/axion1337.chat/axion1337.chat-gitops/-/issues/45) (ehemals Gitea-gitops#47, Tracker stillgelegt).
release-watch ist bereits auf den Raum vorbereitet (Env `MATRIX_RELEASE_ROOM_ID`,
Fallback Alerts-Raum). ⬜ Rest: `@alerts` in den Raum **einladen** (Join wurde als
restricted abgelehnt — sorb), dann Deploy.
@@ -173,7 +179,7 @@ neuen Absender bauen.
## CFGMON-12 — Gitea-Projektmetadaten nach GitLab umziehen/integrieren
**Status:** abgelöst durch [gitops#48](https://rohana.axion1337.de/sorb/axion1337.chat-gitops/issues/48) (2026-08-01, sorb: HOHE Priorität — vollständige Issue-Migration + zentrale Gruppen-Roadmap; Plan-Skizze und die offene Erreichbarkeits-Entscheidung git.lab-only vs. extern stehen dort)
**Status:** abgelöst durch [gitops#46 auf git.lab](https://git.lab/axion1337.chat/axion1337.chat-gitops/-/issues/46) (ehemals Gitea-gitops#48, Tracker stillgelegt) (2026-08-01, sorb: HOHE Priorität — vollständige Issue-Migration + zentrale Gruppen-Roadmap; Plan-Skizze und die offene Erreichbarkeits-Entscheidung git.lab-only vs. extern stehen dort)
**Umgesetzt am 2026-08-01/02**: Die Migration ist durch — 62 Issues liegen auf
git.lab, die Gitea-Issues sind geschlossen und tragen einen Migrations-Fußtext.
@@ -231,7 +237,7 @@ ohne Swap, trägt daneben Gitea/Traefik/Monitoring) kann das strukturell nicht l
**Verworfen statt gefixt**: Limit-Anhebung/Swap wird bewusst nicht weiterverfolgt —
Build-CI zieht ins Homelab-GitLab um (siehe
[CFGMON-11](#cfgmon-11--gitea-ci-rückbau-nach-gitlab-umzug)), CFGMON bleibt bei leichten
Jobs. Issue-Seite: [threadnet-call#1](https://rohana.axion1337.de/sorb/threadnet-call/issues/1).
Jobs. Issue-Seite: `threadnet-call#1` (Gitea-Zählung, Tracker stillgelegt).
### CFGMON-02 — Traefik, Gitea, cAdvisor und Runner unter IaC gebracht · erledigt 2026-07-30
@@ -295,5 +301,5 @@ existiert und wo einer laufen sollte, noch offen sei. Beides falsch — ein Runn
(`builder-1`) läuft bereits, auf CFGMON, als Teil von `thread-net-git`s `rework/stack`-
Branch, mit gezielt für Electron-Builds eingerichteten Labels. Details siehe
[CFGMON-02](#cfgmon-02--traefik-gitea-cadvisor-und-runner-unter-iac-gebracht--erledigt-2026-07-30) — hier
nicht dupliziert. [gitops#33](https://rohana.axion1337.de/sorb/axion1337.chat-gitops/issues/33)
nicht dupliziert. `gitops#33` (Gitea-Zählung, Tracker stillgelegt)
(dieselbe falsche Prämisse) entsprechend korrigiert/geschlossen.
@@ -1,3 +1,9 @@
---
type: wiki-page
area: admin
related: []
---
# game
Pterodactyl- / Gameserver-Host.
@@ -1,3 +1,9 @@
---
type: wiki-page
area: admin
related: []
---
# matrix
Matrix-Homeserver (Element Server Suite / Synapse) + K3s-Single-Node-Cluster, GitOps-verwaltet.
@@ -49,7 +55,7 @@ Firewall-Drift; extern war 9100 nie freigegeben (und soll es nicht sein).
**Fix (gitops `228807f`, Weg A aus gitops#45):** HelmRelease + Alloy-Scrape entfernt,
Flux hat gepruned — DaemonSet/Service/Pod sind weg, Host-Metriken kommen unverändert
vom systemd-Exporter. Volle Diagnose:
[gitops#45](https://rohana.axion1337.de/sorb/axion1337.chat-gitops/issues/45).
`gitops#45` (Gitea-Zählung, Tracker stillgelegt — verbindlich: Migrations-Fußtext im GitLab-Issue).
<details><summary>Ursprünglicher Befund (CFGMON-Session, vor der Host-Prüfung)</summary>
@@ -171,7 +177,7 @@ laufen ausschließlich über Authentik (OIDC, `auth.axion1337.chat`) und Einladu
Der komplette IONOS-Mail-Satz auf `matrix.axion1337.de` ist damit **funktional unnötig**
dieselbe Härtung wie bei `selendis` anwenden (Null-MX, `v=spf1 -all`, `_dmarc p=reject`),
`autodiscover.matrix` kann ebenfalls weg. Damit ist auch
[ZONE-02](../shared/zone-axion1337.md) an dieser Stelle entblockt.
[ZONE-02](../architecture/zone-axion1337.md) an dieser Stelle entblockt.
**Separat davon** (andere Domain-Ebene, kein Widerspruch): auf diesem Host läuft seit
2026-07-30 ein eigener Mailversand für Host-Wartungsbenachrichtigungen
@@ -198,7 +204,7 @@ nichts mehr zu tun. Ob Prometheus/Loki auf CFGMON zusätzlich öffentlich erreic
Neuer, eigenständiger Mechanismus auf diesem Host, außerhalb von Flux/GitOps (Details:
`docs/deployment-guides/07-host-maintenance-notifications.md` im gitops-Repo,
[Issue #24](https://rohana.axion1337.de/sorb/axion1337.chat-gitops/issues/24)):
`gitops#24` (Gitea-Zählung, Tracker stillgelegt)):
`unattended-upgrades` war bereits aktiv, neu ergänzt ist ein systemd-Timer
(`maintenance-notify.timer`, fest 05:00 Uhr, vor dem 06:00-07:00-Update-Fenster), der bei
anstehenden Paket-Updates per Mail **und** Matrix (Thread-Reply im `wartung`-Raum)
@@ -1,3 +1,9 @@
---
type: wiki-page
area: admin
related: []
---
# Overmind
Homelab-Host: GitLab (Dokploy-verwaltet) + CI-Runner. **Nur im Lab erreichbar**
@@ -36,14 +42,14 @@ ein gleichnamiges Repo mit anderem Stand.
Gitea bleibt: Flux-Source (via Mirror beliefert), Registry, Packages.
**Issues nicht mehr** — die sind am 2026-08-01/02 nach git.lab gewandert
([ADR-0002](../docs/adr/0002-issues-und-management-ins-lab.md)). Die letzte Ausnahme,
([ADR-0002](../../adr/0002-issues-und-management-ins-lab.md)). Die letzte Ausnahme,
die Deploy-Übergabe-Issues auf dem Gitea-Tracker `sorb/management`, ist am 2026-08-02
mit LABNET-03 zurückgebaut: beide umgezogen (#25, #26), der Tracker ist leer.
**Ohne Ausnahme: Issues leben auf git.lab.**
*(Bis 2026-08-01 stand hier „Backlogs (dieses Repo, ungespiegelt)" — das Repo heißt
seit der Umwidmung zum Management-Repo `management` und wird seither gespiegelt,
[ADR-0005](../docs/adr/0005-pm-framework-kanban.md).)*
[ADR-0005](../../adr/0005-pm-framework-kanban.md).)*
## OVERMIND-01 — GitLab-Container-Registry aktivieren, Images nach Konsument sortieren
@@ -1,7 +1,13 @@
---
type: wiki-page
area: admin
related: []
---
# Refinement und Retro — die Termine des Frameworks
Kanban braucht wenige, aber verlässliche Termine, sonst verkommt das Board zur
Ablage. Festgelegt in [ADR-0005](../docs/adr/0005-pm-framework-kanban.md); hier
Ablage. Festgelegt in [ADR-0005](../../adr/0005-pm-framework-kanban.md); hier
steht, wie sie ablaufen.
## Termine (festgelegt im Struktur-Workshop, 2026-08-06)
@@ -48,13 +54,13 @@ Drei Fragen, mehr nicht:
Grundlage sind die AARs des Monats — sie sind die Retro-Vorbereitung, nicht ihr
Ersatz.
Ergebnisse werden unter [`retro/`](retro/) abgelegt, eine Datei je Termin. Die
erste: [2026-08-09](retro/2026-08-09.md).
Ergebnisse werden unter [`docs/sources/protokolle/`](../../sources/protokolle/retro-2026-08-09.md) abgelegt, eine Datei je Termin. Die
erste: [2026-08-09](../../sources/protokolle/retro-2026-08-09.md).
## AAR (anlassbezogen)
Nach jedem Deploy mit Übergabe und nach jedem Incident, Vorlage in
[aar-vorlage.md](aar-vorlage.md). Ein AAR ist keine Chronik, sondern ein
[docs/aar/template.md](../../aar/template.md). Ein AAR ist keine Chronik, sondern ein
Wissensspeicher: Was war das Ergebnis, welche Befunde, was hat die Eingrenzung
ermöglicht, welche Lehren, was bleibt offen. **Offene Punkte aus einem AAR werden
im selben Zug zu Issues** — sonst versacken sie in der Prosa (real passiert am
@@ -85,10 +91,10 @@ wertlos.
Mehrere Claude-Sessions arbeiten parallel (Mac-Session, Host-Sessions auf CFGMON
und Overmind). Für sie gilt:
- Die **kanonischen Arbeitskonventionen** stehen in [`CLAUDE.md`](../CLAUDE.md) und
- Die **kanonischen Arbeitskonventionen** stehen in [`CLAUDE.md`](../../../AGENTS.md) und
sind über den Gitea-Mirror von überall lesbar.
- Arbeit zwischen Sessions läuft über das
[Deploy-Übergabe-Verfahren](deploy-uebergabe.md) — Auftrag, Meldung, Protokoll
[Deploy-Übergabe-Verfahren](../deployment/deploy-uebergabe.md) — Auftrag, Meldung, Protokoll
im Issue, nicht im Chat.
- Was eine Session lernt, gehört ins Repo (AAR/ADR/Doku), nicht nur in ihr
Gedächtnis — Sessions gehen verloren, Repos nicht.
@@ -1,7 +1,13 @@
---
type: wiki-page
area: admin
related: []
---
# Stillstandsprüfung
Sucht Dinge, die **leise aufgehört haben zu funktionieren**. Beschlossen in der
[Retro 2026-08-09](retro/2026-08-09.md).
[Retro 2026-08-09](../../sources/protokolle/retro-2026-08-09.md).
## Warum es sie gibt
@@ -1,8 +1,14 @@
---
type: wiki-page
area: admin
related: []
---
# Textbausteine für Sessions
Kurze, kopierbare Blöcke, die man einer Claude-/Agenten-Session voranstellt.
Die Konventionen stehen kanonisch in [`CLAUDE.md`](../CLAUDE.md) — aber eine
Die Konventionen stehen kanonisch in [`CLAUDE.md`](../../../AGENTS.md) — aber eine
Session liest sie nur, wenn sie dazu aufgefordert wird. Diese Bausteine sind die
Aufforderung.
@@ -69,7 +75,7 @@ Wo nichts zutrifft: "-" eintragen, nicht das Feld löschen.
> **Dieser Baustein ist zugleich unsere Definition of Done für Änderungen ohne
> Deploy** (festgelegt 2026-08-06). Für Deployments gilt weiterhin das
> [Übergabe-Verfahren](deploy-uebergabe.md) — das ist die längere DoD.
> [Übergabe-Verfahren](../deployment/deploy-uebergabe.md) — das ist die längere DoD.
>
> Bewusst kein eigenes DoD-Dokument: Es wäre die dritte Fassung derselben Regeln
> und damit die dritte, die driften kann.
@@ -1,3 +1,9 @@
---
type: wiki-page
area: architecture
related: []
---
# Branding: Marke, Farben, Bildsprache
Übergreifend, weil dieselben Farben in mehreren Oberflächen eingestellt werden
@@ -7,7 +13,7 @@ trennen lässt: **Bestand** (welche Farbe wo eingetragen ist) und **Historie**
Hier im `management`-Repo, weil es als einziges der beteiligten Repos
**gespiegelt** ist und jede Werkzeugentscheidung überlebt: Wird das
BookStack-Experiment nach [ADR-0007](../docs/adr/0007-wiki-oberflaeche-docusaurus-vs-bookstack.md)
BookStack-Experiment nach [ADR-0007](../../adr/0007-wiki-oberflaeche-docusaurus-vs-bookstack.md)
abgeräumt oder ein Client ersetzt, bleiben Marke und Paletten bestehen.
## Bildmarke
@@ -20,7 +26,7 @@ Windows und Linux, Web-Icons.
⚠️ Beim Ableiten den **transparenten Rand wegschneiden** und mit `resize()`
skalieren, nicht mit `thumbnail()` — Letzteres verkleinert nur und lässt das Motiv
in großen Icons als Briefmarke zurück (real passiert, siehe
[AAR 2026-08-02](../verfahren/aar/2026-08-02-wiki-und-desktop-clients.md)).
[AAR 2026-08-02](../../aar/2026-08-02-wiki-und-desktop-clients.md)).
⚠️ **Und danach mittig setzen — das ist ein zweiter, eigener Schritt.** Beim ersten
Anlauf wurde nur beschnitten und skaliert: Das Motiv füllte 81 % der Breite, saß
@@ -1,7 +1,13 @@
---
type: wiki-page
area: architecture
related: []
---
# Lab-Netzwerk (Heimnetz: Fritzbox + UDM Pro)
Themen rund um das Homelab-Netz selbst — Router-Kaskade, VLANs, VPN-Zugänge.
Hosts im Lab: Overmind (git.lab, [hosts/overmind.md](../hosts/overmind.md)),
Hosts im Lab: Overmind (git.lab, [hosts/overmind.md](../admin/overmind.md)),
der Mac. Kaskade: **Fritzbox (WAN) → UDM Pro**, kein Doppel-NAT, statische
Route in der Fritzbox für das Lab-VLAN.
@@ -17,7 +23,7 @@ Route in der Fritzbox für das Lab-VLAN.
| Zugang | Server | Port | Tunnelnetz | Zweck |
|---|---|---|---|---|
| Roadwarrior „Thore" | UDM | 51840 | 10.58.74.0/24 | Handy/MacBook ins Lab (LABNET-01) |
| Site-to-Site „Matrix" | UDM | 51841 | 10.58.75.0/24 | Hetzner-Netz 10.0.0.0/24 ↔ Lab (LABNET-02, [ADR-0004](../docs/adr/0004-site-to-site-vpn-hetzner-lab.md)) |
| Site-to-Site „Matrix" | UDM | 51841 | 10.58.75.0/24 | Hetzner-Netz 10.0.0.0/24 ↔ Lab (LABNET-02, [ADR-0004](../../adr/0004-site-to-site-vpn-hetzner-lab.md)) |
### Verhältnis zu `homelab/docs`
@@ -28,7 +34,7 @@ Soll-Konfiguration ist
führt die **Historie**: was wann warum geändert wurde und mit welchem Issue.
Der Grund für die Doppelung ist der Mirror-Geltungsbereich aus der
[CLAUDE.md](../CLAUDE.md): Die Gruppe `homelab` hat bewusst **keine Mirrors** und
[CLAUDE.md](../../../AGENTS.md): Die Gruppe `homelab` hat bewusst **keine Mirrors** und
ist von außerhalb des Labs nicht lesbar. Wer ohne Tunnel nachsehen muss, welcher
Tunnel überhaupt auf welchem Port liegt, findet es nur hier. Deshalb hält dieses
Dokument einen Kurzüberblick vor — Ports, Tunnelnetze, Zweck — und nichts
@@ -113,7 +119,7 @@ Zum Netz/VPN ist **nichts mehr offen** (Stand 2026-08-02):
| Issue | Thema | Stand |
|---|---|---|
| [#11](https://git.lab/axion1337.chat/management/-/issues/11) | LABNET-01-Rest — MacBook-WireGuard-Profil | geschlossen |
| [#12](https://git.lab/axion1337.chat/management/-/issues/12) | LABNET-02 — Site-to-Site-VPN (Design: [ADR-0004](../docs/adr/0004-site-to-site-vpn-hetzner-lab.md)) | geschlossen, Testreihe 17 protokolliert |
| [#12](https://git.lab/axion1337.chat/management/-/issues/12) | LABNET-02 — Site-to-Site-VPN (Design: [ADR-0004](../../adr/0004-site-to-site-vpn-hetzner-lab.md)) | geschlossen, Testreihe 17 protokolliert |
| [#16](https://git.lab/axion1337.chat/management/-/issues/16) | LABNET-04 — Feinschliff UniFi-Regeln | geschlossen |
Zwei Punkte tragen zwar LABNET im Text, gehören aber **nicht** zum VPN-Thema und
@@ -0,0 +1,64 @@
---
type: wiki-page
area: architecture
related:
- "docs/adr/0001-gitlab-kanonisch-push-mirror.md"
- "docs/adr/0002-issues-und-management-ins-lab.md"
- "docs/adr/0004-site-to-site-vpn-hetzner-lab.md"
- "docs/adr/0006-wikis-konsolidieren-docusaurus.md"
---
# Mirror-Topologie: Das Lab ist die Quelle der Wahrheit
Begründungsprosa übernommen aus der alten `CLAUDE.md` (Abschnitt
„Projektrealitäten", Wortlaut in der git-Historie vor der
neckbeard-Migration); die verbindlichen Regeln stehen in `AGENTS.md` §6
und den verlinkten ADRs. Erhalten per Feldtest-Befund F-013: Diese
Begründung samt Gegenargument und Rettungspfad ist der Wert — sie
erklärt, warum die Topologie so aussieht und so bleiben soll.
- Kanonische Repos liegen auf `git.lab/axion1337.chat/*` (nur im
Lab/VPN auflösbar). Gitea/rohana wird per **Push-Mirror** beliefert
und bleibt Flux-Source, Container-/npm-Registry und Release-Download
([ADR-0001](../../adr/0001-gitlab-kanonisch-push-mirror.md)).
- **Warum überhaupt zwei Orte — und warum das kein Altbestand ist:**
Auf git.lab liegen die *Baupläne*, auf Gitea eine Kopie, die der
Cluster **ohne verfügbares Lab** erreicht. Der Hetzner-Cluster muss
sich bauen und neu ausrollen lassen, wenn das Homelab aus ist, im
Umbau steckt oder niemand zu Hause ist — er darf deshalb nicht von
einem Host abhängen, der nur im Lab antwortet.
⚠️ **Die Flux-Quelle nicht „geradeziehen"** auf git.lab: Das sähe
aufgeräumter aus und würde die Verfügbarkeit der Produktion an das
Lab koppeln — genau das, was die Trennung verhindert.
- **Gespiegelt wird nur die Gruppe `axion1337.chat`** (die Produkt-Repos
und `management`). Die Gruppe **`homelab`** (`docs`, `wiki`,
`wiki-bookstack`) hat bewusst **keine Mirrors**: Sie beschreibt und
konfiguriert ausschließlich Lab-Infrastruktur, und seit dem
Site-to-Site-VPN ([ADR-0004](../../adr/0004-site-to-site-vpn-hetzner-lab.md))
erreichen auch Host-Sessions git.lab direkt — Tunnel einschalten
genügt. Betriebslehren, die von außen lesbar sein müssen, gehören
deshalb in die **AARs** unter `docs/aar/` (dieses Repo ist
gespiegelt), nicht nur in die READMEs der Lab-Repos.
- Landet doch ein Commit auf Gitea (z. B. aus einer Host-Session ohne
Lab-Route): **Kanonisierungs-Verfahren** in
[deploy-uebergabe](../deployment/deploy-uebergabe.md) — `.patch` von
Gitea ziehen, `git am` (erhält Autorschaft), Push über git.lab.
- ⚠️ gitops-Issue-Nummern haben sich beim Gitea-Umzug verschoben (Gitea
zählte PRs mit; z. B. Gitea#48 → GitLab#46) — alte „gitops#N"-Verweise
meinen die Gitea-Nummer; verbindlich ist der Migrations-Fußtext im
Issue ([ADR-0002](../../adr/0002-issues-und-management-ins-lab.md)).
- **Ausnahme** (bewusst entschieden, nur noch eine): der
TURN-Rotations-CronJob schreibt weiter nach Gitea, weil er im Cluster
läuft und git.lab nicht erreicht. **Die Rotation nicht von Hand
nachziehen und den PR nie auf Gitea mergen** — das erledigt seit
2026-08-02 der geplante CI-Job `canonize_rotation` im gitops-Repo
täglich von git.lab aus. Scheitert er, bleibt die Pipeline rot; diese
rote Pipeline **ist** der Alarm, einen zusätzlichen Termin gibt es
bewusst nicht.
- **Dokumentation** ([ADR-0006](../../adr/0006-wikis-konsolidieren-docusaurus.md)):
Das gitops-Wiki liegt seit 2026-08-02 auf git.lab (*Wiki*-Reiter im
Projekt); ⚠️ der `wiki`-**Branch** im gitops-Repo ist ein überholter
Mai-Abzug von `docs/` und nicht die gepflegte Fassung. Alle Quellen
zusammen erscheinen unter **axionwiki.lab**
([`homelab/wiki`](https://git.lab/homelab/wiki), Docusaurus) —
Inhalte werden beim Bau geholt, **Änderungen gehören ins Quell-Repo**.
@@ -1,3 +1,9 @@
---
type: wiki-page
area: architecture
related: []
---
# DNS-Zone `axion1337.de` und Mail-Policy
Übergreifend, weil die Zone alle Hosts abdeckt und die Mail-Policy sich nicht pro
@@ -1,10 +1,16 @@
---
type: wiki-page
area: deployment
related: []
---
# Verfahren: Deploy-Übergabe
Für die Konstellation „einer baut, ein anderer rollt aus". Zweck ist nicht mehr
Prozess, sondern **weniger Rückfragen und weniger stille Fehlschläge**.
Eingeführt am 2026-08-01 nach dem Deploy der CVE-Pipeline (`gitops#47`), siehe
[aar/2026-08-01-cve-pipeline-gitops47.md](aar/2026-08-01-cve-pipeline-gitops47.md).
[aar/2026-08-01-cve-pipeline-gitops47.md](../../aar/2026-08-01-cve-pipeline-gitops47.md).
## Ablauf
@@ -12,8 +18,8 @@ Eingeführt am 2026-08-01 nach dem Deploy der CVE-Pipeline (`gitops#47`), siehe
(`.gitlab/issue_templates/Deploy-Übergabe.md`, im Feld *Description template*).
2. Wer ausrollt, arbeitet die Prüfliste unten ab und deployt.
3. Wer ausrollt, hängt den **AAR** als Kommentar an dasselbe Issue
(Vorlage: [aar-vorlage.md](aar-vorlage.md)). Bei Befunden ab MEDIUM
zusätzlich als Datei unter [aar/](aar/).
(Vorlage: [docs/aar/template.md](../../aar/template.md)). Bei Befunden ab MEDIUM
zusätzlich als Datei unter `docs/aar/`.
## Die vier Punkte, die den Unterschied machen
@@ -63,6 +69,7 @@ committet und dokumentiert, sonst ist sie in zwei Wochen ein Rätsel.
## Prüfliste für den Ausrollenden
<!-- pruefe-prosa:ok (Checkliste des Verfahrens, keine offene Aufgabe) -->
- [ ] Diff gelesen, nicht nur die Beschreibung
- [ ] Mengengerüst plausibel? Bei Zweifel an einer Stichprobe selbst messen
- [ ] Configs mit den jeweiligen Werkzeugen validiert (`promtool`, `amtool`,
+41
View File
@@ -0,0 +1,41 @@
---
type: wiki-page
area: index
related: []
---
# Wiki-Index
Areas sind Ordner; leere Ordner werden nie angelegt — Struktur entsteht
mit Inhalt. Projektfassung des neckbeard-Index (Original:
`docs/sources/upstream/neckbeard-v0.1.1/`), erweitert um die Area
`vision` (Alt-Wert „eine Datei je Linie", ADR-0005).
## Areas
| Area | Enthält | Stand |
|---|---|---|
| `admin/` | Betrieb: [cfgmon](admin/cfgmon.md) · [game](admin/game.md) · [matrix](admin/matrix.md) · [overmind](admin/overmind.md) · [Refinement & Retro](admin/refinement.md) · [Stillstandsprüfung](admin/stillstandspruefung.md) · [Textbausteine](admin/textbloecke.md) | belegt |
| `deployment/` | [Deploy-Übergabe](deployment/deploy-uebergabe.md) (Definition of Done, Kanonisierungs-Verfahren) | belegt |
| `architecture/` | [Mirror-Topologie](architecture/mirror-topologie.md) · [Lab-Netz](architecture/lab-netzwerk.md) · [DNS-Zone](architecture/zone-axion1337.md) · [Branding](architecture/branding.md) | belegt |
| `vision/` | Eine Datei je Linie: [axion1337.chat](vision/axion1337-chat.md) · [Homelab](vision/homelab.md) · [ThreadNet](vision/threadnet.md) | belegt |
| `user-guide/` | Für Nicht-Owner | entfällt — Gate 0: Publikum ist Owner + Sessions |
| `requirements/` | Eigenständige Anforderungssicht | nur bei echtem Bedarf |
| `faq/`, `stolpersteine/` | Nur aus AARs und geschlossenen Issues geerntet — nie auf Vorrat | leer, entsteht im Refinement |
## Seitenregeln
- Jede Seite trägt Frontmatter per `schema.yaml` (`type: wiki-page`,
`area`, `related`, ggf. `sources`).
- `sources` zitiert, worauf die Seite fußt — Dateien unter
`docs/sources/` (unveränderlich, agentenschreibgeschützt) oder
externe URLs.
- Nur Standard-Markdown-Links, Diagramme als Mermaid (ADR-0003
upstream); keine Wikilinks.
- **Aufgaben gehören nicht ins Wiki:** offene Arbeitspunkte sind Issues
(`docs/issues/`), Wiki-Seiten verweisen höchstens darauf
(Lehre F-004; Prüfung: `scripts/pruefe_prosa.py`).
- Widersprüche werden aufgelöst oder ausdrücklich als Konflikt markiert
— nie stillschweigend nebeneinander stehen gelassen.
- Kein „Stand:"-Etikett in Seitenkörpern — `git log` beantwortet das
(Lehre F-010).
@@ -1,3 +1,9 @@
---
type: wiki-page
area: vision
related: []
---
# Vision: aXion1337.chat — die Community
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
@@ -1,3 +1,9 @@
---
type: wiki-page
area: vision
related: []
---
# Vision: Homelab — die Plattform
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
@@ -1,3 +1,9 @@
---
type: wiki-page
area: vision
related: []
---
# Vision: ThreadNet — das Tool
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
+3 -3
View File
@@ -63,12 +63,12 @@
### Community (axion1337.chat)
- Rebranding-Runde (bewusst vertagt; Leitplanke in `vision/axion1337-chat.md`).
- Rebranding-Runde (bewusst vertagt; Leitplanke in `docs/wiki/vision/axion1337-chat.md`).
- Vision-Verfeinerung im ersten Refinement.
## Kadenz
Ablauf und Timeboxes: [verfahren/refinement.md](verfahren/refinement.md).
Ablauf und Timeboxes: [verfahren/refinement.md](docs/wiki/admin/refinement.md).
- **Refinement** (gemeinsame Session, ~wöchentlich, 3045 min): Board von rechts
nach links, WIP-Limit prüfen, nachziehen, Entscheidungsvorlagen.
@@ -80,7 +80,7 @@ Ablauf und Timeboxes: [verfahren/refinement.md](verfahren/refinement.md).
am 2026-08-06 — Visionen geschärft, M1M4 angelegt, Board gesichtet, Kadenz und
Arbeitsteilung festgelegt. Daraus entstanden ADR-0008 (Agenten-Sessions laufen
root-äquivalent), die Textbausteine in
[verfahren/textbloecke.md](verfahren/textbloecke.md) und die feste Kadenz
[verfahren/textbloecke.md](docs/wiki/admin/textbloecke.md) und die feste Kadenz
(Refinement sonntags, Retro am ersten des Monats).
Seither gilt zusätzlich: **Der Titel trägt keine Priorität**, und **jedes Issue
+133
View File
@@ -0,0 +1,133 @@
#!/usr/bin/env python3
"""pruefe_prosa.py — deterministische Prosa-Prüfungen (offline).
Drei Prüfungen, jede aus einem realen Feldtest-Befund (Design
2026-08-11, Muster C und D; Prüfungen nur aus realen Fällen):
(a) SHA-Zitate auflösen (F-012: sechs verwaiste Zitate, niemand konnte
sie prüfen). Kandidaten sind Hex-Wörter (740 Zeichen, mindestens
je ein Buchstabe und eine Ziffer) in Wurzel-*.md und docs/**, ohne
docs/sources/ (die Zuordnungstabelle IST das Mapping). Auflösung:
1. Objekt existiert in diesem Repo (`git cat-file -e`),
2. SHA steht in der Zuordnungstabelle (altneu, ADR-0009),
3. Objekt existiert in einem Klon unter $NB_KOMPONENTEN (optional).
Unauflösbar MIT gesetztem NB_KOMPONENTEN FEHLER; ohne als
UNGEPRÜFT gelistet (sichtbar, kein stiller Skip).
(b) Aufgabenmarker im Wiki (F-004: fünf Arbeitspunkte lebten nur in
hosts/-Prosa, unsichtbar für das Board). Ein Absatz in docs/wiki/**
mit Marker (Nächster Schritt / Offen: / TODO / offene Checkbox)
muss einen Issue-Verweis tragen (#N, docs/issues/, /issues/-URL),
sonst FEHLER. Bewusste Nicht-Aufgaben (z. B. Checklisten eines
Verfahrens) tragen im selben Absatz das sichtbare Pragma
`<!-- pruefe-prosa:ok (Grund) -->`.
(c) Sperrliste stillgelegter Ziele (F-005: lebendes Dokument routete
auf den toten Gitea-Tracker). Treffer FEHLER.
Usage: python scripts/pruefe_prosa.py [repo-root]
"""
from __future__ import annotations
import os
import re
import subprocess
import sys
from pathlib import Path
SHA_RE = re.compile(r"\b[0-9a-f]{7,40}\b")
MARKER_RE = re.compile(r"Nächste[r]? Schritt|(?:^|\*\*)Offen:|TODO\b|^\s*[-*] \[ \]",
re.M)
ISSUE_REF_RE = re.compile(r"#\d+|docs/issues/|/issues/\d+")
# F-005/ADR-0002: die Gitea-Tracker ALLER gespiegelten Repos sind seit dem
# Umzug tot; verbindlich sind die git.lab-Issues (Zuordnung: Migrations-
# Fußtext im jeweiligen GitLab-Issue).
SPERRLISTE = [re.compile(r"rohana\.axion1337\.de/sorb/[^)\s]*/issues/")]
ZUORDNUNG = "docs/sources/migration/commit-zuordnung-2026-08-07.md"
# Kuratierte Ausnahmen: SHA<TAB>Grund — nur für Zitate, deren Ziel
# nachweislich und dokumentiert nicht mehr existiert (oder außerhalb
# des Prüfbereichs liegt). Neue Einträge brauchen einen Grund.
AUSNAHMEN = "scripts/sha_ausnahmen.tsv"
def kandidaten(root: Path):
for pattern in ("*.md", "docs/**/*.md"):
for p in sorted(root.glob(pattern)):
rel = p.relative_to(root).as_posix()
if rel.startswith("docs/sources/") or p.name == "template.md":
continue
yield p, rel
def obj_existiert(repo: Path, sha: str) -> bool:
r = subprocess.run(["git", "-C", str(repo), "cat-file", "-e",
f"{sha}^{{object}}"], capture_output=True)
return r.returncode == 0
def main() -> int:
root = Path(sys.argv[1]) if len(sys.argv) > 1 else Path.cwd()
fehler: list[str] = []
ungeprueft: list[str] = []
zuordnung = ""
zp = root / ZUORDNUNG
if zp.is_file():
zuordnung = zp.read_text(encoding="utf-8")
ausnahmen: set[str] = set()
ap = root / AUSNAHMEN
if ap.is_file():
for zeile in ap.read_text(encoding="utf-8").splitlines():
if zeile.strip() and not zeile.startswith("#"):
ausnahmen.add(zeile.split("\t")[0].strip())
klone_dir = os.environ.get("NB_KOMPONENTEN", "")
klone = [d for d in Path(klone_dir).iterdir()
if (d / ".git").exists()] if klone_dir else []
for p, rel in kandidaten(root):
text = p.read_text(encoding="utf-8")
# (c) Sperrliste
for muster in SPERRLISTE:
for treffer in set(muster.findall(text)):
fehler.append(f"{rel}: Verweis auf stillgelegtes Ziel "
f"({treffer})")
# (a) SHA-Zitate
for sha in set(SHA_RE.findall(text)):
if sha.isdigit() or not any(c.isdigit() for c in sha) \
or not any(c in "abcdef" for c in sha):
continue
if sha in ausnahmen:
continue
if obj_existiert(root, sha) or sha in zuordnung:
continue
if any(obj_existiert(k, sha) for k in klone):
continue
if klone:
fehler.append(f"{rel}: SHA-Zitat unauflösbar: {sha}")
else:
ungeprueft.append(f"{rel}: {sha} (kein NB_KOMPONENTEN)")
# (b) Aufgabenmarker, nur Wiki
if rel.startswith("docs/wiki/"):
for absatz in re.split(r"\n\s*\n", text):
if "pruefe-prosa:ok" in absatz:
continue
if MARKER_RE.search(absatz) and not ISSUE_REF_RE.search(absatz):
zeile = absatz.strip().splitlines()[0][:70]
fehler.append(f"{rel}: Aufgabenprosa ohne "
f"Issue-Verweis: „{zeile}…“")
for f in fehler:
print(f"FEHLER {f}")
for u in ungeprueft:
print(f"UNGEPRÜFT {u}")
print(f"pruefe_prosa: {len(fehler)} Fehler, "
f"{len(ungeprueft)} ungeprüfte SHA-Zitate")
return 1 if fehler else 0
if __name__ == "__main__":
sys.exit(main())
+8
View File
@@ -0,0 +1,8 @@
# SHA<TAB>Grund — kuratierte Ausnahmen für pruefe_prosa.py (a).
dfe04c4a Gitea-Direktpush, vom Mirror force-überschrieben; Text dokumentiert das (deploy-uebergabe, cfgmon)
dfe04c4 Kurzform desselben überschriebenen Commits (dfe04c4→6ffab68)
2b715ca Gitea-Direktpush, überschrieben (2b715ca→0bd77e2); Text dokumentiert das
7645a2b Commit im vendor/windows-Repo — außerhalb des Prüfbereichs (Windows-Build-VM, overmind)
5bc25447 Image-Tag aus vendor/windows-CI — außerhalb des Prüfbereichs (overmind)
2fafe38b Authentik-uid, kein Git-SHA (AAR 2026-08-11, MAS-subject)
823a08cac6b03a47d7e2f661200a49ac6e09d38d neckbeard-v0.1.1-Referenz — externes Repo, nicht im Komponenten-Prüfbereich
1 # SHA<TAB>Grund — kuratierte Ausnahmen für pruefe_prosa.py (a).
2 dfe04c4a Gitea-Direktpush, vom Mirror force-überschrieben; Text dokumentiert das (deploy-uebergabe, cfgmon)
3 dfe04c4 Kurzform desselben überschriebenen Commits (dfe04c4→6ffab68)
4 2b715ca Gitea-Direktpush, überschrieben (2b715ca→0bd77e2); Text dokumentiert das
5 7645a2b Commit im vendor/windows-Repo — außerhalb des Prüfbereichs (Windows-Build-VM, overmind)
6 5bc25447 Image-Tag aus vendor/windows-CI — außerhalb des Prüfbereichs (overmind)
7 2fafe38b Authentik-uid, kein Git-SHA (AAR 2026-08-11, MAS-subject)
8 823a08cac6b03a47d7e2f661200a49ac6e09d38d neckbeard-v0.1.1-Referenz — externes Repo, nicht im Komponenten-Prüfbereich
-25
View File
@@ -1,25 +0,0 @@
# Verfahren
Wiederkehrende Abläufe zwischen Personen und Hosts — dort festgehalten, wo sie
nicht an einem einzelnen Projekt-Repo hängen.
| Datei | Inhalt |
|---|---|
| [deploy-uebergabe.md](deploy-uebergabe.md) | Ablauf und Prüfliste für „einer baut, ein anderer rollt aus" |
| [aar-vorlage.md](aar-vorlage.md) | Vorlage für den After Action Report nach einem Deploy |
| [aar/](aar/) | Abgelegte AARs, benannt `JJJJ-MM-TT-<vorhaben>.md` |
[`textbloecke.md`](textbloecke.md) hält kurze, kopierbare Blöcke, die man einer
Session voranstellt — sie verweisen auf die Konventionen, statt sie zu wiederholen.
**Baustein 4 (Abschluss) ist zugleich die Definition of Done für Änderungen ohne
Deploy**; für Deployments gilt [deploy-uebergabe.md](deploy-uebergabe.md).
Die zugehörige Issue-Vorlage liegt unter
`.gitlab/issue_templates/Deploy-Übergabe.md` und erscheint beim Anlegen eines
Issues in diesem Repo im Auswahlfeld *Description template* als
**Deploy-Übergabe**.
Abgrenzung zum Rest des Repos: `hosts/` und `shared/` halten **offene Punkte**,
dieses Verzeichnis hält **wie wir arbeiten**. Ein Verfahren wird hier nur
aufgenommen, wenn es mindestens einmal an einem echten Vorfall gescheitert
oder bewährt ist — der auslösende AAR wird jeweils verlinkt.
-45
View File
@@ -1,45 +0,0 @@
# AAR — <Vorhaben> <Issue-Referenz>
**Datum:** JJJJ-MM-TT · **Host/Stack:** … · **Auftrag:**
## 1. Ergebnis
Was ist live und verifiziert. Was ist bewusst **nicht** live, und warum.
Diese Trennung steht ganz oben — sie ist die einzige Angabe, die jemand
braucht, der nur eine Zeile liest.
## 2. Befunde
| # | Befund | Schwere | Status |
|---|---|---|---|
| 1 | … | HIGH / MEDIUM / LOW | abgefangen / behoben / notiert · Issue |
Schwere nach Auswirkung, nicht nach Aufwand. Zu jedem Befund gehört, **wie er
sichtbar wurde** — falls das nicht offensichtlich ist, siehe Abschnitt 4.
## 3. Verdachtsfälle mit Entwarnung
Was geprüft und **nicht** bestätigt wurde, mit dem Messwert. Genauso wichtig
wie die Befunde: verhindert, dass dieselbe Vermutung beim nächsten Mal erneut
Zeit kostet.
## 4. Was die Befunde ermöglicht hat
Die Methode, nicht die Chronologie. Wenn ein Befund nur durch eine bestimmte
Prüfung sichtbar wurde, gehört genau die hierher — das ist der Teil, der beim
nächsten Deploy wiederverwendbar ist.
## 5. Offen
Was bleibt, wer entscheidet, was blockiert. Mit Issue-Referenz statt
wiederholtem Inhalt.
---
Regeln:
- Nicht verifizierte Aussagen als solche kennzeichnen — eine Vermutung, die wie
ein Befund aussieht, kostet später mehr Zeit als sie spart (Konvention aus
der [README](../README.md)).
- Zahlen statt Adjektive. „Viele Alarme" ist keine Angabe, „126 CRITICAL" ist eine.
- Kurz. Ein AAR, der nicht gelesen wird, hat keinen Wert.