From 389b146a91d3081138b9e52920600c83b89ab431 Mon Sep 17 00:00:00 2001 From: claude-code Date: Fri, 28 Aug 2026 17:04:33 +0200 Subject: [PATCH] tp35 angelegt + session-anker: MCP-Schichtung global/projekt/user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TP35 = Konzept + Schichtung, nicht die Umsetzung. Ausarbeitung in eigener Session pro Projekt mit eigenem Handover-Post. Scope (6 Schichten): 1. MCP-Schichtung global/projekt/user 2. Credentials-Schichtung (alle Secrets in ~/.secrets/exports.zsh) 3. 3-Schicht-CLAUDE.md (öffentlich/gitignored/global) 4. Announcement-Mechanismus (Hybrid) 5. Backup-Guard (3 Tage aktiv, 5 Commits oder 1000 LOC diff) 6. /projektstatus-Skill global (als Erstes) Begleitend: docs/session-20260828-decisions.md = Mini-Anker mit F1-F5-Begründungen + 3 Korrekturen unterwegs (Ollama 2 Hosts, uwe-job-bewerbung doch dabei, Backup-Guard = aktive Tage). Backups: 12/12 gzip-valid in ~/dev/.pre-opencode-migration-backups/20260828-150335/ --- docs/session-20260828-decisions.md | 81 ++++++++++++++++++++++++++++++ docs/teilprojekte.md | 16 ++++++ 2 files changed, 97 insertions(+) create mode 100644 docs/session-20260828-decisions.md diff --git a/docs/session-20260828-decisions.md b/docs/session-20260828-decisions.md new file mode 100644 index 0000000..7bab477 --- /dev/null +++ b/docs/session-20260828-decisions.md @@ -0,0 +1,81 @@ +# Session-Anker 2026-08-28 — Pre-OpenCode-Migration: Diskussionsentscheidungen + +> **Zweck:** Mini-Anker für die nächste Session. Was im Handoff `2026-08-28-pre-opencode-migration.md` an **Status** steht, steht hier an **Warum**. Diese Datei + Handoff + TP35 in `teilprojekte.md` = vollständiger Diskussionsstand, ohne dass die nächste Session 90 Minuten Chat nachlesen muss. +> +> **Lese-Reihenfolge für nächste Session:** +> 1. `docs/handoff-20260828-pre-opencode-migration.md` (Status, Backups, Lessons) +> 2. Diese Datei (Warum, Entscheidungen, Übergabe-Mechanik) +> 3. `docs/teilprojekte.md` → TP35 (Scope, Abgrenzung, Verweise) + +## Was wir entschieden haben (F1–F5 mit Begründung) + +| Frage | Antwort | Warum | +|---|---|---| +| **F1 — Reihenfolge** | (b) TP anlegen → Handover-Posts pro Projekt → globale CLAUDE.md → Backup-Guard | Handover-Posts entstehen **vor** globaler CLAUDE.md, weil die Posts darauf verweisen. Guard zuletzt, weil er die Struktur aus den anderen Schichten braucht. | +| **F2 — Wo leben Handover-Posts** | (ii) Pro Projekt eigene Datei im jeweiligen Repo | Posts sind projektspezifisch — gehören ins Projekt-Repo, nicht in ein zentrales Sammel-File. Format-Vorschlag: `docs/MCP-SCHICHTUNG-VORSCHLAG.md` pro Projekt. | +| **F3 — Welche Regeln in globale CLAUDE.md** | (ii) Die 5 Lessons aus bf-infra + „Single Point of Contact für Infrastruktur" | SoC-Prinzip ist explizit gewollt: bei Infrastruktur-Touchpoints soll jede Session `bf-infra` konsultieren, nicht selbst entscheiden. | +| **F4 — Backup-Guard-Hook** | Hybrid (Pre-Commit-Hook + manueller Session-Start-Snippet) | Pre-Commit deckt Schreibzugriffe ab. Session-Start-Snippet fängt Read-only-Sessions ab, falls opencode das unterstützt. | +| **F5 — TP35-Format** | (ii) Mittel: Titel + Scope-Absatz + Abgrenzung + Verweise | Voll zu lang, minimal zu wenig. „Briefing/Infos dazupacken, wenn in Handoffs vorhanden" = genau diese Form. | + +## Drei Korrekturen unterwegs (Ollama, uwe-job-bewerbung, Backup-Guard-Definition) + +1. **Ollama läuft auf 2 Hosts lokal** (MacBook + Mac mini), beide auf `localhost:11434`. Default in der MCP-Config = `http://localhost:11434`. Wer BF-LAN-Remote will: `export OLLAMA_HOST=http://10.40.20.167:11434` in der Shell. +2. **`uwe-job-bewerbung` ist doch ein Projekt** — Backup-Verzeichnis ist da, 12/12 valid (Stand jetzt, 17:02 nach erfolgreichem Retry des abgebrochenen Backups). Christoph hatte es im ersten Anlauf ausgeschlossen, dann korrigiert. +3. **Backup-Guard: „3 Tage aktive Arbeit"**, nicht 3 Tage Standzeit. Definition: `git log --since=` ≥ 5 Commits ODER `git diff --shortstat HEAD` ≥ 1000 Zeilen. Beide Schwellen nobel. + +## Lehren für die Übergabe-Mechanik (Format-Vorlage für „go") + +``` +[Aktion]: ein Satz, was konkret passieren soll +Scope: welche Dateien/Repos/Systeme +Stop-Bedingung: was ich NICHT anfassen darf +Checkpoint: was ich zurückmelde, wenn fertig +Bei Fehler: rollback oder fragen +``` + +**Nicht** ein ganzes Bündel als „go" formulieren — eine Entscheidung pro „go". Oder explizit **„Plan-Modus: Vorschlag zuerst"**. + +## Lehren für mich (Mid-Action-Checkpoint) + +Bei komplexen Plänen (mehrere Schichten, mehrere Dateien) **vor** dem ersten Tool-Aufruf einen Mid-Action-Checkpoint setzen: + +> „Backups ✅, jetzt fange ich Schicht 2 an: globale Config. Wenn du jetzt anders entscheidst, ist das hier der Punkt zum Stoppen." + +Christoph hat zweimal „go" gesagt und beim zweiten Mal korrigiert — wäre der Checkpoint vorher gekommen, hätte er beim ersten „go" schon differenzieren können. + +## Was noch zu klären ist (für nächste Session) + +- **TP35-Schicht 6 zuerst** (`/projektstatus`-Skill globalisieren) — alle Projekte sollen dasselbe Skill verwenden. Vorschlag: nach `~/.config/opencode/skills/projektstatus/` linken oder kopieren. +- **Ankündigungs-Format**: wie sieht eine „Breaking News" aus? Mein Vorschlag: kurzes Markdown mit `## Datum — Titel`, 3–5 Zeilen, plus optionaler Verweis auf TP-Nummer. SSoT: `bf-infra/docs/announcements.md` (in Arbeit, Datei existiert noch nicht). +- **Opencode-Skill-Verzeichnis**: `~/.config/opencode/skills/` oder `~/.claude/skills/`? Opencode-Syntax ist `~/.config/opencode/...`, claude ist `~/.claude/...`. Mein Vorschlag: opencode-Verzeichnis, weil das der aktive Werkzeugkasten ist. +- **TP34 + TP35-Berührung**: TP34 (Caddyfile via Nautobot/GC) und TP35 (MCP-Schichtung) sind beide „Repository-Pattern für externe Konfiguration". Nicht zusammenführen — verschiedene Schichten (TP34 = Datenmodell, TP35 = lokale Tool-Konfiguration), aber im Master-Architektur-Dokument Querverweis setzen. + +## Commit-Hinweis-Regel (neu autorisiert 2026-08-28) + +Wenn ich denke, dass ein Commit ein guter Zeitpunkt ist und Christoph es übersieht: **aktiv darauf hinweisen** mit einem Satz wie „Wäre jetzt ein guter Commit-Zeitpunkt — soll ich?". Nicht „einfach committen". Christoph bestätigt oder verwirft. Kontrolle bleibt beim Anwender. + +## Status-Stand zum Session-Ende (für nächste Session als Referenz) + +``` +Backups: 12/12 valid (1,4 GB in ~/dev/.pre-opencode-migration-backups/20260828-150335/) +Repos: alle sauber (HEADs identisch zu vor Session, außer bf-infra) +Globale Configs: alle md5-identisch zu vor Session +Commits in Ssn: 2 (bf-infra 799e3ef = Handoff, dieser hier = TP35 + Anker) +TP35: angelegt, wartet auf Scope-Ausarbeitung in eigener Session +Synology Drive: läuft (manuell, quick-and-dirty, Christoph) +``` + +## Hinweis zum Session-Revert in opencode + +Christoph hat die opencode-Option **„Revert undo messages and file changes"** getestet und abgebrochen. Leseart: + +- **„messages"** = Session-Konversationshistorie (weg) +- **„file changes"** = alle nicht-committeten Tool-Mutationen (weg) +- **Commits bleiben** — Commits sind im Repo-Layer, nicht im Session-Layer +- Backup-Files (`*.tar.gz`) zählen als „file changes" und würden verschwinden + +Für unsere Sitzung: ein Revert hätte **nichts Wertvolles** entfernt (die Backups waren Sicherheitsnetz, kein Dauerzustand), aber den Session-Kontext. Nicht nötig, weil State sauber ist. + +## Schlusswort + +Diskussion hat ~1 Stunde gedauert, Ergebnis sind 3 Commits (Handoff + TP35 + dieser Anker), 12 valide Backups, 1 synology-Sync als zusätzliche Sicherung. Ausführung der TP35-Schichten erfolgt in separaten Sessions, pro Projekt einer. diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 23bfdb1..9eb7729 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -205,6 +205,7 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na > | TP32 | 🟢 | Nummern-Systematik (Konzept) | — | > | TP33 | 💡 | Sonos fern (Idee, zurückgestellt) | — | > | TP34 | 🔜 | Caddyfile via Nautobot/GC (Stub, Inventur-Handoff 2026-08-27) | — | +> | TP35 | 🔜 | MCP-Schichtung + 3-Schicht-CLAUDE.md + Backup-Guard | — | > | — | — | **34 archivierte TPs** in `teilprojekte-archiv.md` | — | ### TP5.1 — DNS-Visibility & Flow-Observability für Low-Trust-Geräte (Airfryer-Fall) ▸ vorgemerkt @@ -1726,6 +1727,21 @@ kann in Ruhe nachziehen. --- +### TP35 — MCP-Schichtung global/projekt/user + 3-Schicht-CLAUDE.md + Announcement-Mechanismus + Backup-Guard ▸ 🔜 ANGELEGT 2026-08-28, Scope-Ausarbeitung eigene Session +- **Auslöser:** Bestandsaufnahme Session 2026-08-28 (Handoff `docs/handoff-20260828-pre-opencode-migration.md`). Erkenntnis: MCP-Configs sind heute über `~/.config/opencode/opencode.jsonc` UND `~/.claude.json` verstreut, ohne klares Schema. +- **Befund (geprüft):** 11/12 Backups im Verzeichnis `~/dev/.pre-opencode-migration-backups/20260828-150335/` gzip-valid; `uwe-job-bewerbung.tar.gz` korrupt (Source unverändert da). Repos und globale Configs md5-/HEAD-identisch zum Vor-Session-Stand. Synology-Drive-Sync aktiv (Anwender, manuell). +- **Scope:** + 1. **MCP-Schichtung** (global/projekt/user) — wo lebt welche MCP-Definition, wie wird sie aufgelöst, wie bleibt sie synchron, wenn ein Projekt physisch auf einen anderen Host umzieht. + 2. **Credentials-Schichtung** — alle Secrets in `~/.secrets/exports.zsh`, MCP-Configs ausschließlich `{env:...}`. Schließt TP30 Posten #1 ab. + 3. **3-Schicht-CLAUDE.md** — `CLAUDE.md` (öffentlich) / `CLAUDE.local.md` (gitignored) / `~/.claude/CLAUDE.md` (global). + 4. **Announcement-Mechanismus (Hybrid)** — zentraler Ort (voraussichtlich `bf-infra/docs/announcements.md`) + Skill `/news` oder `/announce` zum Einlesen beim Session-Start. Initial: Breaking News über die MCP-Schichtung selbst. + 5. **Backup-Guard** — `~/dev/.bin/backup-guard.sh`, Pre-Commit-Hook pro Projekt, „3 Tage aktiv"-Definition: 5 Commits oder 1000 LOC diff. + 6. **`/projektstatus`-Skill global** — als Erstes, vor den anderen Schichten. Alle Projekte verwenden dasselbe Skill. +- **Abgrenzung:** TP35 ist Konzept + Schichtung, nicht die Umsetzung. Pro Projekt eigene Session, eigener Handover-Post, eigene Mini-Anpassung. +- **Verzahnt mit:** TP30 (Credentials), TP34 (Repository-Pattern), TP22 (Nautobot-GC als Vorbild für SSoT + Compliance), TP11 (Monitoring). +- **Erste Session für Scope-Ausarbeitung:** Schichten 1–5 + Skill-Setup; Handover-Posts pro Projekt (Schicht 3 + 4 ergeben die Posts). +- **Referenzen:** Handoff 2026-08-28 (`docs/handoff-20260828-pre-opencode-migration.md`) · Backups `~/dev/.pre-opencode-migration-backups/20260828-150335/` · MCP-Inventur `bf-infra/mcp/INVENTORY.md` · Lessons `bf-infra/CLAUDE.md` Abschnitt „Lessons for Sessions". + --- ## Abgeschlossene Teilprojekte ▸ [`teilprojekte-archiv.md`](teilprojekte-archiv.md)