mindsystem-cc 3.21.0 → 3.22.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.
Files changed (66) hide show
  1. package/README.md +4 -12
  2. package/agents/ms-plan-checker.md +30 -30
  3. package/agents/ms-plan-writer.md +1 -1
  4. package/agents/ms-product-researcher.md +4 -2
  5. package/agents/ms-verifier.md +25 -117
  6. package/commands/ms/add-phase.md +3 -4
  7. package/commands/ms/add-todo.md +3 -4
  8. package/commands/ms/adhoc.md +3 -4
  9. package/commands/ms/audit-milestone.md +4 -3
  10. package/commands/ms/complete-milestone.md +2 -2
  11. package/commands/ms/config.md +36 -9
  12. package/commands/ms/create-roadmap.md +3 -4
  13. package/commands/ms/debug.md +3 -4
  14. package/commands/ms/design-phase.md +8 -5
  15. package/commands/ms/discuss-phase.md +2 -2
  16. package/commands/ms/doctor.md +9 -6
  17. package/commands/ms/execute-phase.md +2 -5
  18. package/commands/ms/help.md +2 -2
  19. package/commands/ms/insert-phase.md +3 -4
  20. package/commands/ms/map-codebase.md +1 -2
  21. package/commands/ms/new-milestone.md +1 -3
  22. package/commands/ms/new-project.md +3 -5
  23. package/commands/ms/plan-milestone-gaps.md +3 -4
  24. package/commands/ms/plan-phase.md +2 -3
  25. package/commands/ms/progress.md +1 -0
  26. package/commands/ms/remove-phase.md +3 -4
  27. package/commands/ms/research-phase.md +4 -4
  28. package/commands/ms/research-project.md +9 -16
  29. package/commands/ms/review-design.md +4 -2
  30. package/commands/ms/verify-work.md +6 -8
  31. package/mindsystem/references/verification-patterns.md +0 -37
  32. package/mindsystem/templates/config.json +2 -1
  33. package/mindsystem/templates/roadmap.md +1 -1
  34. package/mindsystem/templates/state.md +2 -2
  35. package/mindsystem/templates/verification-report.md +3 -26
  36. package/mindsystem/workflows/discuss-phase.md +7 -3
  37. package/mindsystem/workflows/execute-phase.md +2 -18
  38. package/mindsystem/workflows/map-codebase.md +6 -12
  39. package/mindsystem/workflows/mockup-generation.md +46 -22
  40. package/mindsystem/workflows/plan-phase.md +12 -5
  41. package/mindsystem/workflows/verify-work.md +96 -69
  42. package/package.json +1 -1
  43. package/scripts/__pycache__/ms-tools.cpython-314.pyc +0 -0
  44. package/scripts/__pycache__/test_ms_tools.cpython-314-pytest-9.0.2.pyc +0 -0
  45. package/scripts/ms-tools.py +751 -6
  46. package/scripts/test_ms_tools.py +786 -0
  47. package/agents/ms-flutter-code-quality.md +0 -169
  48. package/agents/ms-flutter-reviewer.md +0 -211
  49. package/agents/ms-flutter-simplifier.md +0 -79
  50. package/mindsystem/workflows/verify-phase.md +0 -625
  51. package/skills/flutter-code-quality/SKILL.md +0 -143
  52. package/skills/flutter-code-simplification/SKILL.md +0 -102
  53. package/skills/flutter-senior-review/AGENTS.md +0 -869
  54. package/skills/flutter-senior-review/SKILL.md +0 -205
  55. package/skills/flutter-senior-review/principles/dependencies-data-not-callbacks.md +0 -75
  56. package/skills/flutter-senior-review/principles/dependencies-provider-tree.md +0 -85
  57. package/skills/flutter-senior-review/principles/dependencies-temporal-coupling.md +0 -97
  58. package/skills/flutter-senior-review/principles/pragmatism-consistent-error-handling.md +0 -130
  59. package/skills/flutter-senior-review/principles/pragmatism-speculative-generality.md +0 -91
  60. package/skills/flutter-senior-review/principles/state-data-clumps.md +0 -64
  61. package/skills/flutter-senior-review/principles/state-invalid-states.md +0 -53
  62. package/skills/flutter-senior-review/principles/state-single-source-of-truth.md +0 -68
  63. package/skills/flutter-senior-review/principles/state-type-hierarchies.md +0 -75
  64. package/skills/flutter-senior-review/principles/structure-composition-over-config.md +0 -105
  65. package/skills/flutter-senior-review/principles/structure-shared-visual-patterns.md +0 -107
  66. package/skills/flutter-senior-review/principles/structure-wrapper-pattern.md +0 -90
