From 123a0fefdf5593e8da4e4fc018ca6d01424ac95b Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Sat, 12 Sep 2026 12:28:23 +0200 Subject: [PATCH] =?UTF-8?q?TP35=20Schicht=202=20=E2=9C=85=20angewandt:=20c?= =?UTF-8?q?laude.json-Secrets=20auf=20{env:}=20geflippt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flip via ~/dev/.bin/schicht2-claude-json-migrate.py --apply-claude bei beendeter App (Backup .bak-20260912-*), App neu gestartet, MCP-Server laden sauber. Alle 7 Secrets (mikromcp 5× PASS, hostinger Token, n8n Bearer) jetzt {env:}, verifiziert. Restcheck: authentifizierter mikromcp-Read on-network (09-12 nur Connect-Timeout VLAN99:80 = Erreichbarkeit, kein Auth-Fehler). Co-Authored-By: Claude Opus 4.8 --- docs/announcements.md | 8 ++++---- docs/teilprojekte.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/announcements.md b/docs/announcements.md index 9e4c9c9..18d9e2a 100644 --- a/docs/announcements.md +++ b/docs/announcements.md @@ -13,11 +13,11 @@ 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) +## 2026-09-12 — claude.json-Secrets laufen ü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` +**Aktion:** Keine Klartext-Secrets mehr in `~/.claude.json` — MCP-Credentials referenzieren jetzt +`{env:MCP_*}` (dieselben Namen wie `opencode.jsonc`, bidirektional kompatibel). SSoT ist +`~/.secrets/exports.zsh` (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`. diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index e2d5e20..32fc652 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. **⏳ 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. + 2. **Credentials-Schichtung** — alle Secrets in `~/.secrets/exports.zsh`, MCP-Configs ausschließlich `{env:...}`. Schließt TP30 Posten #1 ab. **✅ 2026-09-12 angewandt:** `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` via `~/dev/.bin/schicht2-claude-json-migrate.py --apply-claude` (bei beendeter App, Backup `.bak-20260912-*`) geflippt — **alle 7 Secrets** (`mikromcp` 5× PASS, `hostinger-api` Token, `n8n-mcp` Bearer) jetzt `{env:}`, verifiziert; App neu gestartet, MCP-Server laden sauber. 🔴 **Merkregel:** `~/.claude.json` nie aus laufender Session editieren (Claude Code schreibt dort State → überschreibt). Restcheck offen: **authentifizierter** mikromcp-Read **on-network** (am 09-12 Connect-Timeout VLAN99:80 = Erreichbarkeit vom Standort, kein Auth-Fehler). 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.