docs(instructions): enforce shell-syntax rule to stop POSIX-in-fish errors
Some checks are pending
CI / Lint & self-test (push) Waiting to run
Some checks are pending
CI / Lint & self-test (push) Waiting to run
Passives Default-Shell-Feld reichte nicht: Agent tippte weiter POSIX (VAR=$(...)) in eine fish-Shell. Neue MANDATORY-Sektion 'Terminal-Syntax' in der Framework-Sektion beider copilot-instructions.md mit exaktem Fehlerbild und deterministischem Ausweg (nicht-triviale Logik in .sh mit Shebang, bash datei.sh). Memory-Notiz shell-syntax.md ergaenzt. History + PROJECT_CONTEXT aktualisiert.
This commit is contained in:
parent
5d0194a7b8
commit
647c0f8b9e
4 changed files with 82 additions and 2 deletions
16
.github/copilot-instructions.md
vendored
16
.github/copilot-instructions.md
vendored
|
|
@ -41,6 +41,22 @@
|
||||||
- **`git push --force`** – Nie force-pushen ohne explizite Anweisung des Users.
|
- **`git push --force`** – Nie force-pushen ohne explizite Anweisung des Users.
|
||||||
- **Secrets in Code** – Keine Passwörter, API-Keys, Tokens in Dateien.
|
- **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!)
|
## ⚠ Bekannte Fallstricke (nicht vergessen!)
|
||||||
|
|
||||||
- **Scripts mit Self-Update (`copilot-update.sh/.fish`) immer erst committen+pushen, DANN manuell deployen.**
|
- **Scripts mit Self-Update (`copilot-update.sh/.fish`) immer erst committen+pushen, DANN manuell deployen.**
|
||||||
|
|
|
||||||
|
|
@ -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.
|
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.
|
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.
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
## Aktueller Projektstatus
|
## 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
|
**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 |
|
| 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-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 | 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` |
|
| 2026-06-10 | WP12 Doku-Portabilität | README/USER/ADMIN/MAINTAINER: env/config, init-copilot, offline; tote IP raus | `afd5b38` |
|
||||||
|
|
|
||||||
16
git-templates/.github/copilot-instructions.md
vendored
16
git-templates/.github/copilot-instructions.md
vendored
|
|
@ -41,6 +41,22 @@
|
||||||
- **`git push --force`** – Nie force-pushen ohne explizite Anweisung des Users.
|
- **`git push --force`** – Nie force-pushen ohne explizite Anweisung des Users.
|
||||||
- **Secrets in Code** – Keine Passwörter, API-Keys, Tokens in Dateien.
|
- **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!)
|
## ⚠ Bekannte Fallstricke (nicht vergessen!)
|
||||||
|
|
||||||
- **Scripts mit Self-Update (`copilot-update.sh/.fish`) immer erst committen+pushen, DANN manuell deployen.**
|
- **Scripts mit Self-Update (`copilot-update.sh/.fish`) immer erst committen+pushen, DANN manuell deployen.**
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue