red-proto 0.11.0 → 0.13.2

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 CHANGED
@@ -4,19 +4,9 @@ Ein KI-gestütztes Product Development Framework für [Claude Code](https://clau
4
4
 
5
5
  ---
6
6
 
7
- ## Workflow
8
-
9
- ![red·proto Workflow](docs/workflow.svg)
10
-
11
- > Maschinenlesbare BPMN 2.0 Datei: [workflow.bpmn](docs/workflow.bpmn) – öffenbar in [Camunda Modeler](https://camunda.com/download/modeler/) oder [bpmn.io](https://bpmn.io)
12
-
13
- **Faustregel:** Alles bis `/red:proto-flows` machst du einmal für dein Projekt. Ab `/red:proto-ux` wiederholst du den Loop für jedes Feature. `proto-dev` und `proto-qa` laufen in **getrennten Sessions** – `proto-dev` schreibt am Ende ein Handoff-File, das `proto-qa` in der neuen Session einliest.
14
-
15
- ---
16
-
17
7
  ## Was ist das?
18
8
 
19
- Eine Sammlung von Claude Code Commands und Agents, die eine vollständige Produktentwicklungs-Pipeline abbilden. Du arbeitest mit natürlicher Sprache – Claude führt die Pipeline aus, du triffst die Entscheidungen.
9
+ Eine Sammlung von Claude Code Commands, die eine vollständige Produktentwicklungs-Pipeline abbilden. Du beschreibst deine Idee in natürlicher Sprache – Claude führt die Pipeline aus, du triffst die Entscheidungen.
20
10
 
21
11
  ```
22
12
  /red:proto-workflow → Nach jeder Pause: zeigt exakt wo du stehst und was als nächstes zu tun ist
@@ -37,7 +27,51 @@ dann pro Feature (Build-Loop bis QA grün):
37
27
  └── Bugs? → neue Session → /red:proto-dev → /red:proto-qa
38
28
  ```
39
29
 
40
- Jeder Command ist eigenständig – du kannst an jedem Punkt einsteigen oder aufhören. Die Commands bauen aber aufeinander auf: jeder liest den Output des vorherigen und ergänzt die gemeinsamen Artefakte.
30
+ Jeder Command ist eigenständig – du kannst an jedem Punkt einsteigen oder aufhören. Die Commands bauen aufeinander auf: jeder liest den Output des vorherigen und ergänzt die gemeinsamen Artefakte.
31
+
32
+ ### Workflow
33
+
34
+ ```mermaid
35
+ flowchart TD
36
+ A([Idee]) --> B
37
+
38
+ subgraph setup["📐 Einmalig pro Projekt"]
39
+ B["/red:proto-sparring\nIdee → PRD"]
40
+ B --> C["/red:proto-dev-setup\nTech-Stack + GitHub"]
41
+ C --> D{Research?}
42
+ D -->|optional| E["/red:proto-research\nPersonas + Problem Statement"]
43
+ D -->|überspringen| F
44
+ E --> F["/red:proto-requirements\nSpecs für alle Features"]
45
+ F --> G["/red:proto-flows\nScreen-Inventar + Transitions"]
46
+ end
47
+
48
+ subgraph feature["🔁 Pro Feature wiederholen"]
49
+ G --> H["/red:proto-ux\nUX-Entscheidungen"]
50
+ H --> I["/red:proto-architect\nTech-Design + Security + Tests"]
51
+ I --> J
52
+
53
+ subgraph session1["Session 1"]
54
+ J["/red:proto-dev\nImplementierung"]
55
+ J --> J2["Handoff schreiben\ncontext/FEAT-x-dev-handoff.md"]
56
+ end
57
+
58
+ subgraph session2["Session 2 (neu starten)"]
59
+ J2 --> K["/red:proto-qa\nTests + Bugs"]
60
+ end
61
+
62
+ K --> L{Bugs?}
63
+ L -->|Critical / High| J
64
+ L -->|Grün ✅| M([Production-Ready])
65
+ end
66
+
67
+ M --> N{Weitere Features?}
68
+ N -->|ja| H
69
+ N -->|nein| O([Release 🎉])
70
+
71
+ P(["/red:proto-workflow\nOrientierung jederzeit"]) -.->|wo stehe ich?| feature
72
+ ```
73
+
74
+ **Faustregel:** Alles bis `/red:proto-flows` machst du einmal für dein Projekt. Ab `/red:proto-ux` wiederholst du den Loop für jedes Feature. `proto-dev` und `proto-qa` laufen in **getrennten Sessions** – `proto-dev` schreibt am Ende ein Handoff-File, das `proto-qa` in der neuen Session einliest.
41
75
 
42
76
  ---
43
77
 
@@ -65,8 +99,18 @@ Der Installer fragt interaktiv:
65
99
  - **Global** (`~/.claude/`) → Commands in allen Projekten verfügbar
66
100
  - **Lokal** (`./.claude/`) → nur im aktuellen Verzeichnis
67
101
 
102
+ > **Hinweis:** Nicht global und lokal gleichzeitig installieren – Claude Code zeigt die Commands sonst doppelt an. Der Installer warnt dich, wenn eine andere Installation erkannt wird.
103
+
68
104
  > **Update:** Denselben Befehl erneut ausführen – der Installer erkennt bestehende Installationen.
69
105
 
106
+ **Deinstallieren:**
107
+
108
+ ```bash
109
+ npx red-proto --uninstall
110
+ ```
111
+
112
+ Entfernt alle Commands und Agents – deine Projektdateien (`features/`, `research/`, `prd.md` usw.) bleiben unangetastet.
113
+
70
114
  **Option B – Manuell via Git (falls kein npx):**
71
115
 
72
116
  ```bash
@@ -105,17 +149,6 @@ Dann in Claude Code:
105
149
 
106
150
  ---
107
151
 
108
- ### Kurzübersicht: Was macht was?
109
-
110
- | Befehl | Wann | Was passiert |
111
- |--------|------|--------------|
112
- | `npx red-proto@latest` | Einmalig pro Computer | Installiert Commands in `~/.claude/` (global) oder `./.claude/` (lokal) |
113
- | `/red:proto` | Einmalig pro Projekt | Legt Projektstruktur an, kopiert Design System |
114
- | `/red:proto-sparring` | Start jedes Projekts | Erste Anlaufstelle – Idee zu PRD |
115
- | `/red:proto-workflow` | Nach jeder Session-Pause | Zeigt wo du stehst, was als nächstes kommt |
116
-
117
- ---
118
-
119
152
  ## Was wird installiert?
120
153
 
121
154
  Nach dem Setup hat dein Projekt folgende Struktur:
package/bin/install.js CHANGED
@@ -1,11 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { createInterface } from 'readline';
4
- import { cp, mkdir, access } from 'fs/promises';
4
+ import { cp, mkdir, rm, access } from 'fs/promises';
5
5
  import { join, dirname } from 'path';
6
6
  import { fileURLToPath } from 'url';
7
7
  import { homedir } from 'os';
8
- import { createReadStream } from 'fs';
9
8
 
10
9
  const __dirname = dirname(fileURLToPath(import.meta.url));
11
10
  const PACKAGE_ROOT = join(__dirname, '..');
@@ -21,6 +20,27 @@ const c = {
21
20
  dim: (s) => `\x1b[2m${s}\x1b[0m`,
22
21
  };
23
22
 
23
+ const COMMAND_FILES = [
24
+ 'red:proto.md',
25
+ 'red:proto-workflow.md',
26
+ 'red:proto-sparring.md',
27
+ 'red:proto-dev-setup.md',
28
+ 'red:proto-research.md',
29
+ 'red:proto-requirements.md',
30
+ 'red:proto-flows.md',
31
+ 'red:proto-ux.md',
32
+ 'red:proto-architect.md',
33
+ 'red:proto-dev.md',
34
+ 'red:proto-qa.md',
35
+ ];
36
+
37
+ const AGENT_FILES = [
38
+ 'frontend-developer.md',
39
+ 'backend-developer.md',
40
+ 'qa-engineer.md',
41
+ 'ux-reviewer.md',
42
+ ];
43
+
24
44
  async function exists(path) {
25
45
  try { await access(path); return true; }
26
46
  catch { return false; }
@@ -46,9 +66,98 @@ function printHeader(version) {
46
66
  console.log('');
47
67
  }
48
68
 
49
- // ─── Main ────────────────────────────────────────────────────────────────────
69
+ // ─── Uninstall ───────────────────────────────────────────────────────────────
70
+
71
+ async function runUninstall() {
72
+ const { version } = JSON.parse(
73
+ await import('fs').then(fs => fs.promises.readFile(join(PACKAGE_ROOT, 'package.json'), 'utf8'))
74
+ );
75
+
76
+ printHeader(version);
77
+
78
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
79
+
80
+ console.log(c.yellow(' Uninstall – where was red · proto installed?'));
81
+ console.log('');
82
+
83
+ const globalBase = join(homedir(), '.claude');
84
+ const localBase = join(process.cwd(), '.claude');
85
+
86
+ const globalExists = await exists(join(globalBase, 'commands', 'red:proto.md'));
87
+ const localExists = await exists(join(localBase, 'commands', 'red:proto.md'));
88
+
89
+ if (!globalExists && !localExists) {
90
+ console.log(c.dim(' red · proto is not installed in this location.'));
91
+ console.log('');
92
+ rl.close();
93
+ return;
94
+ }
95
+
96
+ const options = [];
97
+ if (globalExists) options.push({ label: `Global ${c.dim('(~/.claude)')}`, base: globalBase });
98
+ if (localExists) options.push({ label: `Local ${c.dim('(./.claude)')}`, base: localBase });
99
+
100
+ options.forEach((opt, i) => {
101
+ console.log(` ${i + 1}) ${c.bold(opt.label)}`);
102
+ });
103
+ if (options.length > 1) {
104
+ console.log(` ${options.length + 1}) ${c.bold('Both')}`);
105
+ }
106
+ console.log('');
107
+
108
+ const max = options.length > 1 ? options.length + 1 : options.length;
109
+ let choice = '';
110
+ while (!Array.from({ length: max }, (_, i) => String(i + 1)).includes(choice)) {
111
+ choice = (await ask(rl, c.dim(' Choice [1]: '))).trim() || '1';
112
+ }
113
+
114
+ const targets =
115
+ options.length > 1 && choice === String(options.length + 1)
116
+ ? options
117
+ : [options[parseInt(choice) - 1]];
118
+
119
+ console.log('');
120
+ console.log(c.yellow(' ⚠ This will remove all red:proto commands and agents.'));
121
+ console.log(c.dim(' Your project files (features/, research/, prd.md, …) are NOT touched.'));
122
+ console.log('');
123
+
124
+ const confirm = (await ask(rl, c.dim(' Type "yes" to confirm: '))).trim().toLowerCase();
125
+ rl.close();
126
+
127
+ if (confirm !== 'yes') {
128
+ console.log('');
129
+ console.log(c.dim(' Aborted. Nothing changed.'));
130
+ console.log('');
131
+ return;
132
+ }
133
+
134
+ let removed = 0;
135
+ for (const target of targets) {
136
+ for (const file of COMMAND_FILES) {
137
+ const path = join(target.base, 'commands', file);
138
+ if (await exists(path)) { await rm(path); removed++; }
139
+ }
140
+ for (const file of AGENT_FILES) {
141
+ const path = join(target.base, 'agents', file);
142
+ if (await exists(path)) { await rm(path); removed++; }
143
+ }
144
+ }
145
+
146
+ console.log('');
147
+ console.log(c.green(` ✓ ${removed} file(s) removed`));
148
+ console.log(c.dim(' red · proto has been uninstalled.'));
149
+ console.log('');
150
+ }
151
+
152
+ // ─── Install ─────────────────────────────────────────────────────────────────
50
153
 
51
154
  async function main() {
155
+ const args = process.argv.slice(2);
156
+
157
+ if (args.includes('--uninstall') || args.includes('-u')) {
158
+ return runUninstall();
159
+ }
160
+
52
161
  const { version } = JSON.parse(
53
162
  await import('fs').then(fs => fs.promises.readFile(join(PACKAGE_ROOT, 'package.json'), 'utf8'))
54
163
  );
@@ -76,6 +185,28 @@ async function main() {
76
185
  const claudeBase = isGlobal ? join(homedir(), '.claude') : join(process.cwd(), '.claude');
77
186
  const label = isGlobal ? `~/.claude` : `./.claude`;
78
187
 
188
+ // ── Duplicate detection ────────────────────────────────────────────────────
189
+ const globalBase = join(homedir(), '.claude');
190
+ const localBase = join(process.cwd(), '.claude');
191
+ const otherBase = isGlobal ? localBase : globalBase;
192
+ const otherLabel = isGlobal ? './.claude' : '~/.claude';
193
+
194
+ const otherInstalled = await exists(join(otherBase, 'commands', 'red:proto.md'));
195
+ if (otherInstalled) {
196
+ console.log('');
197
+ console.log(c.yellow(` ⚠ red · proto is already installed in ${otherLabel}`));
198
+ console.log(c.dim(` Installing in both locations will show every command twice in Claude Code.`));
199
+ console.log('');
200
+ const proceed = (await ask(rl, c.dim(' Continue anyway? [y/N]: '))).trim().toLowerCase();
201
+ if (proceed !== 'y') {
202
+ console.log('');
203
+ console.log(c.dim(' Aborted. Nothing changed.'));
204
+ console.log('');
205
+ rl.close();
206
+ return;
207
+ }
208
+ }
209
+
79
210
  console.log('');
80
211
 
81
212
  // ── Step 2: Confirm if already installed ──────────────────────────────────
@@ -144,53 +275,28 @@ async function installFiles(claudeBase, isGlobal, noClobber) {
144
275
  const agentsDir = join(claudeBase, 'agents');
145
276
  const projectRoot = process.cwd();
146
277
 
147
- // Create dirs
148
278
  await mkdir(commandsDir, { recursive: true });
149
279
  await mkdir(agentsDir, { recursive: true });
150
280
 
151
281
  const copyOpts = { recursive: true, force: !noClobber, errorOnExist: false };
152
282
 
153
- // Commands
154
283
  const srcCommands = join(PACKAGE_ROOT, 'commands');
155
- const files = [
156
- 'red:proto.md',
157
- 'red:proto-workflow.md',
158
- 'red:proto-sparring.md',
159
- 'red:proto-dev-setup.md',
160
- 'red:proto-research.md',
161
- 'red:proto-requirements.md',
162
- 'red:proto-flows.md',
163
- 'red:proto-ux.md',
164
- 'red:proto-architect.md',
165
- 'red:proto-dev.md',
166
- 'red:proto-qa.md',
167
- ];
168
-
169
284
  let copied = 0;
170
285
  let skipped = 0;
171
286
 
172
- for (const file of files) {
287
+ for (const file of COMMAND_FILES) {
173
288
  const dest = join(commandsDir, file);
174
289
  const alreadyExists = await exists(dest);
175
- if (noClobber && alreadyExists) {
176
- skipped++;
177
- continue;
178
- }
290
+ if (noClobber && alreadyExists) { skipped++; continue; }
179
291
  await cp(join(srcCommands, file), dest);
180
292
  copied++;
181
293
  }
182
294
 
183
- // Agents
184
295
  const srcAgents = join(PACKAGE_ROOT, 'agents');
185
- const agents = ['frontend-developer.md', 'backend-developer.md', 'qa-engineer.md', 'ux-reviewer.md'];
186
-
187
- for (const file of agents) {
296
+ for (const file of AGENT_FILES) {
188
297
  const dest = join(agentsDir, file);
189
298
  const alreadyExists = await exists(dest);
190
- if (noClobber && alreadyExists) {
191
- skipped++;
192
- continue;
193
- }
299
+ if (noClobber && alreadyExists) { skipped++; continue; }
194
300
  await cp(join(srcAgents, file), dest);
195
301
  copied++;
196
302
  }
@@ -134,35 +134,18 @@ AskUserQuestion({ questions: [{ question: "Passt das technische Design?", header
134
134
  ], multiSelect: false }] })
135
135
  ```
136
136
 
137
- Nach Approval im Chat: FEAT-[X].md erweitern (Abschnitt `## 3. Technisches Design` schreiben), YAML-Frontmatter auf `status: draft` setzen.
138
-
139
- Dann dem User sagen:
140
- ```
141
- 📝 Draft gespeichert: features/FEAT-[X]-[name].md
142
-
143
- Öffne die Datei, prüfe das technische Design und bearbeite es direkt falls nötig.
144
-
145
- → Schreib `weiter` wenn alles passt
146
- → Oder sag mir direkt was geändert werden soll
147
- ```
137
+ Nach Approval: FEAT-[X].md um Abschnitt `## 3. Technisches Design` erweitern, YAML `status: draft` setzen. User per CONVENTIONS.md §Resume Pattern informieren.
148
138
 
149
139
  ## Phase 4b: Finalisieren
150
140
 
151
- Nach `weiter` oder Korrekturen im Chat:
152
-
153
- 1. FEAT-[X].md einlesen, Korrekturen übernehmen
154
- 2. YAML-Frontmatter auf `status: approved` setzen
155
- 3. `## Fortschritt` → `Status: Approved`, `Aktueller Schritt: Tech` setzen
156
- 4. STATUS.md aktualisieren (Tech-Spalte auf ✓ setzen)
157
- 5. Commit-Zusammenfassung zeigen und committen:
141
+ Nach `weiter` oder Korrekturen: FEAT-[X].md einlesen, Korrekturen übernehmen, `status: approved` + `## Fortschritt → Status: Approved, Aktueller Schritt: Tech` setzen. STATUS.md (Tech-Spalte ✓).
158
142
 
159
143
  ```bash
160
144
  echo "Ich committe jetzt:"
161
145
  echo " → features/FEAT-[X]-[name].md – Tech Design finalisiert"
162
146
  echo " → features/STATUS.md – Tech-Status aktualisiert"
163
147
  git add features/FEAT-[X]-*.md features/STATUS.md
164
- git commit -m "docs: FEAT-[X] tech design – [Feature Name]"
165
- git push
148
+ git commit -q -m "docs: FEAT-[X] tech design – [Feature Name]" && git push -q
166
149
  ```
167
150
 
168
151
  ## Routing nach Approval
@@ -84,7 +84,7 @@ Leite aus PRD-Signalen und Recherche eine **konkrete Empfehlung** ab. Präsentie
84
84
  - Web-Technologie: **Electron** oder **Tauri** (leichtgewichtiger, Rust-basiert)
85
85
 
86
86
  **Datenbank-Empfehlung** (unabhängig vom Framework):
87
- - Standard (relational): **PostgreSQL via Neon** (serverless, kostenlos startbar)
87
+ - Standard (relational): **PostgreSQL via Neon** (keine eigene Server-Verwaltung, kostenlos startbar)
88
88
  - Echtzeit + Auth integriert: **Supabase**
89
89
  - Dokument-basiert: **MongoDB**
90
90
  - Kein persistentes Backend nötig: localStorage / kein DB
@@ -428,7 +428,7 @@ Installiere nur was das PRD tatsächlich braucht – keine spekulativen Packages
428
428
  **Variante A – Nur Code versionieren:**
429
429
  ```bash
430
430
  cd [codedir]
431
- git init
431
+ git init -q -b main
432
432
  cat > .gitignore << 'EOF'
433
433
  node_modules/
434
434
  .env
@@ -445,14 +445,13 @@ target/
445
445
  bin/
446
446
  obj/
447
447
  EOF
448
- git add .
449
- git commit -m "chore: initial scaffold ([Stack])"
448
+ git add . && git commit -q -m "chore: initial scaffold ([Stack])"
450
449
  ```
451
450
 
452
451
  **Variante B – Alles versionieren (Code + Projektdokumentation):**
453
452
  ```bash
454
453
  # Im Projekt-Root:
455
- git init
454
+ git init -q -b main
456
455
  cat > .gitignore << 'EOF'
457
456
  node_modules/
458
457
  .env
@@ -469,8 +468,7 @@ target/
469
468
  bin/
470
469
  obj/
471
470
  EOF
472
- git add .
473
- git commit -m "chore: project setup – PRD + [Stack] scaffold"
471
+ git add . && git commit -q -m "chore: project setup – PRD + [Stack] scaffold"
474
472
  ```
475
473
 
476
474
  Danach in beiden Varianten: initialen Tag setzen:
@@ -495,8 +493,7 @@ gh repo create [repo-name] \
495
493
  --description "[Vision-Satz aus prd.md]"
496
494
 
497
495
  # Erst pushen, dann Tags:
498
- git push -u origin main
499
- git push origin --tags
496
+ git push -q -u origin main && git push -q origin --tags
500
497
  ```
501
498
 
502
499
  Zeige dem User die Repository-URL.
@@ -111,7 +111,7 @@ grep -r "[geänderte Funktion]" [Codeverzeichnis]/ --include="*.tsx" --include="
111
111
 
112
112
  Nach allen Fixes:
113
113
  ```bash
114
- git add . && git commit -m "fix: FEAT-[X] – [Zusammenfassung]" && git push
114
+ git add . && git commit -q -m "fix: FEAT-[X] – [Zusammenfassung]" && git push -q
115
115
  ```
116
116
 
117
117
  ## Phase 4.5: Selbstcheck vor Review
@@ -159,8 +159,7 @@ Status auf "Dev" setzen. STATUS.md aktualisieren.
159
159
 
160
160
  ```bash
161
161
  git add . features/STATUS.md
162
- git commit -m "feat: implement FEAT-[X] – [Feature Name]"
163
- git push
162
+ git commit -q -m "feat: implement FEAT-[X] – [Feature Name]" && git push -q
164
163
  ```
165
164
 
166
165
  ## Phase 7: Handoff schreiben
@@ -190,7 +189,7 @@ Schreibe `context/FEAT-[ID]-dev-handoff.md` (legt Kontext für `/red:proto-qa` i
190
189
  ```bash
191
190
  mkdir -p context
192
191
  git add context/FEAT-[ID]-dev-handoff.md
193
- git commit -m "docs: FEAT-[X] dev handoff" && git push
192
+ git commit -q -m "docs: FEAT-[X] dev handoff" && git push -q
194
193
  ```
195
194
 
196
195
  Sage: "Implementierung abgeschlossen. Handoff geschrieben. **Starte eine neue Session** und führe dort `/red:proto-qa FEAT-[ID]` aus. Nach einer Pause: `/red:proto-workflow` zeigt dir exakt wo du stehst."
@@ -114,7 +114,7 @@ AskUserQuestion({
114
114
  multiSelect: false
115
115
  },
116
116
  {
117
- question: "Gibt es weitere Einstiegspunkte (z.B. nach Login, nach Onboarding, per Deep Link)?",
117
+ question: "Gibt es weitere Einstiegspunkte (z.B. nach Login, nach Onboarding, oder per direktem Link z.B. aus einer E-Mail)?",
118
118
  header: "Weitere Einstiege",
119
119
  options: [
120
120
  { label: "Nein, nur ein Einstieg", description: "" },
@@ -224,31 +224,17 @@ AskUserQuestion({
224
224
  })
225
225
  ```
226
226
 
227
- Nach Approval im Chat: flows/product-flows.md ist bereits als Draft gespeichert (Phase 5). Dem User sagen:
228
-
229
- ```
230
- 📝 Draft gespeichert: flows/product-flows.md
231
-
232
- Öffne die Datei, prüfe alle Screens und Transitions und bearbeite direkt falls nötig.
233
-
234
- → Schreib `weiter` wenn alles passt
235
- → Oder sag mir direkt was geändert werden soll
236
- ```
227
+ Nach Approval: `flows/product-flows.md` ist bereits als Draft gespeichert (Phase 5). User per CONVENTIONS.md §Resume Pattern informieren.
237
228
 
238
229
  ## Phase 6b: Finalisieren
239
230
 
240
- Nach `weiter` oder Korrekturen im Chat:
241
-
242
- 1. flows/product-flows.md einlesen, Korrekturen übernehmen
243
- 2. YAML-Frontmatter auf `status: approved` setzen
244
- 3. Commit-Zusammenfassung zeigen und committen:
231
+ Nach `weiter` oder Korrekturen: `flows/product-flows.md` einlesen, Korrekturen übernehmen, `status: approved` setzen.
245
232
 
246
233
  ```bash
247
234
  echo "Ich committe jetzt:"
248
235
  echo " → flows/product-flows.md – Screen-Inventar und Transitions finalisiert"
249
236
  git add flows/
250
- git commit -m "docs: product flows – screen inventory + transitions"
251
- git push
237
+ git commit -q -m "docs: product flows – screen inventory + transitions" && git push -q
252
238
  ```
253
239
 
254
240
  Sage dem User: "Flows dokumentiert. Nächster Schritt: `/red:proto-ux` für jedes Feature (einmal pro Feature) – die Transitions aus `flows/product-flows.md` sind die verbindliche Referenz.
@@ -146,8 +146,8 @@ STATUS.md: QA-Wert auf `✓`.
146
146
 
147
147
  ```bash
148
148
  git add . features/STATUS.md
149
- git commit -m "release: v[X.Y.Z] – FEAT-[X] [Feature Name]"
150
- git tag v[X.Y.Z] && git push && git push origin --tags
149
+ git commit -q -m "release: v[X.Y.Z] – FEAT-[X] [Feature Name]"
150
+ git tag v[X.Y.Z] && git push -q && git push -q origin --tags
151
151
  ```
152
152
 
153
153
  Sage: "v[X.Y.Z] getaggt. FEAT-[X] ist Production-Ready. Nächstes Feature: `/red:proto-requirements`. Nach Pause: `/red:proto-workflow`."
@@ -193,25 +193,11 @@ AskUserQuestion({
193
193
  })
194
194
  ```
195
195
 
196
- Nach Approval im Chat: Feature-File als Draft speichern. `project-config.md` aktualisieren (Nächste freie ID um 1 erhöhen).
197
-
198
- Dann dem User sagen:
199
- ```
200
- 📝 Draft gespeichert: features/FEAT-[X]-[name].md
201
-
202
- Öffne die Datei, prüfe sie und bearbeite sie direkt falls nötig.
203
-
204
- → Schreib `weiter` wenn alles passt
205
- → Oder sag mir direkt was geändert werden soll
206
- ```
196
+ Nach Approval: Feature-File als Draft speichern. `project-config.md` aktualisieren (Nächste freie ID um 1 erhöhen). User per CONVENTIONS.md §Resume Pattern informieren.
207
197
 
208
198
  ## Phase 7b: Finalisieren
209
199
 
210
- Nach `weiter` oder Korrekturen im Chat:
211
-
212
- 1. Feature-File einlesen, eventuelle Korrekturen übernehmen
213
- 2. YAML-Frontmatter auf `status: approved` setzen
214
- 3. `## Fortschritt` → `Status: Approved` setzen
200
+ Nach `weiter` oder Korrekturen: Feature-File einlesen, Korrekturen übernehmen, `status: approved` + `## Fortschritt → Status: Approved` setzen.
215
201
 
216
202
  **STATUS.md aktualisieren:** Lies `features/STATUS.md`. Wenn die Datei noch nicht existiert, erstelle sie mit diesem Header:
217
203
 
@@ -236,8 +222,7 @@ echo " → features/FEAT-[X]-[name].md – Spec finalisiert"
236
222
  echo " → features/STATUS.md – Feature eingetragen"
237
223
  echo " → project-config.md – Nächste ID aktualisiert"
238
224
  git add features/FEAT-[X]-*.md features/STATUS.md project-config.md
239
- git commit -m "docs: FEAT-[X] spec – [Feature Name]"
240
- git push
225
+ git commit -q -m "docs: FEAT-[X] spec – [Feature Name]" && git push -q
241
226
  ```
242
227
 
243
228
  Sage dem User:
@@ -373,54 +373,11 @@ AskUserQuestion({
373
373
  })
374
374
  ```
375
375
 
376
- Nach Approval: Problem Statement Map und Personas als Drafts speichern.
377
-
378
- `research/problem-statement.md`:
379
- ```markdown
380
- ---
381
- status: draft
382
- ---
383
-
384
- # Problem Statement Map
385
- *Erstellt von: /red:proto-research — [Datum]*
386
-
387
- [Inhalt aus Phase 4]
388
- ```
389
-
390
- `research/personas.md`:
391
- ```markdown
392
- ---
393
- status: draft
394
- ---
395
-
396
- # Personas
397
- *Erstellt von: /red:proto-research — [Datum]*
398
-
399
- [Inhalt aus Phase 5]
400
- ```
401
-
402
- Dann dem User sagen:
403
- ```
404
- 📝 Drafts gespeichert:
405
- → research/problem-statement.md
406
- → research/personas.md
407
- (+ research/platform-context.md und research/research-questions.md falls noch offen)
408
-
409
- Kurze Pause?
410
- → Schreib `weiter` wenn du alle Dateien geprüft hast
411
-
412
- Echter Research (Interviews, Umfragen, Tage)?
413
- → Trag deine Findings direkt in die Dateien ein
414
- → Dann /red:proto-research erneut aufrufen – ich erkenne die Drafts automatisch
415
- ```
376
+ Nach Approval: Problem Statement Map und Personas als Drafts speichern (YAML `status: draft`, Header mit Dateinamen und Datum). User per CONVENTIONS.md §Resume Pattern (Option 2 – Research) informieren.
416
377
 
417
378
  ## Phase 6b: Finalisieren
418
379
 
419
- Nach `weiter` oder Korrekturen im Chat:
420
-
421
- 1. Alle Research-Dateien lesen und eventuelle Chat-Korrekturen einarbeiten
422
- 2. YAML-Frontmatter in allen Dateien auf `status: approved` setzen
423
- 3. Zusammenfassung zeigen und committen:
380
+ Nach `weiter` oder Korrekturen: Alle Research-Dateien einlesen, Korrekturen übernehmen, `status: approved` in allen Dateien setzen.
424
381
 
425
382
  ```bash
426
383
  echo "Ich committe jetzt:"
@@ -429,8 +386,7 @@ echo " → research/research-questions.md – Forschungsfragen & Antworten"
429
386
  echo " → research/problem-statement.md – Problem Statement Map"
430
387
  echo " → research/personas.md – Personas"
431
388
  git add research/
432
- git commit -m "docs: add user research, personas and problem statement"
433
- git push
389
+ git commit -q -m "docs: add user research, personas and problem statement" && git push -q
434
390
  ```
435
391
 
436
392
  Prüfe den aktuellen Stand:
@@ -92,50 +92,21 @@ AskUserQuestion({
92
92
 
93
93
  ## Phase 4: Als Draft speichern
94
94
 
95
- > Lies zuerst `docs/CONVENTIONS.md` für die verbindlichen Draft/Approval/Resume-Regeln.
95
+ > Lies `docs/CONVENTIONS.md` Draft Convention + Resume Pattern (Option 1) gelten hier.
96
96
 
97
- Nach Approval: Speichere das PRD als Draft in `/prd.md`. YAML-Frontmatter `status: draft` ergänzen. Notiere den gewählten Scope (Prototyp-Typ) im PRD unter einem neuen Abschnitt:
98
-
99
- ```markdown
100
- ---
101
- status: draft
102
- ---
103
-
104
- # Product Requirements Document
105
- ...
106
-
107
- ## Scope-Typ
108
- [Klickbarer Prototyp | Funktionierender Prototyp | Produktionsreifes MVP | Unklar]
109
- ```
110
-
111
- Dann dem User sagen:
112
- ```
113
- 📝 Draft gespeichert: prd.md
114
-
115
- Öffne die Datei, prüfe sie und bearbeite sie direkt falls nötig.
116
-
117
- → Schreib `weiter` wenn alles passt
118
- → Oder sag mir direkt was geändert werden soll
119
- ```
97
+ Nach Approval: Speichere `prd.md` als Draft. YAML `status: draft`. Scope-Typ als Abschnitt `## Scope-Typ` ergänzen. User per CONVENTIONS.md §Resume Pattern informieren.
120
98
 
121
99
  ## Phase 4b: Finalisieren
122
100
 
123
- Nach `weiter` oder Korrektur im Chat:
124
-
125
- 1. Datei einlesen: `cat prd.md`
126
- 2. Falls Korrekturen im Chat: Änderungen in prd.md übernehmen
127
- 3. YAML-Frontmatter auf `status: approved` setzen
128
- 4. Commit (nur wenn Git bereits initialisiert ist – bei Erstnutzung noch nicht vorhanden):
101
+ Nach `weiter` oder Korrekturen: `prd.md` einlesen, Korrekturen übernehmen, `status: approved` setzen.
129
102
 
130
103
  ```bash
131
104
  if git rev-parse --git-dir > /dev/null 2>&1; then
132
105
  echo "Ich committe jetzt:"
133
106
  echo " → prd.md – PRD finalisiert"
134
- git add prd.md
135
- git commit -m "docs: add/update PRD"
136
- git push
107
+ git add prd.md && git commit -q -m "docs: add/update PRD" && git push -q
137
108
  else
138
- echo "Kein Git-Repository – prd.md wurde gespeichert. /red:proto-dev-setup richtet Git ein und macht den ersten Commit."
109
+ echo "Kein Git-Repository – prd.md gespeichert. /red:proto-dev-setup macht den ersten Commit."
139
110
  fi
140
111
  ```
141
112
 
@@ -176,35 +176,18 @@ AskUserQuestion({ questions: [{ question: "UX-Entscheidungen vollständig?", hea
176
176
  ], multiSelect: false }] })
177
177
  ```
178
178
 
179
- Nach Approval im Chat: FEAT-[X].md erweitern (Abschnitt `## 2. UX Entscheidungen` schreiben), YAML-Frontmatter auf `status: draft` setzen.
180
-
181
- Dann dem User sagen:
182
- ```
183
- 📝 Draft gespeichert: features/FEAT-[X]-[name].md
184
-
185
- Öffne die Datei, prüfe die UX-Entscheidungen und bearbeite sie direkt falls nötig.
186
-
187
- → Schreib `weiter` wenn alles passt
188
- → Oder sag mir direkt was geändert werden soll
189
- ```
179
+ Nach Approval: FEAT-[X].md um Abschnitt `## 2. UX Entscheidungen` erweitern, YAML `status: draft` setzen. User per CONVENTIONS.md §Resume Pattern informieren.
190
180
 
191
181
  ## Phase 7b: Finalisieren
192
182
 
193
- Nach `weiter` oder Korrekturen im Chat:
194
-
195
- 1. FEAT-[X].md einlesen, Korrekturen übernehmen
196
- 2. YAML-Frontmatter auf `status: approved` setzen
197
- 3. `## Fortschritt` → `Status: Approved`, `Aktueller Schritt: UX` setzen
198
- 4. STATUS.md aktualisieren (UX-Spalte auf ✓ setzen)
199
- 5. Commit-Zusammenfassung zeigen und committen:
183
+ Nach `weiter` oder Korrekturen: FEAT-[X].md einlesen, Korrekturen übernehmen, `status: approved` + `## Fortschritt → Status: Approved, Aktueller Schritt: UX` setzen. STATUS.md (UX-Spalte ✓).
200
184
 
201
185
  ```bash
202
186
  echo "Ich committe jetzt:"
203
187
  echo " → features/FEAT-[X]-[name].md – UX Entscheidungen finalisiert"
204
188
  echo " → features/STATUS.md – UX-Status aktualisiert"
205
189
  git add features/FEAT-[X]-*.md flows/product-flows.md features/STATUS.md 2>/dev/null
206
- git commit -m "docs: FEAT-[X] ux design – [Feature Name]"
207
- git push
190
+ git commit -q -m "docs: FEAT-[X] ux design – [Feature Name]" && git push -q
208
191
  ```
209
192
 
210
193
  ## Routing nach Approval
@@ -0,0 +1,50 @@
1
+ # Design System – Index
2
+
3
+ Lade dieses File zuerst. Dann nur die Files, die für das aktuelle Feature relevant sind.
4
+
5
+ ---
6
+
7
+ ## Tokens
8
+
9
+ | File | Inhalt | Wann laden |
10
+ |------|--------|------------|
11
+ | `tokens/colors.md` | Primär-, Sekundär-, Semantic-, Neutral-Farben + Surface-Aliases | Immer bei visueller Implementierung |
12
+ | `tokens/typography.md` | Schriftgrößen, Gewichte, Line-Heights, Font-Stack | Bei Text-Styling |
13
+ | `tokens/spacing.md` | Spacing-Scale (4px-Basis), Named Sizes (xs–2xl) | Bei Layout, Abstände, Padding |
14
+ | `tokens/shadows.md` | Elevation-System (sm, md, lg, xl) | Bei Cards, Modals, Dropdowns |
15
+ | `tokens/motion.md` | Transitions, Durations, Easing-Kurven | Bei Animationen, Hover-Effekten |
16
+
17
+ ## Komponenten
18
+
19
+ | File | Varianten | Zustände | Wann laden |
20
+ |------|-----------|----------|------------|
21
+ | `components/button.md` | primary, secondary, ghost, danger, link | default, hover, focus, active, disabled, loading | Bei jeder Aktion/Button |
22
+ | `components/input.md` | text, password, textarea, select | default, focus, error, disabled | Bei Formularen |
23
+ | `components/card.md` | default, interactive, flat | default, hover | Bei Card-Layouts |
24
+
25
+ ## Patterns
26
+
27
+ | File | Enthält | Wann laden |
28
+ |------|---------|------------|
29
+ | `patterns/navigation.md` | Header, Sidebar, Breadcrumb, Tab-Navigation | Bei Navigation-Implementierung |
30
+ | `patterns/forms.md` | Formular-Aufbau, Validation, Fehlermeldungen | Bei Formularen |
31
+ | `patterns/feedback.md` | Toasts, Modals, Loading States, Empty States | Bei Feedback-Elementen |
32
+ | `patterns/data-display.md` | Tabellen, Listen, Cards, Badges | Bei Datendarstellung |
33
+
34
+ ---
35
+
36
+ ## Laderegel für Agents
37
+
38
+ 1. Lies dieses INDEX.md
39
+ 2. Identifiziere welche Tokens/Komponenten/Patterns das Feature braucht
40
+ 3. Lade **nur diese Files** – nicht alles auf einmal
41
+ 4. Nicht definierte Elemente: pragmatisch mit vorhandenen Tokens bauen, im Feature-File unter `## Offene Punkte` dokumentieren
42
+
43
+ ## Status
44
+
45
+ | Bereich | Status |
46
+ |---------|--------|
47
+ | Tokens | Beispielwerte – vor Projektstart durch eigene Werte ersetzen |
48
+ | Komponenten | 3 Basiskomponenten vorhanden (Button, Input, Card) |
49
+ | Patterns | 4 Patterns vorhanden |
50
+ | Screens | Leer – Figma-Exports hier ablegen |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "red-proto",
3
- "version": "0.11.0",
3
+ "version": "0.13.2",
4
4
  "description": "AI-powered product development framework for Claude Code – from idea to tested prototype",
5
5
  "bin": {
6
6
  "red-proto": "./bin/install.js"