diff --git a/history/prompts/2026-06-10_portabilitaet-universalitaet_session.md b/history/prompts/2026-06-10_portabilitaet-universalitaet_session.md new file mode 100644 index 0000000..a9ac5ea --- /dev/null +++ b/history/prompts/2026-06-10_portabilitaet-universalitaet_session.md @@ -0,0 +1,138 @@ +# Portabilität & Universalität des Setups – 2026-06-10 + +## Aufgabe / Ziel + +Das `rd13_copilot_setup` portabler und universeller machen. Aus der Analyse in +`memory.md` wurden 12 Arbeitspakete (WP1–WP12) abgeleitet und einzeln zur +Umsetzung freigegeben. **Umgesetzt: WP1–WP7, WP11, WP12.** Ausgeschlossen +(auf Wunsch, separat zu besprechen): **WP8, WP9** (settings.json) und **WP10** +(Vendor-Naming). + +## Verlauf + +### Prompt 1 +Nutzer die Memory datei um dieses Repo portabler und universeller zu machen. Identifiziere alle möglichen arbeitsschritte und lass uns einzeln durchgehen was wir implementieren und was nicht. + +### Antwort 1 +`memory.md` und das gesamte Repo analysiert (Skripte, settings.json, Prompts, +git-templates/hooks). Daraus 12 Arbeitspakete abgeleitet und gruppiert: +- Sichere Fixes: WP1 (bootstrap.fish `$HOME` + Parität), WP2 (Zone.Identifier + .gitignore) +- Parametrisierung: WP3 (Remote konfigurierbar), WP4 (VS-Code-Pfad-Erkennung), WP5 (Offline-Modus) +- Invasivität: WP6 (Opt-in `git init-copilot`), WP7 (post-merge opt-in) +- settings.json: WP8/WP9 +- Universalität: WP10 (Vendor-Namen), WP11 (CI), WP12 (Doku) + +Triage-Fragen gestellt (`vscode_askQuestions`), vom Nutzer abgebrochen. + +### Prompt 2 +bevor ich die fragen beantworte, was sind diese Zone Identifier? + +### Antwort 2 +Erklärt: `*:Zone.Identifier` sind Windows-Mark-of-the-Web-Metadaten (NTFS +Alternate Data Streams, `ZoneId=3` = aus dem Internet). Beim Lesen über den +WSL/Linux-Layer werden sie als separate Dateien sichtbar. Reiner Download-Müll, +gehören weder committet noch deployt → WP2: löschen + Ignore-Pattern. + +### Prompt 3 +ok alles implementieren aber nicht WP8,WP8 und WP10. Diese WPs will ich nicht implementiert haben und danach nochmal mit dir sprechen. + +### Antwort 3 +Scope bestätigt: WP1,2,3,4,5,6,7,11,12 umsetzen; WP8+WP9 (settings.json) und +WP10 (Vendor-Naming) ausgeschlossen. Finalen Phasenplan erstellt (Phase 1 +Hygiene/Bug → Phase 2 Skript-Portabilität → Phase 3 CI → Phase 4 Doku) und in +Session-Memory gesichert. + +### Prompt 4 +Start implementation + +### Antwort 4 +Repo-Zustand geprüft – zu diesem Zeitpunkt **kein `.git`** (entpackte +ZIP-Kopie). Implementierung gestoppt, da kein Versionierungsziel. + +### Prompt 5 +ok lets then stop right hiere. + +### Antwort 5 +Gestoppt, nichts geändert. Befund (kein git-Repo) in Session-Memory festgehalten. + +### Prompt 6 +ok jetzt nochmal implementieren im richtigen repo! + +### Antwort 6 +Echtes Repo gefunden und verifiziert (`~/workspace/ai-tooling/rd13_copilot_setup` +ist jetzt git-Repo, `master`→`origin/master`, volle History, HEAD `114bb5b`). +Anschließend alle freigegebenen WPs in 4 Phasen umgesetzt und je Phase committet. + +**Phase 1 – Hygiene & Bug (Commit `80b6248`)** +- WP2: `.gitignore` um `*:Zone.Identifier` ergänzt (Dateien existieren im echten Checkout nicht mehr). +- WP1: `copilot-bootstrap.fish` neu geschrieben – `/home/rd13server/` → `$HOME`, volle Parität zur `.sh` (`--with-update-hook`, `data/`, `history/`, `docs/`, Hooks, `.gitignore`-Append inkl. Zone.Identifier). +- Verifikation: + ```sh + fish -n scripts/copilot-bootstrap.fish # OK + # Smoke-Test gegen /tmp-Repo + Fake-Template: alle Dateien erzeugt, idempotent + ``` + +**Phase 2a – copilot-update.{sh,fish} (Commit `5890bff`)** +- WP3: Remote-URLs aus `COPILOT_SETUP_REMOTE_SSH/_HTTP` (env) oder Config-Datei + `~/.config/copilot-setup/config` (sh sourcet, fish parst `KEY="value"`). Env hat Vorrang. +- WP5: Offline-Betrieb (lokaler Klon ohne `.git` nutzbar; Pull-Fehler nutzt Cache); + fehlende/unerreichbare Quelle → graceful `exit 0` statt `exit 1`. +- WP4: `detect_vscode_user_dir` (Server/Insiders/VSCodium/Cursor/Flatpak/macOS/Windows-WSL). +- Verifikation (sh + fish, je 3 Szenarien): + ``` + TEST A: no remote, no cache -> graceful exit 0 + TEST B: offline local source -> templates kopiert, exit 0 + TEST C: config-file unreachable-> graceful exit 0 + ``` + +**Phase 2b – deploy.{sh,fish} (Commit `9e14a5f`)** +- WP6: kein globales `init.templateDir`/`git init`-Override mehr; Opt-in-Alias + `git init-copilot`; frühere invasive Werte werden gezielt entfernt (guarded unset). +- WP7: post-merge Auto-Deploy im Setup-Repo nur mit `--with-self-update-hook`. +- WP4: gleiche `detect_vscode_user_dir`; `${USER:-}` gegen `set -u` abgesichert. +- Verifikation (isoliertes HOME, kein Eingriff ins echte Repo): + ``` + deploy.sh/.fish ohne Flag -> kein alias.init, init-copilot gesetzt, kein init.templateDir, Hook gated + --with-self-update-hook (Temp-Repo) -> post-merge hook geschrieben + --bogus -> exit 2 + ``` + +**Phase 3 – CI (Commit `deca872`)** +- WP11: `.github/workflows/ci.yml` (shellcheck + `fish -n` + `scripts/selftest.sh`). +- `scripts/selftest.sh`: Bootstrap-Dry-Run sh+fish gegen isoliertes Fake-HOME mit Assertions. +- `copilot-bootstrap.sh` propagiert nun ebenfalls `*:Zone.Identifier` (Parität). +- shellcheck-Direktiven für bewusste Muster (SC2016, SC1090, SC2043). +- Verifikation: + ```sh + /tmp/shellcheck scripts/*.sh git-templates/hooks/* # exit 0 + sh scripts/selftest.sh # PASS sh + PASS fish + python3 -c "import yaml; yaml.safe_load(open('.github/workflows/ci.yml'))" # YAML OK + ``` + +**Phase 4 – Doku (Commit `afd5b38`)** +- WP12: README + USER + ADMIN + MAINTAINER aktualisiert (Env/Config, Offline, + `init-copilot`, `--with-self-update-hook`, neue Editionen). Tote IP + `192.168.178.6` aus der Doku entfernt. MAINTAINER: CI/selftest + neue Fallstricke. + +## Ergebnis + +- 5 Commits (`80b6248`, `5890bff`, `9e14a5f`, `deca872`, `afd5b38`) + dieser History-Commit. +- Alle Skripte shellcheck-sauber und `fish -n`-sauber; selftest grün (sh+fish). +- Keine hartkodierte Infrastruktur mehr in Skripten; Standard-`git init`/`clone` unberührt. + +## Entscheidungen + +- `detect_vscode_user_dir` bewusst in jedem Skript dupliziert (standalone aus + `~/.local/bin` → keine sourcebare Lib). +- Remote-Präzedenz: env > Config-Datei; keine Quelle = graceful skip (exit 0). +- `init.templateDir`/`alias.init` werden nur entfernt, wenn sie auf unsere + Templates/Bootstrap zeigen (kein Eingriff in fremde Konfiguration). +- fish liest dieselbe sh-Config-Datei per Parser (sourcet sie nicht). + +## Offene Punkte + +- **WP8/WP9** (settings.json: Absolute-Mode-Widerspruch entschärfen, non-destruktiver + Merge) – auf Wunsch zurückgestellt, separat besprechen. +- **WP10** (Vendor-neutrale Namen `rd13`/`cschulz`/`rd13server`) – zurückgestellt. +- Das **Remote dieses Repos** zeigt weiterhin auf die tote IP + `ssh://git@192.168.178.6:2222/...` (bewusst nicht angefasst – separate Entscheidung). diff --git a/history/summary/PROJECT_CONTEXT.md b/history/summary/PROJECT_CONTEXT.md index 2a87069..10a3478 100644 --- a/history/summary/PROJECT_CONTEXT.md +++ b/history/summary/PROJECT_CONTEXT.md @@ -8,7 +8,7 @@ ## Aktueller Projektstatus -**Letzte Aktualisierung:** 2026-06-04 – Bekannte Fallstricke in copilot-instructions.md + Leerzeilen-Fix copilot-update +**Letzte Aktualisierung:** 2026-06-10 – Portabilität & Universalität (WP1–7, 11, 12): konfigurierbares/offline Remote, Opt-in `git init-copilot`, CI + selftest, Doku **Phase:** Produktion / stabil – wird bei Bedarf erweitert --- @@ -29,6 +29,11 @@ Quality Gate aus. | Datum | Aufgabe | Ergebnis | Entscheidungen | |---|---|---|---| +| 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 | @@ -46,6 +51,9 @@ Quality Gate aus. - [ ] `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) --- @@ -63,6 +71,10 @@ Quality Gate aus. | 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` | --- @@ -76,7 +88,7 @@ Quality Gate aus. - **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-Repo Cache:** `~/.copilot-setup/` (überschreibbar mit `COPILOT_SETUP_DIR=...`) +- **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)