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.
|
nicht an der Lab-Verfügbarkeit hängen.
|
||||||
- **Nie direkt zu Gitea pushen** (der Mirror überschreibt per Force).
|
- **Nie direkt zu Gitea pushen** (der Mirror überschreibt per Force).
|
||||||
Landet doch ein Commit dort: Kanonisierungs-Verfahren in
|
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
|
- Einzige bewusste Ausnahme: der TURN-Rotations-CronJob schreibt nach
|
||||||
Gitea; der tägliche CI-Job `canonize_rotation` holt es zurück. Seine
|
Gitea; der tägliche CI-Job `canonize_rotation` holt es zurück. Seine
|
||||||
rote Pipeline **ist** der Alarm — es gibt bewusst keinen zweiten Meldeweg.
|
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
|
kanonische Autor-Identität. Historien-Rewrites nur mit
|
||||||
alt→neu-Zuordnung
|
alt→neu-Zuordnung
|
||||||
([ADR-0009](docs/adr/0009-commit-konventionen-und-historien-anonymisierung.md),
|
([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,
|
- ⚠️ Das schützt nur die Git-Historie; Plattform-Zeitstempel (Push,
|
||||||
Issues, Pipelines, Pakete) tragen die echte Uhrzeit (ADR-0009).
|
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
|
überschreibt ihn bei jedem Push per Force. Deshalb **nie direkt zu Gitea
|
||||||
pushen** — solche Commits gehen beim nächsten Mirror-Lauf verloren (Rettung:
|
pushen** — solche Commits gehen beim nächsten Mirror-Lauf verloren (Rettung:
|
||||||
`.patch` von Gitea ziehen + `git am`, siehe
|
`.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
|
**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
|
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) |
|
| `vision/` | Eine Vision je Linie: Community (axion1337.chat), Tool (ThreadNet), Plattform (Homelab) |
|
||||||
| `roadmap.md` | Linien, Meilenstein-Kandidaten, Kadenz — GitLab-Milestones halten den Stand |
|
| `roadmap.md` | Linien, Meilenstein-Kandidaten, Kadenz — GitLab-Milestones halten den Stand |
|
||||||
| `decisions/` | ADRs — Pflicht bei Architekturentscheidungen **und dauerhaften Ausnahmen** |
|
| `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 |
|
| `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](shared/branding.md) (Marke, Paletten, wo welches Theme eingestellt ist); offene Punkte sind Issues |
|
| `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)** —
|
Gelesen wird das alles auch gebündelt unter **[axionwiki.lab](https://axionwiki.lab)** —
|
||||||
dort stehen Plattform-Wiki, Homelab-Doku und dieses Repo nebeneinander
|
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 |
|
| [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 |
|
| [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`
|
# AAR — CVE-Pipeline `gitops#47`
|
||||||
|
|
||||||
**Datum:** 2026-08-01 · **Host/Stack:** CFGMON, `/opt/threadnet-operating/monitoring`
|
**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.
|
aus, `up -d` meldete `Running`, und ein SIGHUP-Reload lud klaglos den alten Inhalt.
|
||||||
|
|
||||||
Diese beiden Punkte sind als Verfahren festgehalten:
|
Diese beiden Punkte sind als Verfahren festgehalten:
|
||||||
[../deploy-uebergabe.md](../deploy-uebergabe.md).
|
[../deploy-uebergabe.md](../wiki/deployment/deploy-uebergabe.md).
|
||||||
|
|
||||||
## 5. Offen
|
## 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`)
|
# AAR — LABNET-02, CFGMON-Seite (Übergabe `sorb/management#2`)
|
||||||
|
|
||||||
**Datum:** 2026-08-01 · **Host/Stack:** CFGMON, WireGuard-Client gegen UDM
|
**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
|
quittiert und nichts bewirkt — ein stiller Fehlschlag, der erst beim ersten
|
||||||
Gateway-Test aufgefallen wäre.
|
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.
|
in der Praxis: Mengengerüst bzw. Verifikation dort, wo der Dienst liest.
|
||||||
|
|
||||||
## 5. Offen
|
## 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)
|
# AAR — LABNET-02, Lab-Seite (UDM/UniFi, Einzäunung und Abnahme)
|
||||||
|
|
||||||
**Datum:** 2026-08-01 · **Host/Stack:** MorninglightMountain (UDM Pro), UniFi Policy Engine
|
**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)
|
# 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
|
**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"
|
in den Skill-Beschreibungen **nicht verlässlich** — „Warm Sand · backgrounds"
|
||||||
findet sich bei einem Theme, dessen Showcase-Seite dunkel ist. Belastbar ist nur
|
findet sich bei einem Theme, dessen Showcase-Seite dunkel ist. Belastbar ist nur
|
||||||
`theme-showcase.pdf`: Seiten rendern, Hintergrundfarbe messen. Werte und Fallen
|
`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,
|
**Bestätigung des Musters aus Abschnitt 4.** Auch das war kein Analysefehler,
|
||||||
sondern eine **ungeprüfte Änderung** — dieselbe Wurzel wie Healthcheck, toter
|
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
|
# AAR — Refinement, Betrieb voranbringen, Git-Historie anonymisiert
|
||||||
|
|
||||||
**Datum:** 2026-08-09 · **Host/Stack:** git.lab, Gitea, K3s-Cluster (Authentik,
|
**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
|
# AAR — `@apo` konnte nicht telefonieren: fehlende Synapse-`profiles`-Zeile
|
||||||
|
|
||||||
**Datum:** 2026-08-11 · **Beteiligt:** sorb + Mac-Session · **Stack:** Synapse,
|
**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.
|
- Tunnel dauerhaft an: widerspricht dem Bedarfsfall-Prinzip ohne echten Gewinn.
|
||||||
- git.lab öffentlich exponieren: größte Angriffsfläche, klar verworfen.
|
- 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
|
- 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
|
docker-Gruppe geschieht, ist im Nachhinein nicht aus den üblichen
|
||||||
Protokollen rekonstruierbar.
|
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
|
(Befund 3, MEDIUM), erfasst als
|
||||||
[#14](https://git.lab/axion1337.chat/management/-/issues/14).
|
[#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
|
**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
|
> 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
|
> genau der Fehler, den die ADR-Pflicht verhindern soll, und wird hier benannt
|
||||||
> statt geglättet.
|
> statt geglättet.
|
||||||
@@ -61,7 +61,7 @@ Uhrzeit verschwindet.
|
|||||||
- **Alle SHAs im Bereich sind neu.** Verweise in Issues, Doku und Commit-Texten
|
- **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
|
zeigen ins Leere. Die Doku wurde nachgezogen (12 Stellen); für alles andere gibt
|
||||||
es die dauerhafte Zuordnungstabelle
|
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
|
- **Issue-Kommentare wurden bewusst NICHT umgeschrieben.** Eine Tabelle
|
||||||
nachzuschlagen ist zumutbar; nachträglich zu ändern, was jemand geschrieben hat,
|
nachzuschlagen ist zumutbar; nachträglich zu ändern, was jemand geschrieben hat,
|
||||||
beschädigt dieselbe Nachvollziehbarkeit ein zweites Mal.
|
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
|
Alt-Ansatz: `CLAUDE.md`, `roadmap.md`, `decisions/README.md` und die
|
||||||
tragenden Entscheidungen 0001, 0002, 0005, 0009, 0010,
|
tragenden Entscheidungen 0001, 0002, 0005, 0009, 0010,
|
||||||
[verfahren/refinement.md](../../verfahren/refinement.md),
|
[verfahren/refinement.md](../wiki/admin/refinement.md),
|
||||||
[verfahren/stillstandspruefung.md](../../verfahren/stillstandspruefung.md),
|
[verfahren/stillstandspruefung.md](../wiki/admin/stillstandspruefung.md),
|
||||||
`.gitlab-ci.yml`, Auszüge aus `hosts/`. Neckbeard v0.1.1: AGENTS.md,
|
`.gitlab-ci.yml`, Auszüge aus `hosts/`. Neckbeard v0.1.1: AGENTS.md,
|
||||||
WORKFLOW.md, ADR-0001…0004/0006, `schema.yaml`, `validate.py`,
|
WORKFLOW.md, ADR-0001…0004/0006, `schema.yaml`, `validate.py`,
|
||||||
`gen_status.py`, Schöpfungs-AAR, `docs/wiki/index.md`. Session-1-Daten
|
`gen_status.py`, Schöpfungs-AAR, `docs/wiki/index.md`. Session-1-Daten
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: admin
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# CFGMON
|
# CFGMON
|
||||||
|
|
||||||
Monitoring-Stack, Gitea und der Reverse Proxy für alles Öffentliche.
|
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).
|
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
|
*(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
|
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.)*
|
den damaligen Rückbau der Gitea-CI, nicht auf Dauer.)*
|
||||||
|
|
||||||
Betroffene Issues (werden bei der GitLab-Migrations-Planung umformuliert):
|
Betroffene Issues (werden bei der GitLab-Migrations-Planung umformuliert):
|
||||||
[ThreadNet-Web#2](https://rohana.axion1337.de/sorb/ThreadNet-Web/issues/2),
|
`ThreadNet-Web#2` (Gitea-Zählung, Tracker stillgelegt — verbindlich: Migrations-Fußtext im GitLab-Issue),
|
||||||
[threadnet-call#1](https://rohana.axion1337.de/sorb/threadnet-call/issues/1).
|
`threadnet-call#1` (Gitea-Zählung, Tracker stillgelegt).
|
||||||
|
|
||||||
**Nächster Schritt:** die drei manuellen Schritte oben, dann → erledigt.
|
**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**
|
**Status:** entschieden (2026-08-01, sorb) — **gleicher Bot (`@alerts`), eigener Raum**
|
||||||
`!YRJvcEbVXtRlUIkNld:axion1337.chat`. Umsetzungsplan inkl. CVE-Metriken/Grafana/
|
`!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`,
|
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
|
Fallback Alerts-Raum). ⬜ Rest: `@alerts` in den Raum **einladen** (Join wurde als
|
||||||
restricted abgelehnt — sorb), dann Deploy.
|
restricted abgelehnt — sorb), dann Deploy.
|
||||||
@@ -173,7 +179,7 @@ neuen Absender bauen.
|
|||||||
|
|
||||||
## CFGMON-12 — Gitea-Projektmetadaten nach GitLab umziehen/integrieren
|
## 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
|
✅ **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.
|
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 —
|
**Verworfen statt gefixt**: Limit-Anhebung/Swap wird bewusst nicht weiterverfolgt —
|
||||||
Build-CI zieht ins Homelab-GitLab um (siehe
|
Build-CI zieht ins Homelab-GitLab um (siehe
|
||||||
[CFGMON-11](#cfgmon-11--gitea-ci-rückbau-nach-gitlab-umzug)), CFGMON bleibt bei leichten
|
[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
|
### 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`-
|
(`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
|
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
|
[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.
|
(dieselbe falsche Prämisse) entsprechend korrigiert/geschlossen.
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: admin
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# game
|
# game
|
||||||
|
|
||||||
Pterodactyl- / Gameserver-Host.
|
Pterodactyl- / Gameserver-Host.
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: admin
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# matrix
|
# matrix
|
||||||
|
|
||||||
Matrix-Homeserver (Element Server Suite / Synapse) + K3s-Single-Node-Cluster, GitOps-verwaltet.
|
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,
|
**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
|
Flux hat gepruned — DaemonSet/Service/Pod sind weg, Host-Metriken kommen unverändert
|
||||||
vom systemd-Exporter. Volle Diagnose:
|
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>
|
<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** —
|
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`),
|
dieselbe Härtung wie bei `selendis` anwenden (Null-MX, `v=spf1 -all`, `_dmarc p=reject`),
|
||||||
`autodiscover.matrix` kann ebenfalls weg. Damit ist auch
|
`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
|
**Separat davon** (andere Domain-Ebene, kein Widerspruch): auf diesem Host läuft seit
|
||||||
2026-07-30 ein eigener Mailversand für Host-Wartungsbenachrichtigungen
|
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:
|
Neuer, eigenständiger Mechanismus auf diesem Host, außerhalb von Flux/GitOps (Details:
|
||||||
`docs/deployment-guides/07-host-maintenance-notifications.md` im gitops-Repo,
|
`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
|
`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
|
(`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)
|
anstehenden Paket-Updates per Mail **und** Matrix (Thread-Reply im `wartung`-Raum)
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: admin
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# Overmind
|
# Overmind
|
||||||
|
|
||||||
Homelab-Host: GitLab (Dokploy-verwaltet) + CI-Runner. **Nur im Lab erreichbar** —
|
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.
|
Gitea bleibt: Flux-Source (via Mirror beliefert), Registry, Packages.
|
||||||
**Issues nicht mehr** — die sind am 2026-08-01/02 nach git.lab gewandert
|
**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
|
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.
|
mit LABNET-03 zurückgebaut: beide umgezogen (#25, #26), der Tracker ist leer.
|
||||||
**Ohne Ausnahme: Issues leben auf git.lab.**
|
**Ohne Ausnahme: Issues leben auf git.lab.**
|
||||||
|
|
||||||
*(Bis 2026-08-01 stand hier „Backlogs (dieses Repo, ungespiegelt)" — das Repo heißt
|
*(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,
|
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
|
## 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
|
# Refinement und Retro — die Termine des Frameworks
|
||||||
|
|
||||||
Kanban braucht wenige, aber verlässliche Termine, sonst verkommt das Board zur
|
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.
|
steht, wie sie ablaufen.
|
||||||
|
|
||||||
## Termine (festgelegt im Struktur-Workshop, 2026-08-06)
|
## 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
|
Grundlage sind die AARs des Monats — sie sind die Retro-Vorbereitung, nicht ihr
|
||||||
Ersatz.
|
Ersatz.
|
||||||
|
|
||||||
Ergebnisse werden unter [`retro/`](retro/) abgelegt, eine Datei je Termin. Die
|
Ergebnisse werden unter [`docs/sources/protokolle/`](../../sources/protokolle/retro-2026-08-09.md) abgelegt, eine Datei je Termin. Die
|
||||||
erste: [2026-08-09](retro/2026-08-09.md).
|
erste: [2026-08-09](../../sources/protokolle/retro-2026-08-09.md).
|
||||||
|
|
||||||
## AAR (anlassbezogen)
|
## AAR (anlassbezogen)
|
||||||
|
|
||||||
Nach jedem Deploy mit Übergabe und nach jedem Incident, Vorlage in
|
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
|
Wissensspeicher: Was war das Ergebnis, welche Befunde, was hat die Eingrenzung
|
||||||
ermöglicht, welche Lehren, was bleibt offen. **Offene Punkte aus einem AAR werden
|
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
|
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
|
Mehrere Claude-Sessions arbeiten parallel (Mac-Session, Host-Sessions auf CFGMON
|
||||||
und Overmind). Für sie gilt:
|
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.
|
sind über den Gitea-Mirror von überall lesbar.
|
||||||
- Arbeit zwischen Sessions läuft über das
|
- 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.
|
im Issue, nicht im Chat.
|
||||||
- Was eine Session lernt, gehört ins Repo (AAR/ADR/Doku), nicht nur in ihr
|
- Was eine Session lernt, gehört ins Repo (AAR/ADR/Doku), nicht nur in ihr
|
||||||
Gedächtnis — Sessions gehen verloren, Repos nicht.
|
Gedächtnis — Sessions gehen verloren, Repos nicht.
|
||||||
@@ -1,7 +1,13 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: admin
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# Stillstandsprüfung
|
# Stillstandsprüfung
|
||||||
|
|
||||||
Sucht Dinge, die **leise aufgehört haben zu funktionieren**. Beschlossen in der
|
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
|
## Warum es sie gibt
|
||||||
|
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: admin
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# Textbausteine für Sessions
|
# Textbausteine für Sessions
|
||||||
|
|
||||||
Kurze, kopierbare Blöcke, die man einer Claude-/Agenten-Session voranstellt.
|
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
|
Session liest sie nur, wenn sie dazu aufgefordert wird. Diese Bausteine sind die
|
||||||
Aufforderung.
|
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
|
> **Dieser Baustein ist zugleich unsere Definition of Done für Änderungen ohne
|
||||||
> Deploy** (festgelegt 2026-08-06). Für Deployments gilt weiterhin das
|
> 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
|
> Bewusst kein eigenes DoD-Dokument: Es wäre die dritte Fassung derselben Regeln
|
||||||
> und damit die dritte, die driften kann.
|
> und damit die dritte, die driften kann.
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
type: wiki-page
|
||||||
|
area: architecture
|
||||||
|
related: []
|
||||||
|
---
|
||||||
|
|
||||||
# Branding: Marke, Farben, Bildsprache
|
# Branding: Marke, Farben, Bildsprache
|
||||||
|
|
||||||
Übergreifend, weil dieselben Farben in mehreren Oberflächen eingestellt werden
|
Ü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
|
Hier im `management`-Repo, weil es als einziges der beteiligten Repos
|
||||||
**gespiegelt** ist und jede Werkzeugentscheidung überlebt: Wird das
|
**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.
|
abgeräumt oder ein Client ersetzt, bleiben Marke und Paletten bestehen.
|
||||||
|
|
||||||
## Bildmarke
|
## Bildmarke
|
||||||
@@ -20,7 +26,7 @@ Windows und Linux, Web-Icons.
|
|||||||
⚠️ Beim Ableiten den **transparenten Rand wegschneiden** und mit `resize()`
|
⚠️ Beim Ableiten den **transparenten Rand wegschneiden** und mit `resize()`
|
||||||
skalieren, nicht mit `thumbnail()` — Letzteres verkleinert nur und lässt das Motiv
|
skalieren, nicht mit `thumbnail()` — Letzteres verkleinert nur und lässt das Motiv
|
||||||
in großen Icons als Briefmarke zurück (real passiert, siehe
|
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
|
⚠️ **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ß
|
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)
|
# Lab-Netzwerk (Heimnetz: Fritzbox + UDM Pro)
|
||||||
|
|
||||||
Themen rund um das Homelab-Netz selbst — Router-Kaskade, VLANs, VPN-Zugänge.
|
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
|
der Mac. Kaskade: **Fritzbox (WAN) → UDM Pro**, kein Doppel-NAT, statische
|
||||||
Route in der Fritzbox für das Lab-VLAN.
|
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 |
|
| Zugang | Server | Port | Tunnelnetz | Zweck |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| Roadwarrior „Thore" | UDM | 51840 | 10.58.74.0/24 | Handy/MacBook ins Lab (LABNET-01) |
|
| 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`
|
### 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.
|
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
|
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
|
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
|
Tunnel überhaupt auf welchem Port liegt, findet es nur hier. Deshalb hält dieses
|
||||||
Dokument einen Kurzüberblick vor — Ports, Tunnelnetze, Zweck — und nichts
|
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 |
|
| Issue | Thema | Stand |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| [#11](https://git.lab/axion1337.chat/management/-/issues/11) | LABNET-01-Rest — MacBook-WireGuard-Profil | geschlossen |
|
| [#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 |
|
| [#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
|
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
|
# DNS-Zone `axion1337.de` und Mail-Policy
|
||||||
|
|
||||||
Übergreifend, weil die Zone alle Hosts abdeckt und die Mail-Policy sich nicht pro
|
Ü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
|
# Verfahren: Deploy-Übergabe
|
||||||
|
|
||||||
Für die Konstellation „einer baut, ein anderer rollt aus". Zweck ist nicht mehr
|
Für die Konstellation „einer baut, ein anderer rollt aus". Zweck ist nicht mehr
|
||||||
Prozess, sondern **weniger Rückfragen und weniger stille Fehlschläge**.
|
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
|
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
|
## 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*).
|
(`.gitlab/issue_templates/Deploy-Übergabe.md`, im Feld *Description template*).
|
||||||
2. Wer ausrollt, arbeitet die Prüfliste unten ab und deployt.
|
2. Wer ausrollt, arbeitet die Prüfliste unten ab und deployt.
|
||||||
3. Wer ausrollt, hängt den **AAR** als Kommentar an dasselbe Issue
|
3. Wer ausrollt, hängt den **AAR** als Kommentar an dasselbe Issue
|
||||||
(Vorlage: [aar-vorlage.md](aar-vorlage.md)). Bei Befunden ab MEDIUM
|
(Vorlage: [docs/aar/template.md](../../aar/template.md)). Bei Befunden ab MEDIUM
|
||||||
zusätzlich als Datei unter [aar/](aar/).
|
zusätzlich als Datei unter `docs/aar/`.
|
||||||
|
|
||||||
## Die vier Punkte, die den Unterschied machen
|
## 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
|
## Prüfliste für den Ausrollenden
|
||||||
|
|
||||||
|
<!-- pruefe-prosa:ok (Checkliste des Verfahrens, keine offene Aufgabe) -->
|
||||||
- [ ] Diff gelesen, nicht nur die Beschreibung
|
- [ ] Diff gelesen, nicht nur die Beschreibung
|
||||||
- [ ] Mengengerüst plausibel? Bei Zweifel an einer Stichprobe selbst messen
|
- [ ] Mengengerüst plausibel? Bei Zweifel an einer Stichprobe selbst messen
|
||||||
- [ ] Configs mit den jeweiligen Werkzeugen validiert (`promtool`, `amtool`,
|
- [ ] 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
|
# Vision: aXion1337.chat — die Community
|
||||||
|
|
||||||
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
|
> **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
|
# Vision: Homelab — die Plattform
|
||||||
|
|
||||||
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
|
> **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
|
# Vision: ThreadNet — das Tool
|
||||||
|
|
||||||
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
|
> **Getragene Fassung** — geschärft im Struktur-Workshop am 2026-08-06 (#17).
|
||||||
+3
-3
@@ -63,12 +63,12 @@
|
|||||||
|
|
||||||
### Community (axion1337.chat)
|
### 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.
|
- Vision-Verfeinerung im ersten Refinement.
|
||||||
|
|
||||||
## Kadenz
|
## 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
|
- **Refinement** (gemeinsame Session, ~wöchentlich, 30–45 min): Board von rechts
|
||||||
nach links, WIP-Limit prüfen, nachziehen, Entscheidungsvorlagen.
|
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
|
am 2026-08-06 — Visionen geschärft, M1–M4 angelegt, Board gesichtet, Kadenz und
|
||||||
Arbeitsteilung festgelegt. Daraus entstanden ADR-0008 (Agenten-Sessions laufen
|
Arbeitsteilung festgelegt. Daraus entstanden ADR-0008 (Agenten-Sessions laufen
|
||||||
root-äquivalent), die Textbausteine in
|
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).
|
(Refinement sonntags, Retro am ersten des Monats).
|
||||||
|
|
||||||
Seither gilt zusätzlich: **Der Titel trägt keine Priorität**, und **jedes Issue
|
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