feat: post-commit hängt git-block an session-datei an

- Hook erkennt *_session.md Dateien (vom Agent via /history erstellt)
- Modus A: Git-Block an bestehende Konversations-Datei anhängen
- Modus B: Nur Git-Stub wenn kein Agent-Log vorhanden (Hinweis ausgeben)
- history.prompt.md: Dateinamen-Konvention _session.md dokumentiert
This commit is contained in:
Conrad Schulz 2026-06-02 09:26:32 +00:00
parent 16588b1888
commit bc23bd7f92
2 changed files with 51 additions and 22 deletions

View file

@ -2,9 +2,14 @@
# post-commit Automatischer History-Log # post-commit Automatischer History-Log
# #
# Läuft nach jedem erfolgreichen Commit. # Läuft nach jedem erfolgreichen Commit.
# Schreibt einen faktischen Eintrag in history/prompts/ mit: # Zwei Modi:
# - Commit-Hash, Branch, Datum, Message #
# - Liste der geänderten Dateien # A) Session-Datei gefunden (Agent hat /history ausgeführt):
# → Git-Block wird an die bestehende Konversations-Datei ANGEHÄNGT.
# Session-Dateien werden vom Agent mit dem Suffix "_session.md" erstellt.
#
# B) Keine Session-Datei für heute:
# → Neuer Git-Stub (nur Metadaten, kein KI-Inhalt).
# #
# Die Datei wird NICHT automatisch committed (kein Rekursionsrisiko). # Die Datei wird NICHT automatisch committed (kein Rekursionsrisiko).
# Sie wird beim nächsten regulären Commit mit erfasst (history/ ist tracked). # Sie wird beim nächsten regulären Commit mit erfasst (history/ ist tracked).
@ -22,16 +27,15 @@ if [ ! -d "history/prompts" ]; then
exit 0 exit 0
fi fi
# Dateiname: Datum + Branch (bereinigt) + Hash
BRANCH_CLEAN=$(printf '%s' "$BRANCH" | tr '/' '-' | tr ' ' '-')
OUTFILE="history/prompts/${DATE}_${BRANCH_CLEAN}_${HASH}.md"
# Geänderte Dateien dieses Commits # Geänderte Dateien dieses Commits
CHANGED_FILES=$(git diff-tree --no-commit-id -r --name-status "$FULL_HASH" 2>/dev/null \ CHANGED_FILES=$(git diff-tree --no-commit-id -r --name-status "$FULL_HASH" 2>/dev/null \
| awk '{printf "| %-1s | %s |\n", $1, $2}') | awk '{printf "| %-1s | %s |\n", $1, $2}')
cat > "$OUTFILE" << EOF GIT_BLOCK=$(cat << EOF
# Auto-Log: $MSG
---
## Git Commit
| Feld | Wert | | Feld | Wert |
|---|---| |---|---|
@ -40,24 +44,44 @@ cat > "$OUTFILE" << EOF
| Commit | \`$FULL_HASH\` | | Commit | \`$FULL_HASH\` |
| Autor | $AUTHOR | | Autor | $AUTHOR |
## Commit Message ### Commit Message
\`\`\` \`\`\`
$MSG $MSG
\`\`\` \`\`\`
## Geänderte Dateien ### Geänderte Dateien
| Status | Datei | | Status | Datei |
|---|---| |---|---|
$CHANGED_FILES $CHANGED_FILES
--- ---
*Automatisch generiert durch post-commit hook kein KI-Inhalt.* *Git-Block automatisch generiert durch post-commit hook.*
*Für KI-generierte Zusammenfassung: Copilot Chat → \`/history\`*
EOF EOF
)
# Staging-Info ausgeben (nicht automatisch stagen vermeidet Komplikationen) # Modus A: Session-Datei vom Agent für heute suchen (Suffix: _session.md)
SESSION_FILE=$(ls "history/prompts/${DATE}_"*"_session.md" 2>/dev/null | tail -1)
if [ -n "$SESSION_FILE" ]; then
printf '%s\n' "$GIT_BLOCK" >> "$SESSION_FILE"
echo "" echo ""
echo " ✓ history: $(basename "$OUTFILE") geschrieben" echo " ✓ history: Git-Block angehängt an $(basename "$SESSION_FILE")"
echo " → Konversation + Commit in einer Datei"
else
# Modus B: Kein Agent-Log reinen Git-Stub anlegen
BRANCH_CLEAN=$(printf '%s' "$BRANCH" | tr '/' '-' | tr ' ' '-')
OUTFILE="history/prompts/${DATE}_${BRANCH_CLEAN}_${HASH}.md"
cat > "$OUTFILE" << STUB
# Auto-Log: $MSG
$GIT_BLOCK
*Kein Agent-Log vorhanden. Für vollständige Konversation: Copilot Chat → \`/history\` vor dem Commit ausführen.*
STUB
echo ""
echo " ✓ history: $(basename "$OUTFILE") geschrieben (nur Git-Metadaten)"
echo " → Tipp: '/history' vor dem Commit für vollständige Konversation"
fi
echo " → wird beim nächsten Commit automatisch erfasst" echo " → wird beim nächsten Commit automatisch erfasst"

View file

@ -9,10 +9,14 @@ 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/{{DATUM}}_{{TITEL}}.md` mit folgendem Inhalt: Erstelle eine neue Datei `history/prompts/{{DATUM}}_{{TITEL}}_session.md` mit der vollständigen Konversation.
- Alle Fragen, Antworten, Entscheidungen aus dieser Sitzung
- Datum und Aufgabentitel im Dateinamen (Format: `YYYY-MM-DD_kurz-beschreibung.md`) **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.
- Vollständig nichts weglassen
Format: `YYYY-MM-DD_kurz-beschreibung_session.md`
Beispiel: `2026-06-02_tile-server-martin-setup_session.md`
Inhalt: **vollständig** alle Prompts, Antworten, ausgeführte Befehle, Fehlermeldungen und Entscheidungen dieser Sitzung.
Struktur: Struktur:
```markdown ```markdown
@ -22,11 +26,12 @@ Struktur:
[Was sollte erreicht werden] [Was sollte erreicht werden]
## Verlauf ## Verlauf
### Prompt 1 ### Prompt 1
[Frage/Anweisung] [Frage/Anweisung des Users]
### Antwort 1 ### Antwort 1
[Was der Agent geantwortet / getan hat] [Was der Agent geantwortet / getan hat, inkl. ausgeführter Befehle und deren Output]
### Prompt 2 ### Prompt 2