# PROJECT_CONTEXT – rd13_copilot_setup > Diese Datei ist der **persistente Gedächtnis-Speicher** für alle Agenten. > Beim Start jeder neuen Agent-Session: **diese Datei zuerst lesen**. > Nach Abschluss einer Aufgabe: **diesen Stand aktualisieren**. --- ## Aktueller Projektstatus **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 --- ## Was ist dieses Projekt? Portierbare GitHub Copilot Workspace-Konfiguration. Einmal eingerichtet, stattet es jedes neue oder bestehende Git-Repo automatisch mit Copilot-Instruktionen, VS Code- Einstellungen, Dokumentations-Templates, Agent-History-Struktur und einem pre-commit Quality Gate aus. Für Repos mit einem Namen beginnend mit `rd13_` gilt als allgemeine Infrastruktur-Annahme: Der Runner läuft in Docker, alle Services werden über Caddy als Proxy bereitgestellt und die zentrale Proxy-Schicht liegt im Repo `rd13_system_proxy`. **Stack:** Shell (POSIX sh + fish), Markdown **Deployment:** `bash scripts/deploy.sh` oder `fish scripts/deploy.fish` auf jedem neuen System --- ## Erledigte Aufgaben (neueste zuerst) | Datum | Aufgabe | Ergebnis | Entscheidungen | |---|---|---|---| | 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` | | 2026-06-10 | WP11 CI + selftest | `.github/workflows/ci.yml` (shellcheck+fish -n+selftest), `scripts/selftest.sh` | `deca872` | | 2026-06-10 | WP6/7/4 deploy nicht-invasiv | kein globales init.templateDir/init-Alias; Opt-in init-copilot; post-merge nur mit Flag | `9e14a5f` | | 2026-06-10 | WP3/5/4 update konfigurierbar/offline | Remote via env/config, graceful skip, portable Editor-Erkennung | `5890bff` | | 2026-06-10 | WP1/2 bootstrap.fish Parität + ADS-Ignore | `$HOME` statt `/home/rd13server`; `*:Zone.Identifier` ignoriert | `80b6248` | | 2026-06-02 | Konsistenzprüfung: alle --no-verify Referenzen entfernt | `docs/USER.md`, `docs/ADMIN.md`, `docs/MAINTAINER.md`, beide `copilot-instructions.md`, `pre-commit` Check-Nummerierung `[1/3]→[1/4]` | Opt-outs (.copilot-no-tests/.copilot-no-docs) als Ersatz für --no-verify in Doku | | 2026-06-03 | Check 6 von Block → Warnung umgestellt | `git-templates/hooks/pre-commit` | Zu grob: heute-Prüfung blockiert Folgecommits; besser: Warnung wenn keine `*_session.md` im aktuellen Commit gestaged | | 2026-06-02 | pre-commit Check 6 – Session-Datei erforderlich | `git-templates/hooks/pre-commit` | Wurde als Block implementiert, am Folgetag als zu grob erkannt | | 2026-06-02 | Review-Findings behoben (7 Punkte) | pre-commit, `.copilot-no-docs`, beide copilot-instructions.md, history.prompt.md, copilot-bootstrap.sh | `.copilot-no-docs` Opt-out; history.prompt.md Append-Verhalten korrekt | | 2026-06-02 | copilot-update.sh + git alias + post-merge Hook | `scripts/copilot-update.sh`, `scripts/copilot-update.fish`, `git-templates/hooks/post-merge` | SSH+HTTP-Fallback; opt-in Update-Hook; copilot-instructions.md nur bei TODO überschreiben | | 2026-05-31 | Bug fix: mkdir -p .git/hooks + eigenes Repo bootstrapped | `e1f912f` | – | | 2026-05-31 | history/prompts/ committed statt gitignored | `95d0360` | Vollständige History bleibt im Repo | | 2026-05-30 | Initiale Erweiterungen: data/, history/, hooks, 3-Zielgruppen-Docs | `045e2e7` | Nur data/ gitignored | | 2026-05-30 | Remote origin gesetzt + initial push | `ssh://git@192.168.178.6:2222/cschulz/rd13_copilot_setup.git` | – | --- ## Offene Aufgaben & bekannte Probleme - [ ] `docs/requirements/REQUIREMENTS.md` für dieses Setup-Repo selbst anlegen (aktuell nur Template in git-templates) - [ ] `.github/copilot-instructions.md` TODO-Felder ausfüllen (Stack, Architecture, NFRs dieses Repos) - [ ] Bei Änderungen an `git-templates/` immer `deploy.sh` neu ausführen (oder `git copilot-update` testen) - [ ] **WP8/WP9** (settings.json: Absolute-Mode-Widerspruch entschärfen + non-destruktiver Merge) – zurückgestellt, mit Nutzer besprechen - [ ] **WP10** (Vendor-neutrale Namen rd13/cschulz/rd13server) – zurückgestellt - [ ] Remote **dieses** Repos zeigt auf tote IP `192.168.178.6` – bewusst offen (separate Entscheidung) --- ## Kritische Architekturentscheidungen | Entscheidung | Begründung | Wo dokumentiert | |---|---|---| | `copilot-update.sh` mit SSH+HTTP-Fallback | Funktioniert ohne SSH-Key-Setup auf neuen Maschinen | `scripts/copilot-update.sh` | | `copilot-instructions.md` nur bei TODO überschreiben | User-Content bleibt erhalten; Backup `.bak` wird erstellt | `scripts/copilot-update.sh` | | post-merge Hook in bootstrapped Repos: opt-in | Kein Overhead bei jedem `git pull` in anderen Repos | `scripts/copilot-bootstrap.sh --with-update-hook` | | Setup-Repo selbst: post-merge Hook auto-installed | `deploy.sh` nach jedem `git pull` auf Setup-Repo | `scripts/deploy.sh` Block 7 | | `docs/history/prompts/` committed | Lückenlose Projekt-History im Repo | `docs/MAINTAINER.md` | | `data/` gitignored | Persistente Daten: Größe + Sicherheit | `docs/ADMIN.md` | | POSIX sh für Bootstrap | Läuft überall ohne Abhängigkeiten | `docs/MAINTAINER.md` | | Git-Alias statt Fish-Wrapper | Portabel: bash, sh, CI, GUI-Clients | `docs/MAINTAINER.md` | | `.copilot-no-tests` + `.copilot-no-docs` Opt-outs | Pre-commit Check 1 (Tests) und Check 2 (Doku) deaktivierbar für Repos ohne Framework/Doku-Pflicht | `git-templates/hooks/pre-commit` | | Kein `--no-verify` nirgendwo | Quality Gate darf nie umgangen werden; in `copilot-instructions.md` verboten, pre-commit enthält keinen Bypass-Hinweis | `git-templates/hooks/pre-commit`, `.github/copilot-instructions.md` | | Kein globales `init.templateDir`, Opt-in `git init-copilot` | Standard-`git init`/`clone` unberührt; Quality Gate nur in gewählten Repos | `scripts/deploy.{sh,fish}` | | Remote konfigurierbar (env/Config) + Offline-Modus | Keine hartkodierte Infrastruktur; läuft ohne Netz, graceful skip (exit 0) | `scripts/copilot-update.{sh,fish}` | | `detect_vscode_user_dir` dupliziert statt geteilt | Skripte laufen standalone aus `~/.local/bin` → keine sourcebare Lib | alle 4 Skripte | | CI: shellcheck + fish -n + selftest | Verhindert Regressionen in den Shell-Skripten | `.github/workflows/ci.yml`, `scripts/selftest.sh` | | Agent-History unter `docs/history/` | Aufgeräumte Struktur (alles Doku-Artefakte unter docs/); Cutover statt Dual-Pfad | pre-commit, alle Skripte | | Auto-Migration `history/` → `docs/history/` in copilot-update | Bestehende Repos ziehen ohne manuellen Eingriff nach (git mv, Fallback mv) | `scripts/copilot-update.{sh,fish}` | | Default-Shell-Feld in Projekt-Sektion (nach `---`) | Bootstrap erkennt `$SHELL`; Wert überlebt `copilot-update` (Framework-Sektion wird neu geschrieben); manuell pro Repo/Maschine änderbar | `scripts/copilot-bootstrap.{sh,fish}`, `git-templates/.github/copilot-instructions.md` | --- ## Wichtige Pfade & Konventionen - **Requirements:** `docs/requirements/REQUIREMENTS.md` (committed, immer aktuell halten!) - **Persistente Daten:** `/data/` (gitignored, nie committen!) - **Agent-Logs (voll):** `/docs/history/prompts/` (committed – vollständige History bleibt erhalten) - **Dieser Kontext:** `/docs/history/summary/PROJECT_CONTEXT.md` (committed) - **Deploy:** `bash scripts/deploy.sh` oder `fish scripts/deploy.fish` - **Bootstrap einzelnes Repo:** `sh ~/.local/bin/copilot-bootstrap.sh [/pfad/zum/repo]` - **Bootstrap mit Auto-Update-Hook:** `sh ~/.local/bin/copilot-bootstrap.sh --with-update-hook [/pfad]` - **Templates updaten (global + repo-lokal):** `git copilot-update` (in jedem Repo) - **Setup-Quelle:** `COPILOT_SETUP_REMOTE_SSH/_HTTP` oder `COPILOT_SETUP_DIR` (Config: `~/.config/copilot-setup/config`); Cache `~/.copilot-setup/` - **Git-Templates:** `~/.git-templates/` (nach Deploy) - **Prompts:** `~/.vscode-server/data/User/prompts/` (nach Deploy) --- ## Für den nächsten Agenten: Startpunkt 1. Diese Datei gelesen? Gut – du kennst den Stand. 2. Neues Feature → `git-templates/` anpassen → `deploy.sh` ausführen → committen 3. Nach jeder Session: `docs/history/prompts/YYYY-MM-DD_beschreibung_session.md` anlegen + diese Datei aktualisieren --- ## Bekannte Fallstricke / "Don't do this" - `deploy.sh` nach jeder Änderung an `git-templates/` neu ausführen – sonst sind die lokalen Templates veraltet - Beim Bootstrap neuer Repos ohne `hooks/`-Verzeichnis: `mkdir -p .git/hooks/` ist jetzt im Script (war Bug) - `deploy.sh` skippt vorhandene Prompt-Dateien – neue Prompts werden aber korrekt hinzugefügt