package/README.md CHANGED
@@ -272,7 +272,7 @@ Replace `<N>` with the phase number you're working on.
272
272
  - `.planning/milestones/mvp/` — archived milestone (ROADMAP, REQUIREMENTS, DECISIONS, research)
273
273
  - Active docs stay lean; full detail lives in the version folder
274
274
 
275
- **Tip:** Milestone review can be **report-only** (e.g., Flutter structural review) so you stay in control. Create a quality phase, or accept tech debt explicitly — your call.
275
+ **Tip:** Milestone review can be **report-only** so you stay in control. Create a quality phase, or accept tech debt explicitly — your call.
276
276
 
277
277
  ---
278
278
 
@@ -312,17 +312,9 @@ After `/ms:execute-phase` (and optionally `/ms:audit-milestone`), Mindsystem run
312
312
 
313
313
  | Value | What it does |
314
314
  | ------------------------- | -------------------------------------------------------------- |
315
- | `null` | Use the default (stack-aware when available) |
316
- | `"ms-code-simplifier"` | Generic reviewer — improves clarity and maintainability |
317
- | `"ms-flutter-simplifier"` | Flutter/Dart-specific strong widget and Riverpod conventions |
318
- | `"ms-flutter-reviewer"` | Flutter structural analysis (report-only, no code changes) |
319
- | `"skip"` | Disable review for that level |
320
-
321
- **Flutter-specific tools (built-in):**
322
-
323
- - **`ms-flutter-simplifier`** — pragmatic refactors that preserve behavior
324
- - **`ms-flutter-reviewer`** — milestone-level structural audit with actionable report (you control the fixes)
325
- - **`flutter-senior-review` skill** — domain principles that raise review quality beyond generic lint advice
315
+ | `null` | No reviewer (default) |
316
+ | `"ms-code-simplifier"` | Generic reviewer — improves clarity and maintainability |
317
+ | `"skip"` | Disable review for that level |
326
318
 
327
319
  ---
328
320
 
@@ -186,34 +186,38 @@ issue:
186
186
  **Question:** Will plans complete within context budget?
187
187
 
188
188
  **Process:**
189
- 1. Count `### ` subsections (changes) per plan
190
- 2. Count files from `**Files:**` lines per plan
191
- 3. Check against thresholds
189
+ 1. For each `### ` subsection (change), classify its weight:
190
+ - **Light (5%):** Config changes, localization keys, renaming, simple field additions, pattern-copying with parameter substitution
191
+ - **Medium (10%):** CRUD endpoints, pattern-following implementations, widget extraction, single-file refactoring
192
+ - **Heavy (20%):** Complex business logic, novel state management, architecture changes, multi-file integrations
193
+ 2. Sum estimated budget per plan (target: 25-45%)
194
+ 3. Check structural signals
192
195
 
193
- **Thresholds:**
194
- | Metric | Target | Warning | Blocker |
195
- |--------|--------|---------|---------|
196
- | Changes/plan | 2-3 | 4 | 5+ |
197
- | Files/plan | 5-8 | 10 | 15+ |
198
- | Total context | ~50% | ~70% | 80%+ |
196
+ **Thresholds (warning-level only — scope never produces blockers):**
197
+ | Metric | Target | Warning |
198
+ |--------|--------|---------|
199
+ | Estimated budget/plan | 25-45% | >50% |
200
+ | Files per single change | 1-3 | 8+ |
201
+
202
+ **Raw change count is NOT a threshold.** A plan with 8 lightweight, formulaic changes (~40% budget) is healthier than a plan with 3 heavy, novel changes (~60%). Assess complexity and budget, not count.
199
203
 
200
204
  **Red flags:**
201
- - Plan with 5+ changes (quality degrades)
202
- - Plan with 15+ file modifications
203
- - Single change with 10+ files
204
- - Complex work (auth, payments) crammed into one plan
205
+ - Estimated plan budget >50% (quality will degrade)
206
+ - Single change with 10+ file modifications
207
+ - Multiple unrelated subsystems crammed into one plan
208
+ - Novel/complex work appearing late in a long change sequence (context fatigue risks lower attention)
205
209
 
206
210
  **Example issue:**
