Files
bf-infra/docs/handoff-20260828-session-a-projektstatus.md
Christoph Emsenhuber 8c1876c1d6 TP35 Schicht 6: /projektstatus-Skill in opencode aktiviert + Doku
- CLAUDE.md: zwei Lessons-Eintraege (opencode-Default-Pfad kopieren,
  nicht symlinken; Kommentar in Code != Verhalten)
- teilprojekte.md: TP35 Quick-Index auf 'Schicht 6 erledigt, Rest offen',
  Schicht-6-Befund im TP-Block, Ist-Stand auf 2026-08-28 mit MCP-Bestand-
  Korrektur
- handoff-20260828-session-a-projektstatus.md: Session-A-Bericht mit
  Drift, Befund, Entscheid, Lehren fuer Session B

Skill selbst liegt in ~/.config/opencode/skills/projektstatus/SKILL.md
(cp aus ~/.claude/skills/projektstatus/, byte-identisch) - opencode
scannt diesen Default-Pfad, kein skills.paths-Eintrag in der JSONC
noetig.
2026-08-28 19:15:02 +02:00

6.1 KiB
Raw Blame History

Handoff 2026-08-28 — Session A (TP35 Schicht 6: /projektstatus-Skill für opencode)

Bezug: Handoff 2026-08-28 Bestand + Performance (handoff-20260828-mcp-bestand-und-performance.md) → diese Session A (eine von drei Folge-Sessions aus dem obigen Handoff). Diese Datei: was in Session A passiert ist, was bleibt, Einstieg für Session B (shelly-mcp-Deploy).

TL;DR

  • /projektstatus-Skill läuft jetzt in opencode. Kopie (cp, kein ln -s) nach ~/.config/opencode/skills/projektstatus/SKILL.md.
  • Kein skills.paths-Eintrag in ~/.config/opencode/opencode.jsonc nötig — opencode scannt den Default-Pfad.
  • Lehre im CLAUDE.md-Lessons-Block: Default-Pfad kopieren, nicht symlinken, keine skills.paths-Konfiguration.
  • Doku nachgezogen: TP35 Schicht 6 als ✅, Quick-Index ⏳ (Rest offen), Ist-Stand-Block auf 2026-08-28 mit MCP-Bestand-Korrektur.

Was war (Drift → Befund → Entscheid)

Drift

  • Im gestrigen Handoff (handoff-20260828-mcp-bestand-und-performance.md) stand, der testweise angelegte Symlink ~/.config/opencode/skills/projektstatus → ~/.claude/skills/projektstatus/ sei wieder entfernt worden. Wahr: das Verzeichnis ~/.config/opencode/skills/ existierte danach nicht mehr, opencode fand den Skill nicht.
  • Christoph-Direktive (verbatim aus CLAUDE.md-Lessons): "opencode ist die neue Umgebung, soll eigene Skill-Pfade haben, keine Symlinks". Frage: wohin genau? war offen.

Befund (verifiziert, nicht geraten)

  • opencode-Schema aus https://opencode.ai/config.json (gefetched und gelesen): skills.paths: string[] ist der dokumentierte Multi-Pfad-Loader.
  • Globale Default-Pfade lauten ~/.config/opencode/skill/<name>/SKILL.md und ~/.config/opencode/skills/<name>/SKILL.md (beide Singular/Plural) — und zusätzlich scannt opencode ~/.claude/skills/<name>/SKILL.md und ~/.agents/skills/<name>/SKILL.md als externe Skills (auto-loaded).
  • Die Lehrstelle gestern war ein Holzweg: Symlink-Workaround für etwas, wofür das Schema einen eingebauten Default-Pfad hat.

Entscheid

  • Kopie der SKILL.md nach ~/.config/opencode/skills/projektstatus/ — keine Konfigurationsänderung an opencode.jsonc.
  • Begründung: hält die Welten sauber getrennt (zwei Pflegeorte für spätere Drift-Reparaturen), nutzt den opencode-Default-Pfad ohne Sonderlock, vermeidet die gestern explizit abgelehnte Symlink-Lösung.

Verifikation

  • cp lief, diff -q ~/.claude/skills/projektstatus/SKILL.md ~/.config/opencode/skills/projektstatus/SKILL.md → byte-identisch (kein Output = identisch).
  • Berechtigungen symmetrisch zur Quelle (-rw-r--r--).
  • opencode.jsonc ist unverändert (kein Backup nötig, kein Diff).
  • Was die nächste Sitzung bestätigen muss: opencode neu starten, /projektstatus triggern, den Baum lesen — der eigentliche Funktionsbeweis steht noch aus.

