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:
co-authored by
Claude Fable 5
parent
70e81e2ff1
commit
92b448fe30
@@ -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).
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
+8
-1
@@ -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
|
||||
|
||||
+8
-1
@@ -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
|
||||
+8
-1
@@ -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
|
||||
+7
@@ -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,
|
||||
+7
@@ -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
|
||||
|
||||
@@ -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 1–7 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 1–7 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`,
|
||||
@@ -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
@@ -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, 30–45 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, M1–M4 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
|
||||
|
||||
@@ -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 (7–40 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 (alt→neu, 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())
|
||||
@@ -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,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.
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user