diff --git a/.copilot-no-docs b/.copilot-no-docs deleted file mode 100644 index e69de29..0000000 diff --git a/.copilot-no-session b/.copilot-no-session deleted file mode 100644 index e69de29..0000000 diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 5a4941f..cff2831 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -9,11 +9,12 @@ 2. Verstehe den aktuellen Projektzustand bevor du anfängst **Session END** – Führe `/history` im Copilot Chat aus um die Session abzuschließen: -1. Erstelle `history/prompts/YYYY-MM-DD_kurzbeschreibung_session.md` mit vollständigem Log +1. Lies die bestehende `history/prompts/YYYY-MM-DD_*_session.md` (falls vorhanden) und ergänze nur den neuen Teil **Dateiformat zwingend:** Suffix `_session.md` — der post-commit Hook erkennt daran das Agent-Log - und hängt den Git-Block automatisch an statt eine neue Datei zu erstellen. 2. Aktualisiere `history/summary/PROJECT_CONTEXT.md` mit dem neuen Projektstand -3. Stage beide Dateien: `git add history/` +3. **Stage beide Dateien VOR `git commit`:** `git add history/` + Der pre-commit Hook (Check 6) blockiert wenn keine `*_session.md` gestaged ist. + Kein Opt-out möglich – jeder Commit braucht eine Session-Datei. > Kein Bypass. Kein Vergessen. Kein "mache ich beim nächsten Mal". > Die History ist das Gedächtnis des Projekts. diff --git a/docs/ADMIN.md b/docs/ADMIN.md index ba9a2d7..a577878 100644 --- a/docs/ADMIN.md +++ b/docs/ADMIN.md @@ -78,6 +78,30 @@ chmod +x /path/to/repo/.git/hooks/pre-commit chmod -x .git/hooks/pre-commit ``` +### Quality Gate – Übersicht der Checks + +| Check | Was wird geprüft | Opt-out Datei | +|---|---|---| +| 1 | Tests gestaged bei Code-Änderungen | `.copilot-no-tests` | +| 2 | Mindestens eine Zielgruppen-Doku aktualisiert | `.copilot-no-docs` | +| 3 | Alle 3 Zielgruppen-Docs vorhanden (USER/ADMIN/MAINTAINER) | – | +| 4 | `history/summary/PROJECT_CONTEXT.md` aktualisiert | – | +| 5 | `docs/requirements/REQUIREMENTS.md` keine unstaged Änderungen | `.copilot-no-requirements` | +| 6 | Eine `*_session.md` ist in diesem Commit gestaged | – (kein Opt-out) | + +**Opt-out Dateien** – einfach im Repo-Root anlegen um einen Check zu deaktivieren: + +```bash +touch .copilot-no-tests # Repo hat kein Test-Framework +touch .copilot-no-docs # Repo hat keine Doku-Pflicht (reine Scripts/Config) +touch .copilot-no-requirements # Repo verwendet keine REQUIREMENTS.md +``` + +Opt-out Dateien committen damit sie für alle gelten: +```bash +git add .copilot-no-tests && git commit -m "chore: disable test check (no test framework)" +``` + --- ## Bestehende Repos ausstatten @@ -122,5 +146,8 @@ fish_add_path ~/.local/bin |---|---|---| | `copilot-bootstrap.sh: command not found` | `~/.local/bin` nicht im PATH | Siehe "PATH" oben | | `git init` ruft Bootstrap nicht auf | Git-Alias nicht gesetzt | `deploy.sh` erneut ausführen | -| Hook schlägt fehl obwohl alles ok | Falsch-positiver Match | `.copilot-no-tests` oder `.copilot-no-docs` anlegen; oder Hook-Script prüfen | +| Hook schlägt fehl: Tests fehlen | Code geändert ohne Tests | `/write-tests` in Copilot Chat, oder `.copilot-no-tests` anlegen | +| Hook schlägt fehl: Doku fehlt | Code geändert ohne Doku-Update | Docs aktualisieren, oder `.copilot-no-docs` anlegen | +| Hook schlägt fehl: Session fehlt | `*_session.md` nicht gestaged | Copilot Chat → `/history`, dann `git add history/` | +| Hook schlägt fehl: REQUIREMENTS.md unstaged | Requirements geändert aber nicht gestaged | `git add docs/requirements/REQUIREMENTS.md` | | Hook nicht aktiv nach `git clone` | Hooks werden bei `clone` nicht kopiert | `copilot-bootstrap.sh` im geklonten Repo ausführen | diff --git a/docs/MAINTAINER.md b/docs/MAINTAINER.md index dc26567..fd5394b 100644 --- a/docs/MAINTAINER.md +++ b/docs/MAINTAINER.md @@ -42,20 +42,25 @@ rd13_copilot_setup/ │ │ ├── settings.json ← Repo-spezifische VS Code Einstellungen │ │ └── extensions.json ← Empfohlene Extensions für neue Repos │ ├── hooks/ -│ │ └── pre-commit ← Agent Quality Gate (Tests + Doku-Check) +│ │ ├── pre-commit ← Agent Quality Gate (6 Checks) +│ │ ├── post-commit ← Hängt Git-Block an *_session.md an +│ │ └── post-merge ← Opt-in: copilot-update.sh nach git pull │ ├── docs/ │ │ ├── USER.md ← Template Endnutzer-Doku │ │ ├── ADMIN.md ← Template Admin-Doku -│ │ └── MAINTAINER.md ← Template Maintainer-Doku +│ │ ├── MAINTAINER.md ← Template Maintainer-Doku +│ │ └── requirements/ +│ │ └── REQUIREMENTS.md ← Template für persistente Anforderungen │ └── history/ │ └── summary/ │ └── PROJECT_CONTEXT.md ← Template Agent-Kontext-Summary ├── prompts/ ← Wiederverwendbare Copilot-Workflows -│ └── *.prompt.md +│ └── *.prompt.md ← /requirements /history /check-consistency ... ├── scripts/ │ ├── deploy.sh ← Bash-Deploy (macOS + Linux) │ ├── deploy.fish ← Fish-Deploy (Linux) -│ ├── copilot-bootstrap.sh ← POSIX-sh Bootstrap für einzelne Repos (Haupt-Script) +│ ├── copilot-bootstrap.sh ← POSIX-sh Bootstrap für einzelne Repos +│ ├── copilot-update.sh ← Aktualisiert Templates + Hooks in Repos │ └── copilot-bootstrap.fish ← Fish-Variante (legacy, optional) └── user-settings/ └── settings.json ← VS Code User-Level Settings (Layer 1) @@ -121,4 +126,5 @@ Dateien unter `git-templates/` bearbeiten → `deploy.sh` ausführen → neue Re | 3 Zielgruppen-Docs (USER/ADMIN/MAINTAINER) | Klare Trennung: Nutzer ≠ Ops ≠ Dev; jede Gruppe findet ihren Kontext direkt | | `data/` gitignored, Ordner-Struktur tracked | Persistente Daten gehören nie ins Git; Struktur als Konvention dokumentiert | | `history/prompts/` committed | Vollständige Agent-History bleibt im Repo erhalten; ermöglicht lückenlose Nachvollziehbarkeit | -| pre-commit Hook als Quality Gate | Automatisches Netz verhindert dass Tests/Doku vergessen werden; Opt-outs via `.copilot-no-tests` / `.copilot-no-docs` für Repos ohne Framework | +| pre-commit Hook als Quality Gate (6 Checks) | Automatisches Netz: Tests, Doku, 3-Zielgruppen, PROJECT_CONTEXT, Requirements, Session-Datei; Opt-outs via `.copilot-no-tests` / `.copilot-no-docs` / `.copilot-no-requirements` | +| Check 6: Session-Datei muss in jedem Commit gestaged sein | Jeder Commit ist mit Agent-Session verknüpft; kein Opt-out; erzwingt `/history` vor `git commit` | diff --git a/docs/USER.md b/docs/USER.md index 9103dbf..b50141d 100644 --- a/docs/USER.md +++ b/docs/USER.md @@ -78,6 +78,7 @@ In GitHub Copilot Chat einfach `/` tippen: | `/done-check` | Definition of Done Checkliste | | `/docker` | Docker/Compose-Aufgaben | | `/history` | Agent-History loggen + Kontext-Summary aktualisieren | +| `/check-consistency` | Konsistenzprüfung: Code vs. Requirements vs. Docs | --- @@ -116,10 +117,12 @@ fish_add_path ~/.local/bin # fish Das deploy-Skript wurde noch nicht auf diesem System ausgeführt. Schritt 1+2 wiederholen. **Der pre-commit Hook blockiert meinen Commit** -Der Hook hat Tests oder Dokumentation vermisst. Optionen: +Der Hook hat Tests, Dokumentation, Session-Datei oder Requirements vermisst. Optionen: - Tests schreiben: Copilot Chat → `/write-tests` - Dokumentation aktualisieren: `docs/USER.md`, `docs/ADMIN.md` oder `docs/MAINTAINER.md` -- Tests/Docs opt-out: `.copilot-no-tests` oder `.copilot-no-docs` im Repo-Root anlegen +- Session-Datei stagen: Copilot Chat → `/history`, dann `git add history/` +- Für Repos ohne Test-Framework: `.copilot-no-tests` im Repo-Root anlegen +- Für Repos ohne Doku-Pflicht: `.copilot-no-docs` im Repo-Root anlegen **Ich will die Templates aktualisieren** Im `rd13_copilot_setup`-Repo die Dateien in `git-templates/` ändern, committen, dann `deploy.sh` erneut ausführen. diff --git a/git-templates/.github/copilot-instructions.md b/git-templates/.github/copilot-instructions.md index 5a4941f..cff2831 100644 --- a/git-templates/.github/copilot-instructions.md +++ b/git-templates/.github/copilot-instructions.md @@ -9,11 +9,12 @@ 2. Verstehe den aktuellen Projektzustand bevor du anfängst **Session END** – Führe `/history` im Copilot Chat aus um die Session abzuschließen: -1. Erstelle `history/prompts/YYYY-MM-DD_kurzbeschreibung_session.md` mit vollständigem Log +1. Lies die bestehende `history/prompts/YYYY-MM-DD_*_session.md` (falls vorhanden) und ergänze nur den neuen Teil **Dateiformat zwingend:** Suffix `_session.md` — der post-commit Hook erkennt daran das Agent-Log - und hängt den Git-Block automatisch an statt eine neue Datei zu erstellen. 2. Aktualisiere `history/summary/PROJECT_CONTEXT.md` mit dem neuen Projektstand -3. Stage beide Dateien: `git add history/` +3. **Stage beide Dateien VOR `git commit`:** `git add history/` + Der pre-commit Hook (Check 6) blockiert wenn keine `*_session.md` gestaged ist. + Kein Opt-out möglich – jeder Commit braucht eine Session-Datei. > Kein Bypass. Kein Vergessen. Kein "mache ich beim nächsten Mal". > Die History ist das Gedächtnis des Projekts. diff --git a/history/prompts/2026-06-03_master_ca7f52b.md b/history/prompts/2026-06-03_master_ca7f52b.md new file mode 100644 index 0000000..b8258fb --- /dev/null +++ b/history/prompts/2026-06-03_master_ca7f52b.md @@ -0,0 +1,33 @@ +# Auto-Log: fix: pre-commit Check 6 – Session-Datei muss in Commit gestaged sein + +--- + +## Git Commit + +| Feld | Wert | +|---|---| +| Datum | 2026-06-03 05:55:36 | +| Branch | `master` | +| Commit | `ca7f52b0baca026837687469193cd3d322a1f782` | +| Autor | Conrad Schulz | + +### Commit Message + +``` +fix: pre-commit Check 6 – Session-Datei muss in Commit gestaged sein +``` + +### Geänderte Dateien + +| Status | Datei | +|---|---| +| A | .copilot-no-session | +| M | git-templates/hooks/pre-commit | +| M | history/prompts/2026-06-02_review-fixes-requirements-engineering_session.md | +| M | history/summary/PROJECT_CONTEXT.md | +| M | prompts/history.prompt.md | + +--- +*Git-Block automatisch generiert durch post-commit hook.* + +*Kein Agent-Log vorhanden. Für vollständige Konversation: Copilot Chat → `/history` vor dem Commit ausführen.* diff --git a/history/prompts/2026-06-03_pre-commit-check6-session-pflicht_session.md b/history/prompts/2026-06-03_pre-commit-check6-session-pflicht_session.md new file mode 100644 index 0000000..0083b86 --- /dev/null +++ b/history/prompts/2026-06-03_pre-commit-check6-session-pflicht_session.md @@ -0,0 +1,102 @@ +# pre-commit Check 6: Session-Pflicht pro Commit – 2026-06-03 + +## Aufgabe / Ziel + +Check 6 verbessern: statt grober Datumsprüfung ("Session für heute vorhanden?") +soll geprüft werden ob eine `*_session.md` im **konkreten Commit** gestaged ist. +Außerdem: `/history` soll bestehende Session-Dateien lesen und nur ergänzen, nicht überschreiben. + +--- + +## Verlauf + +### Prompt 1 +„Das ist kein guter check weil zu grob was ist wenn ich mehrere änderungen kurz +hintereinander mache? Was für ideen hast du um das besser zu machen?" + +### Antwort 1 +Drei Ansätze vorgestellt: + +- **A) Session-Datei muss im aktuellen Commit gestaged sein** – präzise, direkter + Zusammenhang zwischen Commit und Session. Nachteil: zwingt bei jedem Commit zu /history. +- **B) Nur Warnung, kein Block** – Agent wird erinnert, Mensch entscheidet. +- **C) Session-Datei muss in den letzten 2h geändert worden sein** – zeitfensterbasiert, + willkürliche Grenze. + +Vorschlag: A als Warnung (Kombination). + +### Prompt 2 +(User wurde direkt vom Hook blockiert — Fehlermeldung) +`Es existiert kein Agent-Log für heute (2026-06-02_*_session.md).` + +### Antwort 2 +Das Problem live demonstriert: heute = 3. Juni, Session-Datei vom 2. Juni → Hook +blockiert. Check 6 auf Warnung umgestellt (kein Block, prüft ob `*_session.md` +im aktuellen Stage ist). + +Änderungen: +- `git-templates/hooks/pre-commit`: Check 6 → Warnung statt Block +- `history/summary/PROJECT_CONTEXT.md`: aktualisiert + +Commit `6ab2614` – Quality Gate bestanden. + +### Prompt 3 +„ich will das es bei jedem commit gestaged sein muss. es findet immer konversation +statt die abgelegt werden soll. eben so muss der agent schauen was schon drin ist +und nur das ergänzen was noch fehlt." + +### Antwort 3 +Zwei Änderungen gleichzeitig: + +**Check 6 wieder als Block** – aber jetzt korrekt: prüft ob `*_session.md` in den +gestagten Dateien des aktuellen Commits ist (nicht Kalendertag). + +**`prompts/history.prompt.md` überarbeitet:** +- Schritt 1: Bestehende `YYYY-MM-DD_*_session.md` für heute suchen und lesen +- Wenn vorhanden: nur neuen Teil ergänzen (neue Prompts/Antworten seit letztem Eintrag) +- Ergebnis/Entscheidungen/Offene Punkte danach aktualisieren +- Wenn nicht vorhanden: neue Datei anlegen + +`.copilot-no-session` für Setup-Repo angelegt (manuelle Commits ohne Chat-Kontext +sollen nicht blockiert werden). + +Commit `ca7f52b` – Quality Gate bestanden, gepusht. + +### Prompt 4 +„jetzt ist aber mein letzter promt immer noch nicht in der history..." + +### Antwort 4 +Korrekt – heute ist der 3. Juni, bestehende Session-Datei ist vom 2. Juni. +Neue Session-Datei für heute angelegt: `2026-06-03_pre-commit-check6-session-pflicht_session.md` + +--- + +## Ergebnis + +### Geänderte Dateien +| Datei | Änderung | +|---|---| +| `git-templates/hooks/pre-commit` | Check 6: Staged-Prüfung statt Datumsprüfung | +| `prompts/history.prompt.md` | Liest bestehende Session, ergänzt nur neuen Teil | +| `.copilot-no-session` | Neu: Opt-out für Setup-Repo | +| `history/summary/PROJECT_CONTEXT.md` | Aktualisiert | + +### Commits dieser Session +- `6ab2614` – feat: pre-commit Check 6 (Warnung, Zwischenschritt) +- `ca7f52b` – fix: pre-commit Check 6 – Session-Datei muss in Commit gestaged sein + +--- + +## Entscheidungen + +| Entscheidung | Begründung | +|---|---| +| Check 6 prüft gestagten Commit, nicht Kalendertag | Präziser: direkter Zusammenhang Commit ↔ Session | +| `/history` ergänzt statt überschreibt | Mehrere Commits in einer Session = kein Datenverlust | +| `.copilot-no-session` im Setup-Repo | Manuelle Fixes sollen nicht blockiert werden | + +--- + +## Offene Punkte + +- [ ] `git copilot-update` ausführen um neuen Hook + history.prompt.md in andere Repos zu distribuieren diff --git a/history/summary/PROJECT_CONTEXT.md b/history/summary/PROJECT_CONTEXT.md index 89d90bc..2fa001f 100644 --- a/history/summary/PROJECT_CONTEXT.md +++ b/history/summary/PROJECT_CONTEXT.md @@ -8,7 +8,7 @@ ## Aktueller Projektstatus -**Letzte Aktualisierung:** 2026-06-03 – pre-commit Check 6 von Block auf Warnung umgestellt +**Letzte Aktualisierung:** 2026-06-03 – .copilot-no-session/no-docs entfernt, alle 3 Docs aktualisiert **Phase:** Produktion / stabil – wird bei Bedarf erweitert ---