kimal3 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/claude-plugins/.claude-plugin/marketplace.json +2 -1
- package/claude-plugins/README.md +2 -0
- package/claude-plugins/kimal3-logo/.claude-plugin/plugin.json +1 -1
- package/claude-plugins/kimal3-logo/hooks/app-oeffnen.ts +37 -9
- package/claude-plugins/kimal3-logo/hooks/register.tsx +1 -1
- package/claude-plugins/kimal3-plan/.claude-plugin/plugin.json +7 -0
- package/claude-plugins/kimal3-plan/hooks/erinnerung.ts +79 -0
- package/claude-plugins/kimal3-plan/hooks/fehlerzeile.ts +41 -0
- package/claude-plugins/kimal3-plan/hooks/hooks.json +1 -0
- package/claude-plugins/kimal3-plan/hooks/lauf.ts +143 -0
- package/claude-plugins/kimal3-plan/hooks/lebenszeichen.ts +197 -0
- package/claude-plugins/kimal3-plan/hooks/ordner.ts +141 -0
- package/claude-plugins/kimal3-plan/hooks/register.tsx +22 -0
- package/claude-plugins/kimal3-plan/hooks/spec-text.ts +45 -0
- package/claude-plugins/kimal3-plan/types/index.d.ts +10 -0
- package/coach/de/kimal3-coach.md +33 -0
- package/coach/en/kimal3-coach.md +33 -0
- package/dist/argumente.js +12 -0
- package/dist/atomar.js +22 -0
- package/dist/befehle/einrichten.js +4 -4
- package/dist/befehle/login.js +2 -2
- package/dist/befehle/plan-hoch.js +8 -0
- package/dist/befehle/plan-melde.js +105 -0
- package/dist/befehle/plan-senden.js +149 -0
- package/dist/befehle/plan.js +45 -10
- package/dist/befehle/projekt-verbinden.js +141 -0
- package/dist/befehle/skill-install.js +2 -2
- package/dist/befehle-katalog-en.js +6 -6
- package/dist/befehle-katalog.js +8 -7
- package/dist/befehlswoerter.js +9 -0
- package/dist/einstellungen-schreiben.js +1 -1
- package/dist/kimal3.js +22 -0
- package/dist/meldungen-speicher.js +189 -0
- package/dist/{logo-ablegen.js → mods-ablegen.js} +29 -18
- package/dist/plugins-mischen.js +7 -2
- package/dist/projekt-ordner.js +189 -0
- package/dist/texte/einrichten.js +3 -1
- package/dist/texte/meldungen.js +127 -0
- package/dist/texte/plan.js +42 -22
- package/package.json +1 -1
- package/skill/commands/k3feierabend.md +20 -0
- package/skill/commands/k3plan.md +151 -211
- package/skill/en/commands/k3plan.md +157 -219
- package/skill/en/commands/k3wrapup.md +19 -0
package/skill/commands/k3plan.md
CHANGED
|
@@ -1,122 +1,107 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Die Specs gegen den Code prüfen und
|
|
2
|
+
description: Die Specs gegen den Code prüfen und jede Abweichung dem Board in der App melden
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
<!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
|
|
6
6
|
jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
|
|
7
7
|
behalten will, kopiert die Datei unter einem anderen Namen. -->
|
|
8
|
-
# Planung prüfen und
|
|
8
|
+
# Planung prüfen und melden
|
|
9
9
|
|
|
10
10
|
## 1. Wozu
|
|
11
11
|
|
|
12
|
-
Du prüfst die User Stories in den Specs dieses Projekts gegen den Code und
|
|
13
|
-
|
|
14
|
-
„Planung"), was offen ist, was auf seinen
|
|
15
|
-
„Passt" oder „Passt nicht".
|
|
12
|
+
Du prüfst die User Stories in den Specs dieses Projekts gegen den Code und **meldest jede
|
|
13
|
+
Abweichung einzeln** an die App — nie den Code, und seit Fassung 0.7.0 keine ganze Datei mehr. Dort
|
|
14
|
+
sieht der Mensch auf der Projektseite (Reiter „Planung", das Board), was offen ist, was auf seinen
|
|
15
|
+
Test wartet und was fertig ist, und urteilt mit „Passt" oder „Passt nicht".
|
|
16
16
|
|
|
17
|
-
Arbeite die Abschnitte der Reihe nach ab. Die Regeln (Abschnitt 5) und
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
Arbeite die Abschnitte der Reihe nach ab. Die Regeln (Abschnitt 5) und die Meldungen (Abschnitt 6)
|
|
18
|
+
brauchst du schon ab Abschnitt 2 — lies sie zuerst. Was ein Rückgabewert von `kimal3` heißt, steht
|
|
19
|
+
in **`~/.claude/skills/kimal3/SKILL.md`, Abschnitt „Rückgabewerte"**; diese Datei wiederholt es
|
|
20
|
+
nicht.
|
|
21
21
|
|
|
22
|
-
🔑 **`/k3plan` prüft, ordnet ein und
|
|
22
|
+
🔑 **`/k3plan` prüft, ordnet ein und meldet — es baut nichts.** Was nachzubessern ist, steht
|
|
23
23
|
danach als Befund an der Story; gebaut wird, wenn der Mensch es sagt.
|
|
24
24
|
|
|
25
|
-
## 2.
|
|
25
|
+
## 2. Den Stand holen
|
|
26
26
|
|
|
27
|
-
Arbeite im **Projektordner** (
|
|
28
|
-
|
|
27
|
+
Arbeite im **Projektordner** (ein Ordner direkt in `werkbank-…/projekte/`). Der Stand liegt in der
|
|
28
|
+
App, nicht in einer Datei:
|
|
29
29
|
|
|
30
30
|
```
|
|
31
31
|
kimal3 plan
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
**Kommt `
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
```json
|
|
43
|
-
{
|
|
44
|
-
"format": 1,
|
|
45
|
-
"projekt": "LinkedIn Content-App",
|
|
46
|
-
"projekt_id": null,
|
|
47
|
-
"basis": null,
|
|
48
|
-
"geprueft_am": "2026-10-21T22:10:00+02:00",
|
|
49
|
-
"specs": [],
|
|
50
|
-
"themen": [],
|
|
51
|
-
"uebernommen": []
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
(Name und Zeitpunkt sind ein Beispiel.) `projekt_id` und `basis` trägt `kimal3 plan hoch`
|
|
56
|
-
nach dem ersten Hochladen selbst ein — **lass sie bei `null`**.
|
|
57
|
-
3. `kimal3 plan` noch einmal.
|
|
34
|
+
**Kommt `Dieser Ordner ist noch mit keinem Projekt in der App verbunden.`**, leg das Projekt an:
|
|
35
|
+
`kimal3 projekt verbinden` (der Coach, Abschnitt 3.6, sagt, was dabei zu tun ist), dann `kimal3 plan`
|
|
36
|
+
noch einmal. Kommt `Hier ist kein Projektordner …`, stehst du im falschen Ordner — prüf das zuerst
|
|
37
|
+
und melde nichts.
|
|
38
|
+
|
|
39
|
+
**Liegt im Ordner eine `plan/stand.json`**, sag dem Menschen **einmal**: „Die Datei
|
|
40
|
+
plan/stand.json wird nicht mehr gebraucht — der Stand liegt in der App. Du kannst sie löschen."
|
|
41
|
+
Du löschst sie nicht selbst.
|
|
58
42
|
|
|
59
43
|
**Was die Ausgabe heißt** (Beispiel, erfundene Werte):
|
|
60
44
|
|
|
61
45
|
```
|
|
46
|
+
Spec 2026-09-23-content-planer · Content-Planer als Seite (plan/2026-09-23-content-planer-seite-spec.md)
|
|
47
|
+
US-1 · gebaut · Runde 1 · Beiträge anlegen
|
|
48
|
+
US-2 · in Arbeit · Runde 1 · Beiträge im Kalender verschieben
|
|
49
|
+
Notiertes Thema T-3: Export als PDF
|
|
62
50
|
#12 · passt nicht · 2026-09-23-content-planer / US-2 (Runde 1): Beim Ziehen springt er auf Dienstag
|
|
63
51
|
#13 · Thema: Kalender soll Feiertage zeigen
|
|
64
52
|
Bestätigt: 2026-09-23-content-planer / US-1 (Runde 1)
|
|
65
53
|
Ansehen: https://app.kimal3.de/projekt/…
|
|
66
54
|
```
|
|
67
55
|
|
|
56
|
+
- `Spec <Schlüssel> · <Titel> (<Datei>)` und darunter je Story `<Schlüssel> · <Stand> · Runde n ·
|
|
57
|
+
<Titel>` — der Stand, den die App kennt. **Die Schlüssel von hier sind bindend** (Abschnitt 3).
|
|
58
|
+
- `Notiertes Thema <Schlüssel>: …` — ein Thema, das **Claude** früher notiert hat. → Regel 3.
|
|
68
59
|
- `#12 · passt nicht · <Spec> / <Story> (Runde n): <Satz>` — der Mensch hat die Story getestet,
|
|
69
60
|
sie hält nicht. → Regel 1 in Abschnitt 5. Die Nummer brauchst du später für `uebernommen`.
|
|
70
61
|
- `#13 · Thema: <Satz>` — etwas Neues, das er in der App notiert hat. → Regel 3.
|
|
71
62
|
- `Bestätigt: …` — für diese Stories hat er in **dieser** Runde „Passt" gesagt; sie sind fertig.
|
|
72
63
|
Ein „Passt" musst du nicht übernehmen.
|
|
73
64
|
- `Ansehen: …` — der Link zur Planung. Merk ihn dir für den Bericht.
|
|
65
|
+
- `Noch keine Planung in der App.` — es ist das erste Mal; weiter mit Abschnitt 3, alle Specs sind neu.
|
|
74
66
|
- `Keine offenen Rückmeldungen.` — nichts zu übernehmen; weiter mit Abschnitt 3.
|
|
75
67
|
|
|
76
|
-
**Absagen
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- `Mehrere deiner Projekte heißen „…“ (Nummern: …).` — frag den Menschen, welches gemeint ist, und
|
|
80
|
-
trag dessen Nummer als `"projekt_id"` ein.
|
|
81
|
-
- `Die Projektnummer in plan/stand.json gehört zu keinem deiner Projekte.` — die Nummer stammt aus
|
|
82
|
-
einem kopierten Ordner oder einem gelöschten Projekt. Setz `"projekt_id"` auf `null` (die Zeile
|
|
83
|
-
bleibt stehen, das Feld ist Pflicht); dann sucht kimal3 nach dem Namen. Das ist der **einzige**
|
|
84
|
-
Fall, in dem du `projekt_id` selbst änderst.
|
|
85
|
-
- `Der Plan ist nicht lesbar: plan/stand.json enthält kein gültiges JSON-Objekt.` — Klammern oder
|
|
86
|
-
Kommas in der Datei reparieren.
|
|
68
|
+
**Absagen** stehen als ganzer Satz auf der Fehlerausgabe (Rückgabewert `1`): Lies sie, sag dem
|
|
69
|
+
Menschen, was dort steht, und wiederhole nicht blind. Meldet `kimal3 plan` `3` (App nicht
|
|
70
|
+
erreichbar), versuch es einmal später noch einmal.
|
|
87
71
|
|
|
88
72
|
## 3. Specs finden
|
|
89
73
|
|
|
90
74
|
Such im Projektordner in **`docs/superpowers/specs/`**, **`plan/`** und **`docs/specs/`** nach
|
|
91
75
|
Markdown-Dateien mit User Stories („Als … will ich … damit …", oft `US-1`, `US-2`, mit
|
|
92
|
-
Akzeptanzkriterien und Gegenprobe). `plan/stand.json`
|
|
93
|
-
sind keine Specs.
|
|
76
|
+
Akzeptanzkriterien und Gegenprobe). `plan/stand.json`, `plan/projekt.json`, Statuszettel und
|
|
77
|
+
Aufgabenlisten sind keine Specs.
|
|
94
78
|
|
|
95
|
-
Je Spec
|
|
96
|
-
|
|
97
|
-
Ergebnis).
|
|
79
|
+
Je Spec eine Meldung `spec` mit ihren Stories, je Akzeptanzkriterium ein Eintrag in `kriterien`
|
|
80
|
+
(kurz gefasst, höchstens 500 Zeichen: Ausgangslage → Handlung → Ergebnis).
|
|
98
81
|
|
|
99
82
|
🔴 **Die Schlüssel sind bindend.** Die App hängt jedes „Passt" und „Passt nicht" an
|
|
100
|
-
Spec-Schlüssel + Story-Schlüssel + Runde. Steht eine Spec oder Story schon in
|
|
101
|
-
**übernimm ihren Schlüssel unverändert** — ein umbenannter Schlüssel lässt das
|
|
102
|
-
Menschen verschwinden. Neu: Spec-Schlüssel = Dateiname ohne `.md`; Story-Schlüssel = die
|
|
103
|
-
aus der Spec (`US-3`); nummeriert die Spec nicht, zähl selbst `US-1`, `US-2` … in ihrer
|
|
83
|
+
Spec-Schlüssel + Story-Schlüssel + Runde. Steht eine Spec oder Story schon in der Ausgabe von
|
|
84
|
+
`kimal3 plan`, **übernimm ihren Schlüssel unverändert** — ein umbenannter Schlüssel lässt das
|
|
85
|
+
Urteil des Menschen verschwinden. Neu: Spec-Schlüssel = Dateiname ohne `.md`; Story-Schlüssel = die
|
|
86
|
+
Nummer aus der Spec (`US-3`); nummeriert die Spec nicht, zähl selbst `US-1`, `US-2` … in ihrer
|
|
104
87
|
Reihenfolge.
|
|
105
88
|
|
|
106
|
-
- `titel`: die Überschrift der Spec bzw. der Story. `datei`: der Pfad der Spec im Projektordner
|
|
107
|
-
|
|
108
|
-
|
|
89
|
+
- `titel`: die Überschrift der Spec bzw. der Story. `datei`: der Pfad der Spec im Projektordner
|
|
90
|
+
(relativ, endet auf `.md`; sonst `null`). Den **Text** der Spec lädt der Mod `kimal3-plan` beim
|
|
91
|
+
Schreiben der Datei hoch, `kimal3 plan melde` holt ihn nach, wenn die Datei vor der Meldung
|
|
92
|
+
geschrieben wurde — Pfade außerhalb des Projektordners liest es nicht.
|
|
109
93
|
- Der Story-Schlüssel ist **derselbe wie in der Überschrift der Spec**, wo die Spec ihre Stories
|
|
110
94
|
nummeriert (`### US-3 · …` → `US-3`): Die App findet die Story im Spec-Text über diesen Schlüssel.
|
|
111
95
|
- Eine Spec ohne Stories kommt mit `"stories": []` hinein; sag es im Bericht.
|
|
112
96
|
- Grenzen: höchstens 50 Specs, 60 Stories je Spec, 400 zusammen. Sind es mehr, frag den
|
|
113
97
|
Menschen, welche Specs hineingehören.
|
|
98
|
+
- Eine Story, die du nicht mehr in der Spec findest, **entfernst du nicht** — eine Meldung kann
|
|
99
|
+
keine Story löschen. Meld sie als `weggelassen` mit Grund, wenn die Spec das so entschieden hat.
|
|
114
100
|
|
|
115
|
-
**Der Stand je Story:**
|
|
101
|
+
**Der Stand je Story (`stand`):**
|
|
116
102
|
- `offen` — noch nichts gebaut.
|
|
117
|
-
- `in_arbeit` — teilweise gebaut, oder ein Befund ist offen.
|
|
118
|
-
- `gebaut` — gebaut.
|
|
119
|
-
dazu ein `testen`-Satz (Abschnitt 4).
|
|
103
|
+
- `in_arbeit` — teilweise gebaut, oder ein Befund ist offen.
|
|
104
|
+
- `gebaut` — gebaut. Das Datum setzt die App; dazu ein `testen`-Satz (Abschnitt 4).
|
|
120
105
|
- `weggelassen` — bewusst nicht gebaut, `grund` ist Pflicht (Regel 8). Nur, wenn die Spec oder
|
|
121
106
|
der Mensch das so entschieden hat — nie von dir allein, um aufzuräumen. Im Zweifel: `offen`
|
|
122
107
|
lassen und im Bericht fragen.
|
|
@@ -136,23 +121,24 @@ lesen.
|
|
|
136
121
|
oder einen Menschen. Lesen zählt nur, wenn das Kriterium etwas über die Datei selbst sagt (eine
|
|
137
122
|
Datei gibt es, ein Text steht so da) — ein Verhalten beweist Lesen nicht.
|
|
138
123
|
|
|
139
|
-
⚠️ Eine Story mit einem `offen`-Kriterium steht in „Claude-Test offen"
|
|
140
|
-
|
|
124
|
+
⚠️ Eine Story mit einem `offen`-Kriterium steht in „Claude-Test offen" — und mit ihr die ganze Spec.
|
|
125
|
+
Der Mensch testet eine Spec erst als Ganzes: Knöpfe bekommt er nur, wenn an keiner Story der Spec
|
|
126
|
+
mehr gebaut oder geprüft wird (die Spec steht dann in „Dein Test"). Bis dahin heißen die schon
|
|
127
|
+
bestandenen Stories in der App „Von Claude geprüft". Sag im Bericht, was fehlt, damit die
|
|
128
|
+
Gegenprobe laufen kann.
|
|
141
129
|
|
|
142
|
-
**Der `testen`-Satz** (bei jeder `gebaut`-Story, höchstens 1000 Zeichen)
|
|
143
|
-
den Befehl** und **was dort zu sehen sein muss**, zum Beispiel: „Starte `npm run dev`, öffne
|
|
144
|
-
http://localhost:3000/kalender und zieh den Beitrag vom Montag auf den Mittwoch — er steht danach
|
|
145
|
-
am Mittwoch." Ohne ihn zeigt die App: „Claude hat nicht aufgeschrieben, wie man das testet".
|
|
130
|
+
**Der `testen`-Satz** (bei jeder `gebaut`-Story, höchstens 1000 Zeichen) ist eine Anleitung für jemanden ohne Technik. Er sagt wo man es findet, was man tut, was dann zu sehen ist, woran man merkt, dass es nicht stimmt. Ein Befehl nur, wenn es keinen anderen Weg gibt — dann sagst du, wo man ihn eingibt (in Claude Code im Projektordner, mit `!` davor), und setzt ihn in Backticks. Ohne Befehl: „Öffne in der App ‚Kennzahlen‘ und klick auf den Beitrag vom 14.10. — dort steht ‚4.210 gesehen‘. Steht dort eine leere Zelle, sag ‚Passt nicht‘.“ Mit Befehl: „Tippe in Claude Code im Projektordner `! node wortzaehler.js beispiel.txt` — es erscheinen fünf Zeilen, oben ‚der (4)‘. Kommt eine Fehlermeldung, sag ‚Passt nicht‘.“ Fehlt der Satz, zeigt die App: „Claude hat nicht aufgeschrieben, wie man das testet".
|
|
146
131
|
|
|
147
132
|
**Befunde** (`befunde`): nur **offene**. `quelle: "claude"` für etwas, das die Story verspricht und
|
|
148
|
-
nicht tut, und das kein Kriterium abdeckt. `seit`: das Datum, an dem der Befund entstand
|
|
149
|
-
|
|
133
|
+
nicht tut, und das kein Kriterium abdeckt. `seit`: das Datum, an dem der Befund entstand. Ein
|
|
134
|
+
`befunde`-Feld in einer Meldung **ersetzt** die Liste der Story — schick also alle noch offenen
|
|
135
|
+
Befunde mit, nicht nur den neuen. Fehlt das Feld, bleibt die Liste, wie sie ist.
|
|
150
136
|
|
|
151
137
|
**Die Runde** bindet ein Urteil an einen Bau-Stand — wie ein Stempel auf einer Fassung:
|
|
152
|
-
- Sie beginnt bei `1` und wird **nie** kleiner.
|
|
138
|
+
- Sie beginnt bei `1` und wird **nie** kleiner; fehlt `runde` in der Meldung, bleibt sie.
|
|
153
139
|
- **Um genau 1 erhöhen**, wenn eine Story mit einem Befund des Menschen (`quelle: "mensch"`)
|
|
154
140
|
seitdem nachgebessert wurde (Git-Verlauf, und die Gegenproben bestehen jetzt): dann
|
|
155
|
-
`befunde: []`, `stand: "gebaut"`,
|
|
141
|
+
`befunde: []`, `stand: "gebaut"`, `runde` + 1, neuer `testen`-Satz. Der Mensch testet neu.
|
|
156
142
|
Ist unklar, ob nachgebessert wurde: Befund stehen lassen und im Bericht fragen.
|
|
157
143
|
- **Auch erhöhen**, wenn du eine **bestätigte** Story so geändert hast, dass der Mensch es merken
|
|
158
144
|
würde — sein altes „Passt" gilt dann nicht mehr (Regel 7).
|
|
@@ -162,187 +148,141 @@ er schon in der Datei, bleibt sein altes Datum.
|
|
|
162
148
|
|
|
163
149
|
Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planung kurz"):
|
|
164
150
|
|
|
165
|
-
1. **Ein
|
|
151
|
+
1. **Ein Problem wird keine neue Karte.** Hält eine Story nicht, was sie verspricht — Claudes Prüfung fällt durch oder du sagst „Passt nicht" —, hängt das Problem (Befund) an **dieser** Story, und ihre Spec geht zurück nach „In Arbeit“.
|
|
166
152
|
2. **Neu ist nur, was niemand versprochen hat. Das kommt in den Eingang, und der hat fünf Plätze.**
|
|
167
|
-
3. **Claude
|
|
153
|
+
3. **Claude sortiert jedes Thema beim nächsten Abgleich (`/k3plan`) ein:** als neue Story in eine Spec, als Befund an eine Story, oder gestrichen mit Begründung. „Für später" gibt es nicht. Was daraus wurde, steht unter „Von Claude einsortiert".
|
|
168
154
|
4. **Nichts liegt länger als 14 Tage im Eingang.**
|
|
169
155
|
5. **Höchstens eine Spec gleichzeitig in Arbeit** („In Arbeit“ und „Claude-Test offen“ zusammen). Erst fertig machen, dann die nächste beginnen.
|
|
170
156
|
6. **Höchstens fünf Stories warten auf deinen Test.** Sind es mehr, fängt Claude nichts Neues an, bis du getestet hast.
|
|
171
|
-
7. **Fertig heißt zweimal geprüft:**
|
|
157
|
+
7. **Fertig heißt zweimal geprüft:** Claude hat alles selbst ausprobiert, und du hast „Passt" gesagt — für genau diesen Stand.
|
|
172
158
|
8. **Eine Spec ist erst abgeschlossen, wenn jede Story fertig oder bewusst weggelassen ist** — mit Grund. Einen stillen Rest gibt es nicht.
|
|
173
159
|
|
|
174
|
-
**Was du danach tust
|
|
160
|
+
**Was du danach tust** (jedes Mal eine Meldung, Abschnitt 6):
|
|
175
161
|
|
|
176
|
-
- **Regel 1 — jedes `passt nicht` aus `kimal3 plan`:** Gibt es die Story noch,
|
|
177
|
-
Menschen als Befund
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
`
|
|
181
|
-
`antwort`, warum. ⚠️ Ohne Befund von `mensch` und ohne höhere Runde lehnt
|
|
182
|
-
|
|
162
|
+
- **Regel 1 — jedes `passt nicht` aus `kimal3 plan`:** Gibt es die Story noch, melde sie mit dem Satz
|
|
163
|
+
des Menschen als Befund (`quelle: "mensch"`, `seit: "<heute>"`) und `stand: "in_arbeit"`, und
|
|
164
|
+
gleich dahinter in derselben Liste `uebernommen` mit der Nummer: `{ "art": "uebernommen",
|
|
165
|
+
"rueckmeldung": 12, "antwort": "Befund an US-2" }`. Ist sie seitdem schon nachgebessert,
|
|
166
|
+
stattdessen `runde` + 1, `befunde: []` und `stand: "gebaut"` (Abschnitt 4). Gibt es die Story
|
|
167
|
+
nicht mehr, sagt die `antwort`, warum. ⚠️ Ohne Befund von `mensch` und ohne höhere Runde lehnt
|
|
168
|
+
die App die Übernahme ab.
|
|
183
169
|
- **Regel 2 — Neues:** Was dir beim Prüfen auffällt oder der Mensch im Gespräch sagt und was
|
|
184
|
-
**keine** Spec verspricht,
|
|
185
|
-
`
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
- **Regel 3 — einordnen:** Jedes `Thema` aus `kimal3 plan` **und** jedes Thema
|
|
189
|
-
|
|
170
|
+
**keine** Spec verspricht, meldest du als `thema`. Nimm die nächste freie Nummer (`T-4` nach
|
|
171
|
+
`T-3`) — und denk daran, dass ein eingeordnetes Thema seinen Schlüssel 14 Tage lang behält:
|
|
172
|
+
Sagt die App, ein Schlüssel komme doppelt vor, nimm die nächste Nummer. Die fünf Plätze teilen
|
|
173
|
+
sich deine Themen und die offenen Notizen aus der App.
|
|
174
|
+
- **Regel 3 — einordnen:** Jedes `Thema` aus `kimal3 plan` **und** jedes `Notiertes Thema` ordnest
|
|
175
|
+
du **jetzt** ein — eins von dreien:
|
|
190
176
|
- **neue Story:** schreib sie in die Spec, zu der sie gehört (User Story, Akzeptanzkriterium mit
|
|
191
|
-
Gegenprobe), und
|
|
192
|
-
Antwort: `neue Story US-7 in „Content-Planer“`.
|
|
177
|
+
Gegenprobe), und melde die Spec mit der neuen Story (`stand` bleibt `offen`; es genügt die
|
|
178
|
+
neue, die alten bleiben). Passt keine Spec, frag, wohin. Antwort: `neue Story US-7 in „Content-Planer“`.
|
|
193
179
|
- **Befund an eine Story:** wie bei Regel 1. Antwort: `Befund an US-2 in „Content-Planer“`.
|
|
194
180
|
- **gestrichen:** Antwort `gestrichen: <Grund in einem Satz>`, zum Beispiel
|
|
195
181
|
`gestrichen: Feiertage stehen schon im Kalender-Werkzeug.`
|
|
196
182
|
|
|
197
|
-
Für eine Notiz aus der App gehört die Antwort als **ein Satz** in
|
|
198
|
-
sie unter „Zuletzt eingeordnet" als `<Notiz> → <Antwort>`); schreib
|
|
199
|
-
am Anfang. Ein Thema
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
- **Regel 4:** Weil du bei jedem `/k3plan` alles einordnest, liegt nichts lange. Ein Thema mit
|
|
205
|
-
`seit` vor mehr als 14 Tagen ordnest du **auf jeden Fall** jetzt ein.
|
|
183
|
+
Für eine Notiz aus der App (`#13 · Thema`) gehört die Antwort als **ein Satz** in eine Meldung
|
|
184
|
+
`uebernommen` (die App zeigt sie unter „Zuletzt eingeordnet" als `<Notiz> → <Antwort>`); schreib
|
|
185
|
+
sie darum **ohne** Pfeil am Anfang. Ein `Notiertes Thema` von dir ordnest du mit einer Meldung
|
|
186
|
+
`eingeordnet` ein (Schlüssel, Text wie oben, Antwort) — die App nimmt es aus den Themen heraus
|
|
187
|
+
und zeigt es 14 Tage lang unter „Zuletzt eingeordnet". Nenn die Einordnung auch im Bericht.
|
|
188
|
+
- **Regel 4:** Weil du bei jedem `/k3plan` alles einordnest, liegt nichts lange. Ein Thema, das
|
|
189
|
+
schon mehr als 14 Tage liegt, ordnest du **auf jeden Fall** jetzt ein.
|
|
206
190
|
- **Regel 5 und 6 — keine neue Spec beginnen**, solange eine andere Spec in Arbeit ist (eine ihrer
|
|
207
191
|
Stories ist `in_arbeit`, hat einen Befund oder eine gescheiterte Gegenprobe, oder ist `gebaut`
|
|
208
192
|
mit einem `offen`-Kriterium oder ganz ohne Kriterien), oder solange mehr als fünf Stories auf den Test des Menschen
|
|
209
|
-
warten (`gebaut`, alles bestanden, kein Befund, noch nicht bestätigt
|
|
193
|
+
warten (`gebaut`, alles bestanden, kein Befund, noch nicht bestätigt — **und** keine Story ihrer Spec hält die Spec
|
|
194
|
+
noch in Arbeit: Nur dann steht sie in „Dein Test", und nur dann zählt die App die Story). **Sag dem Menschen
|
|
210
195
|
stattdessen, was er testen soll** — mit den `testen`-Sätzen. Ordnest du ein Thema als neue Story
|
|
211
196
|
in eine Spec ein, beginnst du sie damit nicht: Sie steht `offen`, und die Spec gilt nicht als in
|
|
212
197
|
Arbeit.
|
|
213
|
-
- **Regel 7:** „Fertig" setzt nur der Mensch mit „Passt" in der App;
|
|
198
|
+
- **Regel 7:** „Fertig" setzt nur der Mensch mit „Passt" in der App; eine Meldung hat dafür kein
|
|
214
199
|
Feld. Du hältst nur die Runde stabil (Abschnitt 4).
|
|
215
200
|
- **Regel 8:** `weggelassen` nur mit `grund` (Abschnitt 3).
|
|
216
201
|
|
|
217
|
-
## 6. Die
|
|
202
|
+
## 6. Die Meldungen
|
|
218
203
|
|
|
219
|
-
|
|
204
|
+
Jede Meldung ist ein JSON-Objekt, mehrere eine Liste. Sie geht über die Eingabe an
|
|
205
|
+
`kimal3 plan melde --ohne-sitzung`; das Programm setzt die Zeit selbst, das Projekt kommt vom Ordnerzettel
|
|
206
|
+
`plan/projekt.json`. Prüfen ist nicht Arbeiten — so leuchtet auf dem Board kein Punkt.
|
|
220
207
|
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
"format": 1,
|
|
224
|
-
"projekt": "LinkedIn Content-App",
|
|
225
|
-
"projekt_id": null,
|
|
226
|
-
"basis": null,
|
|
227
|
-
"geprueft_am": "2026-10-21T22:10:00+02:00",
|
|
228
|
-
"specs": [
|
|
229
|
-
{
|
|
230
|
-
"schluessel": "2026-09-23-content-planer",
|
|
231
|
-
"titel": "Content-Planer als Seite",
|
|
232
|
-
"datei": "plan/2026-09-23-content-planer-seite-spec.md",
|
|
233
|
-
"stories": [
|
|
234
|
-
{
|
|
235
|
-
"schluessel": "US-2",
|
|
236
|
-
"titel": "Beiträge im Kalender verschieben",
|
|
237
|
-
"stand": "gebaut",
|
|
238
|
-
"runde": 1,
|
|
239
|
-
"gebaut_am": "2026-10-21",
|
|
240
|
-
"kriterien": [
|
|
241
|
-
{ "text": "Beitrag vom Montag auf Mittwoch ziehen → steht am Mittwoch", "gegenprobe": "bestanden" }
|
|
242
|
-
],
|
|
243
|
-
"befunde": [],
|
|
244
|
-
"testen": "Öffne /kalender, zieh den Beitrag vom Montag auf den Mittwoch.",
|
|
245
|
-
"grund": null
|
|
246
|
-
}
|
|
247
|
-
]
|
|
248
|
-
}
|
|
249
|
-
],
|
|
250
|
-
"themen": [
|
|
251
|
-
{ "schluessel": "T-1", "text": "Kalender soll Feiertage zeigen", "quelle": "mensch", "seit": "2026-10-21" }
|
|
252
|
-
],
|
|
253
|
-
"uebernommen": [
|
|
254
|
-
{ "rueckmeldung": 12, "antwort": "Befund an US-2" }
|
|
255
|
-
],
|
|
256
|
-
"eingeordnet": [
|
|
257
|
-
{ "schluessel": "T-2", "text": "Export als PDF", "antwort": "gestrichen: Der Drucken-Knopf kann das schon.", "am": "2026-10-21" }
|
|
258
|
-
]
|
|
259
|
-
}
|
|
208
|
+
```
|
|
209
|
+
echo '[ … ]' | kimal3 plan melde --ohne-sitzung
|
|
260
210
|
```
|
|
261
211
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
- `format`: genau `1`.
|
|
266
|
-
- `projekt`: der Name wie in der App, 1–200 Zeichen.
|
|
267
|
-
- `projekt_id`, `basis`: am Anfang `null`; danach schreibt sie `kimal3 plan hoch` — **nie von Hand
|
|
268
|
-
ändern**. Einzige Ausnahme: die Absage „Die Projektnummer in plan/stand.json gehört zu keinem
|
|
269
|
-
deiner Projekte." — dann `projekt_id` auf `null` setzen (Abschnitt 2).
|
|
270
|
-
- `geprueft_am`: jetzt, mit Zeitzone (`date +%Y-%m-%dT%H:%M:%S%:z` in der Bash, `Get-Date -Format
|
|
271
|
-
"yyyy-MM-ddTHH:mm:sszzz"` in PowerShell).
|
|
272
|
-
- `specs[]`: `schluessel` (eindeutig, 1–80 Zeichen), `titel` (1–200), `datei` (Pfad oder `null`),
|
|
273
|
-
`stories[]`.
|
|
274
|
-
- `stories[]`: `schluessel` (eindeutig in ihrer Spec), `titel`, `stand` (`offen` · `in_arbeit` ·
|
|
275
|
-
`gebaut` · `weggelassen`), `runde` (1–999), `gebaut_am` (`JJJJ-MM-TT` bei `gebaut`, sonst
|
|
276
|
-
`null`), `kriterien[]`, `befunde[]`, `testen` (Satz oder `null`), `grund` (Pflicht bei
|
|
277
|
-
`weggelassen`, sonst `null`).
|
|
278
|
-
- `kriterien[]`: `{ "text", "gegenprobe": "bestanden" | "gescheitert" | "offen" }`, höchstens 30
|
|
279
|
-
je Story.
|
|
280
|
-
- `befunde[]`: `{ "text", "quelle": "claude" | "mensch", "seit": "JJJJ-MM-TT" }` — nur offene,
|
|
281
|
-
höchstens 20.
|
|
282
|
-
- `themen[]`: `{ "schluessel", "text", "quelle", "seit" }`, höchstens 50 (der Eingang hat fünf
|
|
283
|
-
Plätze, Regel 2).
|
|
284
|
-
- `uebernommen[]`: `{ "rueckmeldung": <Nummer aus kimal3 plan>, "antwort": "<ein Satz>" }`. Leert
|
|
285
|
-
`kimal3 plan hoch` nach dem Hochladen selbst.
|
|
286
|
-
- `eingeordnet[]`: `{ "schluessel", "text", "antwort": "<ein Satz>", "am": "JJJJ-MM-TT" }`, höchstens
|
|
287
|
-
50 — Themen aus `themen`, die du eingeordnet hast (Regel 3). Ein Schlüssel steht nie zugleich in
|
|
288
|
-
`themen` und `eingeordnet`.
|
|
289
|
-
- Die ganze Datei: höchstens 300 KB.
|
|
290
|
-
|
|
291
|
-
## 7. Hochladen
|
|
292
|
-
|
|
293
|
-
Erst der Probelauf — er prüft alles und speichert nichts:
|
|
212
|
+
(In PowerShell: `'[ … ]' | kimal3 plan melde --ohne-sitzung`. Lange Texte lieber über eine Datei.) Die Beispiele
|
|
213
|
+
sind erfunden.
|
|
294
214
|
|
|
295
|
-
|
|
296
|
-
|
|
215
|
+
**Eine Spec** — beim Prüfen und wenn Stories dazukommen:
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{ "art": "spec", "schluessel": "2026-10-24-testmonat", "titel": "Testmonat",
|
|
219
|
+
"datei": "docs/superpowers/specs/2026-10-24-testmonat-design.md",
|
|
220
|
+
"stories": [ { "schluessel": "US-1", "titel": "Der Testmonat startet" },
|
|
221
|
+
{ "schluessel": "US-2", "titel": "Der Testmonat endet" },
|
|
222
|
+
{ "schluessel": "US-3", "titel": "Export des Testmonats" } ] }
|
|
297
223
|
```
|
|
298
224
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
225
|
+
**Eine Story** — eine Abweichung, ein Eintrag. Gebaut, mit Gegenprobe:
|
|
226
|
+
|
|
227
|
+
```json
|
|
228
|
+
{ "art": "story", "spec": "2026-10-24-testmonat", "story": "US-1", "stand": "gebaut",
|
|
229
|
+
"kriterien": [ { "text": "Startet Sabine am 1.11., endet der Testmonat am 30.11.", "gegenprobe": "bestanden" } ],
|
|
230
|
+
"testen": "Öffne in der App ‚Testmonat‘ und klick „Starten“ — darunter steht ‚Endet am 30.11.‘. Steht dort ein anderes Datum, sag ‚Passt nicht‘." }
|
|
231
|
+
```
|
|
303
232
|
|
|
304
|
-
|
|
233
|
+
Mit einem offenen Befund (hier von dir; `quelle: "mensch"` nur für den Satz des Menschen):
|
|
305
234
|
|
|
235
|
+
```json
|
|
236
|
+
{ "art": "story", "spec": "2026-10-24-testmonat", "story": "US-2", "stand": "in_arbeit",
|
|
237
|
+
"befunde": [ { "text": "Am 30.11. fehlt die Erinnerungsmail, die die Spec verspricht.", "quelle": "claude", "seit": "2026-10-23" } ] }
|
|
306
238
|
```
|
|
307
|
-
|
|
239
|
+
|
|
240
|
+
Bewusst weggelassen (`grund` ist Pflicht):
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{ "art": "story", "spec": "2026-10-24-testmonat", "story": "US-3", "stand": "weggelassen", "grund": "Die Spec streicht den Export." }
|
|
308
244
|
```
|
|
309
245
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
246
|
+
**Ein Thema** (Regel 2), **ein Thema von dir einordnen** (Regel 3), **eine Rückmeldung des Menschen
|
|
247
|
+
übernehmen** (Regel 1 und 3):
|
|
248
|
+
|
|
249
|
+
```json
|
|
250
|
+
{ "art": "thema", "schluessel": "T-4", "text": "Der Kalender könnte Feiertage zeigen" }
|
|
251
|
+
{ "art": "eingeordnet", "schluessel": "T-3", "text": "Export als PDF", "antwort": "gestrichen: Der Drucken-Knopf kann das schon." }
|
|
252
|
+
{ "art": "uebernommen", "rueckmeldung": 12, "antwort": "Befund an US-2" }
|
|
253
|
+
```
|
|
314
254
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
255
|
+
**Was das Programm zurückgibt:** Bei Erfolg schweigt es (`0`) — und **du auch**: Sag dem Menschen
|
|
256
|
+
nicht, dass du gemeldet hast. `1` — die App hat abgesagt oder die Eingabe war unlesbar; der Satz
|
|
257
|
+
auf der Fehlerausgabe sagt warum. Meldungen, die er nicht nennt, sind angekommen. `3` — die App
|
|
258
|
+
ist nicht erreichbar; die Meldung ist **gemerkt** und geht beim nächsten Befehl mit
|
|
259
|
+
(`kimal3 plan senden` schickt sie sofort) — nicht noch einmal schicken. `2` — nicht mehr
|
|
260
|
+
angemeldet: Sag dem Menschen `kimal3 login`; die Meldung ist gemerkt.
|
|
320
261
|
|
|
321
|
-
**Absagen — die Meldung lesen, beheben,
|
|
262
|
+
**Absagen — die Meldung lesen, beheben, noch einmal:**
|
|
322
263
|
|
|
323
264
|
| Meldung beginnt mit | Was du tust |
|
|
324
265
|
|---|---|
|
|
325
|
-
| `
|
|
326
|
-
| `
|
|
327
|
-
|
|
|
266
|
+
| `Die Meldung zu <Story> von <Uhrzeit> kam zu spät an …` | Eine andere Sitzung oder der Mensch hat die Story danach geändert. **Nicht erneut senden.** `kimal3 plan` zeigt den heutigen Stand; melde nur, was dann noch fehlt. |
|
|
267
|
+
| `Die Spec … gibt es in diesem Projekt noch nicht.` · `… hat keine Story …` | Melde zuerst die Spec mit ihren Stories (Abschnitt 6, „Eine Spec"), dann die Story. |
|
|
268
|
+
| `Meldung Nr. 2 ist nicht lesbar (meldung).` | Die Meldung hat ein falsches Feld oder fehlt eines — gegen die Beispiele oben halten. Geschickt wurde nichts. |
|
|
269
|
+
| `<Spec> / <Story> hat Runde 1, gespeichert ist schon Runde 2.` | Deine Runde ist älter als die gespeicherte. Mit der gespeicherten oder höher noch einmal — nie kleiner. |
|
|
328
270
|
| `Rückmeldung 12 gibt es in diesem Projekt nicht oder steht zweimal …` | Nur Nummern aus `kimal3 plan`, jede einmal. |
|
|
329
|
-
| `Rückmeldung 12 („…“) ist als übernommen gemeldet, aber US-2 hat keinen Befund von dir …` |
|
|
330
|
-
| `
|
|
331
|
-
| `Die
|
|
332
|
-
| `Die
|
|
333
|
-
|
|
|
334
|
-
| `⚠ Die Planung ist gespeichert, aber plan/stand.json ließ sich nicht nachtragen. Trag selbst ein: …` | Genau diese Werte in die Datei schreiben. |
|
|
335
|
-
| `… ließ sich gerade nicht laden` / `… nicht speichern` | Einmal wiederholen; klappt es dann nicht, dem Menschen sagen. |
|
|
271
|
+
| `Rückmeldung 12 („…“) ist als übernommen gemeldet, aber US-2 hat keinen Befund von dir …` | Erst die Story mit dem Befund `quelle: "mensch"` melden (Regel 1) — oder `runde` + 1, wenn nachgebessert ist — dann `uebernommen`. |
|
|
272
|
+
| `Der Plan ist nicht lesbar: <Ort> …` | Die genannte Stelle der Meldung berichtigen (Länge, `grund` bei `weggelassen`, doppelter Schlüssel). |
|
|
273
|
+
| `Die Meldung ist angekommen, der Text von <Datei> aber nicht …` | Die Meldung noch einmal schicken — doppelt schadet nicht. Passt der Text nicht mehr (über 300 KB), sag es dem Menschen. |
|
|
274
|
+
| `Die Meldungen sind gespeichert, aber noch nicht ganz vermerkt.` | Noch einmal schicken — doppelt schadet nicht. |
|
|
275
|
+
| `Die gespeicherte Planung in der App ist beschädigt …` | Sag es dem Menschen. `kimal3 plan hoch --ueberschreiben` ersetzt die Planung durch eine ganze Datei `plan/stand.json` — **nur nach seinem ausdrücklichen Ja.** |
|
|
336
276
|
|
|
337
|
-
🔴 **`--ueberschreiben` ersetzt, was
|
|
338
|
-
|
|
277
|
+
🔴 **`--ueberschreiben` ersetzt, was andere gemeldet haben.** Nie aus eigenem Entschluss, auch
|
|
278
|
+
nicht, wenn die Meldung es vorschlägt.
|
|
339
279
|
|
|
340
|
-
##
|
|
280
|
+
## 7. Dem Menschen berichten
|
|
341
281
|
|
|
342
|
-
**Höchstens fünf Zeilen**, ohne Fachjargon:
|
|
282
|
+
**Höchstens fünf Zeilen**, ohne Fachjargon — und nichts über die Meldungen selbst:
|
|
343
283
|
|
|
344
284
|
- was **fertig** wurde (seit dem letzten Mal bestätigt),
|
|
345
|
-
- was **auf seinen Test wartet** — mit dem `testen`-Satz, damit er gleich loslegen kann,
|
|
285
|
+
- was **auf seinen Test wartet** (nur Stories aus Specs in „Dein Test") — mit dem `testen`-Satz, damit er gleich loslegen kann,
|
|
346
286
|
- was im **Eingang** entschieden wurde (jedes Thema mit seiner Antwort),
|
|
347
287
|
- eine **Warnung**, wenn Regel 5 oder 6 verletzt ist: „Teste zuerst …" statt einer neuen Story,
|
|
348
288
|
- der **Link** aus `Ansehen: …`.
|