kimal3 0.4.0 → 0.6.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 +8 -0
- package/coach/de/kimal3-coach.md +2 -2
- package/coach/en/kimal3-coach.md +2 -2
- package/dist/befehle/einrichten.js +1 -1
- package/dist/befehle/login.js +6 -2
- package/dist/befehle/plan-hoch.js +114 -0
- package/dist/befehle/plan.js +110 -0
- package/dist/befehle/skill-install.js +4 -1
- package/dist/befehle/zeigen-einrichten.js +104 -0
- package/dist/befehle/zeigen-start.js +143 -0
- package/dist/befehle/zeigen.js +288 -0
- package/dist/befehle-katalog-en.js +41 -0
- package/dist/befehle-katalog.js +45 -0
- package/dist/befehlswoerter.js +16 -0
- package/dist/kimal3.js +15 -0
- package/dist/logo-ablegen.js +26 -6
- package/dist/plan-datei.js +172 -0
- package/dist/slash-befehle.js +2 -0
- package/dist/texte/einrichten.js +10 -3
- package/dist/texte/plan.js +93 -0
- package/dist/texte/zeigen.js +189 -0
- package/dist/zeigen-rechnung.js +226 -0
- package/dist/zeigen-umgebung.js +190 -0
- package/package.json +30 -29
- package/skill/SKILL.md +4 -2
- package/skill/commands/k3.md +5 -3
- package/skill/commands/k3plan.md +347 -0
- package/skill/commands/k3start.md +1 -1
- package/skill/commands/k3zeigen.md +303 -0
- package/skill/en/SKILL.md +5 -3
- package/skill/en/commands/k3.md +5 -3
- package/skill/en/commands/k3plan.md +342 -0
- package/skill/en/commands/k3show.md +302 -0
- package/skill/en/commands/k3start.md +1 -1
- package/zeigen/gemeinsam.py +82 -0
- package/zeigen/starter.py +163 -0
- package/zeigen/werkzeug.py +250 -0
- package/zeigen/zeitleiste.py +393 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Die Specs gegen den Code prüfen und die Planung in die App hochladen
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
|
|
6
|
+
jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
|
|
7
|
+
behalten will, kopiert die Datei unter einem anderen Namen. -->
|
|
8
|
+
# Planung prüfen und hochladen
|
|
9
|
+
|
|
10
|
+
## 1. Wozu
|
|
11
|
+
|
|
12
|
+
Du prüfst die User Stories in den Specs dieses Projekts gegen den Code und lädst **nur das
|
|
13
|
+
Ergebnis** in die App hoch — nie den Code. Dort sieht der Mensch auf der Projektseite (Reiter
|
|
14
|
+
„Planung"), was offen ist, was auf seinen Test wartet und was fertig ist, und urteilt mit
|
|
15
|
+
„Passt" oder „Passt nicht".
|
|
16
|
+
|
|
17
|
+
Arbeite die Abschnitte der Reihe nach ab. Die Regeln (Abschnitt 5) und das Dateiformat
|
|
18
|
+
(Abschnitt 6) brauchst du schon ab Abschnitt 2 — lies sie zuerst. Was ein Rückgabewert von
|
|
19
|
+
`kimal3` heißt, steht in **`~/.claude/skills/kimal3/SKILL.md`, Abschnitt „Rückgabewerte"**;
|
|
20
|
+
diese Datei wiederholt es nicht.
|
|
21
|
+
|
|
22
|
+
🔑 **`/k3plan` prüft, ordnet ein und lädt hoch — es baut nichts.** Was nachzubessern ist, steht
|
|
23
|
+
danach als Befund an der Story; gebaut wird, wenn der Mensch es sagt.
|
|
24
|
+
|
|
25
|
+
## 2. Rückmeldungen holen
|
|
26
|
+
|
|
27
|
+
Arbeite im **Projektordner** (dort, wo Specs und Code liegen). Die Datei heißt immer
|
|
28
|
+
`plan/stand.json`, relativ zu diesem Ordner.
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
kimal3 plan
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Kommt `Im Ordner liegt keine plan/stand.json.`**, ist es das erste Mal (oder du stehst im
|
|
35
|
+
falschen Ordner — prüf das zuerst):
|
|
36
|
+
|
|
37
|
+
1. `kimal3 projekt liste` — such das Projekt, um das es hier geht. Gibt es **kein** passendes,
|
|
38
|
+
frag den Menschen, welches gemeint ist, und schlag `/k3projekt <was du gebaut hast>` vor:
|
|
39
|
+
Ohne Eintrag im Erfolgsprofil gibt es keine Projektseite. Hier aufhören, nichts erfinden.
|
|
40
|
+
2. Leg `plan/stand.json` an, mit dem Namen **genau so, wie die Liste ihn schreibt**:
|
|
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.
|
|
58
|
+
|
|
59
|
+
**Was die Ausgabe heißt** (Beispiel, erfundene Werte):
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
#12 · passt nicht · 2026-09-23-content-planer / US-2 (Runde 1): Beim Ziehen springt er auf Dienstag
|
|
63
|
+
#13 · Thema: Kalender soll Feiertage zeigen
|
|
64
|
+
Bestätigt: 2026-09-23-content-planer / US-1 (Runde 1)
|
|
65
|
+
Ansehen: https://app.kimal3.de/projekt/…
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- `#12 · passt nicht · <Spec> / <Story> (Runde n): <Satz>` — der Mensch hat die Story getestet,
|
|
69
|
+
sie hält nicht. → Regel 1 in Abschnitt 5. Die Nummer brauchst du später für `uebernommen`.
|
|
70
|
+
- `#13 · Thema: <Satz>` — etwas Neues, das er in der App notiert hat. → Regel 3.
|
|
71
|
+
- `Bestätigt: …` — für diese Stories hat er in **dieser** Runde „Passt" gesagt; sie sind fertig.
|
|
72
|
+
Ein „Passt" musst du nicht übernehmen.
|
|
73
|
+
- `Ansehen: …` — der Link zur Planung. Merk ihn dir für den Bericht.
|
|
74
|
+
- `Keine offenen Rückmeldungen.` — nichts zu übernehmen; weiter mit Abschnitt 3.
|
|
75
|
+
|
|
76
|
+
**Absagen:**
|
|
77
|
+
- `Kein Projekt heißt „…“. Deine Projekte: … Trag den Namen in plan/stand.json genau so ein.` —
|
|
78
|
+
übernimm den passenden Namen **wörtlich** aus der Liste in `"projekt"`. Passen zwei, frag.
|
|
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.
|
|
87
|
+
|
|
88
|
+
## 3. Specs finden
|
|
89
|
+
|
|
90
|
+
Such im Projektordner in **`docs/superpowers/specs/`**, **`plan/`** und **`docs/specs/`** nach
|
|
91
|
+
Markdown-Dateien mit User Stories („Als … will ich … damit …", oft `US-1`, `US-2`, mit
|
|
92
|
+
Akzeptanzkriterien und Gegenprobe). `plan/stand.json` selbst, Statuszettel und Aufgabenlisten
|
|
93
|
+
sind keine Specs.
|
|
94
|
+
|
|
95
|
+
Je Spec ein Eintrag in `specs`, je User Story ein Eintrag in `stories`, je Akzeptanzkriterium
|
|
96
|
+
ein Eintrag in `kriterien` (kurz gefasst, höchstens 500 Zeichen: Ausgangslage → Handlung →
|
|
97
|
+
Ergebnis).
|
|
98
|
+
|
|
99
|
+
🔴 **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 `plan/stand.json`,
|
|
101
|
+
**übernimm ihren Schlüssel unverändert** — ein umbenannter Schlüssel lässt das Urteil des
|
|
102
|
+
Menschen verschwinden. Neu: Spec-Schlüssel = Dateiname ohne `.md`; Story-Schlüssel = die Nummer
|
|
103
|
+
aus der Spec (`US-3`); nummeriert die Spec nicht, zähl selbst `US-1`, `US-2` … in ihrer
|
|
104
|
+
Reihenfolge.
|
|
105
|
+
|
|
106
|
+
- `titel`: die Überschrift der Spec bzw. der Story. `datei`: der Pfad der Spec im Projektordner (relativ, endet auf `.md`; sonst `null`). Den **Text** der Spec
|
|
107
|
+
liest `kimal3 plan hoch` aus dieser Datei und schickt ihn mit — Pfade außerhalb des Projektordners
|
|
108
|
+
liest es nicht.
|
|
109
|
+
- Der Story-Schlüssel ist **derselbe wie in der Überschrift der Spec**, wo die Spec ihre Stories
|
|
110
|
+
nummeriert (`### US-3 · …` → `US-3`): Die App findet die Story im Spec-Text über diesen Schlüssel.
|
|
111
|
+
- Eine Spec ohne Stories kommt mit `"stories": []` hinein; sag es im Bericht.
|
|
112
|
+
- Grenzen: höchstens 50 Specs, 60 Stories je Spec, 400 zusammen. Sind es mehr, frag den
|
|
113
|
+
Menschen, welche Specs hineingehören.
|
|
114
|
+
|
|
115
|
+
**Der Stand je Story:**
|
|
116
|
+
- `offen` — noch nichts gebaut.
|
|
117
|
+
- `in_arbeit` — teilweise gebaut, oder ein Befund ist offen. `gebaut_am` ist dann `null`.
|
|
118
|
+
- `gebaut` — gebaut. `gebaut_am`: das Datum, an dem **diese Runde** fertig wurde (`JJJJ-MM-TT`);
|
|
119
|
+
dazu ein `testen`-Satz (Abschnitt 4).
|
|
120
|
+
- `weggelassen` — bewusst nicht gebaut, `grund` ist Pflicht (Regel 8). Nur, wenn die Spec oder
|
|
121
|
+
der Mensch das so entschieden hat — nie von dir allein, um aufzuräumen. Im Zweifel: `offen`
|
|
122
|
+
lassen und im Bericht fragen.
|
|
123
|
+
|
|
124
|
+
## 4. Gegen den Code prüfen
|
|
125
|
+
|
|
126
|
+
Führ je Kriterium seine Gegenprobe aus, **wo es geht**: die Wächter oder Tests des Projekts
|
|
127
|
+
(`npm test`, `npm run …`), einen Befehl, die App starten und die Adresse aufrufen, eine Datei
|
|
128
|
+
lesen.
|
|
129
|
+
|
|
130
|
+
- `bestanden` — **nur**, wenn die Gegenprobe in dieser Sitzung gelaufen ist und das erwartete
|
|
131
|
+
Ergebnis gezeigt hat. Nie aus dem Gedächtnis, nie vom letzten Mal, nie weil der Code „richtig
|
|
132
|
+
aussieht".
|
|
133
|
+
- `gescheitert` — sie ist gelaufen und hat etwas anderes gezeigt. Das ist ein Befund (Regel 1);
|
|
134
|
+
die App stellt die Story und ihre Spec damit nach „In Arbeit".
|
|
135
|
+
- `offen` — alles, was nicht gelaufen ist: braucht einen Browser, eine Anmeldung, echte Daten
|
|
136
|
+
oder einen Menschen. Lesen zählt nur, wenn das Kriterium etwas über die Datei selbst sagt (eine
|
|
137
|
+
Datei gibt es, ein Text steht so da) — ein Verhalten beweist Lesen nicht.
|
|
138
|
+
|
|
139
|
+
⚠️ Eine Story mit einem `offen`-Kriterium steht in „Claude-Test offen", und der Mensch kann sie
|
|
140
|
+
noch nicht testen. Sag im Bericht, was fehlt, damit die Gegenprobe laufen kann.
|
|
141
|
+
|
|
142
|
+
**Der `testen`-Satz** (bei jeder `gebaut`-Story, höchstens 1000 Zeichen) nennt die **Adresse oder
|
|
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".
|
|
146
|
+
|
|
147
|
+
**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 — steht
|
|
149
|
+
er schon in der Datei, bleibt sein altes Datum.
|
|
150
|
+
|
|
151
|
+
**Die Runde** bindet ein Urteil an einen Bau-Stand — wie ein Stempel auf einer Fassung:
|
|
152
|
+
- Sie beginnt bei `1` und wird **nie** kleiner.
|
|
153
|
+
- **Um genau 1 erhöhen**, wenn eine Story mit einem Befund des Menschen (`quelle: "mensch"`)
|
|
154
|
+
seitdem nachgebessert wurde (Git-Verlauf, und die Gegenproben bestehen jetzt): dann
|
|
155
|
+
`befunde: []`, `stand: "gebaut"`, neues `gebaut_am`, neuer `testen`-Satz. Der Mensch testet neu.
|
|
156
|
+
Ist unklar, ob nachgebessert wurde: Befund stehen lassen und im Bericht fragen.
|
|
157
|
+
- **Auch erhöhen**, wenn du eine **bestätigte** Story so geändert hast, dass der Mensch es merken
|
|
158
|
+
würde — sein altes „Passt" gilt dann nicht mehr (Regel 7).
|
|
159
|
+
- Sonst **nicht anfassen**: Eine bestätigte Story bleibt fertig, solange ihre Runde gleich bleibt.
|
|
160
|
+
|
|
161
|
+
## 5. Die acht Regeln
|
|
162
|
+
|
|
163
|
+
Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planung kurz"):
|
|
164
|
+
|
|
165
|
+
1. **Ein Befund ist keine neue Karte.** Hält eine Story nicht, was sie verspricht — Claudes Gegenprobe scheitert oder du sagst „Passt nicht" —, hängt der Befund an **dieser** Story, und ihre Spec geht zurück nach „In Arbeit“.
|
|
166
|
+
2. **Neu ist nur, was niemand versprochen hat. Das kommt in den Eingang, und der hat fünf Plätze.**
|
|
167
|
+
3. **Claude ordnet jedes Thema beim nächsten `/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 „Zuletzt eingeordnet".
|
|
168
|
+
4. **Nichts liegt länger als 14 Tage im Eingang.**
|
|
169
|
+
5. **Höchstens eine Spec gleichzeitig in Arbeit** („In Arbeit“ und „Claude-Test offen“ zusammen). Erst fertig machen, dann die nächste beginnen.
|
|
170
|
+
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:** Claudes Gegenproben bestanden, und du hast „Passt" gesagt — für genau diesen Stand.
|
|
172
|
+
8. **Eine Spec ist erst abgeschlossen, wenn jede Story fertig oder bewusst weggelassen ist** — mit Grund. Einen stillen Rest gibt es nicht.
|
|
173
|
+
|
|
174
|
+
**Was du danach tust:**
|
|
175
|
+
|
|
176
|
+
- **Regel 1 — jedes `passt nicht` aus `kimal3 plan`:** Gibt es die Story noch, häng den Satz des
|
|
177
|
+
Menschen als Befund an sie (`{ "text": "<sein Satz>", "quelle": "mensch", "seit": "<heute>" }`),
|
|
178
|
+
`stand: "in_arbeit"`, `gebaut_am: null`. Ist sie seitdem schon nachgebessert, stattdessen
|
|
179
|
+
Runde + 1 und `befunde: []` (Abschnitt 4). Dazu in `uebernommen`:
|
|
180
|
+
`{ "rueckmeldung": 12, "antwort": "Befund an US-2" }`. Gibt es die Story nicht mehr, sagt die
|
|
181
|
+
`antwort`, warum. ⚠️ Ohne Befund von `mensch` und ohne höhere Runde lehnt der Server das
|
|
182
|
+
Hochladen ab.
|
|
183
|
+
- **Regel 2 — Neues:** Was dir beim Prüfen auffällt oder der Mensch im Gespräch sagt und was
|
|
184
|
+
**keine** Spec verspricht, kommt nach `themen`:
|
|
185
|
+
`{ "schluessel": "T-1", "text": "…", "quelle": "claude" | "mensch", "seit": "<heute>" }`.
|
|
186
|
+
Die fünf Plätze teilen sich `themen` und die offenen Notizen aus der App.
|
|
187
|
+
- **Regel 3 — einordnen:** Jedes `Thema` aus `kimal3 plan` **und** jedes Thema, das schon von
|
|
188
|
+
früher in `themen` steht, ordnest du **jetzt** ein — eins von dreien:
|
|
189
|
+
- **neue Story:** schreib sie in die Spec, zu der sie gehört (User Story, Akzeptanzkriterium mit
|
|
190
|
+
Gegenprobe), und in `plan/stand.json` mit `stand: "offen"`. Passt keine Spec, frag, wohin.
|
|
191
|
+
Antwort: `neue Story US-7 in „Content-Planer“`.
|
|
192
|
+
- **Befund an eine Story:** wie bei Regel 1. Antwort: `Befund an US-2 in „Content-Planer“`.
|
|
193
|
+
- **gestrichen:** Antwort `gestrichen: <Grund in einem Satz>`, zum Beispiel
|
|
194
|
+
`gestrichen: Feiertage stehen schon im Kalender-Werkzeug.`
|
|
195
|
+
|
|
196
|
+
Für eine Notiz aus der App gehört die Antwort als **ein Satz** in `uebernommen` (die App zeigt
|
|
197
|
+
sie unter „Zuletzt eingeordnet" als `<Notiz> → <Antwort>`); schreib sie darum **ohne** Pfeil
|
|
198
|
+
am Anfang. Ein Thema aus der Datei nimmst du aus `themen` heraus und nennst seine Einordnung im
|
|
199
|
+
Bericht.
|
|
200
|
+
- **Regel 4:** Weil du bei jedem `/k3plan` alles einordnest, liegt nichts lange. Ein Thema mit
|
|
201
|
+
`seit` vor mehr als 14 Tagen ordnest du **auf jeden Fall** jetzt ein.
|
|
202
|
+
- **Regel 5 und 6 — keine neue Spec beginnen**, solange eine andere Spec in Arbeit ist (eine ihrer
|
|
203
|
+
Stories ist `in_arbeit`, hat einen Befund oder eine gescheiterte Gegenprobe, oder ist `gebaut`
|
|
204
|
+
mit einem `offen`-Kriterium oder ganz ohne Kriterien), oder solange mehr als fünf Stories auf den Test des Menschen
|
|
205
|
+
warten (`gebaut`, alles bestanden, kein Befund, noch nicht bestätigt). **Sag dem Menschen
|
|
206
|
+
stattdessen, was er testen soll** — mit den `testen`-Sätzen. Ordnest du ein Thema als neue Story
|
|
207
|
+
in eine Spec ein, beginnst du sie damit nicht: Sie steht `offen`, und die Spec gilt nicht als in
|
|
208
|
+
Arbeit.
|
|
209
|
+
- **Regel 7:** „Fertig" setzt nur der Mensch mit „Passt" in der App; in der Datei gibt es dafür kein
|
|
210
|
+
Feld. Du hältst nur die Runde stabil (Abschnitt 4).
|
|
211
|
+
- **Regel 8:** `weggelassen` nur mit `grund` (Abschnitt 3).
|
|
212
|
+
|
|
213
|
+
## 6. Die Datei
|
|
214
|
+
|
|
215
|
+
`plan/stand.json` steht unter Git. Beispiel, gekürzt:
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{
|
|
219
|
+
"format": 1,
|
|
220
|
+
"projekt": "LinkedIn Content-App",
|
|
221
|
+
"projekt_id": null,
|
|
222
|
+
"basis": null,
|
|
223
|
+
"geprueft_am": "2026-10-21T22:10:00+02:00",
|
|
224
|
+
"specs": [
|
|
225
|
+
{
|
|
226
|
+
"schluessel": "2026-09-23-content-planer",
|
|
227
|
+
"titel": "Content-Planer als Seite",
|
|
228
|
+
"datei": "plan/2026-09-23-content-planer-seite-spec.md",
|
|
229
|
+
"stories": [
|
|
230
|
+
{
|
|
231
|
+
"schluessel": "US-2",
|
|
232
|
+
"titel": "Beiträge im Kalender verschieben",
|
|
233
|
+
"stand": "gebaut",
|
|
234
|
+
"runde": 1,
|
|
235
|
+
"gebaut_am": "2026-10-21",
|
|
236
|
+
"kriterien": [
|
|
237
|
+
{ "text": "Beitrag vom Montag auf Mittwoch ziehen → steht am Mittwoch", "gegenprobe": "bestanden" }
|
|
238
|
+
],
|
|
239
|
+
"befunde": [],
|
|
240
|
+
"testen": "Öffne /kalender, zieh den Beitrag vom Montag auf den Mittwoch.",
|
|
241
|
+
"grund": null
|
|
242
|
+
}
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
],
|
|
246
|
+
"themen": [
|
|
247
|
+
{ "schluessel": "T-1", "text": "Kalender soll Feiertage zeigen", "quelle": "mensch", "seit": "2026-10-21" }
|
|
248
|
+
],
|
|
249
|
+
"uebernommen": [
|
|
250
|
+
{ "rueckmeldung": 12, "antwort": "Befund an US-2" }
|
|
251
|
+
]
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Die Felder** — jedes muss da sein, auch wenn es `null` oder leer ist; ein unbekanntes Feld
|
|
256
|
+
(ein Tippfehler wie `"befund"`) lehnt der Server ab:
|
|
257
|
+
|
|
258
|
+
- `format`: genau `1`.
|
|
259
|
+
- `projekt`: der Name wie in der App, 1–200 Zeichen.
|
|
260
|
+
- `projekt_id`, `basis`: am Anfang `null`; danach schreibt sie `kimal3 plan hoch` — **nie von Hand
|
|
261
|
+
ändern**. Einzige Ausnahme: die Absage „Die Projektnummer in plan/stand.json gehört zu keinem
|
|
262
|
+
deiner Projekte." — dann `projekt_id` auf `null` setzen (Abschnitt 2).
|
|
263
|
+
- `geprueft_am`: jetzt, mit Zeitzone (`date +%Y-%m-%dT%H:%M:%S%:z` in der Bash, `Get-Date -Format
|
|
264
|
+
"yyyy-MM-ddTHH:mm:sszzz"` in PowerShell).
|
|
265
|
+
- `specs[]`: `schluessel` (eindeutig, 1–80 Zeichen), `titel` (1–200), `datei` (Pfad oder `null`),
|
|
266
|
+
`stories[]`.
|
|
267
|
+
- `stories[]`: `schluessel` (eindeutig in ihrer Spec), `titel`, `stand` (`offen` · `in_arbeit` ·
|
|
268
|
+
`gebaut` · `weggelassen`), `runde` (1–999), `gebaut_am` (`JJJJ-MM-TT` bei `gebaut`, sonst
|
|
269
|
+
`null`), `kriterien[]`, `befunde[]`, `testen` (Satz oder `null`), `grund` (Pflicht bei
|
|
270
|
+
`weggelassen`, sonst `null`).
|
|
271
|
+
- `kriterien[]`: `{ "text", "gegenprobe": "bestanden" | "gescheitert" | "offen" }`, höchstens 30
|
|
272
|
+
je Story.
|
|
273
|
+
- `befunde[]`: `{ "text", "quelle": "claude" | "mensch", "seit": "JJJJ-MM-TT" }` — nur offene,
|
|
274
|
+
höchstens 20.
|
|
275
|
+
- `themen[]`: `{ "schluessel", "text", "quelle", "seit" }`, höchstens 50 (der Eingang hat fünf
|
|
276
|
+
Plätze, Regel 2).
|
|
277
|
+
- `uebernommen[]`: `{ "rueckmeldung": <Nummer aus kimal3 plan>, "antwort": "<ein Satz>" }`. Leert
|
|
278
|
+
`kimal3 plan hoch` nach dem Hochladen selbst.
|
|
279
|
+
- Die ganze Datei: höchstens 300 KB.
|
|
280
|
+
|
|
281
|
+
## 7. Hochladen
|
|
282
|
+
|
|
283
|
+
Erst der Probelauf — er prüft alles und speichert nichts:
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
kimal3 plan hoch --probe
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
`Probelauf: würde 9 Stories hochladen, 2 Rückmeldungen als übernommen melden. Gespeichert wurde
|
|
290
|
+
nichts.` (Zahlen als Beispiel.) **Vergleich die zweite Zahl** mit den offenen Rückmeldungen aus
|
|
291
|
+
`kimal3 plan`: Ist sie kleiner, hast du eine vergessen — sie bliebe in der App unter „Wartet auf
|
|
292
|
+
Claude".
|
|
293
|
+
|
|
294
|
+
Dann:
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
kimal3 plan hoch
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Geklappt hat es bei `✓ Planung für „…“ hochgeladen: … Stories, … warten auf deinen Test.` und
|
|
301
|
+
`Ansehen: …`; beim ersten Mal zusätzlich `projekt_id und basis stehen jetzt in plan/stand.json.`
|
|
302
|
+
Die CLI hat `projekt_id` und `basis` eingetragen und `uebernommen` geleert — lass die Datei so.
|
|
303
|
+
Sag dem Menschen, dass `plan/stand.json` geändert ist und in den nächsten Commit gehört.
|
|
304
|
+
|
|
305
|
+
Danach steht eine Zeile `Spec-Texte hochgeladen: 1 von 3. Ohne Text: …` — der Text der Specs geht mit hoch.
|
|
306
|
+
Eine Spec ohne Text ist ein **Hinweis, kein Fehlschlag** (Rückgabewert `0`): Nenn dem Menschen die
|
|
307
|
+
Specs, die in der Klammer stehen, und was zu tun ist (Pfad in `datei` berichtigen; über 300 KB
|
|
308
|
+
lässt sich nicht hochladen).
|
|
309
|
+
|
|
310
|
+
**Absagen — die Meldung lesen, beheben, Probelauf, noch einmal:**
|
|
311
|
+
|
|
312
|
+
| Meldung beginnt mit | Was du tust |
|
|
313
|
+
|---|---|
|
|
314
|
+
| `Der Plan ist nicht lesbar: <Ort> …` | Die Stelle (`specs[0].stories[2].stand`) in der Datei reparieren. |
|
|
315
|
+
| `Kein Projekt heißt …` · `Mehrere deiner Projekte heißen …` · `Die Projektnummer in plan/stand.json gehört zu keinem deiner Projekte.` | Wie in Abschnitt 2. Bei der Projektnummer darfst du `projekt_id` auf `null` setzen — nur hier. |
|
|
316
|
+
| `<Spec> / <Story> hat Runde 1, gespeichert ist schon Runde 2.` | Die Datei ist älter als der gespeicherte Stand. Runde auf den gespeicherten Wert setzen — nie kleiner. |
|
|
317
|
+
| `Rückmeldung 12 gibt es in diesem Projekt nicht oder steht zweimal …` | Nur Nummern aus `kimal3 plan`, jede einmal. |
|
|
318
|
+
| `Rückmeldung 12 („…“) ist als übernommen gemeldet, aber US-2 hat keinen Befund von dir …` | Den Befund mit `quelle: "mensch"` an die Story hängen (Regel 1) — oder Runde + 1, wenn nachgebessert ist. |
|
|
319
|
+
| `In der App liegt ein neuerer Plan (hochgeladen …).` | Eine andere Arbeitskopie hat hochgeladen. **Nicht überschreiben.** Sag es dem Menschen und frag, ob ihr deren Stand erst holt (Git) und neu prüft. `kimal3 plan hoch --ueberschreiben` **nur nach seinem ausdrücklichen Ja.** |
|
|
320
|
+
| `Die gespeicherte Planung in der App ist beschädigt …` | Auch hier `--ueberschreiben` **nur nach seinem Ja.** |
|
|
321
|
+
| `Die Planung ist gespeichert, aber die Rückmeldungen sind noch nicht als übernommen markiert.` | `kimal3 plan hoch` **unverändert** noch einmal — das ist harmlos, die CLI hat `basis` schon nachgetragen und `uebernommen` stehen lassen. |
|
|
322
|
+
| ``Die Planung ist gespeichert, aber die Spec-Texte nicht. Führ `kimal3 plan hoch` noch einmal aus.`` | `kimal3 plan hoch` **unverändert** noch einmal — der Plan steht schon in der App, die CLI hat `basis` nachgetragen. |
|
|
323
|
+
| `⚠ Die Planung ist gespeichert, aber plan/stand.json ließ sich nicht nachtragen. Trag selbst ein: …` | Genau diese Werte in die Datei schreiben. |
|
|
324
|
+
| `… ließ sich gerade nicht laden` / `… nicht speichern` | Einmal wiederholen; klappt es dann nicht, dem Menschen sagen. |
|
|
325
|
+
|
|
326
|
+
🔴 **`--ueberschreiben` ersetzt, was ein anderer hochgeladen hat.** Nie aus eigenem Entschluss,
|
|
327
|
+
auch nicht, wenn die Meldung es vorschlägt.
|
|
328
|
+
|
|
329
|
+
## 8. Dem Menschen berichten
|
|
330
|
+
|
|
331
|
+
**Höchstens fünf Zeilen**, ohne Fachjargon:
|
|
332
|
+
|
|
333
|
+
- was **fertig** wurde (seit dem letzten Mal bestätigt),
|
|
334
|
+
- was **auf seinen Test wartet** — mit dem `testen`-Satz, damit er gleich loslegen kann,
|
|
335
|
+
- was im **Eingang** entschieden wurde (jedes Thema mit seiner Antwort),
|
|
336
|
+
- eine **Warnung**, wenn Regel 5 oder 6 verletzt ist: „Teste zuerst …" statt einer neuen Story,
|
|
337
|
+
- der **Link** aus `Ansehen: …`.
|
|
338
|
+
|
|
339
|
+
Beispiel (erfundene Werte):
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
Fertig: US-1 „Beiträge anlegen“.
|
|
343
|
+
Dein Test: US-2 — öffne /kalender und zieh den Beitrag vom Montag auf den Mittwoch.
|
|
344
|
+
Eingang: „Kalender soll Feiertage zeigen“ → neue Story US-7 in „Content-Planer“.
|
|
345
|
+
Claude-Test offen: US-4 braucht einen Browser, den ich hier nicht habe.
|
|
346
|
+
Planung: https://app.kimal3.de/projekt/…
|
|
347
|
+
```
|
|
@@ -24,7 +24,7 @@ nicht relevant, sag das kurz und überspring ihn — kein Leerlauf.
|
|
|
24
24
|
- Gibt es ein Status-Doc (`WEITER-HIER.md` oder `ROADMAP.md`) — eine kleine Datei, in der der
|
|
25
25
|
letzte Stand und der nächste Schritt festgehalten sind? Dann lies es.
|
|
26
26
|
- **Wo der Statuszettel liegt und wie er heißt.** Die Projektregel gilt **nur innerhalb eines Arbeitsplatzes**: Liegt ein Ordner `projekte/` oder `projects/` direkt in einem Ordner `werkbank-…` oder `workbench-…` (beide Schreibweisen kommen vor, auch gemischt) und steht die Sitzung in oder unter einem Ordner darin, ist dieser **Projektordner** der Ort. Name dort: unter `projekte/` `WEITER-HIER.md`, unter `projects/` `NEXT-STEPS.md`. **Überall sonst** (Starter-Paket, eigene Repos, auch ein Ordner `~/projects/mein-repo`) bleibt es wie bisher: Der Zettel liegt im Startordner, liegt einer da, nimm ihn; muss einer neu entstehen, heißt er `WEITER-HIER.md` — oder `NEXT-STEPS.md`, wenn der Ordner englisch angelegt wurde. Liegen beide da, frag, welcher gilt, und schreib in keinen, bevor die Antwort da ist. **Welcher gilt (im Arbeitsplatz):** Hat das Projekt einen, gilt der des Projekts. Sonst gilt ein vorhandener Werkbank-Zettel (`werkbank-…/WEITER-HIER.md` oder `workbench-…/NEXT-STEPS.md` aus der alten Vorlage) — den liest und pflegst du weiter. Gibt es keinen von beiden, entsteht er **im Projekt**. **Leg nie einen neuen Zettel in der Werkbank an.**
|
|
27
|
-
- **Stehst du in der Werkbank selbst (`werkbank-…` oder `workbench-…`), nicht in einem Projekt?** Steht in ihrer `CLAUDE.md` der Abschnitt „Erste Sitzung“ (englisch „First session“), folge **ihm** — er hat Vorrang vor allem Folgenden. Steht er nicht (mehr) da, zeig die Projekte in `projekte/` bzw. `projects/` (ohne `beispiel-rechnungen-erfassen` und `example-capture-invoices`) mit je der **ersten Stand-Zeile** ihres Zettels, oder „noch kein Zettel“, wenn keiner da ist; ein vorhandener Werkbank-Zettel (`WEITER-HIER.md` oder `NEXT-STEPS.md`) steht darüber. Empfiehl daraus **eines** und stell **eine** Frage dazu.
|
|
27
|
+
- **Stehst du in der Werkbank selbst (`werkbank-…` oder `workbench-…`), nicht in einem Projekt?** Steht in ihrer `CLAUDE.md` der Abschnitt „Erste Sitzung“ (englisch „First session“), folge **ihm** — er hat Vorrang vor allem Folgenden. Steht er nicht (mehr) da, zeig die Projekte in `projekte/` bzw. `projects/` (ohne `beispiel-rechnungen-erfassen` und `example-capture-invoices`) mit je der **ersten Stand-Zeile** ihres Zettels, oder „noch kein Zettel“, wenn keiner da ist; ein vorhandener Werkbank-Zettel (`WEITER-HIER.md` oder `NEXT-STEPS.md`) steht darüber. Empfiehl daraus **eines** und stell **eine** Frage dazu. Wählt der Mensch ein Projekt aus der Liste oder nennt eine neue Aufgabe (dann legst du erst Ordner und Statuszettel im Projekt an, nie in der Werkbank), bring die Sitzung in den Projektordner: mit `change_directory` (steht es nur als Name in deiner Werkzeugliste, lade es über die Werkzeugsuche) — und sag vorher: „Gleich fragt dich die Claude-App, ob ich den Ordner wechseln darf, und danach, ob du ihm vertraust — beides ist richtig so, klick jeweils auf Erlauben. Landest du danach in einem leeren Gespräch, tipp dort `/k3start`; dieses Gespräch findest du links in der Liste wieder.“ Ohne das Werkzeug oder wenn der Mensch ablehnt: nenne den genauen Projektordner (nicht die Werkbank darüber) — in der App „Ordner wählen“ und diesen Ordner nehmen, im Terminal `/exit`, `cd '‹Pfad›'`, `claude` — und dann `/k3start`. Bei einem neuen Projekt lies vorher `projekte/CLAUDE.md` (englisch `projects/CLAUDE.md`): ab jetzt gilt sie.
|
|
28
28
|
- Kein Status-Doc? **Sieh erst nach, ob ein `.git`-Ordner im Zettel-Ort liegt** (im Arbeitsplatz der Projektordner, sonst der Startordner). Wenn ja, führt dieses
|
|
29
29
|
Projekt eine Versionsgeschichte, und `git log --oneline -10` plus `git status` zeigen dir den
|
|
30
30
|
letzten Stand.
|