diff --git a/docs/superpowers/specs/2026-06-03-weekly-report-design.md b/docs/superpowers/specs/2026-06-03-weekly-report-design.md index e2abbb5..35e078e 100644 --- a/docs/superpowers/specs/2026-06-03-weekly-report-design.md +++ b/docs/superpowers/specs/2026-06-03-weekly-report-design.md @@ -25,6 +25,9 @@ report. standup weekday. The range is adjustable in the modal. - **Signal fed to Claude:** user prompts (intent), assistant closing summaries, and the user's daily notes. No git-commit scanning. +- **Report shape:** German, grouped by day, first-person past-tense bullets, ~3-5 + bullets/day with trivia merged/dropped, notes blended into one deduplicated list per + day. See the Report Prompt section. - **Placement:** a "Weekly Report" overlay modal opened from the toolbar, rendering via the existing `MarkdownView`. - **Output:** view-only in-app (no export). @@ -110,9 +113,10 @@ conversion via `ValueConverter`, per existing convention). 1. Read settings (excluded paths, standup weekday). 2. `ClaudeHistoryReader` → distilled activity. 3. `DailyNoteRepository.ListBetweenAsync` → notes grouped by day. - 4. Build one prompt: instructions for a short, standup-focused summary grouped by - repo and day, plus the distilled activity and the daily notes. Empty window → - produce a "no activity" report without calling Claude. + 4. Pivot the distilled activity (repo→day from the reader) into **day-major** + (day→repo) to match the day-grouped report, and build the prompt from the + template in the Report Prompt section. Empty window → produce a "no activity" + report without calling Claude. 5. Run `ClaudeProcess` once (`claude -p`, no worktree/agents; working dir = a neutral dir). Read `RunResult.ResultMarkdown`. 6. `WeekReportRepository.UpsertAsync(start, end, markdown)`; return markdown. @@ -121,6 +125,35 @@ conversion via `ValueConverter`, per existing convention). Interfaces live in `Report/Interfaces/` per the area convention. +#### Report Prompt + +`WeekReportService` assembles this prompt. Instructions are in English (more reliable +steering); the output is forced to German. `{...}` are filled at build time. + +``` +You are generating a concise weekly standup report for a software developer. +Summarize what they accomplished between {start:dd.MM.yyyy} and {end:dd.MM.yyyy}. + +Rules: +- Write the ENTIRE report in German. +- Group by day. One "## {Wochentag}, {dd.MM.yyyy}" section per day that has + activity (German weekday names). Omit days with no activity entirely. +- Within each day: 3–5 first-person, past-tense bullets ("- Habe X umgesetzt", + "- Y behoben"). Merge related small work into one bullet. +- Drop trivia: typo fixes, pure exploration, false starts, tooling/log noise. +- Blend the developer's own notes and the derived activity into ONE deduplicated + bullet list per day. The developer's notes are authoritative — never omit or + contradict their substance. +- Name the project/repo when it adds clarity. +- Output ONLY the dated sections. No preamble, no intro, no closing remarks. + +== Activity (from session history) == +{day-major: for each day → for each repo → its prompts + closing summaries} + +== Developer notes == +{day-major: for each day → the bullets} +``` + ### 3. IPC (Hub + WorkerClient) **`WorkerHub`** new methods: