Files
bf-infra/docs/session-20260828-decisions.md
claude-code 389b146a91 tp35 angelegt + session-anker: MCP-Schichtung global/projekt/user
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/
2026-08-28 17:04:33 +02:00

82 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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=<guard-date>` ≥ 5 Commits ODER `git diff --shortstat <guard-date> 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.