mindsystem-cc 4.2.1 → 4.3.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.
Files changed (33) hide show
  1. package/README.md +30 -12
  2. package/agents/ms-browser-verifier.md +33 -13
  3. package/agents/ms-compounder.md +16 -15
  4. package/agents/ms-consolidator.md +14 -13
  5. package/agents/ms-researcher.md +2 -1
  6. package/agents/ms-roadmapper.md +33 -0
  7. package/commands/ms/add-phase.md +0 -4
  8. package/commands/ms/compound.md +3 -3
  9. package/commands/ms/create-roadmap.md +19 -2
  10. package/commands/ms/design-phase.md +11 -7
  11. package/commands/ms/execute-phase.md +20 -13
  12. package/commands/ms/help.md +1 -0
  13. package/commands/ms/insert-phase.md +0 -4
  14. package/commands/ms/progress.md +8 -62
  15. package/commands/ms/research-phase.md +16 -11
  16. package/commands/ms/verify-work.md +8 -2
  17. package/mindsystem/references/prework-status.md +2 -1
  18. package/mindsystem/references/routing/next-phase-routing.md +6 -5
  19. package/mindsystem/templates/knowledge.md +1 -1
  20. package/mindsystem/templates/milestone-archive.md +0 -14
  21. package/mindsystem/templates/roadmap-milestone.md +5 -16
  22. package/mindsystem/templates/roadmap.md +6 -32
  23. package/mindsystem/workflows/complete-milestone.md +0 -1
  24. package/mindsystem/workflows/compound.md +24 -6
  25. package/mindsystem/workflows/discuss-phase.md +7 -22
  26. package/mindsystem/workflows/doctor-fixes.md +1 -1
  27. package/mindsystem/workflows/execute-phase.md +13 -15
  28. package/mindsystem/workflows/execute-plan.md +3 -1
  29. package/mindsystem/workflows/mockup-generation.md +3 -2
  30. package/mindsystem/workflows/transition.md +6 -8
  31. package/mindsystem/workflows/verify-work.md +31 -15
  32. package/package.json +1 -1
  33. package/scripts/ms-tools.py +27 -4
@@ -97,7 +97,6 @@ Update the file:
97
97
 
98
98
  - Mark current phase: `[x] Complete`
99
99
  - Add completion date
100
- - Update plan count to final (e.g., "3/3 plans complete")
101
100
  - Update Progress table
102
101
  - Keep next phase as `[ ] Not started`
103
102
 
@@ -112,11 +111,11 @@ Update the file:
112
111
 
113
112
  ## Progress
114
113
 
115
- | Phase | Plans Complete | Status | Completed |
116
- | ----------------- | -------------- | ----------- | ---------- |
117
- | 1. Foundation | 3/3 | Complete | 2025-01-15 |
118
- | 2. Authentication | 0/2 | Not started | - |
119
- | 3. Core Features | 0/1 | Not started | - |
114
+ | Phase | Status | Completed |
115
+ | ----------------- | ----------- | ---------- |
116
+ | 1. Foundation | Complete | 2025-01-15 |
117
+ | 2. Authentication | Not started | - |
118
+ | 3. Core Features | Not started | - |
120
119
  ```
121
120
 
122
121
  </step>
@@ -442,7 +441,6 @@ Respect user judgment — they know if work matters.
442
441
 
443
442
  **If marking complete with incomplete plans:**
444
443
 
445
- - Update ROADMAP: "2/3 plans complete" (not "3/3")
446
444
  - Note in transition message which plans were skipped
447
445
 
448
446
  </partial_completion>
@@ -453,7 +451,7 @@ Transition is complete when:
453
451
 
454
452
  - [ ] Current phase plan summaries verified (all exist or user chose to skip)
455
453
  - [ ] Any stale handoffs deleted
456
- - [ ] ROADMAP.md updated with completion status and plan count
454
+ - [ ] ROADMAP.md updated with completion status
457
455
  - [ ] PROJECT.md evolved (requirements, decisions, description if needed)
458
456
  - [ ] STATE.md updated (position, project reference, context, session)
459
457
  - [ ] Progress table updated
@@ -6,6 +6,7 @@ Complete verify-and-fix session: by session end, everything verified, issues fix
6
6
 
7
7
  <execution_context>
8
8
  <!-- mock-patterns.md loaded on demand for transient_state mocks (see generate_mocks step) -->
9
+ <!-- knowledge files loaded on first fix attempt (see investigate_issue step) -->
9
10
  </execution_context>
10
11
 
11
12
  <process>
@@ -74,7 +75,8 @@ Provide a phase number to start testing (e.g., /ms:verify-work 4)
74
75
  **Find SUMMARY.md files for the phase:**
75
76
 
76
77
  ```bash
