diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 0f8fa8b..a648b62 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -41,6 +41,22 @@ - **`git push --force`** – Nie force-pushen ohne explizite Anweisung des Users. - **Secrets in Code** – Keine Passwörter, API-Keys, Tokens in Dateien. +## 🖥 Terminal-Syntax (MANDATORY – Shell-Fehler vermeiden) + +> Vor **jedem** Terminal-Kommando: lies das Feld **Default-Shell** (Abschnitt +> „Entwicklungsumgebung", unten nach `---`) und nutze die Syntax **genau dieser** Shell. +> Die Terminal-Tool-Beschreibung nennt die aktive Shell zusätzlich. + +**Bei fish (hier der Normalfall):** +- Variablen: `set VAR (cmd)` — **niemals** `VAR=$(cmd)` (fish bricht ab mit „Unsupported use of '='"). +- Blöcke enden mit `end`, **nicht** `done`/`fi`. + +**Harte Regel gegen wiederholte Syntaxfehler:** +- Nur ein **einzelnes, triviales** Kommando direkt im Prompt tippen. +- Alles mit **Zuweisung, Schleife, Bedingung oder mehreren Statements** → in eine + `.sh`-Datei mit `#!/usr/bin/env bash` schreiben und mit `bash datei.sh` ausführen. + Dann ist die interaktive Shell-Syntax irrelevant und der Fehler kann nicht auftreten. + ## ⚠ Bekannte Fallstricke (nicht vergessen!) - **Scripts mit Self-Update (`copilot-update.sh/.fish`) immer erst committen+pushen, DANN manuell deployen.** diff --git a/docs/history/prompts/2026-06-18_default-shell-erkennung_session.md b/docs/history/prompts/2026-06-18_default-shell-erkennung_session.md index a90fa43..4542d1e 100644 --- a/docs/history/prompts/2026-06-18_default-shell-erkennung_session.md +++ b/docs/history/prompts/2026-06-18_default-shell-erkennung_session.md @@ -51,3 +51,50 @@ git stash pop # Auto-merge: docs/MAINTAINER.md, git-templates/{. Verifikation nach Merge: beide Änderungssätze (rd13_-Blöcke + Default-Shell) in allen überlappenden Dateien vorhanden, Selftest erneut 6/6 PASS. Danach: Session-History (diese Datei) angelegt, `PROJECT_CONTEXT.md` aktualisiert, committed (pre-commit Quality Gate bestanden) und nach `origin/master` gepusht. + +### Prompt 3 +ja lokal ausrollen + +### Antwort 3 +Reihenfolge laut Fallstrick-Regel eingehalten (erst committed+gepusht, dann deployt). Vollständiger fish-Deploy ausgeführt, der sowohl die Bin-Skripte als auch `~/.git-templates/` aktualisiert: + +```fish +fish scripts/deploy.fish +``` + +Ergebnis (Auszug): `✓ copilot-bootstrap.sh installed to ~/.local/bin/`, `✓ copilot-bootstrap.fish installed`, `✓ git-templates deployed → /home/shs-schc/.git-templates`. + +Verifikation (Bin = Repo, Template trägt Feld, End-to-End-Smoke-Test): + +```fish +for s in copilot-bootstrap.sh copilot-bootstrap.fish + if diff -q ~/.local/bin/$s scripts/$s >/dev/null 2>&1 + echo " OK identisch: $s" + else + echo " DIFF: $s" + end +end +grep -n '^- \*\*Default-Shell:\*\*' ~/.git-templates/.github/copilot-instructions.md +set tmp (mktemp -d); git -C $tmp init -q; sh ~/.local/bin/copilot-bootstrap.sh $tmp >/dev/null 2>&1 +grep '^- \*\*Default-Shell:\*\*' "$tmp/.github/copilot-instructions.md"; rm -rf $tmp +``` + +Output: beide Skripte `OK identisch`, Template Zeile 66 `- **Default-Shell:** fish`, Smoke-Test schrieb `- **Default-Shell:** fish` (erkannt aus `SHELL=/bin/fish`). + +Fehler dabei: Der erste Verifikations-Versuch war in POSIX-Syntax (`tmp=$(mktemp -d)`, `for…do…done`) in eine **fish**-Shell getippt → `fish: Unsupported use of '='`. Hintergrund-Terminal verworfen, fish-nativ neu geschrieben. + +### Prompt 4 +Der Befehl war in POSIX-Syntax geschrieben, aber das Terminal ist fish — daher die Syntaxfehler. Ich räume das Hintergrund-Terminal weg und schreibe die Verifikation fish-nativ. + +Das das nicht mehr passiert habe ich dich angewiesen die letzten änderungen zu machen. jetzt passiert das immer noch. Warum und was müssen wir noch anpassen das das nicht mehr passiert das nervt!!!! + +### Antwort 4 +Ursachenanalyse: Das Default-Shell-Feld war nicht das Problem — die Information stand bereits in meinem Kontext (in `copilot-instructions.md` **und** der Terminal-Tool-Beschreibung „persistent fish terminal session"). Ein **passives Datenfeld** ändert das Modellverhalten aber nicht zuverlässig; mein Default-Reflex ist POSIX/bash. Das Feld war zudem schwach formuliert und stand in der unteren Projekt-Sektion statt als harte Regel oben. + +Drei Hebel umgesetzt: + +1. **Imperative Regel statt Beschreibung** — neue Sektion „🖥 Terminal-Syntax (MANDATORY)" in der Framework-Sektion beider `copilot-instructions.md` (dieses Repo + Template). Mit exaktem Fehlerbild (`VAR=$(cmd)` → fish-Abbruch) und dem deterministischen Ausweg: alles Nicht-Triviale in eine `.sh`-Datei mit `#!/usr/bin/env bash` schreiben und `bash datei.sh` ausführen → Prompt-Shell-Syntax wird irrelevant. +2. **Memory-Notiz** `/memories/shell-syntax.md` — wird jede Session automatisch geladen, wirkt direkt auf mein Verhalten über Sessions hinweg. +3. **Template + Redeploy** — neue Repos erben die Regel; `~/.git-templates` nach Commit/Push neu deployt. + +Geänderte Dateien: `.github/copilot-instructions.md`, `git-templates/.github/copilot-instructions.md`, `/memories/shell-syntax.md` (User-Memory), History + PROJECT_CONTEXT. diff --git a/docs/history/summary/PROJECT_CONTEXT.md b/docs/history/summary/PROJECT_CONTEXT.md index 346dfac..ac93eda 100644 --- a/docs/history/summary/PROJECT_CONTEXT.md +++ b/docs/history/summary/PROJECT_CONTEXT.md @@ -8,7 +8,7 @@ ## Aktueller Projektstatus -**Letzte Aktualisierung:** 2026-06-18 – Default-Shell-Feld eingeführt: Bootstrap erkennt `$SHELL` automatisch, schreibt es in die Projekt-Sektion der `copilot-instructions.md` (überlebt `copilot-update`), manuell änderbar; Default `fish` +**Letzte Aktualisierung:** 2026-06-18 – Default-Shell-Feld eingeführt + lokal deployt; danach Terminal-Syntax-Regel als MANDATORY-Sektion gehärtet (Agent tippte trotz Feld POSIX in fish) + Memory-Notiz `shell-syntax.md` **Phase:** Produktion / stabil – wird bei Bedarf erweitert --- @@ -33,7 +33,8 @@ die zentrale Proxy-Schicht liegt im Repo `rd13_system_proxy`. | Datum | Aufgabe | Ergebnis | Entscheidungen | |---|---|---|---| -| 2026-06-18 | Default-Shell-Erkennung | Bootstrap setzt `$SHELL` (Fallback `fish`) automatisch in `copilot-instructions.md`; Feld nach `---` (überlebt update); selftest +3 Fälle; beide MAINTAINER.md dokumentiert | Feld in Projekt-Sektion, nicht Framework-Sektion; Whitelist `^[a-z0-9_-]+$` gegen sed-Injection | +| 2026-06-18 | Terminal-Syntax-Regel gehärtet | MANDATORY-Sektion „Terminal-Syntax" in Framework-Sektion beider `copilot-instructions.md` (exaktes fish-Fehlerbild + Script-Ausweg); Memory `shell-syntax.md`; Template redeployt | Passives Feld reicht nicht → imperative Regel + deterministischer Ausweg (`.sh` mit Shebang) + auto-geladene Memory | +| 2026-06-18 | Default-Shell-Erkennung | Bootstrap setzt `$SHELL` (Fallback `fish`) automatisch in `copilot-instructions.md`; Feld nach `---` (überlebt update); selftest +3 Fälle; beide MAINTAINER.md dokumentiert; lokal deployt | Feld in Projekt-Sektion, nicht Framework-Sektion; Whitelist `^[a-z0-9_-]+$` gegen sed-Injection | | 2026-06-13 | rd13_-Infrastrukturkonvention | Runner in Docker; alle Services hinter Caddy; zentrales Proxy-Repo `rd13_system_proxy` | this session | | 2026-06-10 | Agent-History → `docs/history/` + Auto-Migration | pre-commit Cutover, alle Skripte, settings/prompt/instructions/docs; `git mv` dieses Repos | `2b20a98` + Dogfood | | 2026-06-10 | WP12 Doku-Portabilität | README/USER/ADMIN/MAINTAINER: env/config, init-copilot, offline; tote IP raus | `afd5b38` | diff --git a/git-templates/.github/copilot-instructions.md b/git-templates/.github/copilot-instructions.md index 49dea6a..be47733 100644 --- a/git-templates/.github/copilot-instructions.md +++ b/git-templates/.github/copilot-instructions.md @@ -41,6 +41,22 @@ - **`git push --force`** – Nie force-pushen ohne explizite Anweisung des Users. - **Secrets in Code** – Keine Passwörter, API-Keys, Tokens in Dateien. +## 🖥 Terminal-Syntax (MANDATORY – Shell-Fehler vermeiden) + +> Vor **jedem** Terminal-Kommando: lies das Feld **Default-Shell** (Abschnitt +> „Entwicklungsumgebung", unten nach `---`) und nutze die Syntax **genau dieser** Shell. +> Die Terminal-Tool-Beschreibung nennt die aktive Shell zusätzlich. + +**Bei fish (häufiger Fall):** +- Variablen: `set VAR (cmd)` — **niemals** `VAR=$(cmd)` (fish bricht ab mit „Unsupported use of '='"). +- Blöcke enden mit `end`, **nicht** `done`/`fi`. + +**Harte Regel gegen wiederholte Syntaxfehler:** +- Nur ein **einzelnes, triviales** Kommando direkt im Prompt tippen. +- Alles mit **Zuweisung, Schleife, Bedingung oder mehreren Statements** → in eine + `.sh`-Datei mit `#!/usr/bin/env bash` schreiben und mit `bash datei.sh` ausführen. + Dann ist die interaktive Shell-Syntax irrelevant und der Fehler kann nicht auftreten. + ## ⚠ Bekannte Fallstricke (nicht vergessen!) - **Scripts mit Self-Update (`copilot-update.sh/.fish`) immer erst committen+pushen, DANN manuell deployen.**