Was sich geändert hat (in dieser Session, im Repo)

Datei Änderung
CLAUDE.md (Lessons) Zwei neue Einträge: (a) "opencode-Skills: Default-Pfad kopieren, NICHT symlinken" mit Schema-Referenz; (b) "Kommentar in Code ≠ Verhalten" als Generalisierung des credentials.json/.env-gitignore-Funds aus dem Commit-Schritt.
docs/teilprojekte.md Quick-Index Z. 208 TP35: 🔜 → ⏳ (Schicht 6 ✅, Rest offen).
docs/teilprojekte.md TP35-Block Z. 1747 Schicht 6 als ✅ markiert, Datum 2026-08-28, Befund-Block.
docs/teilprojekte.md Ist-Stand Z. 28 Datum auf 2026-08-28, neue Bullet-Zeile MCP-Bestand-Korrektur.

Was bewusst NICHT geändert wurde:

  • opencode.jsonc — der Pfad ist Default-Scan, kein Eintrag nötig.
  • ~/.claude/skills/projektstatus/ — die Quelle, bleibt unverändert.
  • docs/handoff-20260828-mcp-bestand-und-performance.md — gestern abgeschlossen, nicht überschrieben.

Sicherheitsfund (nicht-Session-A-Arbeit, aber heute aufgetaucht)

Beim commit/push der untracked Session-B-Vorbereitung:

  • routeros/cloudflared/credentials.json (Tunnel-PrivateKey base64) lag ungegittoret im Working Tree.
  • mcp/shelly/.env trug den Kommentar "gitignored, NICHT committen" — es gab aber kein mcp/shelly/.gitignore.
  • Beide gefixt in den Commits 27863c1 und 433e600 (siehe Lessons-Block).
  • Working Tree ist clean, kein Secret jemals in den Index geraten.

Drei Folge-Sessions — was ist abgearbeitet, was steht

Session Status
A — /projektstatus-Skill global ✅ erledigt (diese Datei)
B — shelly-mcp-Container auf DS923 deployen (live, ssh) 🔜 vorbereitet (Repo-Materialien committed 27863c1, .env lokal)
C — Caddyfile↔CF-Ingress-Drift-Probe + Backup-Guard 🔜 unangetastet

Lehren für die nächste Session (B)

  1. Live-Sweep am 2026-08-28 hat 23 Shellys auf VLAN30 bestätigt (.30.202–.226 + .233). SHELLY_SWEEP=10.40.30.180-250 in ~/.secrets/exports.zsh ist die Range, in der die echten Geräte alle liegen — die zusätzlichen 50 IPs sind Reserve, kein toter Sweep-Bereich.
  2. Container-Pfad = DS923 (10.40.20.10), NICHT macmini. Macmini belasten wir nicht, das war Christoph-Direktive.
  3. Container-Definition lebt NICHT in docs/nas-vlan20/stacks/shelly-mcp.yml — der wurde gestern gelöscht (User-Direktive: kein MCP-Client für shelly-mcp). Deployment = direkt via Portainer-API, nicht als Stack.
  4. DHCP-Reservierung = crs326-core dhcp-v20, MAC nach erstem Boot per MikroMCP manage_dhcp_lease make-static festnageln.
  5. WLAN-PSKs in SHELLY_IOT_PSK / SHELLY_DEVICE_PW (aus ~/.secrets/credentials.env) — niemals ins Repo oder in den Container-Image.

Commit

  • Hash: siehe git log --oneline -1 nach diesem Handoff.
  • Geänderte Dateien: CLAUDE.md, docs/teilprojekte.md, neue Datei docs/handoff-20260828-session-a-projektstatus.md.
  • Commit-Message (Vorschlag): TP35 Schicht 6: /projektstatus-Skill in opencode aktiviert + Doku nachgezogen

Stand

  • 2026-08-28, ~19:30
  • Diese Session = Skill-Pfad-Findung + Kopie + Lessons-Eintrag + TP35/Ist-Stand-Update + Handoff
  • Sessions B + C aus dem gestrigen Handoff unverändert
  • ~/.config/opencode/opencode.jsonc ist unverändert (kein Backup)