From aebf3776ac5f795eded4d227ae429444be41a37c Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Sat, 12 Sep 2026 12:19:00 +0200 Subject: [PATCH] TP35 Schicht 2 vorbereitet: exports.zsh komplett, claude.json-Flip ausstehend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit exports.zsh um die 3 von opencode bereits referenzierten, aber fehlenden MCP_MIKROMCP_{ROUTER_AP3,CRS326_CORE,CRS326_BRANCH}_PASS ergänzt (25 Vars, gui-env-sync 25/25 in launchd-Env). claude.json hält noch 7 Klartext-Secrets; DRY-RUN bestätigt alle Ziel-Vars MATCH. Flip läuft bei BEENDETER App über ~/dev/.bin/schicht2-claude-json-migrate.py --apply-claude (nicht aus laufender Session — Claude Code schreibt State in die Datei). Announcement-Eintrag ergänzt. Co-Authored-By: Claude Opus 4.8 --- docs/announcements.md | 9 +++++++++ docs/teilprojekte.md | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/announcements.md b/docs/announcements.md index 301ed0f..9e4c9c9 100644 --- a/docs/announcements.md +++ b/docs/announcements.md @@ -13,6 +13,15 @@ zeigt die Einträge, die seit dem letzten `/news`-Lauf dazugekommen sind (Rest a --- +## 2026-09-12 — claude.json-Secrets laufen künftig über `{env:}` (TP35 Schicht 2) +**Betrifft:** alle, die `~/.claude.json` oder `~/.secrets/exports.zsh` anfassen. +**Aktion:** Keine Klartext-Secrets mehr in `~/.claude.json` — MCP-Credentials referenzieren +`{env:MCP_*}` (dieselben Namen wie `opencode.jsonc`, bidirektional kompatibel). SSoT bleibt +`~/.secrets/exports.zsh` (jetzt 25 Vars). Nach jeder Änderung dort: `~/dev/.bin/gui-env-sync.sh` +**und App-Neustart** (laufender Prozess erbt die launchd-Umgebung nicht). ⚠ `~/.claude.json` nie aus +einer **laufenden** Session editieren — Claude Code schreibt dort State, der Edit würde überschrieben; +der Flip läuft bei beendeter App über `~/dev/.bin/schicht2-claude-json-migrate.py --apply-claude`. + ## 2026-09-12 — TP36-Live: Gerätedaten stehen als CustomFields in Nautobot **Betrifft:** alle, die Geräte-Ist-Werte (RouterOS-Version, Compliance %, DHCP-Server-Zahl, DNS-Modus, Mgmt-IP) brauchen. diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 60cf8ff..e2d5e20 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -2359,7 +2359,7 @@ kann in Ruhe nachziehen. - **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. **✅ 2026-08-29 (Teilschritt):** `gitea-mcp` + `n8n-mcp` in der globalen `opencode.jsonc` von CF-FQDN auf LAN-IP migriert (s. Ist-Stand-Block). `cloudflare`-MCP bleibt FQDN (User-Direktive). - 2. **Credentials-Schichtung** — alle Secrets in `~/.secrets/exports.zsh`, MCP-Configs ausschließlich `{env:...}`. Schließt TP30 Posten #1 ab. + 2. **Credentials-Schichtung** — alle Secrets in `~/.secrets/exports.zsh`, MCP-Configs ausschließlich `{env:...}`. Schließt TP30 Posten #1 ab. **⏳ 2026-09-12 vorbereitet (Abnahme nach App-Neustart):** `exports.zsh` um die 3 fehlenden `MCP_MIKROMCP_{ROUTER_AP3,CRS326_CORE,CRS326_BRANCH}_PASS` ergänzt (jetzt 25 Vars, die opencode schon referenzierte — vorher liefen die dort leer), `gui-env-sync` gelaufen (25/25 in launchd-Env). `~/.claude.json` trägt noch 7 Klartext-Secrets (`mikromcp` 5× PASS, `hostinger-api` Token, `n8n-mcp` Bearer) — DRY-RUN bestätigt alle 7 Ziel-Vars `MATCH`. 🔴 **Flip NICHT aus laufender Session** (Claude Code schreibt State in `~/.claude.json` → würde überschrieben): bei **beendeter App** `~/dev/.bin/schicht2-claude-json-migrate.py --apply-claude` (idempotent, Backup inklusive), dann App starten und `mikromcp`/`hostinger`/`n8n-mcp` auf Verbindung prüfen. Rollback = `.bak` zurück. 3. **3-Schicht-CLAUDE.md** — `CLAUDE.md` (öffentlich) / `CLAUDE.local.md` (gitignored) / `~/.claude/CLAUDE.md` (global). **✅ 2026-08-29 (globale Schicht):** `~/.config/opencode/AGENTS.md` als SSoT angelegt (Secrets + VLAN-Schema + 5 Lessons + SoC + Übergabe-Mechanik + Mid-Action + Commit-Hinweis + Backup-Guard); `~/.claude/CLAUDE.md` hält denselben Block als Spiegel. **Offen:** die pro-Projekt-Schicht (`CLAUDE.md`/`CLAUDE.local.md` + Handover-Posts) — eigene Sessions. 4. **Announcement-Mechanismus (Hybrid)** — zentraler Ort + Skill zum Einlesen beim Session-Start. **✅ 2026-09-12:** `docs/announcements.md` angelegt (Format: `## YYYY-MM-DD — Titel` + `Betrifft:`/`Aktion:`, neueste oben) + globaler Skill **`/news`** (in beiden Skill-Pfaden `~/.claude/skills/news/` **und** `~/.config/opencode/skills/news/`, `cp` kein Symlink — Schicht-6-Lehre). `/news` zeigt Einträge, die seit dem letzten Lauf dazukamen (Seen-State pro Repo unter `~/.news-seen/`). Erste Einträge: SSoT-Cutover (TP36) + TP36-Live. 5. **Backup-Guard** — `~/dev/.bin/backup-guard.sh`, Pre-Commit-Hook pro Projekt, „3 Tage aktiv"-Definition: 5 Commits oder 1000 LOC diff. **✅ 2026-09-12 abgenommen:** Guard (112 Z., `check`/`mark`/`status`) + `.git/hooks/pre-commit` in `bf-infra` live verdrahtet; der Hook hat beim TP36-Live-Commit real gegriffen („Projekt aktiv 12 Commits/198 LOC, Backup markiert"). ⚠️ **Bekannte Grenze:** `check` prüft nur *Existenz* der Guard-Datei, nicht deren Alter — ein alter `mark` (hier 2026-08-29) lässt den Commit durch. Das ist als Push-Erinnerung gewollt, keine Frische-Garantie.