rd13_copilot_setup/history/prompts/2026-06-10_portabilitaet-universalitaet_session.md
Conrad Schulz be5ff0fda3 docs(history): session 2026-06-10 portability + update PROJECT_CONTEXT
Vollstaendiges Session-Log (WP1-7,11,12) und aktualisierter PROJECT_CONTEXT: neue erledigte Aufgaben, offene Punkte (WP8/9/10 zurueckgestellt, totes Repo-Remote), Designentscheidungen und Pfade.
2026-06-10 10:59:45 +02:00

6.5 KiB
Raw Blame History

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 (WP1WP12) abgeleitet und einzeln zur Umsetzung freigegeben. Umgesetzt: WP1WP7, 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, masterorigin/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:
    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:
    /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).