kimal3 0.6.0 → 0.6.1
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/dist/plan-datei.js +2 -2
- package/dist/texte/plan.js +4 -2
- package/package.json +1 -1
- package/skill/commands/k3kurs.md +41 -41
- package/skill/commands/k3plan.md +17 -6
- package/skill/en/commands/k3course.md +41 -41
- package/skill/en/commands/k3plan.md +17 -5
package/dist/plan-datei.js
CHANGED
|
@@ -121,7 +121,7 @@ export function specKoepfeAus(json) {
|
|
|
121
121
|
const rumpfBytes = (text) => Buffer.byteLength(JSON.stringify(text), "utf8");
|
|
122
122
|
/**
|
|
123
123
|
* Liest den Text jeder Spec. Jede Spec bekommt GENAU einen Eintrag: den Text oder den Grund, warum keiner da ist.
|
|
124
|
-
* Passt der fertige Anfrage-Rumpf nicht in 4 MB, werden die groessten Texte zu `
|
|
124
|
+
* Passt der fertige Anfrage-Rumpf nicht in 4 MB, werden die groessten Texte zu `zusammen_zu_gross`, bis er passt (US-16:
|
|
125
125
|
* „am fertigen Anfrage-Rumpf"). `rumpf` baut genau den Rumpf, den `plan hoch` schickt (Stand, Schalter, Texte) --
|
|
126
126
|
* dieselbe Funktion baut ihn dort auch, damit gemessen wird, was hinausgeht (Befund M-3).
|
|
127
127
|
*/
|
|
@@ -165,7 +165,7 @@ export function leseSpecTexte(ordner, specs, rumpf) {
|
|
|
165
165
|
});
|
|
166
166
|
if (groesster < 0)
|
|
167
167
|
break;
|
|
168
|
-
eintraege[groesster] = { schluessel: specs[groesster].schluessel, grund: "
|
|
168
|
+
eintraege[groesster] = { schluessel: specs[groesster].schluessel, grund: "zusammen_zu_gross", pfad: specs[groesster].datei };
|
|
169
169
|
}
|
|
170
170
|
const ohne = eintraege.flatMap((e, i) => "grund" in e ? [{ titel: specs[i].titel, grund: keineTextdatei.has(i) ? "keine_textdatei" : e.grund, pfad: e.pfad }] : []);
|
|
171
171
|
return { eintraege, ohne };
|
package/dist/texte/plan.js
CHANGED
|
@@ -38,7 +38,8 @@ const de = {
|
|
|
38
38
|
: grund === "keine_datei" ? "keine Datei angegeben"
|
|
39
39
|
: grund === "ausserhalb" ? "Pfad außerhalb des Projekts"
|
|
40
40
|
: grund === "keine_textdatei" ? "keine Textdatei"
|
|
41
|
-
: "größer als
|
|
41
|
+
: grund === "zusammen_zu_gross" ? "alle Spec-Texte zusammen größer als 4 MB"
|
|
42
|
+
: "größer als 300 KB",
|
|
42
43
|
specTexte: (angekommen, gesamt, ohne) => `Spec-Texte hochgeladen: ${angekommen} von ${gesamt}.${ohne.length === 0 ? "" : ` Ohne Text: ${ohne.join(", ")}.`}`,
|
|
43
44
|
specTextOhneEintrag: (titel, grundText) => `„${titel}“ (${grundText})`,
|
|
44
45
|
idNowInFile: "projekt_id und basis stehen jetzt in plan/stand.json.",
|
|
@@ -83,7 +84,8 @@ const en = {
|
|
|
83
84
|
: grund === "keine_datei" ? "no file given"
|
|
84
85
|
: grund === "ausserhalb" ? "path outside the project"
|
|
85
86
|
: grund === "keine_textdatei" ? "not a text file"
|
|
86
|
-
: "larger than
|
|
87
|
+
: grund === "zusammen_zu_gross" ? "all spec texts together larger than 4 MB"
|
|
88
|
+
: "larger than 300 KB",
|
|
87
89
|
specTexte: (angekommen, gesamt, ohne) => `Spec texts uploaded: ${angekommen} of ${gesamt}.${ohne.length === 0 ? "" : ` Without text: ${ohne.join(", ")}.`}`,
|
|
88
90
|
specTextOhneEintrag: (titel, grundText) => `"${titel}" (${grundText})`,
|
|
89
91
|
idNowInFile: "projekt_id and basis are now in plan/stand.json.",
|
package/package.json
CHANGED
package/skill/commands/k3kurs.md
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Zurück in den Mini-Kurs — da weiter, wo du aufgehört hast
|
|
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
|
-
# Kurs
|
|
9
|
-
|
|
10
|
-
> Zurück in den Mini-Kurs: „Wo war ich nochmal?" — macht da weiter, wo du aufgehört hast.
|
|
11
|
-
> Den Stand holt `kimal3 kurs` frisch von kimal3 — dieselben Haken, die der Mensch im Browser unter
|
|
12
|
-
> https://app.kimal3.de/kurs sieht.
|
|
13
|
-
|
|
14
|
-
Führe die Schritte der Reihe nach aus. Bleib im Coaching-Ton: Deutsch, freundlich, ein Schritt
|
|
15
|
-
nach dem anderen, das Warum vor dem Wie, null Vorwissen vorausgesetzt.
|
|
16
|
-
|
|
17
|
-
## 1. Den Stand holen
|
|
18
|
-
- Führ `kimal3 kurs` aus (unter Windows so, wie es `SKILL.md` beschreibt).
|
|
19
|
-
- Rückgabewert **2**: Der Mensch ist nicht angemeldet. Zeig ihm `kimal3 login`, lass ihn selbst im Browser bestätigen
|
|
20
|
-
und nenn **keinen** Kursstand.
|
|
21
|
-
- Rückgabewert **3**: Der Stand ist gerade nicht abrufbar. Sag es in einem Satz und **erzähl den Kurs nicht aus dem
|
|
22
|
-
Gedächtnis**.
|
|
23
|
-
- Kennt das Programm den Befehl nicht, ist es zu alt: Nenn `npm install -g kimal3@latest`, danach `kimal3 skill install`.
|
|
24
|
-
|
|
25
|
-
## 2. Stand in einem Satz sagen
|
|
26
|
-
- Sag in **einem** Satz, wo ihr im Kurs steht — aus der Ausgabe (Zeile `Kurs:`), nichts dazuerfinden. Kein Vortrag.
|
|
27
|
-
|
|
28
|
-
## 3. Als Nächstes führen
|
|
29
|
-
- Die Zeile `Als Nächstes:` nennt den nächsten Schritt. Führ **einen** Schritt nach dem anderen: zeigen, machen lassen,
|
|
30
|
-
verstehen. Nie die ganze Liste auf einmal.
|
|
31
|
-
- Steht dahinter **„(du hakst ab)"** und hat der Mensch den Schritt offensichtlich schon getan (zum Beispiel „Claude ganz
|
|
32
|
-
beendet und neu geöffnet" — er sitzt ja gerade in Claude), führ ihn nicht noch einmal: Frag kurz nach und bitte ihn,
|
|
33
|
-
den Schritt unter https://app.kimal3.de/kurs abzuhaken.
|
|
34
|
-
- Steht dahinter **„(setzt Claude)"** und ist er offen, lass die Einrichtung noch einmal laufen — über die Anleitung
|
|
35
|
-
`https://app.kimal3.de/einrichten` (lade sie wie der Kurs-Satz und folge ihr), **nicht** mit einem frei aufgerufenen
|
|
36
|
-
`kimal3 einrichten`. Bleibt der Schritt danach offen, nenn den Grund aus der Ausgabe von `einrichten` und schlag
|
|
37
|
-
keinen dritten Lauf vor.
|
|
38
|
-
|
|
39
|
-
## 4. Abgeschlossen
|
|
40
|
-
- Steht in der Ausgabe `Kurs: abgeschlossen`, gratuliere kurz und frag mit einem Vorschlag, woran er hier arbeiten
|
|
41
|
-
möchte. Kein Kurs-Gerede mehr.
|
|
1
|
+
---
|
|
2
|
+
description: Zurück in den Mini-Kurs — da weiter, wo du aufgehört hast
|
|
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
|
+
# Kurs
|
|
9
|
+
|
|
10
|
+
> Zurück in den Mini-Kurs: „Wo war ich nochmal?" — macht da weiter, wo du aufgehört hast.
|
|
11
|
+
> Den Stand holt `kimal3 kurs` frisch von kimal3 — dieselben Haken, die der Mensch im Browser unter
|
|
12
|
+
> https://app.kimal3.de/kurs sieht.
|
|
13
|
+
|
|
14
|
+
Führe die Schritte der Reihe nach aus. Bleib im Coaching-Ton: Deutsch, freundlich, ein Schritt
|
|
15
|
+
nach dem anderen, das Warum vor dem Wie, null Vorwissen vorausgesetzt.
|
|
16
|
+
|
|
17
|
+
## 1. Den Stand holen
|
|
18
|
+
- Führ `kimal3 kurs` aus (unter Windows so, wie es `SKILL.md` beschreibt).
|
|
19
|
+
- Rückgabewert **2**: Der Mensch ist nicht angemeldet. Zeig ihm `kimal3 login`, lass ihn selbst im Browser bestätigen
|
|
20
|
+
und nenn **keinen** Kursstand.
|
|
21
|
+
- Rückgabewert **3**: Der Stand ist gerade nicht abrufbar. Sag es in einem Satz und **erzähl den Kurs nicht aus dem
|
|
22
|
+
Gedächtnis**.
|
|
23
|
+
- Kennt das Programm den Befehl nicht, ist es zu alt: Nenn `npm install -g kimal3@latest`, danach `kimal3 skill install`.
|
|
24
|
+
|
|
25
|
+
## 2. Stand in einem Satz sagen
|
|
26
|
+
- Sag in **einem** Satz, wo ihr im Kurs steht — aus der Ausgabe (Zeile `Kurs:`), nichts dazuerfinden. Kein Vortrag.
|
|
27
|
+
|
|
28
|
+
## 3. Als Nächstes führen
|
|
29
|
+
- Die Zeile `Als Nächstes:` nennt den nächsten Schritt. Führ **einen** Schritt nach dem anderen: zeigen, machen lassen,
|
|
30
|
+
verstehen. Nie die ganze Liste auf einmal.
|
|
31
|
+
- Steht dahinter **„(du hakst ab)"** und hat der Mensch den Schritt offensichtlich schon getan (zum Beispiel „Claude ganz
|
|
32
|
+
beendet und neu geöffnet" — er sitzt ja gerade in Claude), führ ihn nicht noch einmal: Frag kurz nach und bitte ihn,
|
|
33
|
+
den Schritt unter https://app.kimal3.de/kurs abzuhaken.
|
|
34
|
+
- Steht dahinter **„(setzt Claude)"** und ist er offen, lass die Einrichtung noch einmal laufen — über die Anleitung
|
|
35
|
+
`https://app.kimal3.de/einrichten` (lade sie wie der Kurs-Satz und folge ihr), **nicht** mit einem frei aufgerufenen
|
|
36
|
+
`kimal3 einrichten`. Bleibt der Schritt danach offen, nenn den Grund aus der Ausgabe von `einrichten` und schlag
|
|
37
|
+
keinen dritten Lauf vor.
|
|
38
|
+
|
|
39
|
+
## 4. Abgeschlossen
|
|
40
|
+
- Steht in der Ausgabe `Kurs: abgeschlossen`, gratuliere kurz und frag mit einem Vorschlag, woran er hier arbeiten
|
|
41
|
+
möchte. Kein Kurs-Gerede mehr.
|
package/skill/commands/k3plan.md
CHANGED
|
@@ -183,7 +183,8 @@ Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planun
|
|
|
183
183
|
- **Regel 2 — Neues:** Was dir beim Prüfen auffällt oder der Mensch im Gespräch sagt und was
|
|
184
184
|
**keine** Spec verspricht, kommt nach `themen`:
|
|
185
185
|
`{ "schluessel": "T-1", "text": "…", "quelle": "claude" | "mensch", "seit": "<heute>" }`.
|
|
186
|
-
|
|
186
|
+
Nimm die nächste freie Nummer, auch über `eingeordnet` hinweg (dort bleibt ein Schlüssel
|
|
187
|
+
14 Tage belegt). Die fünf Plätze teilen sich `themen` und die offenen Notizen aus der App.
|
|
187
188
|
- **Regel 3 — einordnen:** Jedes `Thema` aus `kimal3 plan` **und** jedes Thema, das schon von
|
|
188
189
|
früher in `themen` steht, ordnest du **jetzt** ein — eins von dreien:
|
|
189
190
|
- **neue Story:** schreib sie in die Spec, zu der sie gehört (User Story, Akzeptanzkriterium mit
|
|
@@ -195,8 +196,11 @@ Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planun
|
|
|
195
196
|
|
|
196
197
|
Für eine Notiz aus der App gehört die Antwort als **ein Satz** in `uebernommen` (die App zeigt
|
|
197
198
|
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
|
|
199
|
-
|
|
199
|
+
am Anfang. Ein Thema aus der Datei nimmst du aus `themen` heraus und schreibst es mit seiner
|
|
200
|
+
Antwort nach `eingeordnet`: `{ "schluessel": "T-4", "text": "<Text wie in themen>", "antwort":
|
|
201
|
+
"<ein Satz>", "am": "<heute>" }` — die App zeigt es 14 Tage lang unter „Zuletzt eingeordnet".
|
|
202
|
+
Einträge, deren `am` mehr als 14 Tage zurückliegt, nimmst du dabei heraus. Nenn die Einordnung
|
|
203
|
+
auch im Bericht.
|
|
200
204
|
- **Regel 4:** Weil du bei jedem `/k3plan` alles einordnest, liegt nichts lange. Ein Thema mit
|
|
201
205
|
`seit` vor mehr als 14 Tagen ordnest du **auf jeden Fall** jetzt ein.
|
|
202
206
|
- **Regel 5 und 6 — keine neue Spec beginnen**, solange eine andere Spec in Arbeit ist (eine ihrer
|
|
@@ -248,12 +252,15 @@ Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planun
|
|
|
248
252
|
],
|
|
249
253
|
"uebernommen": [
|
|
250
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" }
|
|
251
258
|
]
|
|
252
259
|
}
|
|
253
260
|
```
|
|
254
261
|
|
|
255
|
-
**Die Felder** — jedes muss da sein, auch wenn es `null` oder leer ist
|
|
256
|
-
(ein Tippfehler wie `"befund"`) lehnt der Server ab:
|
|
262
|
+
**Die Felder** — jedes muss da sein, auch wenn es `null` oder leer ist (nur `eingeordnet` darf
|
|
263
|
+
fehlen); ein unbekanntes Feld (ein Tippfehler wie `"befund"`) lehnt der Server ab:
|
|
257
264
|
|
|
258
265
|
- `format`: genau `1`.
|
|
259
266
|
- `projekt`: der Name wie in der App, 1–200 Zeichen.
|
|
@@ -276,6 +283,9 @@ Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planun
|
|
|
276
283
|
Plätze, Regel 2).
|
|
277
284
|
- `uebernommen[]`: `{ "rueckmeldung": <Nummer aus kimal3 plan>, "antwort": "<ein Satz>" }`. Leert
|
|
278
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`.
|
|
279
289
|
- Die ganze Datei: höchstens 300 KB.
|
|
280
290
|
|
|
281
291
|
## 7. Hochladen
|
|
@@ -305,7 +315,8 @@ Sag dem Menschen, dass `plan/stand.json` geändert ist und in den nächsten Comm
|
|
|
305
315
|
Danach steht eine Zeile `Spec-Texte hochgeladen: 1 von 3. Ohne Text: …` — der Text der Specs geht mit hoch.
|
|
306
316
|
Eine Spec ohne Text ist ein **Hinweis, kein Fehlschlag** (Rückgabewert `0`): Nenn dem Menschen die
|
|
307
317
|
Specs, die in der Klammer stehen, und was zu tun ist (Pfad in `datei` berichtigen; über 300 KB
|
|
308
|
-
lässt sich nicht hochladen
|
|
318
|
+
lässt sich nicht hochladen; bei „alle Spec-Texte zusammen größer als 4 MB" ist keine Datei allein
|
|
319
|
+
zu groß — die größten bleiben draußen, bis der Rest passt).
|
|
309
320
|
|
|
310
321
|
**Absagen — die Meldung lesen, beheben, Probelauf, noch einmal:**
|
|
311
322
|
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Back into the Mini course — pick up where you left off
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
<!-- kimal3:erzeugt — this file is maintained by `kimal3 skill install` and
|
|
6
|
-
overwritten on every update. Your own changes will be lost; if you want
|
|
7
|
-
to keep them, copy the file under a different name. -->
|
|
8
|
-
# Course
|
|
9
|
-
|
|
10
|
-
> Back into the Mini course: “Where was I again?” — picks up where you left off.
|
|
11
|
-
> `kimal3 course` fetches the status fresh from kimal3 — the same ticks the person sees in the browser at
|
|
12
|
-
> https://app.kimal3.de/kurs.
|
|
13
|
-
|
|
14
|
-
Carry out the steps in order. Stay in the coaching tone: English, friendly, one step at a
|
|
15
|
-
time, the why before the how, no prior knowledge assumed.
|
|
16
|
-
|
|
17
|
-
## 1. Fetch the status
|
|
18
|
-
- Run `kimal3 course` (on Windows the way `SKILL.md` describes).
|
|
19
|
-
- Exit code **2**: the person is not signed in. Show them `kimal3 login`, let them confirm in the browser themselves
|
|
20
|
-
and name **no** course status.
|
|
21
|
-
- Exit code **3**: the status can't be fetched right now. Say so in one sentence and **do not retell the course from
|
|
22
|
-
memory**.
|
|
23
|
-
- If the program doesn't know the command, it is too old: name `npm install -g kimal3@latest`, then `kimal3 skill install`.
|
|
24
|
-
|
|
25
|
-
## 2. Say where you stand in one sentence
|
|
26
|
-
- Say in **one** sentence where you are in the course — from the output (the `Course:` line), invent nothing. No lecture.
|
|
27
|
-
|
|
28
|
-
## 3. Lead on with what comes next
|
|
29
|
-
- The line `Next:` names the next step. Lead on **one** step at a time: show, let them do it, make sure they understand.
|
|
30
|
-
Never the whole list at once.
|
|
31
|
-
- If it says **“(you tick it off)”** after it and the person has obviously already done the step (for example “closed
|
|
32
|
-
Claude completely and reopened it” — they are sitting in Claude right now), don't lead it again: ask briefly and
|
|
33
|
-
ask them to tick it off at https://app.kimal3.de/kurs.
|
|
34
|
-
- If it says **“(Claude sets it)”** and it is open, run the setup once more — through the guide
|
|
35
|
-
`https://app.kimal3.de/setup` (load it the way the course sentence does and follow it), **not** with a freely called
|
|
36
|
-
`kimal3 setup`. If the step is still open afterwards, name the reason from the output of `setup` and don't suggest
|
|
37
|
-
a third run.
|
|
38
|
-
|
|
39
|
-
## 4. Finished
|
|
40
|
-
- If the output says `Course: complete`, congratulate them briefly and ask, with a suggestion, what they would like to
|
|
41
|
-
work on here. No more course talk.
|
|
1
|
+
---
|
|
2
|
+
description: Back into the Mini course — pick up where you left off
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- kimal3:erzeugt — this file is maintained by `kimal3 skill install` and
|
|
6
|
+
overwritten on every update. Your own changes will be lost; if you want
|
|
7
|
+
to keep them, copy the file under a different name. -->
|
|
8
|
+
# Course
|
|
9
|
+
|
|
10
|
+
> Back into the Mini course: “Where was I again?” — picks up where you left off.
|
|
11
|
+
> `kimal3 course` fetches the status fresh from kimal3 — the same ticks the person sees in the browser at
|
|
12
|
+
> https://app.kimal3.de/kurs.
|
|
13
|
+
|
|
14
|
+
Carry out the steps in order. Stay in the coaching tone: English, friendly, one step at a
|
|
15
|
+
time, the why before the how, no prior knowledge assumed.
|
|
16
|
+
|
|
17
|
+
## 1. Fetch the status
|
|
18
|
+
- Run `kimal3 course` (on Windows the way `SKILL.md` describes).
|
|
19
|
+
- Exit code **2**: the person is not signed in. Show them `kimal3 login`, let them confirm in the browser themselves
|
|
20
|
+
and name **no** course status.
|
|
21
|
+
- Exit code **3**: the status can't be fetched right now. Say so in one sentence and **do not retell the course from
|
|
22
|
+
memory**.
|
|
23
|
+
- If the program doesn't know the command, it is too old: name `npm install -g kimal3@latest`, then `kimal3 skill install`.
|
|
24
|
+
|
|
25
|
+
## 2. Say where you stand in one sentence
|
|
26
|
+
- Say in **one** sentence where you are in the course — from the output (the `Course:` line), invent nothing. No lecture.
|
|
27
|
+
|
|
28
|
+
## 3. Lead on with what comes next
|
|
29
|
+
- The line `Next:` names the next step. Lead on **one** step at a time: show, let them do it, make sure they understand.
|
|
30
|
+
Never the whole list at once.
|
|
31
|
+
- If it says **“(you tick it off)”** after it and the person has obviously already done the step (for example “closed
|
|
32
|
+
Claude completely and reopened it” — they are sitting in Claude right now), don't lead it again: ask briefly and
|
|
33
|
+
ask them to tick it off at https://app.kimal3.de/kurs.
|
|
34
|
+
- If it says **“(Claude sets it)”** and it is open, run the setup once more — through the guide
|
|
35
|
+
`https://app.kimal3.de/setup` (load it the way the course sentence does and follow it), **not** with a freely called
|
|
36
|
+
`kimal3 setup`. If the step is still open afterwards, name the reason from the output of `setup` and don't suggest
|
|
37
|
+
a third run.
|
|
38
|
+
|
|
39
|
+
## 4. Finished
|
|
40
|
+
- If the output says `Course: complete`, congratulate them briefly and ask, with a suggestion, what they would like to
|
|
41
|
+
work on here. No more course talk.
|
|
@@ -181,6 +181,7 @@ The app shows them to the person in exactly this wording ("How planning stays sh
|
|
|
181
181
|
- **Rule 2 — something new:** what you notice while checking, or what the person says in the
|
|
182
182
|
conversation, and what **no** spec promises goes into `themen`:
|
|
183
183
|
`{ "schluessel": "T-1", "text": "…", "quelle": "claude" | "mensch", "seit": "<today>" }`.
|
|
184
|
+
Take the next free number, counting `eingeordnet` too (a key stays taken there for 14 days).
|
|
184
185
|
The five places are shared by `themen` and the open notes from the app.
|
|
185
186
|
- **Rule 3 — sort:** every `Topic` from `kimal3 plan` **and** every topic already in `themen` from
|
|
186
187
|
earlier is sorted **now** — one of three:
|
|
@@ -193,8 +194,11 @@ The app shows them to the person in exactly this wording ("How planning stays sh
|
|
|
193
194
|
|
|
194
195
|
For a note from the app, the answer goes into `uebernommen` as **one sentence** (the app shows
|
|
195
196
|
it under "Recently sorted" as `<note> → <answer>`); so write it **without** an arrow at the
|
|
196
|
-
start. A topic from the file you take out of `themen` and
|
|
197
|
-
|
|
197
|
+
start. A topic from the file you take out of `themen` and write it with its answer into
|
|
198
|
+
`eingeordnet`: `{ "schluessel": "T-4", "text": "<text as in themen>", "antwort": "<one
|
|
199
|
+
sentence>", "am": "<today>" }` — the app shows it under "Recently sorted" for 14 days. Entries
|
|
200
|
+
whose `am` is more than 14 days ago you take out at the same time. Name how it was sorted in the
|
|
201
|
+
report too.
|
|
198
202
|
- **Rule 4:** because you sort everything at every `/k3plan`, nothing stays long. A topic with
|
|
199
203
|
`seit` more than 14 days ago is sorted now **in any case**.
|
|
200
204
|
- **Rules 5 and 6 — don't start a new spec** while another spec is in progress (one of its
|
|
@@ -245,12 +249,15 @@ The app shows them to the person in exactly this wording ("How planning stays sh
|
|
|
245
249
|
],
|
|
246
250
|
"uebernommen": [
|
|
247
251
|
{ "rueckmeldung": 12, "antwort": "Finding on US-2" }
|
|
252
|
+
],
|
|
253
|
+
"eingeordnet": [
|
|
254
|
+
{ "schluessel": "T-2", "text": "Export as PDF", "antwort": "dropped: the print button already does that.", "am": "2026-10-21" }
|
|
248
255
|
]
|
|
249
256
|
}
|
|
250
257
|
```
|
|
251
258
|
|
|
252
|
-
**The fields** — every one must be there, even if it is `null` or empty
|
|
253
|
-
unknown field (a typo like `"befund"`):
|
|
259
|
+
**The fields** — every one must be there, even if it is `null` or empty (only `eingeordnet` may
|
|
260
|
+
be missing); the server refuses an unknown field (a typo like `"befund"`):
|
|
254
261
|
|
|
255
262
|
- `format`: exactly `1`.
|
|
256
263
|
- `projekt`: the name as in the app, 1–200 characters.
|
|
@@ -273,6 +280,9 @@ unknown field (a typo like `"befund"`):
|
|
|
273
280
|
rule 2).
|
|
274
281
|
- `uebernommen[]`: `{ "rueckmeldung": <number from kimal3 plan>, "antwort": "<one sentence>" }`.
|
|
275
282
|
`kimal3 plan upload` empties it itself after uploading.
|
|
283
|
+
- `eingeordnet[]`: `{ "schluessel", "text", "antwort": "<one sentence>", "am": "YYYY-MM-DD" }`, at
|
|
284
|
+
most 50 — topics from `themen` that you have sorted (rule 3). A key is never in `themen` and
|
|
285
|
+
`eingeordnet` at the same time.
|
|
276
286
|
- The whole file: at most 300 KB.
|
|
277
287
|
|
|
278
288
|
## 7. Upload
|
|
@@ -300,7 +310,9 @@ person that `plan/stand.json` has changed and belongs in the next commit.
|
|
|
300
310
|
|
|
301
311
|
After that comes a line `Spec texts uploaded: 1 of 3. Without text: …` — the text of the specs goes up too.
|
|
302
312
|
A spec without text is a **hint, not a failure** (exit code `0`): tell the person which specs are in
|
|
303
|
-
the brackets and what to do (correct the path in `datei`; over 300 KB cannot be uploaded
|
|
313
|
+
the brackets and what to do (correct the path in `datei`; over 300 KB cannot be uploaded; with
|
|
314
|
+
"all spec texts together larger than 4 MB" no single file is too large — the largest stay out
|
|
315
|
+
until the rest fits).
|
|
304
316
|
|
|
305
317
|
**Refusals — read the message, fix it, dry run, again:**
|
|
306
318
|
|