77
- PHASE_DIR=$(ls -d .planning/phases/${PHASE_ARG}* 2>/dev/null | head -1)
78
+ ms-tools find-phase "${PHASE_ARG}"
79
+ # Extract PHASE_DIR from the `dir` field of the JSON output
78
80
  ls "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
79
81
  ```
80
82
 
@@ -341,6 +343,19 @@ Progress auto-recalculates on every `uat-update` call. No manual progress recalc
341
343
  <step name="investigate_issue">
342
344
  **Investigate reported issue:**
343
345
 
346
+ **0. Load knowledge (first issue only):**
347
+
348
+ If this is the first issue requiring investigation in this session, load knowledge files now. On subsequent issues, knowledge is already in context — skip to step 1.
349
+
350
+ ```bash
351
+ ms-tools config-get subsystems
352
+ grep "^subsystem:" "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
353
+ ```
354
+
355
+ Match SUMMARY.md subsystem values against config subsystems. Read matching `.planning/knowledge/{subsystem}.md` files (1-3 most relevant).
356
+
357
+ This knowledge informs investigation (where to look, known pitfalls) and any subsequent fixes.
358
+
344
359
  **1. Lightweight investigation (2-3 tool calls):**
345
360
 
346
361
  ```
@@ -350,24 +365,21 @@ Progress auto-recalculates on every `uat-update` call. No manual progress recalc
350
365
  3. Check git log for recent changes to relevant files
351
366
  ```
352
367
 
353
- **2. Determine if cause is found:**
368
+ **2. Report finding and act:**
354
369
 
355
- **If cause found AND fix is simple (single file, straightforward change):**
356
- - Propose fix in plain language:
357
- ```
358
- Found the issue. In `ErrorBanner.tsx` line 42, the error message is
359
- hardcoded to "Something went wrong" instead of using the actual error
360
- from the API response.
370
+ State the root cause and the fix in plain language before applying. This lets the user capture the lesson in persistent instructions or catch a wrong direction before reviewing the diff. No confirmation needed — go straight to fixing.
361
371
 
