From a4f4696b0ddaadf6a40396512a091984bfc98735 Mon Sep 17 00:00:00 2001 From: Micha Date: Thu, 11 Jun 2026 07:14:11 +0200 Subject: [PATCH] docs: anchor documentation rules, rebuild index, archive proposal - REPO_MAP.md: replace Arbeitsregel with 8 binding documentation rules (one fact one home, done leaves the working copy, file types, header convention, quarterly gardening) - WORKFLOW.md Dokumentationspflicht and CLAUDE.md aligned to the rules - docs/README.md index rebuilt for the consolidated state - H drive docs merged into ops/h-drive-nearline/README.md (scheduled task + no-MIR rule added); docs/H_DRIVE_NEARLINE_PULL.md removed - implemented proposal archived to docs/archive/2026/ Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 3 +- README.md | 1 + docs/CAPACITY_AND_LIFECYCLE.md | 2 +- docs/DECISIONS.md | 2 +- docs/H_DRIVE_NEARLINE_PULL.md | 131 ------------------ docs/README.md | 39 ++++-- docs/REPO_MAP.md | 13 +- docs/STORAGE_LAYOUT.md | 2 +- docs/WORKFLOW.md | 8 +- .../homelab-doku-optimierung-2026-06-11.md} | 2 +- docs/archive/README.md | 1 + ops/h-drive-nearline/README.md | 9 ++ 12 files changed, 60 insertions(+), 153 deletions(-) delete mode 100644 docs/H_DRIVE_NEARLINE_PULL.md rename docs/{homelab-doku-optimierung.md => archive/2026/homelab-doku-optimierung-2026-06-11.md} (99%) diff --git a/CLAUDE.md b/CLAUDE.md index 8ccf8d8..5a6166d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # Claude Code Context - Homelab Infra -Stand: 2026-05-04 +Stand: 2026-06-11 Dieses Repository ist die GitOps-Quelle fuer das KalliLab CORE Homelab auf einem Unraid-Host. Es verwaltet Docker-Compose-Stacks fuer Core-Dienste, Security, Infrastruktur, Apps, Operations-Tools, Host-nahe Dienste und Traefik. Gitea Online ist die operative Quelle der Wahrheit; Komodo konsumiert den Git-Stand und deployed daraus. @@ -123,6 +123,7 @@ Standard-Rollback ist ein Ruecknahme-Commit oder gezielte Rueckaenderung mit Pus ## Arbeitsweise fuer Claude - Erst lesen, dann handeln. +- Doku-Regeln aus `docs/REPO_MAP.md` einhalten: ein Fakt, ein Zuhause. Status nur in `docs/MASTER_TODO.md`, Entscheidungen nur in `docs/DECISIONS.md`, Erledigtes verlaesst die Arbeitskopie. - Bei Unsicherheit Zustand messen, nicht erraten. - Aenderungen klein halten und nur den betroffenen Bereich anfassen. - Bestehende Doku und Repo-Konventionen bevorzugen. diff --git a/README.md b/README.md index d144841..520e1c6 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Bei Hardware-, Netzwerk-, Provider- oder Kapazitaetsfragen zusaetzlich: ## Status +- Offene Punkte stehen ausschliesslich in `docs/MASTER_TODO.md`; Entscheidungen mit Begruendung in `docs/DECISIONS.md`. - Komodo ist der primaere und einzige produktive Stack-Manager. - Komodo bleibt bewusst bei nativer Authentifizierung; zentrale Traefik-Auth wird dort nicht pauschal vorgeschaltet. - Portainer CE ist abgeschaltet und kein Teil des aktiven Betriebs mehr. diff --git a/docs/CAPACITY_AND_LIFECYCLE.md b/docs/CAPACITY_AND_LIFECYCLE.md index 31c7512..0ec42e9 100644 --- a/docs/CAPACITY_AND_LIFECYCLE.md +++ b/docs/CAPACITY_AND_LIFECYCLE.md @@ -59,7 +59,7 @@ du -sh /mnt/user/documents /mnt/user/photos /mnt/user/media /mnt/user/backups 2> | Pull der Gitea-Bundles aus `/mnt/user/backups/git-bundles/gitea` | identisch | Bundles sind klein und schnell synchronisiert | | Pull des Unraid-Flash-Artefakts `unraid-flash-config.tar.gz` | bewusst nicht im H:/ Scope | Restore-Quelle bleibt Hetzner-Borg; Flash-Config wie Secret behandeln | -Der konkrete Pull-Pfad ist in `docs/H_DRIVE_NEARLINE_PULL.md` und `ops/h-drive-nearline/pull-critical-backups.ps1` produktiv. Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit 2026-05-28 taeglich 05:30. +Der konkrete Pull-Pfad ist in `ops/h-drive-nearline/README.md` und `ops/h-drive-nearline/pull-critical-backups.ps1` produktiv. Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit 2026-05-28 taeglich 05:30. | Abgrenzung | Bewertung | Begruendung | |---|---|---| diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 2823ade..ab766bc 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -13,7 +13,7 @@ in `HOMELAB_ARCHITECTURE_MASTER_V2.md` §13, `docs/MASTER_TODO.md` (Geparkt), ## 2026-06-11 — Doku-Konsolidierung: ein Fakt, ein Zuhause -**Entscheidung:** Die Dokumentation wird nach `docs/homelab-doku-optimierung.md` (archiviert) konsolidiert: `MASTER_TODO.md` ist die einzige Statusliste, dieses Register die einzige Entscheidungssammlung, `docs/archive/` nimmt abgeschlossene Snapshots auf, Erledigtes verlaesst die Arbeitskopie. Keine Ordner-Restruktur des Bestands. +**Entscheidung:** Die Dokumentation wird nach `docs/archive/2026/homelab-doku-optimierung-2026-06-11.md` konsolidiert: `MASTER_TODO.md` ist die einzige Statusliste, dieses Register die einzige Entscheidungssammlung, `docs/archive/` nimmt abgeschlossene Snapshots auf, Erledigtes verlaesst die Arbeitskopie. Keine Ordner-Restruktur des Bestands. **Kontext:** 74 Markdown-Dateien / ~9.400 Zeilen; einzelne Sachverhalte waren an 6–9 Stellen dokumentiert; vier parallele Statuslisten. **Review-Trigger:** Quartals-Gaertnern (siehe `docs/REPO_MAP.md` Doku-Regeln). diff --git a/docs/H_DRIVE_NEARLINE_PULL.md b/docs/H_DRIVE_NEARLINE_PULL.md deleted file mode 100644 index 48baaa2..0000000 --- a/docs/H_DRIVE_NEARLINE_PULL.md +++ /dev/null @@ -1,131 +0,0 @@ -# H:/ Nearline Pull - -Status: **produktiv** (2026-05-28). Erster echter Lauf 2026-05-27 20:45 erfolgreich. Windows Scheduled Task `KalliLab H Drive Nearline Pull` taeglich 05:30 ist seit 2026-05-28 aktiv. - -## Erstlauf-Befund 2026-05-27 - -- Erster `-WhatIf`-loser Lauf: 18 Borg-Dump-Files erfolgreich gepullt, 4 unraid-flash-config-Files und 10 Gitea-Bundle-Files blockiert (`Zugriff verweigert`). -- Ursache: Bundles wurden mit `chmod 600` geschrieben, Flash-Config bewusst `0600 root:root`, Filebrowser-Dump erbte 0640. Der SMB-Read-Share auf dem Operator-PC liest mit unprivilegierten Rechten, kein root. -- Fixes im selben Sprint: - - `ops/borg-ui/scripts/gitea-bundle-mirror.sh` schreibt Bundles und Sidecars jetzt 0644 (Bundle-Inhalt = Git-Historie, ohne Secrets durch `.gitignore`). - - `ops/borg-ui/scripts/pre-backup-dumps.sh` setzt alle Dumps via `atomic_write` per Default auf 0644; `unraid-flash-config.*` bleibt explizit 0600. - - `ops/h-drive-nearline/pull-critical-backups.ps1` excluded die `unraid-flash-config.*`-Familie ueber `/XF`, damit Flash-Config bewusst nicht in den Nearline-Scope kommt. -- Zweiter Lauf (nach Fixes): beide Robocopy-Jobs Exit-Code 1, **19 Borg-Dumps + 10 Gitea-Bundle-Files** auf H:/. - -## Befund 2026-06-01 - -- Der Scheduled Task um 05:30 kopierte die aktuellen Dumps, brach aber mit Robocopy Exit-Code 8 ab, weil im Dump-Root alte `*-pre-*` Dateien und Migration-/Cutover-Verzeichnisse mit restriktiven Rechten lagen. -- Fix: `ops/h-drive-nearline/pull-critical-backups.ps1` kopiert fuer `borg-dumps-latest` nur noch die kuratierte Pflichtdatei-Liste und schliesst Migration-/Cutover-Verzeichnisse aus. -- Manueller Kontrolllauf 2026-06-01 08:25 erfolgreich: `borg-dumps-latest` Exit-Code 0, `gitea-bundles` Exit-Code 1 (Robocopy-Erfolg mit Kopien), Report `H:\kallilab-nearline-backups\_reports\nearline-pull-2026-06-01-082553.md`. - -## Zweck - -`H:/` ist eine zweite lokale Nearline-Kopie fuer die wichtigsten Restore-Artefakte. Es ersetzt weder Hetzner/Borg noch ein echtes Off-site-/Airgap-Ziel, reduziert aber das Risiko, dass ein lokaler Restore nur vom Unraid-Array abhaengt. - -## Quelle und Ziel - -| Zweck | Quelle | Ziel | -|---|---|---| -| Aktuelle kuratierte Dumps ohne Flash-Backup | `\\192.168.178.58\backups\borg\dumps\latest` | `H:\kallilab-nearline-backups\borg-dumps\latest` | -| Gitea-Bundles | `\\192.168.178.58\backups\git-bundles\gitea` | `H:\kallilab-nearline-backups\git-bundles\gitea` | - -Das Skript kopiert bewusst **nicht** mit `/MIR` und loescht keine Dateien auf `H:/`. Alte Artefakte duerfen dort erst nach manueller Sichtpruefung geloescht werden. - -Der Borg-Dumps-Job ist eine Whitelist der aktuellen Nearline-Pflichtartefakte. Einmalige Migrations-Sicherungen, Pre-Major-Snapshots und Redis-Cutover-Verzeichnisse bleiben ueber Borg/Hetzner abgedeckt, sind aber kein H:/-Nearline-Pflichtbestand. - -## Skript - -```powershell -powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf -``` - -Echter Lauf: - -```powershell -powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -``` - -Reports landen unter: - -```text -H:\kallilab-nearline-backups\_reports -``` - -Robocopy-Logs landen unter: - -```text -H:\kallilab-nearline-backups\_logs -``` - -## Geplanter Schedule - -Empfohlen: taeglich 05:30 Uhr, nach dem Borg-Dump-Fenster um ca. 04:00 Uhr. - -Aktiv seit 2026-05-28. Tatsaechlicher Register-Befehl (RunLevel-Enum-Wert ist `Limited`, nicht `LeastPrivilege`): - -```powershell -$Action = New-ScheduledTaskAction ` - -Execute "powershell.exe" ` - -Argument "-NoProfile -ExecutionPolicy Bypass -File `"G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1`"" - -$Trigger = New-ScheduledTaskTrigger -Daily -At 05:30 - -$Settings = New-ScheduledTaskSettingsSet ` - -AllowStartIfOnBatteries ` - -DontStopIfGoingOnBatteries ` - -StartWhenAvailable ` - -ExecutionTimeLimit (New-TimeSpan -Hours 2) - -Register-ScheduledTask ` - -TaskName "KalliLab H Drive Nearline Pull" ` - -Action $Action ` - -Trigger $Trigger ` - -Settings $Settings ` - -Description "Copies critical KalliLab restore artifacts from Unraid SMB backup share to H:/ nearline disk." ` - -RunLevel Limited -``` - -Status pruefen: - -```powershell -Get-ScheduledTask -TaskName "KalliLab H Drive Nearline Pull" | Format-List TaskName, State -Get-ScheduledTaskInfo -TaskName "KalliLab H Drive Nearline Pull" | Format-List LastRunTime, LastTaskResult, NextRunTime, NumberOfMissedRuns -``` - -Manueller Trigger zum Testen: - -```powershell -Start-ScheduledTask -TaskName "KalliLab H Drive Nearline Pull" -``` - -Verhalten: - -- Laeuft als angemeldeter User (`RunLevel Limited`); wenn der PC abgemeldet ist, wartet der Task bis zur naechsten Anmeldung (`StartWhenAvailable`). -- Akku-Modus blockiert nicht (`AllowStartIfOnBatteries`). -- Maximale Laufzeit 2 h, danach wird der Task abgebrochen. - -## Erfolgscheck - -Nach einem echten Lauf muessen mindestens diese Artefakte unter `H:\kallilab-nearline-backups` liegen: - -- `borg-dumps\latest\immich.dump` -- `borg-dumps\latest\komodo-mongo.archive.gz` -- `borg-dumps\latest\postgresql17-paperless.dump` -- `borg-dumps\latest\postgresql17-mailarchiver.dump` -- `borg-dumps\latest\nextcloud.dump` -- `borg-dumps\latest\mealie.dump` -- `borg-dumps\latest\gitea.sqlite.dump` -- `borg-dumps\latest\vaultwarden.sqlite.dump` -- `git-bundles\gitea\latest-report.md` -- `git-bundles\gitea\micha\*.bundle` - -Bewusst **nicht** im Nearline-Scope: - -- `unraid-flash-config.tar.gz` (hostseitig 0600 root:root; Restore-Quelle bleibt das Hetzner-Borg-Repo, siehe `docs/RESTORE_MATRIX.md` Tier 1 Unraid OS Flash). - -## Schutzregeln - -- Kein CIFS-/SMB-Hard-Mount von `H:/` auf Unraid. -- Kein Borg-Repo direkt auf `H:/` ueber SMB. -- Kein `/MIR` und kein automatisches Loeschen auf `H:/`. -- Flash-Backup wie Secret behandeln; `H:/` bleibt lokaler Operator-Datentraeger. diff --git a/docs/README.md b/docs/README.md index d57b24b..0e3fcb0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,8 +1,13 @@ # Documentation Index -Stand: 2026-06-05 +Typ: Einstieg/Index · Stand: 2026-06-11 · Status: aktiv -Diese Datei trennt aktive Betriebsdokumentation von historischer Arbeitsdoku. Neue operative Dokumente duerfen nur in `docs/` liegen, wenn sie heute als Einstieg, Runbook, Inventar oder offene Arbeitsliste gebraucht werden. Erledigte Audits, Chat-Handoffs, Prompt-Dateien und abgeschlossene Plaene bleiben in der Git-Historie, aber nicht als dauerhafte Arbeitskopie. +Diese Datei trennt aktive Betriebsdokumentation von historischer Arbeitsdoku. +Neue operative Dokumente duerfen nur in `docs/` liegen, wenn sie heute als +Einstieg, Runbook, Inventar, Entscheidung oder Statusliste gebraucht werden. +Abgeschlossene Audits, Drills und Plaene wandern nach `archive/` oder werden +geloescht (Git-Historie ist das Archiv). Verbindliche Doku-Regeln: +`REPO_MAP.md` Abschnitt "Doku-Regeln". ## Pflicht-Einstieg @@ -11,18 +16,22 @@ Diese Datei trennt aktive Betriebsdokumentation von historischer Arbeitsdoku. Ne | `../README.md` | kurzer Repo-Einstieg | | `../HOMELAB_ARCHITECTURE_MASTER_V2.md` | Architektur-Quelle fuer Netz, Zugriff und Ausnahmen | | `WORKFLOW.md` | verbindlicher GitOps-/No-Drift-Ablauf | -| `REPO_MAP.md` | technische Landkarte des Repositories | +| `REPO_MAP.md` | technische Landkarte des Repositories + Doku-Regeln | | `SERVICE_CATALOG.md` | produktiver Service-Katalog | +| `DECISIONS.md` | Entscheidungs-Register (ADR-light) | +| `MASTER_TODO.md` | einzige operative Statusliste | ## Betrieb und Recovery | Datei | Zweck | |---|---| | `DISASTER_RECOVERY.md` | Wiederanlauf nach Host-/Systemausfall | -| `RESTORE_MATRIX.md` | Restore-Quellen, Dumps, Secrets und Smoke-Tests je Dienst | +| `RESTORE_MATRIX.md` | Restore-Quellen, Dumps, Secrets, Smoke-Tests und Test-Reifegrad je Dienst | | `SERVICES_RECOVERY.md` | Gitea-/Komodo-/Services-Bootstrap | | `ROLLBACK.md` | Rueckweg bei GitOps-/Deploy-Fehlern | | `GITOPS_DRIFT_RUNBOOK.md` | Pflichtmatrix bei Drift zwischen Git, Komodo, Docker und Host | +| `DR_WORKSTATION_SETUP.md` | DR-Gaming-PC einrichten (WSL2 + Borg-Client + SSH-Keys) | +| `../ops/restore-tests/README.md` | Restore-Test-Betrieb, Skripte und Kadenz | ## Inventare und Policies @@ -31,12 +40,12 @@ Diese Datei trennt aktive Betriebsdokumentation von historischer Arbeitsdoku. Ne | `STORAGE_LAYOUT.md` | verbindliche Storage-/Share-/Pfad-Regeln | | `SECRETS_MAP.md` | Secret-Namen, Speicherorte und Einbindungsarten ohne Werte | | `AUTHELIA_OIDC_PLAN.md` | Plan & Runbook fuer app-uebergreifendes SSO via Authelia OIDC | -| `HARDWARE_INVENTORY.md` | Host-, Disk-, SMART-, USV- und Power-Baseline | +| `HARDWARE_INVENTORY.md` | Host-, Disk-, SMART- und Power-Baseline | | `NETWORK_INVENTORY.md` | Router, DNS, Tailscale, Portfreigaben und Netzthemen | | `GUEST_IOT_NETWORK.md` | Sicherer Ablauf fuer FRITZ!Box-Gastnetz / IoT-Isolation | -| `EXTERNAL_DEPENDENCIES.md` | Provider, Konten und externe Abhaengigkeiten | +| `EXTERNAL_DEPENDENCIES.md` | Provider, Konten, DR-Workstation-Kit und externe Abhaengigkeiten | | `EXTERNAL_OPERATOR_RUNBOOK.md` | Hetzner-/Borg-/FRITZ!Box-Betreibercheck | -| `CAPACITY_AND_LIFECYCLE.md` | Kapazitaet, Wachstum und Upgrade-Trigger | +| `CAPACITY_AND_LIFECYCLE.md` | Kapazitaet, Wachstum, Upgrade-Trigger, H:/-Nearline-Einordnung | ## Monitoring und Automatisierung @@ -44,14 +53,20 @@ Diese Datei trennt aktive Betriebsdokumentation von historischer Arbeitsdoku. Ne |---|---| | `ALERT_RULES.md` | Prometheus-/ntfy-Regeln und Handlungslogik | | `RENOVATE.md` | Self-hosted Renovate gegen Gitea | -| `H_DRIVE_NEARLINE_PULL.md` | Windows-H:/ Nearline-Pull fuer kritische Restore-Artefakte | +| `runbooks/komodo-bulk-deploy-dns.md` | Bulk-Deploy-Pulls scheitern an DNS bei AdGuard-Recreate | +| `../ops/h-drive-nearline/README.md` | Windows-H:/ Nearline-Pull fuer kritische Restore-Artefakte | -## Nutzer- und Planungsdoku +## Nutzer- und Statusdoku | Datei | Zweck | |---|---| | `FAMILY_ONBOARDING.md` | familienverstaendliche Nutzungsdoku | -| `MASTER_TODO.md` | zentrale operative Master-To-do-Liste ueber alle Bereiche | -| `AI_CONTEXT.md` | kompakter Kontext fuer KI-Agenten | +| `AI_CONTEXT.md` | kompakter Kontext fuer KI-Agenten (Regeln + Pointer, kein Status) | +| `homelab-optimierung.md` | technisches Optimierungs-Assessment 2026-06-10 (offene Empfehlungen) | -Windows-Neuaufsetzen-Dokumente liegen nicht mehr in `docs/`, sondern im fachlich passenden Ordner `../ops/windows-reinstall/docs/`. +## Archiv + +Abgeschlossene Snapshots, Drills und Audits: `archive/README.md`. +Windows-Neuaufsetzen-Doku (Projekt abgeschlossen) liegt ebenfalls dort; +aktiv geblieben sind nur Veeam-Baseline und Laufwerksstruktur unter +`../ops/windows-reinstall/`. diff --git a/docs/REPO_MAP.md b/docs/REPO_MAP.md index 40b821e..00b9ef0 100644 --- a/docs/REPO_MAP.md +++ b/docs/REPO_MAP.md @@ -51,8 +51,13 @@ Details gilt immer die betroffene Compose-Datei oder das jeweilige Runbook. | `services/authelia-diff.sh` | Authelia ACL Repo-zu-Host-Vergleich | | `ops/h-drive-nearline/pull-critical-backups.ps1` | H:/ Nearline-Pull | -## Arbeitsregel +## Doku-Regeln -Neue Doku nur anlegen, wenn sie dauerhaft als Runbook, Inventar oder Restliste -gebraucht wird. Einmalige Audits, Prompt-Kopien und lange Verlaufsprotokolle -gehoeren in Git-Commits, nicht als neue Markdown-Dateien. +1. **Ein Fakt, ein Zuhause.** Status -> `docs/MASTER_TODO.md`; Entscheidungen -> `docs/DECISIONS.md`; Zielbild -> `HOMELAB_ARCHITECTURE_MASTER_V2.md`/Inventare/`SERVICE_CATALOG`; Ablauf -> genau ein Runbook; Beleg -> Host-Report (`/mnt/user/backups/restore-reports/`) oder Git-Commit. Alle anderen Stellen verlinken statt kopieren. +2. **Erledigt = raus aus der Arbeitskopie.** Abgeschlossene Plaene, Sprints, Audits und Drills nach `docs/archive/` (Belege mit Referenzwert) oder loeschen (Sprint-Boards, erledigte Listen) - Git ist das Archiv. +3. **Neue Datei nur mit klarem Typ:** Einstieg/Index, Architektur, Inventar/Referenz, Runbook, Entscheidung, Status oder befristeter Snapshot. Sonst ist es ein Eintrag in einer bestehenden Datei. +4. **Done-Eintraege max. 3 Zeilen**, Details in Commit/Report; Kurzlog in `MASTER_TODO` max. 5 Eintraege. +5. **Datum im Dateinamen nur fuer Snapshots**; datierte Dateien im `docs/`-Root sind per Definition Aufraeum-Kandidaten. +6. **Index-Pflicht:** jede neue/geloeschte Doku-Datei aktualisiert `docs/README.md` im selben Commit. +7. **Quartals-Gaertnern (~15 min):** Datiertes archivieren, Done-/Review-Logs kuerzen, tote Links pruefen. +8. **Kopfzeile je Dokument:** `Typ: ... · Stand: YYYY-MM-DD · Status: ...`. Bestandsnamen (SCREAMING_SNAKE) bleiben; neue Dateien in Unterordnern in kebab-case. diff --git a/docs/STORAGE_LAYOUT.md b/docs/STORAGE_LAYOUT.md index 998168f..2a48cfb 100644 --- a/docs/STORAGE_LAYOUT.md +++ b/docs/STORAGE_LAYOUT.md @@ -42,7 +42,7 @@ Es ist **vor** jeder Storage- oder Compose-Änderung zu lesen. Wenn ein neuer St | Disk1 (Array) | WDC WD60EFAX-68JH4N1 (`WD-WX32D90PC0V0`) | **XFS** auf `md1p1` | 5.5T nutzbar | Nutzdaten, Backups, Services | NTFS-zu-XFS-Migration Phase 2 abgeschlossen am 2026-05-25 | | Parity | TOSHIBA HDWG480 (`2460A03VFA3H`) | — (keine FS) | 7.3T | Redundanz für Array | Unverändert | | Boot | Samsung Flash Drive (`0375125090000587`) | FAT32 | 59.8G | Unraid-OS, Konfiguration | Regelmäßig per Flash-Backup gesichert | -| Externe Backup-Platte | H:/ `Externe HDD` am Windows-PC | NTFS | 8.0T | Nearline-Pull-Ziel für kritische Restore-Artefakte | Kein Off-site-/Airgap-Ersatz; Pull-Workflow in `docs/H_DRIVE_NEARLINE_PULL.md` | +| Externe Backup-Platte | H:/ `Externe HDD` am Windows-PC | NTFS | 8.0T | Nearline-Pull-Ziel für kritische Restore-Artefakte | Kein Off-site-/Airgap-Ersatz; Pull-Workflow in `ops/h-drive-nearline/README.md` | Physikalische Basisdaten sind aus `docs/HARDWARE_INVENTORY.md` und dem Host-Readout vom 2026-05-27 übernommen. Detailwerte zu SMART/Health bleiben dort die autoritative Quelle; dieses Dokument hält die Storage-Policy. diff --git a/docs/WORKFLOW.md b/docs/WORKFLOW.md index ea03945..0720d83 100644 --- a/docs/WORKFLOW.md +++ b/docs/WORKFLOW.md @@ -369,7 +369,13 @@ Wenn ein Stack `webhook_enabled` in Komodo hatte, zusaetzlich pruefen, ob der zu ## Dokumentationspflicht -Nach jeder erfolgreichen Migration oder relevanten Aenderung muessen diese Dateien geprueft werden: +Es gilt "ein Fakt, ein Zuhause" (`docs/REPO_MAP.md` Doku-Regeln): aktualisiert +wird das jeweils zustaendige Dokument plus `docs/README.md`-Index, nicht +mehrere Kopien. Nach jeder relevanten Aenderung pruefen, **welche** dieser +Zuhause betroffen sind: + +- `docs/DECISIONS.md` falls eine bewusste Entscheidung getroffen oder revidiert wurde +- `docs/MASTER_TODO.md` falls sich der Status offener Punkte aendert - `docs/SECRETS_MAP.md` - `docs/ROLLBACK.md` diff --git a/docs/homelab-doku-optimierung.md b/docs/archive/2026/homelab-doku-optimierung-2026-06-11.md similarity index 99% rename from docs/homelab-doku-optimierung.md rename to docs/archive/2026/homelab-doku-optimierung-2026-06-11.md index 2e246ba..9838e92 100644 --- a/docs/homelab-doku-optimierung.md +++ b/docs/archive/2026/homelab-doku-optimierung-2026-06-11.md @@ -1,6 +1,6 @@ # Homelab-Doku-Optimierung — Analyse und Vorschlag 2026-06-11 -Typ: Analyse / Optimierungsvorschlag · Stand: 2026-06-11 · Status: Entwurf zur Operator-Entscheidung +Typ: Analyse / Optimierungsvorschlag · Stand: 2026-06-11 · Status: **umgesetzt am 2026-06-11** (archiviert; siehe `docs/DECISIONS.md` Eintrag 2026-06-11). Nicht umgesetzt blieben nur: Hermes-README-Kuerzung (beim Review 2026-07-25), PDF-Ablage extern (Operator), optionale Projekte aus Abschnitt 13. Read-only-Analyse der gesamten Markdown-Dokumentation (Stand `master`, lokale Arbeitskopie 2026-06-11). Es wurde nichts gelöscht, verschoben oder verändert; diff --git a/docs/archive/README.md b/docs/archive/README.md index b67e710..86ca0d6 100644 --- a/docs/archive/README.md +++ b/docs/archive/README.md @@ -22,3 +22,4 @@ archiviert, sondern geloescht (Git-Historie ist das Archiv). | `2026/boot-cleanup-plan-2026-06-04.md` | BCD-/Boot-Bereinigungsplan | Umgesetzt; Endzustand im System-Audit belegt | | `2026/postinstall-erstes-ziel-codex.md` | Postinstall-Arbeitsauftrag | Projekt abgeschlossen | | `2026/baerchen-app-license-readiness-2026-06-06.md` | App-/Lizenz-Readiness-Check | Projekt abgeschlossen | +| `2026/homelab-doku-optimierung-2026-06-11.md` | Analyse + Vorschlag zur Doku-Konsolidierung | umgesetzt 2026-06-11; Regeln in `docs/REPO_MAP.md`, Entscheidung in `docs/DECISIONS.md` | diff --git a/ops/h-drive-nearline/README.md b/ops/h-drive-nearline/README.md index 641276c..4f3ebb3 100644 --- a/ops/h-drive-nearline/README.md +++ b/ops/h-drive-nearline/README.md @@ -32,6 +32,15 @@ Abschluss zu löschen. - `\\192.168.178.58\backups\borg\dumps\latest` → `borg-dumps\latest\` - `\\192.168.178.58\backups\git-bundles\gitea` → `git-bundles\gitea\` +Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit +2026-05-28 taeglich 05:30. Das Script kopiert bewusst **nicht** mit `/MIR` und +loescht nichts auf H:/; alte Artefakte werden nur nach manueller Sichtpruefung +entfernt. Aufruf zum Testen: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf +``` + Das Script schließt bewusst aus: - `unraid-flash-config.tar.gz` (0600 root:root, nicht per SMB zugänglich → Restore aus Hetzner-Borg) - Migration-/Cutover-Verzeichnisse (`immich-vectorchord-*`, `pg18-major-*`, `redis8-*` etc.)