fix: .copilot-no-session/.copilot-no-docs entfernt + alle 3 Docs aktualisiert

- .copilot-no-session entfernt: Session-Pflicht gilt auch fuer dieses Repo
- .copilot-no-docs entfernt: Doku-Pflicht gilt, README + Docs sollen aktuell bleiben
- copilot-instructions.md (beide): Session END explizit mit Check-6-Hinweis
- docs/ADMIN.md: Opt-out Dateien dokumentiert, Troubleshooting aktualisiert
- docs/USER.md: /check-consistency ergaenzt, Hook-Fehler Optionen aktualisiert
- docs/MAINTAINER.md: Dateistruktur + Designentscheidungen aktuell
This commit is contained in:
Conrad Schulz 2026-06-03 06:07:57 +00:00
parent ca7f52b0ba
commit 2d318f3654
10 changed files with 188 additions and 15 deletions

View file

View file

View file

@ -9,11 +9,12 @@
2. Verstehe den aktuellen Projektzustand bevor du anfängst 2. Verstehe den aktuellen Projektzustand bevor du anfängst
**Session END** Führe `/history` im Copilot Chat aus um die Session abzuschließen: **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 **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 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". > Kein Bypass. Kein Vergessen. Kein "mache ich beim nächsten Mal".
> Die History ist das Gedächtnis des Projekts. > Die History ist das Gedächtnis des Projekts.

View file

@ -78,6 +78,30 @@ chmod +x /path/to/repo/.git/hooks/pre-commit
chmod -x .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 ## 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 | | `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 | | `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 | | Hook nicht aktiv nach `git clone` | Hooks werden bei `clone` nicht kopiert | `copilot-bootstrap.sh` im geklonten Repo ausführen |

View file

@ -42,20 +42,25 @@ rd13_copilot_setup/
│ │ ├── settings.json ← Repo-spezifische VS Code Einstellungen │ │ ├── settings.json ← Repo-spezifische VS Code Einstellungen
│ │ └── extensions.json ← Empfohlene Extensions für neue Repos │ │ └── extensions.json ← Empfohlene Extensions für neue Repos
│ ├── hooks/ │ ├── 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/ │ ├── docs/
│ │ ├── USER.md ← Template Endnutzer-Doku │ │ ├── USER.md ← Template Endnutzer-Doku
│ │ ├── ADMIN.md ← Template Admin-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/ │ └── history/
│ └── summary/ │ └── summary/
│ └── PROJECT_CONTEXT.md ← Template Agent-Kontext-Summary │ └── PROJECT_CONTEXT.md ← Template Agent-Kontext-Summary
├── prompts/ ← Wiederverwendbare Copilot-Workflows ├── prompts/ ← Wiederverwendbare Copilot-Workflows
│ └── *.prompt.md │ └── *.prompt.md ← /requirements /history /check-consistency ...
├── scripts/ ├── scripts/
│ ├── deploy.sh ← Bash-Deploy (macOS + Linux) │ ├── deploy.sh ← Bash-Deploy (macOS + Linux)
│ ├── deploy.fish ← Fish-Deploy (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) │ └── copilot-bootstrap.fish ← Fish-Variante (legacy, optional)
└── user-settings/ └── user-settings/
└── settings.json ← VS Code User-Level Settings (Layer 1) └── 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 | | 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 | | `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 | | `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` |

View file

@ -78,6 +78,7 @@ In GitHub Copilot Chat einfach `/` tippen:
| `/done-check` | Definition of Done Checkliste | | `/done-check` | Definition of Done Checkliste |
| `/docker` | Docker/Compose-Aufgaben | | `/docker` | Docker/Compose-Aufgaben |
| `/history` | Agent-History loggen + Kontext-Summary aktualisieren | | `/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. Das deploy-Skript wurde noch nicht auf diesem System ausgeführt. Schritt 1+2 wiederholen.
**Der pre-commit Hook blockiert meinen Commit** **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` - Tests schreiben: Copilot Chat → `/write-tests`
- Dokumentation aktualisieren: `docs/USER.md`, `docs/ADMIN.md` oder `docs/MAINTAINER.md` - 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** **Ich will die Templates aktualisieren**
Im `rd13_copilot_setup`-Repo die Dateien in `git-templates/` ändern, committen, dann `deploy.sh` erneut ausführen. Im `rd13_copilot_setup`-Repo die Dateien in `git-templates/` ändern, committen, dann `deploy.sh` erneut ausführen.

View file

@ -9,11 +9,12 @@
2. Verstehe den aktuellen Projektzustand bevor du anfängst 2. Verstehe den aktuellen Projektzustand bevor du anfängst
**Session END** Führe `/history` im Copilot Chat aus um die Session abzuschließen: **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 **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 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". > Kein Bypass. Kein Vergessen. Kein "mache ich beim nächsten Mal".
> Die History ist das Gedächtnis des Projekts. > Die History ist das Gedächtnis des Projekts.

View file

@ -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 <conradschulz@me.com> |
### 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.*

View file

@ -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

View file

@ -8,7 +8,7 @@
## Aktueller Projektstatus ## 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 **Phase:** Produktion / stabil wird bei Bedarf erweitert
--- ---