207
211
  ```yaml
208
212
  issue:
209
213
  dimension: scope_sanity
210
214
  severity: warning
211
- description: "Plan 01 has 5 changes - split recommended"
215
+ description: "Plan 01 estimated at ~55% budget - 3 heavy changes with novel state management"
212
216
  plan: "01"
213
217
  metrics:
214
- changes: 5
215
- files: 12
216
- fix_hint: "Split into 2 plans: foundation (01) and integration (02)"
218
+ estimated_budget: "55%"
219
+ heavy_changes: 3
220
+ fix_hint: "Move change 3 (complex state machine) to a separate plan"
217
221
  ```
218
222
 
219
223
  ## Dimension 6: Verification Derivation
@@ -301,7 +305,7 @@ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE_AR
301
305
  ls "$PHASE_DIR"/*-PLAN.md 2>/dev/null
302
306
 
303
307
  # Get phase goal from ROADMAP
304
- grep -A 10 "Phase ${PHASE_NUM}" .planning/ROADMAP.md | head -15
308
+ grep -A 10 "Phase ${PADDED_PHASE}" .planning/ROADMAP.md | head -15
305
309
 
306
310
  # Get phase brief if exists
307
311
  ls "$PHASE_DIR"/*-BRIEF.md 2>/dev/null
@@ -342,12 +346,12 @@ Run Dimensions 1-7 from `<verification_dimensions>` against the loaded plans. Bu
342
346
  - Missing requirement coverage
343
347
  - Missing required change fields
344
348
  - Circular dependencies or file conflicts in same wave
345
- - Scope > 5 changes per plan
346
349
 
347
350
  **warning** - Should fix, execution may work
348
- - Scope 4 tasks (borderline)
351
+ - Estimated plan budget >50%
349
352
  - Implementation-focused truths
350
353
  - Minor wiring missing
354
+ - Novel/complex changes appearing late in change sequence
351
355
 
352
356
  **info** - Suggestions for improvement
353
357
  - Could split for better parallelization
@@ -369,8 +373,8 @@ issues:
369
373
  - plan: "01"
370
374
  dimension: "scope_sanity"
371
375
  severity: "warning"
372
- description: "Plan has 4 changes - consider splitting"
373
- fix_hint: "Split into foundation + integration plans"
376
+ description: "Plan estimated at ~50% budget - heavy changes may cause degradation"
377
+ fix_hint: "Consider splitting complex changes into separate plan"
374
378
 
375
379
  - plan: null
376
380
  dimension: "requirement_coverage"
@@ -462,14 +466,10 @@ issues:
462
466
 
463
467
  <anti_patterns>
464
468
 
465
- **DO NOT check code existence.** That's ms-verifier's job after execution. You verify plans, not codebase.
466
-
467
- **DO NOT run the application.** This is static plan analysis. No `npm start`, no `curl` to running server.
469
+ **DO NOT check the codebase.** You verify plans describe what to build — checking code existence is ms-verifier's job after execution. No `npm start`, no `curl`, no runtime verification.
468
470
 
469
471
  **DO NOT accept vague changes.** "Implement auth" is not specific enough. Changes need concrete files, implementation details, verification.
470
472
 
471
- **DO NOT verify implementation details.** Check that plans describe what to build, not that code exists.
472
-
473
473
  **DO NOT trust change titles alone.** Read the implementation details, Files lines, verification entries. A well-named change can be empty.
474
474
 
475
475
  </anti_patterns>
@@ -478,11 +478,11 @@ issues:
478
478
 
479
479
  Plan verification complete when:
480
480
 
481
- - [ ] Key links checked (wiring planned between artifacts, not just creation)
482
- - [ ] Scope assessed per plan (changes, files within thresholds)
481
+ - [ ] Context compliance checked (if CONTEXT.md: locked decisions implemented, deferred ideas excluded)
483
482
  - [ ] Must-Haves are user-observable truths, not implementation details
483
+ - [ ] Key links checked (wiring planned between artifacts, not just creation)
484
484
  - [ ] EXECUTION-ORDER.md validated (no missing plans, no file conflicts in same wave)
485
- - [ ] Context compliance checked (if CONTEXT.md: locked decisions implemented, deferred ideas excluded)
485
+ - [ ] Scope assessed per plan (estimated budget within thresholds)
486
486
  - [ ] Structured issues returned to orchestrator
487
487
 
488
488
  </success_criteria>
@@ -91,7 +91,7 @@ The orchestrator provides structured XML:
91
91
  </proposed_grouping>
92
92
 
93
93
  <confirmed_skills>
94
- flutter-code-quality, flutter-code-simplification
94
+ project-skill-a, project-skill-b
95
95
  </confirmed_skills>
96
96
 
97
97
  <learnings>
@@ -7,7 +7,7 @@ color: cyan
7
7
  ---
8
8
 
9
9
  <input>
10
- You receive: `<product_context>` (Who It's For, Core Value, How It's Different), `<phase_requirements>` (phase goal + mapped requirements), `<research_focus>` (specific product questions to investigate).
10
+ You receive: `<current_date>` (YYYY-MM), `<product_context>` (Who It's For, Core Value, How It's Different), `<phase_requirements>` (phase goal + mapped requirements), `<research_focus>` (specific product questions to investigate).
11
11
  </input>
12
12
 
13
13
  <role>
@@ -31,7 +31,9 @@ You are a Mindsystem product researcher. Deliver prescriptive, audience-grounded
31
31
  | Industry best practices | WebSearch | Current standards |
32
32
  | Product comparisons | WebSearch | Side-by-side analysis |
33
33
 
34
- **Include current year** in search queries for freshness.
34
+ **Search freshness:** Use `<current_date>` to keep results current, but apply year strings selectively:
35
+ - **Add year** to trend/best-practice queries where listicle freshness matters: `"payment terminal UX best practices 2026"`
36
+ - **Omit year** from product-specific queries where it narrows results unhelpfully: `"Square Terminal cashier workflow features"` (Square's docs don't mention the year)
35
37
 
36
38
  **Budget:** 5-8 searches max. Prioritize breadth over depth — the user needs a landscape, not a dissertation.
37
39
  </tool_strategy>
@@ -19,13 +19,7 @@ Your job: Goal-backward verification. Start from what the phase SHOULD deliver,
19
19
 
20
20
  A task "create chat component" can be marked complete when the component is a placeholder. The task was done — a file was created — but the goal "working chat interface" was not achieved.
21
21
 
22
- Goal-backward verification starts from the outcome and works backwards:
23
-
24
- 1. What must be TRUE for the goal to be achieved?
25
- 2. What must EXIST for those truths to hold?
26
- 3. What must be WIRED for those artifacts to function?
27
-
28
- Then verify each level against the actual codebase.
22
+ Goal-backward verification starts from the outcome and works backwards — verify each level against the actual codebase.
29
23
  </core_principle>
30
24
 
31
25
  <verification_process>
@@ -205,7 +199,7 @@ Identify the project's tech stack from file extensions and project structure. Fo
205
199
  If REQUIREMENTS.md exists and has requirements mapped to this phase:
206
200
 
207
201
  ```bash
208
- grep -E "Phase ${PHASE_NUM}" .planning/REQUIREMENTS.md 2>/dev/null
202
+ grep -E "^| ${PHASE_NUM}" .planning/REQUIREMENTS.md 2>/dev/null
209
203
  ```
210
204
 
211
205
  For each requirement:
@@ -226,7 +220,7 @@ Identify files modified in this phase from PLAN.md `**Files:**` lines or git his
226
220
 
227
221
  ```bash
228
222
  # Extract files from PLAN.md (trustworthy source)
229
- grep "^\*\*Files:\*\*" "$PHASE_DIR"/*-PLAN.md | sed 's/.*`\([^`]*\)`.*/\1/' | sort -u
223
+ grep -oE '`[^`]+`' "$PHASE_DIR"/*-PLAN.md | grep -v "PLAN.md" | tr -d '`' | sort -u
230
224
  ```
231
225
 
232
226
  Scan each file for anti-patterns: `TODO/FIXME/XXX/HACK` comments, placeholder content (`coming soon`, `will be here`), empty implementations (`return null`, `return {}`, `=> {}`), console.log-only handlers.
@@ -237,44 +231,16 @@ Categorize findings:
237
231
  - ⚠️ Warning: Indicates incomplete (TODO comments, console.log)
238
232
  - ℹ️ Info: Notable but not problematic
239
233
 
240
- ## Step 8: Identify Human Verification Needs
241
-
242
- Some things can't be verified programmatically:
243
-
244
- **Always needs human:**
245
-
246
- - Visual appearance (does it look right?)
247
- - User flow completion (can you do the full task?)
248
- - Real-time behavior (WebSocket, SSE updates)
249
- - External service integration (payments, email)
250
- - Performance feel (does it feel fast?)
251
- - Error message clarity
252
-
253
- **Needs human if uncertain:**
254
-
255
- - Complex wiring that grep can't trace
256
- - Dynamic behavior depending on state
257
- - Edge cases and error states
258
-
259
- **Format for human verification:**
260
-
261
- ```markdown
262
- ### 1. {Test Name}
263
-
264
- **Test:** {What to do}
265
- **Expected:** {What should happen}
266
- **Why human:** {Why can't verify programmatically}
267
- ```
268
-
269
- ## Step 9: Determine Overall Status
234
+ ## Step 8: Determine Overall Status
270
235
 
271
236
  **Status: passed**
272
237
 
273
- - All truths VERIFIED
238
+ - All truths VERIFIED or UNCERTAIN
274
239
  - All artifacts pass level 1-3
275
240
  - All key links WIRED
276
241
  - No blocker anti-patterns
277
- - (Human verification items are OK — will be prompted)
242
+
243
+ UNCERTAIN truths count toward passed — they are structurally present but need functional confirmation through UAT.
278
244
 
279
245
  **Status: gaps_found**
280
246
 
@@ -283,64 +249,19 @@ Some things can't be verified programmatically:
283
249
  - OR one or more key links NOT_WIRED
284
250
  - OR blocker anti-patterns found
285
251
 
286
- **Status: human_needed**
287
-
288
- - All automated checks pass
289
- - BUT items flagged for human verification
290
- - Can't determine goal achievement without human
291
-
292
252
  **Calculate score:**
293
253
 
294
254
  ```
295
255
  score = (verified_truths / total_truths)
296
256
  ```
297
257
 
298
- ## Step 10: Structure Gap Output (If Gaps Found)
258
+ ## Step 9: Structure Gap Output (If Gaps Found)
299
259
 
300
- When gaps are found, structure them for consumption by `/ms:plan-phase --gaps`.
260
+ When gaps are found, structure them in YAML frontmatter for consumption by `/ms:plan-phase --gaps`. Use the `gaps:` format shown in the VERIFICATION.md template below.
301
261
 
302
- **Output structured gaps in YAML frontmatter:**
262
+ **Gap fields:** `truth` (observable truth that failed), `status` (failed | partial), `reason` (why it failed), `artifacts` (files with issues), `missing` (specific things to add/fix).
303
263
 
304
- ```yaml
305
- ---
306
- phase: XX-name
307
- verified: YYYY-MM-DDTHH:MM:SSZ
308
- status: gaps_found
309
- score: N/M must-haves verified
310
- gaps:
311
- - truth: "User can see existing messages"
312
- status: failed
313
- reason: "Chat.tsx exists but doesn't fetch from API"
314
- artifacts:
315
- - path: "src/components/Chat.tsx"
316
- issue: "No useEffect with fetch call"
317
- missing:
318
- - "API call in useEffect to /api/chat"
319
- - "State for storing fetched messages"
320
- - "Render messages array in JSX"
321
- - truth: "User can send a message"
322
- status: failed
323
- reason: "Form exists but onSubmit is stub"
324
- artifacts:
325
- - path: "src/components/Chat.tsx"
326
- issue: "onSubmit only calls preventDefault()"
327
- missing:
328
- - "POST request to /api/chat"
329
- - "Add new message to state after success"
330
- ---
331
- ```
332
-
333
- **Gap structure:**
334
-
335
- - `truth`: The observable truth that failed verification
336
- - `status`: failed | partial
337
- - `reason`: Brief explanation of why it failed
338
- - `artifacts`: Which files have issues and what's wrong
339
- - `missing`: Specific things that need to be added/fixed
340
-
341
- The planner (`/ms:plan-phase --gaps`) reads this gap analysis and creates appropriate plans.
342
-
343
- **Group related gaps by concern** when possible — if multiple truths fail because of the same root cause (e.g., "Chat component is a stub"), note this in the reason to help the planner create focused plans.
264
+ **Group related gaps by concern** when possible — if multiple truths fail because of the same root cause, note this in the reason to help the planner create focused plans.
344
265
 
345
266
  </verification_process>
346
267
 
@@ -354,8 +275,9 @@ Create `.planning/phases/{phase_dir}/{phase}-VERIFICATION.md` with:
354
275
  ---
355
276
  phase: XX-name
356
277
  verified: YYYY-MM-DDTHH:MM:SSZ
357
- status: passed | gaps_found | human_needed
278
+ status: passed | gaps_found
358
279
  score: N/M must-haves verified
280
+ uncertain: N # Count of UNCERTAIN truths + NEEDS HUMAN requirements (0 if none)
359
281
  re_verification: # Only include if previous VERIFICATION.md existed
360
282
  previous_status: gaps_found
361
283
  previous_score: 2/5
@@ -373,10 +295,6 @@ gaps: # Only include if status: gaps_found
373
295
  missing:
374
296
  - "Specific thing to add/fix"
375
297
  - "Another specific thing"
376
- human_verification: # Only include if status: human_needed
377
- - test: "What to do"
378
- expected: "What should happen"
379
- why_human: "Why can't verify programmatically"
380
298
  ---
381
299
 
382
300
  # Phase {X}: {Name} Verification Report
@@ -418,10 +336,6 @@ human_verification: # Only include if status: human_needed
418
336
  | File | Line | Pattern | Severity | Impact |
419
337
  | ---- | ---- | ------- | -------- | ------ |
420
338
 
421
- ### Human Verification Required
422
-
423
- {Items needing human testing — detailed format for user}
424
-
425
339
  ### Gaps Summary
426
340
 
427
341
  {Narrative summary of what's missing and why}
@@ -441,13 +355,23 @@ Return with:
441
355
  ```markdown
442
356
  ## Verification Complete
443
357
 
444
- **Status:** {passed | gaps_found | human_needed}
358
+ **Status:** {passed | gaps_found}
445
359
  **Score:** {N}/{M} must-haves verified
446
360
  **Report:** .planning/phases/{phase_dir}/{phase}-VERIFICATION.md
447
361
 
448
- {If passed:}
362
+ {If passed AND uncertain == 0:}
449
363
  All must-haves verified. Phase goal achieved. Ready to proceed.
450
364
 
365
+ {If passed AND uncertain > 0:}
366
+ All must-haves verified. Phase goal achieved.
367
+
368
+ ### Items Not Verified Programmatically
369
+
370
+ {N} items could not be confirmed by structural checks alone:
371
+ 1. **{Truth/Requirement}** — {why uncertain}
372
+
373
+ Consider `/ms:verify-work {phase}` to validate these through UAT.
374
+
451
375
  {If gaps_found:}
452
376
 
453
377
  ### Gaps Found
@@ -460,19 +384,6 @@ All must-haves verified. Phase goal achieved. Ready to proceed.
460
384
  - Missing: {what needs to be added}
461
385
 
462
386
  Structured gaps in VERIFICATION.md frontmatter for `/ms:plan-phase --gaps`.
463
-
464
- {If human_needed:}
465
-
466
- ### Human Verification Required
467
-
468
- {N} items need human testing:
469
-
470
- 1. **{Test name}** — {what to do}
471
- - Expected: {what should happen}
472
- 2. **{Test name}** — {what to do}
473
- - Expected: {what should happen}
474
-
475
- Automated checks passed. Awaiting human verification.
476
387
  ```
477
388
 
478
389
  </output>
@@ -487,8 +398,6 @@ Automated checks passed. Awaiting human verification.
487
398
 
488
399
  **Structure gaps in YAML frontmatter.** The planner (`/ms:plan-phase --gaps`) creates plans from your analysis.
489
400
 
490
- **DO flag for human verification when uncertain.** If you can't verify programmatically (visual, real-time, external service), say so explicitly.
491
-
492
401
  **DO keep verification fast.** Use grep/file checks, not running the app. Goal is structural verification, not functional testing.
493
402
 
494
403
  **DO NOT commit.** Create VERIFICATION.md but leave committing to the orchestrator.
@@ -501,7 +410,6 @@ Automated checks passed. Awaiting human verification.
501
410
  - [ ] Key links verified — not just artifact existence; this is where stubs hide
502
411
  - [ ] Artifacts checked at all three levels (exists → substantive → wired)
503
412
  - [ ] SUMMARY.md claims verified against actual code, not trusted
504
- - [ ] Human verification items identified for what can't be checked programmatically
505
413
  - [ ] Re-verification: focus on previously-failed items, regression-check passed items
506
414
  - [ ] Results returned to orchestrator — NOT committed
507
415
  </success_criteria>
@@ -197,10 +197,9 @@ After the "Next Up" section, add:
197
197
  </step>
198
198
 
199
199
  <step name="update_last_command">
200
- Update `.planning/STATE.md` Last Command field:
201
- - Find line starting with `Last Command:` in Current Position section
202
- - Replace with: `Last Command: ms:add-phase $ARGUMENTS | YYYY-MM-DD HH:MM`
203
- - If line doesn't exist, add it after `Status:` line
200
+ ```bash
201
+ ms-tools set-last-command "ms:add-phase $ARGUMENTS"
202
+ ```
204
203
  </step>
205
204
 
206
205
  </process>
@@ -190,10 +190,9 @@ Would you like to:
190
190
  </step>
191
191
 
192
192
  <step name="update_last_command">
193
- Update `.planning/STATE.md` Last Command field:
194
- - Find line starting with `Last Command:` in Current Position section
195
- - Replace with: `Last Command: ms:add-todo $ARGUMENTS | YYYY-MM-DD HH:MM`
196
- - If line doesn't exist, add it after `Status:` line
193
+ ```bash
194
+ ms-tools set-last-command "ms:add-todo $ARGUMENTS"
195
+ ```
197
196
  </step>
198
197
 
199
198
  </process>
@@ -79,10 +79,9 @@ Report what was done, show commit hash, file paths, and patch file path.
79
79
  </step>
80
80
 
81
81
  <step name="update_last_command">
82
- Update `.planning/STATE.md` Last Command field:
83
- - Find line starting with `Last Command:` in Current Position section
84
- - Replace with: `Last Command: ms:adhoc $ARGUMENTS | YYYY-MM-DD HH:MM`
85
- - If line doesn't exist, add it after `Status:` line
82
+ ```bash
83
+ ms-tools set-last-command "ms:adhoc $ARGUMENTS"
84
+ ```
86
85
  </step>
87
86
 
88
87
  </process>
@@ -199,7 +199,8 @@ Report: "Milestone code review skipped (config: skip)"
199
199
  Proceed to next steps.
200
200
 
201
201
  **If CODE_REVIEW = empty/null:**
202
- Use default: `CODE_REVIEW="ms-flutter-reviewer"`
202
+ Report: "No milestone reviewer configured. Run `/ms:config` to set one."
203
+ Skip code review step (proceed to next steps).
203
204
 
204
205
  ### Step 8.1: Get Changed Files
205
206
 
@@ -223,7 +224,7 @@ AGENT_MODE=$(grep -A10 '^---' ~/.claude/agents/${CODE_REVIEW}.md | grep 'mode:'
223
224
 
224
225
  ### Path A: Analysis-Only Reviewers (mode: analyze-only)
225
226
 
226
- For agents with `mode: analyze-only` (e.g., `ms-flutter-reviewer`):
227
+ For agents with `mode: analyze-only` (e.g., a report-only reviewer):
227
228
 
228
229
  **A1. Spawn reviewer with read-only tools:**
229
230
 
@@ -341,7 +342,7 @@ Findings are already tracked in `.planning/TECH-DEBT.md` via Step 8.5. Continue
341
342
 
342
343
  ### Path B: Simplifier Agents (default)
343
344
 
344
- For agents without `mode: analyze-only` (e.g., `ms-code-simplifier`, `ms-flutter-code-quality`):
345
+ For agents without `mode: analyze-only` (e.g., `ms-code-simplifier`):
345
346
 
346
347
  **B1. Spawn code review agent:**
347
348
 
@@ -71,6 +71,7 @@ Output: Milestone archived (roadmap + requirements), PROJECT.md evolved.
71
71
  1. **Verify readiness and gather stats:**
72
72
 
73
73
  ```bash
74
+ # ms-tools is on PATH — invoke directly, not as a script path
74
75
  ms-tools gather-milestone-stats $PHASE_START $PHASE_END
75
76
  ```
76
77
 
@@ -130,8 +131,7 @@ Output: Milestone archived (roadmap + requirements), PROJECT.md evolved.
130
131
  11. **Offer next steps:**
131
132
  - `/ms:new-milestone` — discover goals and update PROJECT.md
132
133
 
133
- 12. **Update last command:**
134
- - Format: `Last Command: ms:complete-milestone $ARGUMENTS | YYYY-MM-DD HH:MM`
134
+ 12. **Update last command:** `ms-tools set-last-command "ms:complete-milestone $ARGUMENTS"`
135
135
 
136
136
  </process>
137
137
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ms:config
3
- description: Configure Mindsystem preferences — code reviewers, gitignore, git remote
3
+ description: Configure Mindsystem preferences — code reviewers, mockups, gitignore, git remote
4
4
  allowed-tools:
5
5
  - Read
6
6
  - Write
@@ -12,7 +12,7 @@ allowed-tools:
12
12
 
13
13
  Configure Mindsystem preferences for the current project.
14
14
 
15
- Manages code reviewer agents, .gitignore patterns for `.planning/` artifacts, and git remote setup. Run anytime to reconfigure — idempotent.
15
+ Manages code reviewer agents, mockup preferences, .gitignore patterns for `.planning/` artifacts, and git remote setup. Run anytime to reconfigure — idempotent.
16
16
 
17
17
  </objective>
18
18
 
@@ -67,18 +67,13 @@ If "Create with gh CLI":
67
67
 
68
68
  Show current code_review values from config.json (if loaded).
69
69
 
70
- **If PROJECT.md or STACK.md exists:** Detect tech stack and suggest appropriate reviewers:
71
-
72
- - **Flutter/Dart:** adhoc=`ms-flutter-code-quality`, phase=`ms-flutter-code-quality`, milestone=`ms-flutter-reviewer`
73
- - **All others:** adhoc=`ms-code-simplifier`, phase=`ms-code-simplifier`, milestone=null
74
-
75
- **If no PROJECT.md or STACK.md:** Warn: "No PROJECT.md found — can't suggest reviewers based on tech stack. Run `/ms:new-project` first, or pick manually."
70
+ **Default reviewers:** adhoc=`ms-code-simplifier`, phase=`ms-code-simplifier`, milestone=null
76
71
 
77
72
  Use AskUserQuestion:
78
73
  - header: "Code review"
79
74
  - question: "Which code reviewer configuration do you want?"
80
75
  - options:
81
- - "[Suggested based on stack]" — e.g., "Flutter reviewers (ms-flutter-code-quality)" (Recommended)
76
+ - "Default (ms-code-simplifier)" — Generic reviewer for adhoc and phase tiers (Recommended)
82
77
  - "Skip code review" — Disable review for all tiers
83
78
  - "Custom" — I'll specify reviewers manually
84
79
 
@@ -113,6 +108,36 @@ If no selections: skip gitignore changes.
113
108
 
114
109
  </step>
115
110
 
111
+ <step name="mockup_preferences">
112
+
113
+ Read current value:
114
+
115
+ ```bash
116
+ CURRENT=$(cat .planning/config.json 2>/dev/null | jq -r '.open_mockups // "auto"')
117
+ echo "Current open_mockups: $CURRENT"
118
+ ```
119
+
120
+ Use AskUserQuestion:
121
+ - header: "Mockups"
122
+ - question: "How should mockup comparisons open after generation?"
123
+ - options:
124
+ - "Auto-open (Recommended)" — Open comparison.html in browser automatically
125
+ - "Ask first" — Prompt before opening
126
+ - "Don't open" — Display path only, never auto-open
127
+
128
+ Map selection to config value:
129
+ - "Auto-open" → `"auto"`
130
+ - "Ask first" → `"ask"`
131
+ - "Don't open" → `"off"`
132
+
133
+ Update config.json with selected value via jq:
134
+
135
+ ```bash
136
+ jq --arg v "$VALUE" '.open_mockups = $v' .planning/config.json > .planning/config.tmp && mv .planning/config.tmp .planning/config.json
137
+ ```
138
+
139
+ </step>
140
+
116
141
  <step name="validation_summary">
117
142
 
118
143
  Show final config state:
@@ -121,6 +146,7 @@ Show final config state:
121
146
  Configuration updated:
122
147
 
123
148
  - Code reviewers: [adhoc / phase / milestone values]
149
+ - Mockup open: [auto / ask / off]
124
150
  - Gitignore: [patterns added, or "no changes"]
125
151
  - Git remote: [remote URL, or "none configured"]
126
152
  ```
@@ -198,5 +224,6 @@ Present next steps:
198
224
  - [ ] Git remote offered (if missing)
199
225
  - [ ] Validation summary displayed
200
226
  - [ ] Config.json code_review values set (or preserved if skipped)
227
+ - [ ] Config.json open_mockups value set (or preserved if skipped)
201
228
 
202
229
  </success_criteria>
@@ -323,10 +323,9 @@ Requirements and roadmap created:
323
323
  </step>
324
324
 
325
325
  <step name="update_last_command">
326
- Update `.planning/STATE.md` Last Command field:
327
- - Find line starting with `Last Command:` in Current Position section
328
- - Replace with: `Last Command: ms:create-roadmap | YYYY-MM-DD HH:MM`
329
- - If line doesn't exist, add it after `Status:` line
326
+ ```bash
327
+ ms-tools set-last-command "ms:create-roadmap"
328
+ ```
330
329
  </step>
331
330
 
332
331
  </process>
@@ -140,10 +140,9 @@ Task(
140
140
 
141
141
  ## 6. Update Last Command
142
142
 
143
- Update `.planning/STATE.md` Last Command field:
144
- - Find line starting with `Last Command:` in Current Position section
145
- - Replace with: `Last Command: ms:debug $ARGUMENTS | YYYY-MM-DD HH:MM`
146
- - If line doesn't exist, add it after `Status:` line
143
+ ```bash
144
+ ms-tools set-last-command "ms:debug $ARGUMENTS"
145
+ ```
147
146
 
148
147
  </process>
149
148