process: user-facing WhatsNew.md changelog + done-state notify protocol

Done-state notifications now produce two synchronised outputs sharing
one text: an entry appended to docs/WhatsNew.md and the same string
sent via notify.sh. The text is written in German for the user-as-
reader who did not watch the session — no technical internals, no
iteration codes, lead with the change-in-the-project.

WhatsNew.md is the only file in the repo intentionally not in English;
the exception is documented in CLAUDE.md (Roles of docs/...) so a
future reader does not "correct" it back. Bounce-back notifications
stay Notify-only.
This commit is contained in:
2026-05-11 09:01:04 +02:00
parent 78ccbcee9c
commit 6d94fa5826
2 changed files with 62 additions and 1 deletions
+47 -1
View File
@@ -181,6 +181,43 @@ and likely respond by returning to the session.
By default, you act autonomous. The notification is the
exception, not the rule.
### Done-state notifications: WhatsNew.md
When the trigger is **done-state** (autonomous work has wrapped
up, nothing left to do for the user to react to), the procedure
is two-step and the two outputs share one text:
1. Append a new entry to `docs/WhatsNew.md` (newest at the bottom,
append-only — same chronological convention as `JOURNAL.md`).
2. Send the same text via `~/.claude/notify.sh`.
The text must be written for the **user-as-reader who did not
watch me work**:
- **Language: German.** This is a deliberate exception to the
English-only project rule, because WhatsNew is user-facing
communication, the same role German plays in our live chat.
- **No technical internals.** Don't name crates, function
identifiers, type names, agent names, or iteration codes
(`ct.1.7`, `18a`, etc.). Describe the *change in the project*
— what is now possible, fixed, or visible — not the mechanics.
- **No assumption of context.** The user is on his phone and has
not seen this session. Lead with the result; the *why* is fine
if it fits in one short clause.
- **Length: Telegram-pragmatic.** No hard cap, but a few sentences,
not an essay. If the work covered multiple unrelated things,
bullet them.
- **Tone: factual, not performative.** No celebration, no "I have
successfully…". Just "X geht jetzt, Y ist behoben, Z ist neu".
**Bounce-backs** (asking the user for a design judgement or
checkpoint) are *not* done-state and do **not** produce a
WhatsNew entry — they stay as Notify-only.
Format of a WhatsNew entry: a `## YYYY-MM-DD — <kurze Überschrift>`
heading followed by the message body. The body must match the
Notify text verbatim.
## Bug fixes — TDD, always
Bug fixes are RED-first, autonomous, no orchestrator gate. See
@@ -232,6 +269,15 @@ Existing entries are not retroactively renamed.
bite-sized executable plan produced by `skills/plan`, consumed
by `skills/implement`.
- **`docs/WhatsNew.md`** (since 2026-05-11): the user-facing
changelog, written in German for the user-as-reader who does
not watch the implementation. Entries are appended at done-state
notifications and mirror the Notify text verbatim. See the
"Done-state notifications" subsection above for the editorial
rules. This is the only file in the repo that is intentionally
not in English.
Together these answer three questions: "what is the language right
now?" (DESIGN), "how did we get here?" (JOURNAL, specs, plans),
and "what's next?" (roadmap).
and "what's next?" (roadmap). `WhatsNew.md` is the user-facing
mirror of the JOURNAL — the same history, told without internals.
+15
View File
@@ -0,0 +1,15 @@
# Was ist neu in AILang
Dies ist das benutzerlesbare Änderungsprotokoll. Es läuft parallel
zum technischen `JOURNAL.md` und ist in der gleichen Sprache verfasst,
in der wir uns unterhalten — Deutsch.
Jeder Eintrag entspricht einer Done-State-Notify, die ich an den
Benutzer geschickt habe, wenn er nicht am Rechner war. Der Text ist
identisch mit dem, was auf dem Handy ankam. Neue Einträge werden
unten angehängt.
Beschrieben wird, **was sich im Projekt geändert hat** — nicht, wie
es technisch umgesetzt wurde. Für Interna gibt es das `JOURNAL.md`.
---