cc-workspace 4.5.0 → 4.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 +134 -6
- package/bin/cli.js +63 -0
- package/global-skills/agents/team-lead.md +4 -31
- package/global-skills/agents/workspace-init.md +2 -2
- package/global-skills/dispatch-feature/references/frontend-ux-standards.md +13 -7
- package/global-skills/dispatch-feature/references/rollback-protocol.md +35 -0
- package/global-skills/incident-debug/SKILL.md +2 -2
- package/global-skills/qa-ruthless/SKILL.md +4 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -74,7 +74,8 @@ Updates all components if the package version is newer:
|
|
|
74
74
|
### Diagnostic
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
|
-
npx cc-workspace doctor
|
|
77
|
+
npx cc-workspace doctor # from terminal
|
|
78
|
+
/doctor # from inside a Claude Code session
|
|
78
79
|
```
|
|
79
80
|
|
|
80
81
|
Checks: installed version, skills, rules, agents, hooks, jq, orchestrator/ structure.
|
|
@@ -157,14 +158,22 @@ In `workspace.md`, add the `Source Branch` column to the service map:
|
|
|
157
158
|
3. Teammates receive the session branch in their spawn prompt — they do NOT create their own branches
|
|
158
159
|
4. PRs go from `session/{name}` → `source_branch` (never to main directly)
|
|
159
160
|
|
|
160
|
-
### Session
|
|
161
|
+
### Session commands
|
|
161
162
|
|
|
163
|
+
From terminal (CLI):
|
|
162
164
|
```bash
|
|
163
165
|
cc-workspace session list # show active sessions + branches
|
|
164
166
|
cc-workspace session status feature-auth # commits per repo on session branch
|
|
165
167
|
cc-workspace session close feature-auth # interactive: create PRs, delete branches, clean up
|
|
166
168
|
```
|
|
167
169
|
|
|
170
|
+
From inside a Claude Code session (slash commands):
|
|
171
|
+
```
|
|
172
|
+
/session # list active sessions
|
|
173
|
+
/session status feature-auth # commits per repo
|
|
174
|
+
/session close feature-auth # interactive close
|
|
175
|
+
```
|
|
176
|
+
|
|
168
177
|
`session close` asks for confirmation before every action (PR creation, branch deletion, JSON cleanup).
|
|
169
178
|
|
|
170
179
|
### Parallel workflow
|
|
@@ -199,6 +208,36 @@ The orchestrator (Opus) never touches repo code. It clarifies the need,
|
|
|
199
208
|
writes a plan in markdown, then sends teammates (Sonnet) to work in
|
|
200
209
|
parallel in each repo via Agent Teams.
|
|
201
210
|
|
|
211
|
+
### Architecture
|
|
212
|
+
|
|
213
|
+
```mermaid
|
|
214
|
+
graph LR
|
|
215
|
+
USER([You]) <-->|clarify\nplan\nreview| TL
|
|
216
|
+
|
|
217
|
+
subgraph "orchestrator/"
|
|
218
|
+
TL["Team Lead\n(Opus 4.6)"]
|
|
219
|
+
PLANS["plans/*.md"]
|
|
220
|
+
TL -->|writes| PLANS
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
TL -->|spawn| IMP1["Implementer\n(Sonnet)"]
|
|
224
|
+
TL -->|spawn| IMP2["Implementer\n(Sonnet)"]
|
|
225
|
+
TL -->|spawn| QA["QA Ruthless\n(Sonnet)"]
|
|
226
|
+
TL -.->|scan| EXP["Explorer\n(Haiku)"]
|
|
227
|
+
|
|
228
|
+
subgraph "/tmp/ worktrees"
|
|
229
|
+
IMP1 -->|commit| WT1["repo-api\nsession/feat"]
|
|
230
|
+
IMP2 -->|commit| WT2["repo-front\nsession/feat"]
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
style TL fill:#6c5ce7,color:#fff
|
|
234
|
+
style IMP1 fill:#0d6efd,color:#fff
|
|
235
|
+
style IMP2 fill:#0d6efd,color:#fff
|
|
236
|
+
style QA fill:#e17055,color:#fff
|
|
237
|
+
style EXP fill:#636e72,color:#fff
|
|
238
|
+
style USER fill:#1a1a2e,color:#fff
|
|
239
|
+
```
|
|
240
|
+
|
|
202
241
|
### Who does what
|
|
203
242
|
|
|
204
243
|
| Role | Model | What it does |
|
|
@@ -221,6 +260,59 @@ parallel in each repo via Agent Teams.
|
|
|
221
260
|
|
|
222
261
|
### The dispatch-feature workflow (Mode A)
|
|
223
262
|
|
|
263
|
+
```mermaid
|
|
264
|
+
flowchart TD
|
|
265
|
+
START([User describes feature]) --> CLARIFY
|
|
266
|
+
|
|
267
|
+
subgraph "Phase 0 — Clarify"
|
|
268
|
+
CLARIFY[Ask max 5 questions\nif ambiguity]
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
CLARIFY --> PLAN
|
|
272
|
+
|
|
273
|
+
subgraph "Phase 1-2 — Plan"
|
|
274
|
+
PLAN[Load context\nworkspace.md + constitution.md]
|
|
275
|
+
PLAN --> WRITE[Write plan in ./plans/\ncommit units + API contract]
|
|
276
|
+
WRITE --> APPROVE{User approves?}
|
|
277
|
+
APPROVE -- No --> WRITE
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
APPROVE -- Yes --> SESSION
|
|
281
|
+
|
|
282
|
+
subgraph "Phase 2.5 — Session"
|
|
283
|
+
SESSION[Create session branches\ngit branch session/name source]
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
SESSION --> W1
|
|
287
|
+
|
|
288
|
+
subgraph "Phase 3 — Dispatch"
|
|
289
|
+
W1["Wave 1: Producers\n(API, data, auth)"]
|
|
290
|
+
W1 -->|"contracts validated"| W2["Wave 2: Consumers\n(frontend, integrations)"]
|
|
291
|
+
W2 --> W3["Wave 3: Infra\n(gateway, config)"]
|
|
292
|
+
|
|
293
|
+
W1 -.- IMP1["Implementer\nCommit 1/3"]
|
|
294
|
+
W1 -.- IMP2["Implementer\nCommit 2/3"]
|
|
295
|
+
W1 -.- IMP3["Implementer\nCommit 3/3"]
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
W3 --> VERIFY
|
|
299
|
+
|
|
300
|
+
subgraph "Phase 4-5 — Verify"
|
|
301
|
+
VERIFY[cross-service-check\n+ qa-ruthless]
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
VERIFY --> REPORT([Final summary\n+ propose fixes])
|
|
305
|
+
|
|
306
|
+
style START fill:#1a1a2e,color:#fff
|
|
307
|
+
style REPORT fill:#1a1a2e,color:#fff
|
|
308
|
+
style APPROVE fill:#2d3436,color:#fff
|
|
309
|
+
style IMP1 fill:#0d6efd,color:#fff
|
|
310
|
+
style IMP2 fill:#0d6efd,color:#fff
|
|
311
|
+
style IMP3 fill:#0d6efd,color:#fff
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Text version:**
|
|
315
|
+
|
|
224
316
|
```
|
|
225
317
|
CLARIFY -> ask max 5 questions if ambiguity
|
|
226
318
|
PLAN -> write the plan in ./plans/, wait for approval
|
|
@@ -299,6 +391,23 @@ All hooks in settings.json are **non-blocking** (exit 0 + warning). No hook bloc
|
|
|
299
391
|
|
|
300
392
|
---
|
|
301
393
|
|
|
394
|
+
## Slash commands (in-session)
|
|
395
|
+
|
|
396
|
+
These skills can be invoked directly from a Claude Code session, replacing the CLI for common operations.
|
|
397
|
+
|
|
398
|
+
| Command | CLI equivalent | What it does |
|
|
399
|
+
|---------|---------------|--------------|
|
|
400
|
+
| `/session` | `cc-workspace session list` | List active sessions with branches and commit counts |
|
|
401
|
+
| `/session status X` | `cc-workspace session status X` | Detailed session view: commits, files changed |
|
|
402
|
+
| `/session close X` | `cc-workspace session close X` | Interactive: create PRs, delete branches, cleanup |
|
|
403
|
+
| `/doctor` | `cc-workspace doctor` | Full diagnostic of workspace installation |
|
|
404
|
+
| `/cleanup` | _(no CLI equivalent)_ | Remove orphan worktrees, stale sessions, dangling containers |
|
|
405
|
+
|
|
406
|
+
> These slash commands use `context: fork` — they don't pollute the orchestrator's context.
|
|
407
|
+
> The CLI commands (`npx cc-workspace ...`) remain available for terminal use outside sessions.
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
302
411
|
## The 3 templates
|
|
303
412
|
|
|
304
413
|
| Template | Usage |
|
|
@@ -345,6 +454,8 @@ in every teammate spawn prompt (teammates don't receive it automatically).
|
|
|
345
454
|
|
|
346
455
|
- `claude --resume` resumes the session with the team-lead agent
|
|
347
456
|
- The SessionStart hook automatically injects active plans
|
|
457
|
+
- Orphan worktrees in `/tmp/` are cleaned up automatically at session start
|
|
458
|
+
- Run `/cleanup` to manually purge stale worktrees, sessions, and containers
|
|
348
459
|
- The markdown plan on disk is the source of truth
|
|
349
460
|
|
|
350
461
|
| Emoji | Status |
|
|
@@ -353,6 +464,7 @@ in every teammate spawn prompt (teammates don't receive it automatically).
|
|
|
353
464
|
| 🔄 | IN PROGRESS |
|
|
354
465
|
| ✅ | DONE |
|
|
355
466
|
| ❌ | BLOCKED/FAILED |
|
|
467
|
+
| ❌ ESCALATED | Failed 2+ times, wave stopped, waiting for user |
|
|
356
468
|
|
|
357
469
|
---
|
|
358
470
|
|
|
@@ -363,7 +475,7 @@ The package uses semver. The installed version is tracked in `~/.claude/.orchest
|
|
|
363
475
|
```bash
|
|
364
476
|
npx cc-workspace version # shows package and installed versions
|
|
365
477
|
npx cc-workspace update # updates if newer version
|
|
366
|
-
npx cc-workspace doctor # full diagnostic
|
|
478
|
+
npx cc-workspace doctor # full diagnostic (or /doctor in-session)
|
|
367
479
|
```
|
|
368
480
|
|
|
369
481
|
On each `init` or `update`, the CLI compares versions:
|
|
@@ -406,8 +518,11 @@ cc-workspace/
|
|
|
406
518
|
│ ├── container-strategies.md
|
|
407
519
|
│ ├── test-frameworks.md
|
|
408
520
|
│ └── scenario-extraction.md
|
|
409
|
-
├──
|
|
410
|
-
├──
|
|
521
|
+
├── session/SKILL.md <- /session slash command
|
|
522
|
+
├── doctor/SKILL.md <- /doctor slash command
|
|
523
|
+
├── cleanup/SKILL.md <- /cleanup slash command
|
|
524
|
+
├── hooks/ <- 9 scripts (warning-only)
|
|
525
|
+
├── rules/ <- 2 rules
|
|
411
526
|
└── agents/ <- 4 agents (team-lead, implementer, workspace-init, e2e-validator)
|
|
412
527
|
```
|
|
413
528
|
|
|
@@ -417,7 +532,7 @@ cc-workspace/
|
|
|
417
532
|
|
|
418
533
|
Both `init` and `update` are safe to re-run:
|
|
419
534
|
- **Never overwritten**: `workspace.md`, `constitution.md`, `plans/*.md`, `e2e/` (user content)
|
|
420
|
-
- **Always regenerated**: `settings.json`, `
|
|
535
|
+
- **Always regenerated**: `settings.json`, `CLAUDE.md`, `_TEMPLATE.md`
|
|
421
536
|
- **Always copied**: hooks, templates
|
|
422
537
|
- **Always regenerated on init**: `service-profiles.md` (fresh scan)
|
|
423
538
|
- **Global components**: only updated if the version is newer (or `--force`)
|
|
@@ -486,6 +601,19 @@ With `--chrome`, the agent:
|
|
|
486
601
|
|
|
487
602
|
---
|
|
488
603
|
|
|
604
|
+
## Changelog v4.5.1 -> v4.6.0
|
|
605
|
+
|
|
606
|
+
| # | Feature | Detail |
|
|
607
|
+
|---|---------|--------|
|
|
608
|
+
| 1 | **Framework-agnostic UX standards** | `frontend-ux-standards.md` no longer hardcodes Quasar. Breakpoints, dialogs, and design system sections now reference the project's chosen library. Constitution overrides are documented. |
|
|
609
|
+
| 2 | **Rollback protocol externalized** | Rollback and failed dispatch procedures moved from team-lead agent prompt (203→~170 lines) to `references/rollback-protocol.md`. Reduces base context load. |
|
|
610
|
+
| 3 | **LSP fallback documented** | `qa-ruthless` and `incident-debug` now include explicit Grep+Glob fallback when LSP tool is unavailable. |
|
|
611
|
+
| 4 | **`cc-workspace uninstall`** | New CLI command to cleanly remove all global components from `~/.claude/`. Interactive confirmation. Local orchestrator/ preserved. |
|
|
612
|
+
| 5 | **workspace-init fixes** | Removed hardcoded version ("v4.0" → dynamic). Fixed skills count in diagnostic (9 → 13). |
|
|
613
|
+
| 6 | **Mermaid diagrams in README** | Architecture overview and dispatch workflow now have visual flowcharts. Text fallback preserved. |
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
489
617
|
## Changelog v4.4.0 -> v4.5.0
|
|
490
618
|
|
|
491
619
|
| # | Feature | Detail |
|
package/bin/cli.js
CHANGED
|
@@ -825,6 +825,65 @@ switch (command) {
|
|
|
825
825
|
break;
|
|
826
826
|
}
|
|
827
827
|
|
|
828
|
+
case "uninstall": {
|
|
829
|
+
log(BANNER_SMALL);
|
|
830
|
+
step("Uninstalling global components");
|
|
831
|
+
|
|
832
|
+
const readline = require("readline");
|
|
833
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
834
|
+
const ask = (q) => new Promise(r => rl.question(q, r));
|
|
835
|
+
|
|
836
|
+
(async () => {
|
|
837
|
+
const answer = await ask(
|
|
838
|
+
` Remove all cc-workspace components from ${c.dim}~/.claude/${c.reset}? [y/N] `
|
|
839
|
+
);
|
|
840
|
+
if (answer.toLowerCase() !== "y") {
|
|
841
|
+
log(` ${c.dim}Cancelled.${c.reset}\n`);
|
|
842
|
+
rl.close();
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
// Skills
|
|
847
|
+
if (fs.existsSync(GLOBAL_SKILLS)) {
|
|
848
|
+
const skipDirs = new Set(["rules", "agents", "hooks", "templates"]);
|
|
849
|
+
const skillDirs = fs.readdirSync(SKILLS_DIR, { withFileTypes: true })
|
|
850
|
+
.filter(e => e.isDirectory() && !skipDirs.has(e.name))
|
|
851
|
+
.map(e => e.name);
|
|
852
|
+
let n = 0;
|
|
853
|
+
for (const name of skillDirs) {
|
|
854
|
+
const target = path.join(GLOBAL_SKILLS, name);
|
|
855
|
+
if (fs.existsSync(target)) { fs.rmSync(target, { recursive: true }); n++; }
|
|
856
|
+
}
|
|
857
|
+
ok(`${n} skills removed`);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// Rules
|
|
861
|
+
for (const f of ["context-hygiene.md", "model-routing.md"]) {
|
|
862
|
+
const fp = path.join(GLOBAL_RULES, f);
|
|
863
|
+
if (fs.existsSync(fp)) fs.unlinkSync(fp);
|
|
864
|
+
}
|
|
865
|
+
ok("Rules removed");
|
|
866
|
+
|
|
867
|
+
// Agents
|
|
868
|
+
for (const f of ["team-lead.md", "implementer.md", "workspace-init.md", "e2e-validator.md"]) {
|
|
869
|
+
const fp = path.join(GLOBAL_AGENTS, f);
|
|
870
|
+
if (fs.existsSync(fp)) fs.unlinkSync(fp);
|
|
871
|
+
}
|
|
872
|
+
ok("Agents removed");
|
|
873
|
+
|
|
874
|
+
// Version file
|
|
875
|
+
if (fs.existsSync(VERSION_FILE)) fs.unlinkSync(VERSION_FILE);
|
|
876
|
+
ok("Version tracking removed");
|
|
877
|
+
|
|
878
|
+
log("");
|
|
879
|
+
log(` ${c.green}${c.bold}Uninstall complete.${c.reset}`);
|
|
880
|
+
log(` ${c.dim}Local orchestrator/ directories are preserved — remove them manually if needed.${c.reset}`);
|
|
881
|
+
log("");
|
|
882
|
+
rl.close();
|
|
883
|
+
})();
|
|
884
|
+
break;
|
|
885
|
+
}
|
|
886
|
+
|
|
828
887
|
case "version":
|
|
829
888
|
case "--version":
|
|
830
889
|
case "-v": {
|
|
@@ -864,6 +923,10 @@ switch (command) {
|
|
|
864
923
|
log(` ${c.cyan}npx cc-workspace session close${c.reset} ${c.dim}<name>${c.reset}`);
|
|
865
924
|
log(` Interactive close: create PRs, delete branches, clean up.`);
|
|
866
925
|
log("");
|
|
926
|
+
log(` ${c.cyan}npx cc-workspace uninstall${c.reset}`);
|
|
927
|
+
log(` Remove all global components from ~/.claude/ (interactive).`);
|
|
928
|
+
log(` Local orchestrator/ directories are preserved.`);
|
|
929
|
+
log("");
|
|
867
930
|
log(` ${c.cyan}npx cc-workspace version${c.reset}`);
|
|
868
931
|
log(` Show package and installed versions.`);
|
|
869
932
|
log("");
|
|
@@ -150,37 +150,10 @@ See @dispatch-feature/references/spawn-templates.md for full templates.
|
|
|
150
150
|
### Wave completion
|
|
151
151
|
All commit units of all services in a wave must be ✅ before launching next wave.
|
|
152
152
|
|
|
153
|
-
## Rollback
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
1. Identify the last known good commit hash (from plan's session log)
|
|
158
|
-
2. Spawn a Task subagent (Bash):
|
|
159
|
-
```
|
|
160
|
-
git -C ../[repo] update-ref refs/heads/session/{name} [good-commit-hash]
|
|
161
|
-
```
|
|
162
|
-
3. Mark the commit unit ❌ in the plan with reason
|
|
163
|
-
4. Re-dispatch with corrected instructions
|
|
164
|
-
|
|
165
|
-
If the branch is unrecoverable:
|
|
166
|
-
1. Delete the branch: `git -C ../[repo] branch -D session/{name}`
|
|
167
|
-
2. Recreate from source: `git -C ../[repo] branch session/{name} {source_branch}`
|
|
168
|
-
3. Re-dispatch ALL commit units for this service from scratch
|
|
169
|
-
4. Warn the user — this resets all progress on this service
|
|
170
|
-
|
|
171
|
-
## Failed dispatch tracking
|
|
172
|
-
|
|
173
|
-
After 2 failed re-dispatches of a commit unit:
|
|
174
|
-
|
|
175
|
-
1. Mark as `❌ ESCALATED` in the plan
|
|
176
|
-
2. Record in the plan's **Failed dispatches** section:
|
|
177
|
-
- Commit unit title
|
|
178
|
-
- Failure reason (from implementer report)
|
|
179
|
-
- Attempted fixes
|
|
180
|
-
- Suggested resolution
|
|
181
|
-
3. **STOP the wave** — do NOT continue to the next commit unit
|
|
182
|
-
4. Present the failure to the user, ask for direction
|
|
183
|
-
5. Resume only after user provides corrective action
|
|
153
|
+
## Rollback & failure handling
|
|
154
|
+
|
|
155
|
+
See @dispatch-feature/references/rollback-protocol.md for the full rollback and
|
|
156
|
+
failed dispatch escalation procedures.
|
|
184
157
|
|
|
185
158
|
## What you CAN write
|
|
186
159
|
- Plans in `./plans/`
|
|
@@ -13,7 +13,7 @@ maxTurns: 80
|
|
|
13
13
|
|
|
14
14
|
# Workspace Init — Diagnostic & Configuration
|
|
15
15
|
|
|
16
|
-
You are the initialization agent for the orchestrator workspace
|
|
16
|
+
You are the initialization agent for the orchestrator workspace.
|
|
17
17
|
Your job: verify everything is in place, fix what can be fixed,
|
|
18
18
|
and guide the user to configure what needs their input.
|
|
19
19
|
|
|
@@ -50,7 +50,7 @@ Check global components (read-only, no auto-fix):
|
|
|
50
50
|
|
|
51
51
|
| # | Check | If missing |
|
|
52
52
|
|---|-------|-----------|
|
|
53
|
-
| 10 | `~/.claude/skills/` contains all
|
|
53
|
+
| 10 | `~/.claude/skills/` contains all 13 skills | List the missing ones |
|
|
54
54
|
| 11 | `~/.claude/rules/` contains context-hygiene.md, model-routing.md | List the missing ones |
|
|
55
55
|
| 12 | `~/.claude/agents/` contains team-lead.md, implementer.md, workspace-init.md | List the missing ones |
|
|
56
56
|
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
This document is injected into every frontend teammate's prompt.
|
|
4
4
|
It defines the minimum expected UX quality level.
|
|
5
5
|
|
|
6
|
+
> **Project-specific overrides**: If `constitution.md` defines a design system
|
|
7
|
+
> (e.g., MUI, Ant Design, Vuetify, Shadcn), those rules take precedence over
|
|
8
|
+
> the framework-specific examples below. The principles (4 states, responsive,
|
|
9
|
+
> a11y, forms) are universal — only the component names and breakpoints change.
|
|
10
|
+
|
|
6
11
|
## The 4 mandatory states
|
|
7
12
|
|
|
8
13
|
Every component that displays data MUST implement:
|
|
@@ -33,8 +38,9 @@ Every component that displays data MUST implement:
|
|
|
33
38
|
## Responsive
|
|
34
39
|
|
|
35
40
|
- **Mobile first**: build the mobile version first
|
|
36
|
-
-
|
|
37
|
-
|
|
41
|
+
- Use the project's breakpoint system. Common defaults:
|
|
42
|
+
- xs (0-599), sm (600-1023), md (1024-1439), lg (1440+)
|
|
43
|
+
- Adapt to the actual framework (Quasar `$breakpoint-*`, Tailwind `sm:/md:/lg:`, MUI `useMediaQuery`, etc.)
|
|
38
44
|
- Data tables on mobile: switch to card/list view, no horizontal scroll
|
|
39
45
|
- Forms on mobile: stacked fields, appropriate native keyboard (inputmode)
|
|
40
46
|
- Primary actions: accessible with the thumb (bottom zone of the screen)
|
|
@@ -45,7 +51,7 @@ Every component that displays data MUST implement:
|
|
|
45
51
|
- **Optimistic updates** for quick actions (toggle, delete)
|
|
46
52
|
with rollback on API error
|
|
47
53
|
- **Confirmation** for destructive actions (delete, reset)
|
|
48
|
-
via
|
|
54
|
+
via the project's dialog/modal component, never window.confirm()
|
|
49
55
|
- **Transitions** between states: fade 150ms by default
|
|
50
56
|
- **Disabled state** clear on buttons during processing (no double submit)
|
|
51
57
|
|
|
@@ -67,7 +73,7 @@ Every component that displays data MUST implement:
|
|
|
67
73
|
|
|
68
74
|
## Design system
|
|
69
75
|
|
|
70
|
-
- Use
|
|
71
|
-
- Do not reinvent a component that exists in
|
|
72
|
-
- Colors, spacing, and typography follow the project's
|
|
73
|
-
- Icons come from a single set (
|
|
76
|
+
- Use the project's component library first (e.g., Quasar, MUI, Ant Design, Vuetify, Shadcn)
|
|
77
|
+
- Do not reinvent a component that exists in the chosen library
|
|
78
|
+
- Colors, spacing, and typography follow the project's theme/design tokens
|
|
79
|
+
- Icons come from a single set (the one configured in the project)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Rollback & Failed Dispatch Protocol
|
|
2
|
+
|
|
3
|
+
Reference file for team-lead and dispatch-feature. Loaded on-demand.
|
|
4
|
+
|
|
5
|
+
## Rollback protocol
|
|
6
|
+
|
|
7
|
+
If an implementer corrupts the session branch (bad merge, broken state):
|
|
8
|
+
|
|
9
|
+
1. Identify the last known good commit hash (from plan's session log)
|
|
10
|
+
2. Spawn a Task subagent (Bash):
|
|
11
|
+
```
|
|
12
|
+
git -C ../[repo] update-ref refs/heads/session/{name} [good-commit-hash]
|
|
13
|
+
```
|
|
14
|
+
3. Mark the commit unit ❌ in the plan with reason
|
|
15
|
+
4. Re-dispatch with corrected instructions
|
|
16
|
+
|
|
17
|
+
If the branch is unrecoverable:
|
|
18
|
+
1. Delete the branch: `git -C ../[repo] branch -D session/{name}`
|
|
19
|
+
2. Recreate from source: `git -C ../[repo] branch session/{name} {source_branch}`
|
|
20
|
+
3. Re-dispatch ALL commit units for this service from scratch
|
|
21
|
+
4. Warn the user — this resets all progress on this service
|
|
22
|
+
|
|
23
|
+
## Failed dispatch tracking
|
|
24
|
+
|
|
25
|
+
After 2 failed re-dispatches of a commit unit:
|
|
26
|
+
|
|
27
|
+
1. Mark as `❌ ESCALATED` in the plan
|
|
28
|
+
2. Record in the plan's **Failed dispatches** section:
|
|
29
|
+
- Commit unit title
|
|
30
|
+
- Failure reason (from implementer report)
|
|
31
|
+
- Attempted fixes
|
|
32
|
+
- Suggested resolution
|
|
33
|
+
3. **STOP the wave** — do NOT continue to the next commit unit
|
|
34
|
+
4. Present the failure to the user, ask for direction
|
|
35
|
+
5. Resume only after user provides corrective action
|
|
@@ -33,8 +33,8 @@ If unclear, investigate all layers.
|
|
|
33
33
|
## Phase 2: Investigate (parallel)
|
|
34
34
|
|
|
35
35
|
Spawn investigators via Agent Teams (Teammate tool):
|
|
36
|
-
- **API/Backend**: full Sonnet teammate with write-capable investigation. Use the **LSP tool** (go-to-definition, find-references) to trace error call chains
|
|
37
|
-
- **Frontend, Gateway, Infra, Auth**: lightweight Explore subagents (Task, Haiku) for read-only scan. Use LSP tool where available for tracing
|
|
36
|
+
- **API/Backend**: full Sonnet teammate with write-capable investigation. Use the **LSP tool** (go-to-definition, find-references) to trace error call chains. If LSP is unavailable, fall back to Grep + Glob for tracing references manually.
|
|
37
|
+
- **Frontend, Gateway, Infra, Auth**: lightweight Explore subagents (Task, Haiku) for read-only scan. Use LSP tool where available for tracing, or Grep + Glob as fallback.
|
|
38
38
|
|
|
39
39
|
Multiple teammates can share findings and challenge each other's hypotheses.
|
|
40
40
|
This adversarial pattern finds root causes faster than sequential investigation.
|
|
@@ -42,7 +42,8 @@ Spawn one teammate per service impacted. All run in parallel via Agent Teams.
|
|
|
42
42
|
|
|
43
43
|
Include in spawn prompt: **full constitution (all rules from constitution.md)**, plan context, then these steps:
|
|
44
44
|
1. Run test suite — report pass/fail with details
|
|
45
|
-
2. Use the **LSP tool** (go-to-definition, find-references) to trace call chains
|
|
45
|
+
2. Use the **LSP tool** (go-to-definition, find-references) to trace call chains.
|
|
46
|
+
If LSP is unavailable, fall back to Grep + Glob for tracing references manually.
|
|
46
47
|
3. **Constitution check**: multi-tenant scoping, secrets, rollback, test coverage
|
|
47
48
|
4. **Code quality**: missing validation, missing auth checks, N+1, error handling, race conditions
|
|
48
49
|
5. **Dead code hunt**: unused imports, unreachable methods, abandoned feature flags
|
|
@@ -54,7 +55,8 @@ Include in spawn prompt: **full constitution (all rules from constitution.md)**,
|
|
|
54
55
|
|
|
55
56
|
Include in spawn prompt: **full constitution (all rules from constitution.md)**, plan context, UX standards, then these steps:
|
|
56
57
|
1. Run tests — report pass/fail
|
|
57
|
-
2. Use the **LSP tool** for tracing component dependencies and store usage
|
|
58
|
+
2. Use the **LSP tool** for tracing component dependencies and store usage.
|
|
59
|
+
If LSP is unavailable, fall back to Grep + Glob for tracing references manually.
|
|
58
60
|
3. **UX audit** on every new/modified component: 4 states (skeleton not spinner, empty+CTA, error+retry, smooth success), responsive, a11y, interactions (debounce, optimistic, confirmation), forms (inline validation, error messages, preserve data)
|
|
59
61
|
4. **Constitution check**: data precision, feedback <200ms
|
|
60
62
|
5. **Code quality**: TypeScript `any`, unsafe `as`, infinite loops, XSS via v-html
|
package/package.json
CHANGED