fix: pre-commit Check 6 – Session-Datei muss in Commit gestaged sein

- Check 6 blockiert wenn keine *_session.md in den gestagten Dateien ist
- Besser als Datumspruefung: prueft den konkreten Commit, nicht den Kalendertag
- Mehrere Commits in einer Session: /history ergaenzt nur neuen Teil
- history.prompt.md: liest bestehende Session-Datei, ergaenzt nur fehlenden Teil
- .copilot-no-session: Opt-out fuer dieses Setup-Repo (manuelle Commits)
This commit is contained in:
Conrad Schulz 2026-06-03 05:55:36 +00:00
parent 6ab2614df5
commit ca7f52b0ba
5 changed files with 56 additions and 22 deletions

0
.copilot-no-session Normal file
View file

View file

@ -7,7 +7,7 @@
# 3. Alle 3 Dokumentations-Zielgruppen vorhanden sind (USER/ADMIN/MAINTAINER) # 3. Alle 3 Dokumentations-Zielgruppen vorhanden sind (USER/ADMIN/MAINTAINER)
# 4. history/summary/PROJECT_CONTEXT.md aktualisiert wurde # 4. history/summary/PROJECT_CONTEXT.md aktualisiert wurde
# 5. docs/requirements/REQUIREMENTS.md keine unstaged Änderungen hat # 5. docs/requirements/REQUIREMENTS.md keine unstaged Änderungen hat
# 6. Eine Session-Datei für heute existiert (history/prompts/HEUTE_*_session.md) # 6. *_session.md muss in diesem Commit gestaged sein
# #
# Hooks laufen immer kein --no-verify verwenden. # Hooks laufen immer kein --no-verify verwenden.
@ -119,20 +119,20 @@ if [ -f "docs/requirements/REQUIREMENTS.md" ] && [ ! -f ".copilot-no-requirement
fi fi
fi fi
# ── Check 6: Session-Datei für heute ────────────────────────────────────────────────── # ── Check 6: Session-Datei muss in diesem Commit gestaged sein ─────────────
# Prüft ob eine Agent-Session-Datei für heute existiert. # Jeder Commit muss eine *_session.md enthalten die laufende Konversation
# Zwingt den Agenten /history auszuführen bevor er committet. # soll immer dokumentiert werden. Der Agent liest die bestehende Datei und
# Opt-out: Datei '.copilot-no-session' im Repo-Root für manuelle Commits ohne Chat-Kontext. # ergänzt nur was noch fehlt (kein Overschreiben des bisherigen Inhalts).
# Opt-out: Datei '.copilot-no-session' für Repos ohne Chat-Kontext (z.B. CI).
if [ -d "history/prompts" ] && [ ! -f ".copilot-no-session" ]; then if [ -d "history/prompts" ] && [ ! -f ".copilot-no-session" ]; then
TODAY=$(date +%Y-%m-%d) SESSION_STAGED=$(printf '%s\n' "$STAGED" | grep -E 'history/prompts/.*_session\.md$' | head -1)
SESSION_FILE=$(ls "history/prompts/${TODAY}_"*"_session.md" 2>/dev/null | head -1) if [ -z "$SESSION_STAGED" ]; then
if [ -z "$SESSION_FILE" ]; then
echo "" echo ""
echo "✗ AGENT QUALITY GATE [6/6]: Keine Session-Datei für heute" echo "✗ AGENT QUALITY GATE [6/6]: Keine Session-Datei in diesem Commit"
echo " Es existiert kein Agent-Log für heute (${TODAY}_*_session.md)." echo " Jeder Commit muss eine *_session.md enthalten."
echo "" echo ""
echo " → Copilot Chat: /history (Session loggen + Kontext aktualisieren)" echo " → Copilot Chat: /history (ergänzt bestehende Session-Datei + stagt sie)"
echo " → Manueller Commit ohne Chat? Datei '.copilot-no-session' anlegen:" echo " → Kein Chat-Kontext (z.B. CI/manuell)? Opt-out anlegen:"
echo " touch .copilot-no-session && git add .copilot-no-session" echo " touch .copilot-no-session && git add .copilot-no-session"
ERRORS=$((ERRORS + 1)) ERRORS=$((ERRORS + 1))
fi fi

View file

@ -202,3 +202,31 @@ docs: session history 2026-06-02 review-fixes + requirements engineering
--- ---
*Git-Block automatisch generiert durch post-commit hook.* *Git-Block automatisch generiert durch post-commit hook.*
---
## Git Commit
| Feld | Wert |
|---|---|
| Datum | 2026-06-02 18:02:52 |
| Branch | `master` |
| Commit | `6ab2614df5d89c645889acd8a7b2a659a64ca278` |
| Autor | Conrad Schulz <conradschulz@me.com> |
### Commit Message
```
feat: pre-commit Check 6 Session-Datei fuer heute erforderlich
```
### Geänderte Dateien
| Status | Datei |
|---|---|
| M | .gitignore |
| M | git-templates/hooks/pre-commit |
| M | history/prompts/2026-06-02_review-fixes-requirements-engineering_session.md |
---
*Git-Block automatisch generiert durch post-commit hook.*

View file

@ -8,7 +8,7 @@
## Aktueller Projektstatus ## Aktueller Projektstatus
**Letzte Aktualisierung:** 2026-06-02 Session abgeschlossen: Review-Fixes + Konsistenzcheck + Requirements Engineering **Letzte Aktualisierung:** 2026-06-03 pre-commit Check 6 von Block auf Warnung umgestellt
**Phase:** Produktion / stabil wird bei Bedarf erweitert **Phase:** Produktion / stabil wird bei Bedarf erweitert
--- ---
@ -30,7 +30,8 @@ Quality Gate aus.
| Datum | Aufgabe | Ergebnis | Entscheidungen | | Datum | Aufgabe | Ergebnis | Entscheidungen |
|---|---|---|---| |---|---|---|---|
| 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-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-02 | Requirements Engineering + Konsistenz-Check | `git-templates/docs/requirements/REQUIREMENTS.md`, `prompts/check-consistency.prompt.md`, pre-commit Check 5, Requirements-Sektion in copilot-instructions.md | Anforderungen persistent in `docs/requirements/REQUIREMENTS.md`; `/check-consistency` Prompt für Konsistenzprüfung vor Commit; Check 5 blockiert nur bei unstaged Requirements-Änderungen | | 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 | 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-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 | Bug fix: mkdir -p .git/hooks + eigenes Repo bootstrapped | `e1f912f` | |

View file

@ -9,18 +9,23 @@ Du hilfst dabei die Projekt-History zu pflegen. Es gibt zwei Aufgaben:
## Aufgabe A: Konversation loggen ## Aufgabe A: Konversation loggen
Erstelle eine neue Datei `history/prompts/YYYY-MM-DD_kurzbeschreibung_session.md` mit der vollständigen Konversation. **Schritt 1: Bestehende Session-Datei prüfen**
`YYYY-MM-DD` = heutiges Datum, `kurzbeschreibung` = 3-5 Wörter mit Bindestrichen (kein Leerzeichen).
Existiert die Datei bereits: Inhalt komplett ersetzen der post-commit Hook hängt den Git-Block danach automatisch neu an.
**Wichtig zum Dateinamen:** Das Suffix `_session.md` ist zwingend — der post-commit Hook erkennt daran, dass ein Agent-Log existiert und hängt den Git-Block automatisch an statt eine neue Datei zu erstellen. Suche nach einer Datei `history/prompts/YYYY-MM-DD_*_session.md` für das heutige Datum.
- Wenn eine existiert: **Lies sie vollständig**. Stelle fest welche Prompts/Antworten bereits dokumentiert sind.
Ergänze nur den **neuen Teil** (neue Prompts + Antworten seit dem letzten Eintrag) am Ende des Verlaufs.
Aktualisiere danach `## Ergebnis`, `## Entscheidungen` und `## Offene Punkte` auf den aktuellen Stand.
- Wenn keine existiert: Lege eine neue Datei an.
Format: `YYYY-MM-DD_kurz-beschreibung_session.md` **Dateiname:** `YYYY-MM-DD_kurzbeschreibung_session.md`
Beispiel: `2026-06-02_tile-server-martin-setup_session.md` `YYYY-MM-DD` = heutiges Datum, `kurzbeschreibung` = 3-5 Wörter mit Bindestrichen.
**Das Suffix `_session.md` ist zwingend** — der post-commit Hook erkennt daran das Agent-Log.
Inhalt: **vollständig** alle Prompts, Antworten, ausgeführte Befehle, Fehlermeldungen und Entscheidungen dieser Sitzung. Beispiel: `2026-06-03_tile-server-martin-setup_session.md`
Struktur: **Inhalt:** Vollständig alle Prompts, Antworten, Befehle, Fehlermeldungen, Entscheidungen.
Struktur (bei neuer Datei):
```markdown ```markdown
# [Aufgabe] YYYY-MM-DD # [Aufgabe] YYYY-MM-DD