362
- I'll change it to use `error.message` from props.
372
+ Format:
373
+ ```
374
+ {Root cause — what the code does wrong and why, 1-2 sentences}
363
375
 
364
- Apply this fix?
365
- ```
366
- - Present options: [Yes / Let me see the code first / Different approach]
367
- - If approved: Go to `apply_fix`
376
+ Fix: {what the fix changes, 1-2 sentences}
377
+ ```
368
378
 
369
- **If cause found BUT fix is complex (multiple files, architectural):**
370
- - Report finding
379
+ **If fix is simple (single file, straightforward change):**
380
+ - Go to `apply_fix` immediately
381
+
382
+ **If fix is complex (multiple files, architectural):**
371
383
  - Spawn ms-verify-fixer subagent (go to `escalate_to_fixer`)
372
384
 
373
385
  **If cause NOT found after 2-3 checks:**
@@ -440,6 +452,10 @@ You are a Mindsystem verify-fixer. Investigate this issue, find the root cause,
440
452
 
441
453
  {lightweight_investigation_results}
442
454
 
455
+ ## Knowledge Context
456
+
457
+ {loaded_knowledge_content or "No knowledge files loaded for this session."}
458
+
443
459
  ## Your task
444
460
 
445
461
  1. Investigate to find root cause
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindsystem-cc",
3
- "version": "4.2.1",
3
+ "version": "4.3.1",
4
4
  "description": "The engineer's meta-prompting system for Claude Code.",
5
5
  "bin": {
6
6
  "mindsystem-cc": "bin/install.js"
@@ -1198,6 +1198,7 @@ def cmd_doctor_scan(args: argparse.Namespace) -> None:
1198
1198
 
1199
1199
  # ---- CHECK 11: Browser Verification ----
1200
1200
  print("=== Browser Verification ===")
1201
+ is_web, web_signal = False, "not checked"
1201
1202
  bv_enabled = True
1202
1203
  bv_config = config.get("browser_verification", {})
1203
1204
  if isinstance(bv_config, dict):
@@ -1233,6 +1234,28 @@ def cmd_doctor_scan(args: argparse.Namespace) -> None:
1233
1234
  record("PASS", "Browser Verification")
1234
1235
  print()
1235
1236
 
1237
+ # ---- CHECK 12: Screenshot Optimization ----
1238
+ print("=== Screenshot Optimization ===")
1239
+ if not bv_enabled:
1240
+ print("Status: SKIP")
1241
+ print("Browser verification disabled")
1242
+ record("SKIP", "Screenshot Optimization")
1243
+ elif not is_web:
1244
+ print("Status: SKIP")
1245
+ print(f"Not a web project ({web_signal})")
1246
+ record("SKIP", "Screenshot Optimization")
1247
+ else:
1248
+ if shutil.which("cwebp"):
1249
+ print("Status: PASS")
1250
+ print("cwebp available — screenshots will be converted to WebP")
1251
+ record("PASS", "Screenshot Optimization")
1252
+ else:
1253
+ print("Status: WARN")
1254
+ print("cwebp not found — browser screenshots will remain as PNG (larger files)")
1255
+ print("Install: brew install webp | apt install webp | choco install webp")
1256
+ record("WARN", "Screenshot Optimization")
1257
+ print()
1258
+
1236
1259
  # ---- SUMMARY ----
1237
1260
  total = pass_count + warn_count + fail_count + skip_count
1238
1261
  print("=== Summary ===")
@@ -3126,7 +3149,7 @@ def _load_uat(args_phase: str) -> tuple[Path, "UATFile"]:
3126
3149
  if phase_dir is None:
3127
3150
  print(f"Error: Phase directory not found for {phase}", file=sys.stderr)
3128
3151
  sys.exit(1)
3129
- uat_path = phase_dir / f"{phase_dir.name}-UAT.md"
3152
+ uat_path = phase_dir / f"{phase}-UAT.md"
3130
3153
  if not uat_path.is_file():
3131
3154
  print(f"Error: UAT file not found: {uat_path}", file=sys.stderr)
3132
3155
  sys.exit(1)
@@ -3166,7 +3189,7 @@ def cmd_uat_init(args: argparse.Namespace) -> None:
3166
3189
  phase_name = phase_dir.name
3167
3190
  uat = UATFile.from_init_json(data, phase_name)
3168
3191
 
3169
- out_path = phase_dir / f"{phase_name}-UAT.md"
3192
+ out_path = phase_dir / f"{phase}-UAT.md"
3170
3193
  out_path.write_text(uat.serialize(), encoding="utf-8")
3171
3194
 
3172
3195
  n_tests = len(uat.tests)
@@ -3196,7 +3219,7 @@ def cmd_uat_update(args: argparse.Namespace) -> None:
3196
3219
  print(f"Error: Phase directory not found for {phase}", file=sys.stderr)
3197
3220
  sys.exit(1)
3198
3221
 
3199
- uat_path = phase_dir / f"{phase_dir.name}-UAT.md"
3222
+ uat_path = phase_dir / f"{phase}-UAT.md"
3200
3223
  if not uat_path.is_file():
3201
3224
  print(f"Error: UAT file not found: {uat_path}", file=sys.stderr)
3202
3225
  sys.exit(1)
@@ -3264,7 +3287,7 @@ def cmd_uat_status(args: argparse.Namespace) -> None:
3264
3287
  print(f"Error: Phase directory not found for {phase}", file=sys.stderr)
3265
3288
  sys.exit(1)
3266
3289
 
3267
- uat_path = phase_dir / f"{phase_dir.name}-UAT.md"
3290
+ uat_path = phase_dir / f"{phase}-UAT.md"
3268
3291
  if not uat_path.is_file():
3269
3292
  print(f"Error: UAT file not found: {uat_path}", file=sys.stderr)
3270
3293
  sys.exit(1)