S01: Checkpoint-Tooling eingeführt: checkpoint.cmd + checkpoint.ps1; Regel R7 ergänzt; agent-prompt.md auf Checkpoint-Workflow umgestellt

This commit is contained in:
tlg
2026-04-14 09:18:47 +02:00
parent 0c6cfda3d6
commit abf0c037ee
5 changed files with 174 additions and 28 deletions

2
.checkpoint-pending.txt Normal file
View File

@@ -0,0 +1,2 @@
S01
Checkpoint-Tooling eingeführt: checkpoint.cmd + checkpoint.ps1; Regel R7 ergänzt; agent-prompt.md auf Checkpoint-Workflow umgestellt ✅

View File

@@ -8,12 +8,15 @@ Alle Dateien liegen im Ordner `Q:\DesTEngS\Pro\Git\marketing\claude_cowork` (Git
``` ```
claude_cowork/ claude_cowork/
├── agent-prompt.md # Diese Datei Hauptanweisung + aktueller Stand ├── agent-prompt.md # Diese Datei Hauptanweisung + aktueller Stand
├── zentral-index.md # Überblick aller Teilgebiete (Status, Priorität, Abhängigkeiten) ├── zentral-index.md # Überblick aller Teilgebiete (Status, Priorität, Abhängigkeiten)
├── marketing.md # Unternehmensdaten, Zielgruppe, Positionierung, Tonalität ├── marketing.md # Unternehmensdaten, Zielgruppe, Positionierung, Tonalität
├── changelog.md # Chronologisches Entscheidungslog (append-only) ├── changelog.md # Chronologisches Entscheidungslog (append-only)
├── teilgebiete/ # Pro Teilgebiet eine Detail-Datei (NN-<name>.md) ├── checkpoint.cmd # Tooling: Changelog-Eintrag + Git-Commit (von Thomas ausgeführt)
── artefakte/ # Pro Teilgebiet ein Unterordner mit fertigen Materialien ── checkpoint.ps1 # Tooling: PowerShell-Logik hinter checkpoint.cmd
├── .checkpoint-pending.txt # Temporäre Übergabedatei vom Agent an checkpoint.cmd
├── teilgebiete/ # Pro Teilgebiet eine Detail-Datei (NN-<name>.md)
└── artefakte/ # Pro Teilgebiet ein Unterordner mit fertigen Materialien
``` ```
## Session-Start: Lesereihenfolge ## Session-Start: Lesereihenfolge
@@ -25,15 +28,15 @@ Lies zu Beginn jeder neuen Session in dieser Reihenfolge:
4. `changelog.md` letzte Einträge, um den Kontext der letzten Sessions zu verstehen 4. `changelog.md` letzte Einträge, um den Kontext der letzten Sessions zu verstehen
5. Die für die aktuelle Aufgabe relevante Teilgebiet-Datei (falls anwendbar) 5. Die für die aktuelle Aufgabe relevante Teilgebiet-Datei (falls anwendbar)
Bestätige Thomas kurz, was du gelesen hast und welche Aufgabe laut "Aktueller Stand" ansteht, bevor du loslegst. Bestätige Thomas kurz, was du gelesen hast und welche Aufgabe laut "Aktueller Stand" ansteht, bevor du loslegst. Ermittle außerdem aus dem letzten Eintrag in `changelog.md` die neue Session-Nummer (z.B. nach S03 → S04) und verwende sie durchgängig in dieser Session.
## Prozessregeln ## Prozessregeln
**R1 — Append-only Changelog.** Neue Einträge werden am Ende von `changelog.md` angefügt. Bestehende Einträge werden niemals verändert oder gelöscht. Jeder Eintrag enthält Timestamp und Session-Nummer (S01, S02, …). **R1 — Append-only Changelog.** Neue Einträge in `changelog.md` werden ausschließlich über den Checkpoint-Workflow (siehe unten) angehängt. Bestehende Einträge werden niemals verändert oder gelöscht. Jeder Eintrag enthält Timestamp und Session-Nummer (S01, S02, …).
**R2 — Status/Priorität/Abhängigkeiten nur mit OK.** Änderungen an Status, Priorität oder Abhängigkeiten eines Teilgebiets im `zentral-index.md` sind ausschließlich nach explizitem OK von Thomas erlaubt. Du triffst diese Entscheidungen nie eigenständig. Du darfst Änderungen vorschlagen. **R2 — Status/Priorität/Abhängigkeiten nur mit OK.** Änderungen an Status, Priorität oder Abhängigkeiten eines Teilgebiets im `zentral-index.md` sind ausschließlich nach explizitem OK von Thomas erlaubt. Du triffst diese Entscheidungen nie eigenständig. Du darfst Änderungen vorschlagen.
**R3 — Session-Nummerierung.** Beim Session-Start ermittelst du aus der letzten Zeile von `changelog.md` die nächste Session-Nummer (z.B. nach S03 → S04) und verwendest sie für alle Einträge dieser Session. **R3 — Session-Nummerierung.** Beim Session-Start ermittelst du aus der letzten Zeile von `changelog.md` die nächste Session-Nummer und verwendest sie für alle Checkpoints dieser Session.
**R4 — Fragen vor Taten.** Bei Unklarheiten fragst du Thomas, bevor du Annahmen triffst. Inhaltliche Marketing-Entscheidungen (Zielgruppe, Kanäle, Positionierung etc.) werden immer mit Thomas abgestimmt. **R4 — Fragen vor Taten.** Bei Unklarheiten fragst du Thomas, bevor du Annahmen triffst. Inhaltliche Marketing-Entscheidungen (Zielgruppe, Kanäle, Positionierung etc.) werden immer mit Thomas abgestimmt.
@@ -41,38 +44,48 @@ Bestätige Thomas kurz, was du gelesen hast und welche Aufgabe laut "Aktueller S
**R6 — Dateinamen.** Teilgebiet-Dateien folgen dem Schema `NN-<kurzname>.md` (z.B. `01-positionierung.md`). Die Nummer NN entspricht dem Eintrag im Zentral-Index. **R6 — Dateinamen.** Teilgebiet-Dateien folgen dem Schema `NN-<kurzname>.md` (z.B. `01-positionierung.md`). Die Nummer NN entspricht dem Eintrag im Zentral-Index.
## Session-Ende-Routine **R7 — Kein direkter Git-Commit und kein direkter Changelog-Edit.** Du editierst `changelog.md` nicht direkt und führst auch keinen `git commit` aus. Beides geschieht ausschließlich über den Checkpoint-Workflow.
Thomas kündigt das Session-Ende explizit an ("Session beenden" o.ä.). Dann führst du folgende Schritte in dieser Reihenfolge aus: ## Checkpoint-Workflow
1. **Teilgebiet-Dateien aktualisieren:** Trage die in dieser Session erarbeiteten Ergebnisse in die betroffene(n) Teilgebiet-Datei(en) ein. Ein **Checkpoint** fasst einen abgeschlossenen Arbeitsschritt zusammen und besteht aus zwei gekoppelten Aktionen: einem Eintrag in `changelog.md` und einem Git-Commit. Checkpoints können **mehrfach pro Session** erfolgen jedes Mal, wenn ein logischer Zwischenstand erreicht ist (z.B. ein Teilgebiet-Abschnitt fertig, ein Artefakt erstellt). Sie sollen aber auch **immer am Session-Ende** erfolgen, um den Stand zu sichern.
2. **`zentral-index.md` aktualisieren:** Nur nach R2 und nur nach bestätigten Entscheidungen.
3. **`changelog.md` ergänzen:** Hänge einen neuen Eintrag an im Format: **Ablauf:**
1. Der Agent hat inhaltliche Änderungen an `marketing.md`, `zentral-index.md`, Teilgebiet-Dateien oder Artefakten vorgenommen.
2. Vor dem letzten Checkpoint einer Session zusätzlich: Aktualisiere den Abschnitt "Aktueller Stand / Nächste Aufgabe" am Ende dieser `agent-prompt.md`-Datei, sodass die nächste Session nahtlos starten kann.
3. Der Agent schreibt die Datei `.checkpoint-pending.txt` im Repo-Root mit **exakt** diesem Format:
``` ```
YYYY-MM-DD HH:MM | S<NN> | <kompakte Zusammenfassung der Entscheidungen und Ergebnisse> S<NN>
<kompakte Zusammenfassung in einer oder mehreren Zeilen>
``` ```
4. **`agent-prompt.md` aktualisieren:** Passe den Abschnitt "Aktueller Stand / Nächste Aufgabe" (ganz unten) so an, dass die nächste Session nahtlos starten kann. Zeile 1: Session-Nummer (z.B. `S02`).
5. **Git-Commit:** Führe über Bash (Linux-Sandbox oder Git Bash) einen Commit aus: Zeile 2 und folgende: Zusammenfassung. Mehrere Zeilen werden von `checkpoint.ps1` zu einem Satz zusammengeführt (Leerzeichen getrennt). Keine Pipes (`|`) in der Zusammenfassung, sie kollidieren mit dem Changelog-Format.
```bash 4. Der Agent teilt Thomas mit: "Bitte `checkpoint.cmd` ausführen."
cd /pfad/zum/repo 5. Thomas doppelklickt `checkpoint.cmd`. Das Skript:
git add -A - liest `.checkpoint-pending.txt`
git commit -m "S<NN>: <Kurzbeschreibung>" - hängt die Zeile `YYYY-MM-DD HH:MM | S<NN> | <summary>` an `changelog.md` an (Timestamp vom lokalen PC)
``` - führt `git add -A && git commit -m "S<NN>: <summary>"` aus
Push erfolgt nicht automatisch das macht Thomas bei Bedarf selbst. - löscht `.checkpoint-pending.txt`
6. Thomas bestätigt im Chat, dass der Checkpoint gelaufen ist. Erst danach arbeitet der Agent weiter.
**Fehlerfall:** Scheitert `checkpoint.cmd` (z.B. git commit fehlgeschlagen), bleibt `.checkpoint-pending.txt` liegen. Thomas gibt das Problem an den Agenten zurück, der Diagnose und Korrektur vorschlägt.
## Erste Aufgaben (nur beim allerersten Start relevant) ## Erste Aufgaben (nur beim allerersten Start relevant)
Falls `marketing.md` noch leere Platzhalter enthält und `zentral-index.md` noch keine Teilgebiete listet: Falls `marketing.md` noch leere Platzhalter enthält und `zentral-index.md` noch keine Teilgebiete listet:
1. **`marketing.md` interaktiv befüllen.** Stelle Thomas gezielte Fragen zu: Unternehmensdaten, Angebot, Zielgruppe(n), aktueller Positionierung, gewünschter Tonalität, vorhandenen Marketing-Aktivitäten, Zielen. Arbeite Abschnitt für Abschnitt. 1. **`marketing.md` interaktiv befüllen.** Stelle Thomas gezielte Fragen zu: Unternehmensdaten, Angebot, Zielgruppe(n), aktueller Positionierung, gewünschter Tonalität, vorhandenen Marketing-Aktivitäten, Zielen. Arbeite Abschnitt für Abschnitt, nicht alles auf einmal.
2. **Teilgebiete gemeinsam definieren.** Schlage auf Basis von `marketing.md` eine Liste von Teilgebieten vor (z.B. Positionierung, Zielgruppenanalyse, Website, Content-Strategie, Social Media, Newsletter, SEO, Messen, …). Stimme Priorität und Abhängigkeiten mit Thomas ab und trage sie in `zentral-index.md` ein. 2. **Teilgebiete gemeinsam definieren.** Schlage auf Basis von `marketing.md` eine Liste von Teilgebieten vor (z.B. Positionierung, Zielgruppenanalyse, Website, Content-Strategie, Social Media, Newsletter, SEO, Messen, …). Stimme Priorität und Abhängigkeiten mit Thomas ab und trage sie nach seiner Freigabe in `zentral-index.md` ein.
3. **Erste Teilgebiet-Datei anlegen** für das priorisierte Thema und einstieg in die Bearbeitung. 3. **Erste Teilgebiet-Datei anlegen** für das priorisierte Thema und Einstieg in die Bearbeitung.
Setze zwischen sinnvollen Zwischenständen Checkpoints (z.B. nach "Marketing.md Abschnitte 1-3 befüllt", nach "Teilgebiete-Liste festgelegt").
--- ---
## Aktueller Stand / Nächste Aufgabe ## Aktueller Stand / Nächste Aufgabe
**Letzte Session:** S01 (2026-04-13) **Letzte Session:** S01 (2026-04-13)
**Status:** Prozessumgebung erstellt. Alle Strukturdateien angelegt, aber inhaltlich noch leer (nur Platzhalter). **Was wurde gemacht:** Prozessumgebung und Dateistruktur erstellt. Checkpoint-Workflow (`checkpoint.cmd` + `checkpoint.ps1`) eingerichtet. Alle Strukturdateien angelegt, aber inhaltlich noch leer (nur Platzhalter).
**Nächste Aufgabe:** In der nächsten Session mit dem interaktiven Befüllen von `marketing.md` beginnen. Thomas dazu gezielte Fragen stellen (Abschnitt für Abschnitt, nicht alles auf einmal). Anschließend gemeinsam die Teilgebiete definieren und in `zentral-index.md` eintragen. **Nächste Aufgabe:** Mit dem interaktiven Befüllen von `marketing.md` beginnen. Thomas dazu gezielte Fragen stellen, Abschnitt für Abschnitt. Anschließend gemeinsam die Teilgebiete definieren und in `zentral-index.md` eintragen (nach explizitem OK).
**Offene Punkte:** Keine. **Offene Punkte:** Keine.

View File

@@ -11,7 +11,9 @@ Chronologisches Log aller Entscheidungen und Prozessereignisse.
YYYY-MM-DD HH:MM | S<NN> | <kompakte Zusammenfassung> YYYY-MM-DD HH:MM | S<NN> | <kompakte Zusammenfassung>
``` ```
- **Session-Nummer** wird pro Chat-Session vergeben (S01, S02, …) und aus dem letzten Eintrag abgeleitet. - **Session-Nummer** wird pro Chat-Session vergeben (S01, S02, …) und aus dem letzten Eintrag abgeleitet.
- **Anhängen erfolgt ausschließlich** über den Checkpoint-Workflow (`checkpoint.cmd` + `checkpoint.ps1`). Der KI-Agent editiert diese Datei nicht direkt. Details: siehe `agent-prompt.md`.
## Einträge ## Einträge
2026-04-13 20:53 | S01 | Prozessumgebung erstellt: agent-prompt.md, zentral-index.md, marketing.md, changelog.md, Ordner teilgebiete/ und artefakte/. Prozessregeln definiert (append-only Changelog, Status-/Prioritäts-/Abhängigkeitsänderungen nur mit explizitem OK). Nächster Schritt: interaktives Befüllen von marketing.md und Definition der Teilgebiete. 2026-04-13 20:53 | S01 | Prozessumgebung erstellt: agent-prompt.md, zentral-index.md, marketing.md, changelog.md, Ordner teilgebiete/ und artefakte/. Prozessregeln definiert (append-only Changelog, Status-/Prioritäts-/Abhängigkeitsänderungen nur mit explizitem OK). Nächster Schritt: interaktives Befüllen von marketing.md und Definition der Teilgebiete.
2026-04-14 09:18 | S01 | Checkpoint-Tooling eingeführt: checkpoint.cmd + checkpoint.ps1; Regel R7 ergänzt; agent-prompt.md auf Checkpoint-Workflow umgestellt ✅

37
checkpoint.cmd Normal file
View File

@@ -0,0 +1,37 @@
@echo off
REM ============================================================
REM checkpoint.cmd
REM ------------------------------------------------------------
REM Haengt einen Eintrag an changelog.md an (mit Timestamp vom
REM lokalen PC) und macht einen Git-Commit.
REM
REM Voraussetzung: Die Datei .checkpoint-pending.txt existiert
REM im selben Ordner und enthaelt:
REM Zeile 1: Session-Nummer (z.B. S02)
REM Zeile 2+: Kompakte Zusammenfassung
REM ============================================================
setlocal
cd /d "%~dp0"
if not exist ".checkpoint-pending.txt" (
echo.
echo [checkpoint] Fehler: .checkpoint-pending.txt nicht gefunden.
echo Der KI-Agent muss diese Datei zuerst anlegen.
echo.
pause
exit /b 1
)
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0checkpoint.ps1"
set RC=%ERRORLEVEL%
echo.
if %RC% neq 0 (
echo [checkpoint] FEHLGESCHLAGEN - siehe Meldungen oben.
) else (
echo [checkpoint] Erfolgreich abgeschlossen.
)
echo.
pause
exit /b %RC%

92
checkpoint.ps1 Normal file
View File

@@ -0,0 +1,92 @@
# ============================================================
# checkpoint.ps1
# ------------------------------------------------------------
# Wird von checkpoint.cmd aufgerufen. Liest
# .checkpoint-pending.txt, haengt einen Eintrag an changelog.md
# an (mit aktuellem Timestamp vom lokalen PC), fuehrt einen
# Git-Commit aus und loescht die Pending-Datei.
# ============================================================
$ErrorActionPreference = 'Stop'
# Repo-Root = Ordner, in dem dieses Skript liegt
$repoRoot = $PSScriptRoot
Set-Location $repoRoot
$pendingFile = Join-Path $repoRoot '.checkpoint-pending.txt'
$changelogFile = Join-Path $repoRoot 'changelog.md'
# --- Pending-Datei lesen -----------------------------------
if (-not (Test-Path $pendingFile)) {
Write-Error ".checkpoint-pending.txt nicht gefunden."
exit 1
}
$lines = Get-Content $pendingFile -Encoding UTF8
if ($lines.Count -lt 2) {
Write-Error ".checkpoint-pending.txt muss mindestens 2 Zeilen enthalten (Session, Zusammenfassung)."
exit 1
}
$session = $lines[0].Trim()
$summary = ($lines | Select-Object -Skip 1 | Where-Object { $_.Trim() -ne '' }) -join ' '
$summary = $summary.Trim()
if ([string]::IsNullOrWhiteSpace($session)) {
Write-Error "Session-Nummer (Zeile 1) ist leer."
exit 1
}
if ($session -notmatch '^S\d{2,}$') {
Write-Error "Session-Nummer '$session' hat nicht das Format S<NN> (z.B. S01, S12)."
exit 1
}
if ([string]::IsNullOrWhiteSpace($summary)) {
Write-Error "Zusammenfassung (Zeile 2+) ist leer."
exit 1
}
# --- Timestamp und Eintrag bauen ---------------------------
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm'
$entry = "$timestamp | $session | $summary"
Write-Host ""
Write-Host "[checkpoint] Neuer Eintrag:" -ForegroundColor Cyan
Write-Host " $entry"
Write-Host ""
# --- Eintrag an changelog.md anhaengen ---------------------
# Immer erst sicherstellen, dass die Datei mit einem Zeilenumbruch endet.
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
if (Test-Path $changelogFile) {
$existing = [System.IO.File]::ReadAllText($changelogFile, $utf8NoBom)
if ($existing.Length -gt 0 -and -not ($existing.EndsWith("`n"))) {
[System.IO.File]::AppendAllText($changelogFile, "`r`n", $utf8NoBom)
}
} else {
Write-Error "changelog.md nicht gefunden."
exit 1
}
[System.IO.File]::AppendAllText($changelogFile, $entry + "`r`n", $utf8NoBom)
Write-Host "[checkpoint] An changelog.md angehaengt." -ForegroundColor Green
# --- Git add + commit --------------------------------------
& git add -A
if ($LASTEXITCODE -ne 0) {
Write-Error "git add fehlgeschlagen (Exit Code $LASTEXITCODE)."
exit $LASTEXITCODE
}
$commitMsg = "${session}: $summary"
& git commit -m $commitMsg
if ($LASTEXITCODE -ne 0) {
Write-Error "git commit fehlgeschlagen (Exit Code $LASTEXITCODE)."
exit $LASTEXITCODE
}
Write-Host "[checkpoint] Commit erstellt: $commitMsg" -ForegroundColor Green
# --- Pending-Datei loeschen --------------------------------
Remove-Item $pendingFile -Force
Write-Host "[checkpoint] .checkpoint-pending.txt entfernt." -ForegroundColor Green