From abf0c037eeaf950ee7843a811b5d1c61b37ea7a565bd96042ad4b2a16704b223 Mon Sep 17 00:00:00 2001 From: tlg Date: Tue, 14 Apr 2026 09:18:47 +0200 Subject: [PATCH] =?UTF-8?q?S01:=20Checkpoint-Tooling=20eingef=C3=BChrt:=20?= =?UTF-8?q?checkpoint.cmd=20+=20checkpoint.ps1;=20Regel=20R7=20erg=C3=A4nz?= =?UTF-8?q?t;=20agent-prompt.md=20auf=20Checkpoint-Workflow=20umgestellt?= =?UTF-8?q?=20=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .checkpoint-pending.txt | 2 + agent-prompt.md | 69 ++++++++++++++++++------------- changelog.md | 2 + checkpoint.cmd | 37 +++++++++++++++++ checkpoint.ps1 | 92 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 28 deletions(-) create mode 100644 .checkpoint-pending.txt create mode 100644 checkpoint.cmd create mode 100644 checkpoint.ps1 diff --git a/.checkpoint-pending.txt b/.checkpoint-pending.txt new file mode 100644 index 0000000..4b42aa1 --- /dev/null +++ b/.checkpoint-pending.txt @@ -0,0 +1,2 @@ +S01 +Checkpoint-Tooling eingeführt: checkpoint.cmd + checkpoint.ps1; Regel R7 ergänzt; agent-prompt.md auf Checkpoint-Workflow umgestellt ✅ \ No newline at end of file diff --git a/agent-prompt.md b/agent-prompt.md index b63791a..68704e1 100644 --- a/agent-prompt.md +++ b/agent-prompt.md @@ -8,12 +8,15 @@ Alle Dateien liegen im Ordner `Q:\DesTEngS\Pro\Git\marketing\claude_cowork` (Git ``` claude_cowork/ -├── agent-prompt.md # Diese Datei – Hauptanweisung + aktueller Stand -├── zentral-index.md # Überblick aller Teilgebiete (Status, Priorität, Abhängigkeiten) -├── marketing.md # Unternehmensdaten, Zielgruppe, Positionierung, Tonalität -├── changelog.md # Chronologisches Entscheidungslog (append-only) -├── teilgebiete/ # Pro Teilgebiet eine Detail-Datei (NN-.md) -└── artefakte/ # Pro Teilgebiet ein Unterordner mit fertigen Materialien +├── agent-prompt.md # Diese Datei – Hauptanweisung + aktueller Stand +├── zentral-index.md # Überblick aller Teilgebiete (Status, Priorität, Abhängigkeiten) +├── marketing.md # Unternehmensdaten, Zielgruppe, Positionierung, Tonalität +├── changelog.md # Chronologisches Entscheidungslog (append-only) +├── checkpoint.cmd # Tooling: Changelog-Eintrag + Git-Commit (von Thomas ausgeführt) +├── 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-.md) +└── artefakte/ # Pro Teilgebiet ein Unterordner mit fertigen Materialien ``` ## 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 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 -**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. -**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. @@ -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-.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. -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: +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. + +**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 | + S + ``` -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. -5. **Git-Commit:** Führe über Bash (Linux-Sandbox oder Git Bash) einen Commit aus: - ```bash - cd /pfad/zum/repo - git add -A - git commit -m "S: " - ``` - Push erfolgt nicht automatisch – das macht Thomas bei Bedarf selbst. + Zeile 1: Session-Nummer (z.B. `S02`). + 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. +4. Der Agent teilt Thomas mit: "Bitte `checkpoint.cmd` ausführen." +5. Thomas doppelklickt `checkpoint.cmd`. Das Skript: + - liest `.checkpoint-pending.txt` + - hängt die Zeile `YYYY-MM-DD HH:MM | S | ` an `changelog.md` an (Timestamp vom lokalen PC) + - führt `git add -A && git commit -m "S: "` aus + - 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) 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. -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. -3. **Erste Teilgebiet-Datei anlegen** für das priorisierte Thema und einstieg in die Bearbeitung. +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 nach seiner Freigabe in `zentral-index.md` ein. +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 **Letzte Session:** S01 (2026-04-13) -**Status:** Prozessumgebung erstellt. 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. +**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:** 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. diff --git a/changelog.md b/changelog.md index 8695251..a2c415f 100644 --- a/changelog.md +++ b/changelog.md @@ -11,7 +11,9 @@ Chronologisches Log aller Entscheidungen und Prozessereignisse. YYYY-MM-DD HH:MM | S | ``` - **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 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 ✅ diff --git a/checkpoint.cmd b/checkpoint.cmd new file mode 100644 index 0000000..c38c459 --- /dev/null +++ b/checkpoint.cmd @@ -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% diff --git a/checkpoint.ps1 b/checkpoint.ps1 new file mode 100644 index 0000000..9768d43 --- /dev/null +++ b/checkpoint.ps1 @@ -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 (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