maxsimcli 4.12.0 → 4.13.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/dist/assets/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [4.12.0](https://github.com/maystudios/maxsimcli/compare/v4.11.0...v4.12.0) (2026-03-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **workflows:** rewrite plan workflows for GitHub-first artifact storage and stage detection ([289fc7e](https://github.com/maystudios/maxsimcli/commit/289fc7e4fbc583e2b182d4a73ebdfc0d85123d2b))
|
|
7
|
+
|
|
1
8
|
# [4.11.0](https://github.com/maystudios/maxsimcli/compare/v4.10.0...v4.11.0) (2026-03-11)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Auto-detect project state through
|
|
2
|
+
Auto-detect project state through live GitHub queries, surface problems proactively, and dispatch to the appropriate MAXSIM command. Uses the Show + Act pattern: display detection reasoning first, then act immediately.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
@@ -30,19 +30,24 @@ PLANNING_EXISTS=$(test -d .planning && echo "true" || echo "false")
|
|
|
30
30
|
|
|
31
31
|
If `.planning/` does not exist, skip all other checks and go directly to the decision tree (Rule 1: No project found).
|
|
32
32
|
|
|
33
|
-
**2. Load project
|
|
33
|
+
**2. Load local project context (always from local files per WIRE-02):**
|
|
34
34
|
```bash
|
|
35
|
-
# State snapshot
|
|
35
|
+
# State snapshot (local)
|
|
36
36
|
STATE=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs state-snapshot 2>/dev/null || echo "{}")
|
|
37
|
-
|
|
38
|
-
# Roadmap analysis
|
|
39
|
-
ROADMAP=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs roadmap analyze 2>/dev/null || echo "{}")
|
|
40
37
|
```
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
- `.planning/
|
|
44
|
-
- `.planning/
|
|
45
|
-
|
|
39
|
+
Read local files for project context:
|
|
40
|
+
- `.planning/STATE.md` — blockers, decisions, session continuity
|
|
41
|
+
- `.planning/ROADMAP.md` — phase structure and phase ordering
|
|
42
|
+
|
|
43
|
+
**3. Live GitHub state (primary source — always-live, no cached state):**
|
|
44
|
+
|
|
45
|
+
Call `mcp_get_all_progress` to get current state of all phases from GitHub. Returns:
|
|
46
|
+
- `phase_number`, `title`, `issue_number`
|
|
47
|
+
- `total_tasks`, `completed_tasks`, `remaining_tasks`
|
|
48
|
+
- `status` (GitHub board column: To Do / In Progress / In Review / Done)
|
|
49
|
+
|
|
50
|
+
Call `mcp_detect_interrupted` to check for any phases that were interrupted mid-execution (e.g., agent was stopped while a task was marked in-flight).
|
|
46
51
|
|
|
47
52
|
**4. Git context:**
|
|
48
53
|
```bash
|
|
@@ -52,20 +57,12 @@ GIT_STATUS=$(git status --porcelain 2>/dev/null | head -20)
|
|
|
52
57
|
# Recent commits
|
|
53
58
|
RECENT_COMMITS=$(git log --oneline -5 2>/dev/null)
|
|
54
59
|
```
|
|
55
|
-
|
|
56
|
-
**5. Phase directory scan:**
|
|
57
|
-
```bash
|
|
58
|
-
# List phase directories and their contents
|
|
59
|
-
ls -1 .planning/phases/ 2>/dev/null
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
For each phase directory, check for PLAN.md, SUMMARY.md, CONTEXT.md, RESEARCH.md files to determine phase state.
|
|
63
60
|
</step>
|
|
64
61
|
|
|
65
62
|
<step name="problem_detection">
|
|
66
63
|
**Phase 2: Problem Detection**
|
|
67
64
|
|
|
68
|
-
Check for problems BEFORE suggesting any action. All problems are blocking
|
|
65
|
+
Check for problems BEFORE suggesting any action. All problems are blocking — no severity tiers.
|
|
69
66
|
|
|
70
67
|
**Check each of these in order:**
|
|
71
68
|
|
|
@@ -78,7 +75,7 @@ If uncommitted changes exist in `.planning/`:
|
|
|
78
75
|
## Problem Detected
|
|
79
76
|
|
|
80
77
|
**Issue:** Uncommitted changes in .planning/ directory
|
|
81
|
-
**Impact:** State drift
|
|
78
|
+
**Impact:** State drift — local planning files may diverge from team or lose work
|
|
82
79
|
**Resolution:** Commit planning changes to preserve state
|
|
83
80
|
|
|
84
81
|
**Files with changes:**
|
|
@@ -110,22 +107,18 @@ Resolve this before continuing. Options:
|
|
|
110
107
|
|
|
111
108
|
Block until user responds.
|
|
112
109
|
|
|
113
|
-
**3. Failed verification**
|
|
114
|
-
Check for
|
|
115
|
-
```bash
|
|
116
|
-
grep -l "FAIL\|status: failed" .planning/phases/*/VERIFICATION.md 2>/dev/null | tail -1
|
|
117
|
-
```
|
|
118
|
-
If found:
|
|
110
|
+
**3. Failed verification on GitHub**
|
|
111
|
+
Check if any phase issue has a verification comment with FAIL status (from live GitHub data via `mcp_get_all_progress` — look for phases stuck in "In Review" with a known failure, or check recent comments via `mcp_get_issue_detail` for the current phase issue):
|
|
119
112
|
```
|
|
120
113
|
## Problem Detected
|
|
121
114
|
|
|
122
115
|
**Issue:** Phase verification failed
|
|
123
|
-
**Phase:** {phase number and name}
|
|
124
|
-
**Impact:** Phase is not verified as complete
|
|
116
|
+
**Phase:** {phase number and name} (GitHub Issue #{issue_number})
|
|
117
|
+
**Impact:** Phase is not verified as complete — may have gaps
|
|
125
118
|
**Resolution:** Re-run verification or fix identified issues
|
|
126
119
|
|
|
127
120
|
Resolve this before continuing. Options:
|
|
128
|
-
1. View verification results
|
|
121
|
+
1. View verification results (check GitHub issue comments)
|
|
129
122
|
2. Re-execute to fix issues
|
|
130
123
|
3. Skip and continue anyway
|
|
131
124
|
```
|
|
@@ -142,6 +135,8 @@ Block until user responds.
|
|
|
142
135
|
|
|
143
136
|
Apply rules in strict precedence order. The FIRST matching rule determines the action.
|
|
144
137
|
|
|
138
|
+
Use live GitHub data from `mcp_get_all_progress` and `mcp_detect_interrupted` (gathered in Phase 1) as the primary source of truth for phase state. Use local ROADMAP.md for phase ordering only.
|
|
139
|
+
|
|
145
140
|
```
|
|
146
141
|
Rule 1: No .planning/ directory?
|
|
147
142
|
-> Action: /maxsim:init
|
|
@@ -151,31 +146,35 @@ Rule 2: Has blockers in STATE.md? (not cleared in problem detection)
|
|
|
151
146
|
-> Action: Surface blocker, suggest resolution
|
|
152
147
|
-> Reasoning: "BLOCKED: {blocker text}"
|
|
153
148
|
|
|
154
|
-
Rule 3:
|
|
155
|
-
->
|
|
149
|
+
Rule 3: Interrupted phase detected (from mcp_detect_interrupted)?
|
|
150
|
+
-> Action: /maxsim:execute {N}
|
|
151
|
+
-> Reasoning: "Phase {N} ({name}) was interrupted. Resuming execution."
|
|
152
|
+
|
|
153
|
+
Rule 4: Phase "In Progress" on GitHub board with incomplete tasks?
|
|
154
|
+
-> Check: mcp_get_all_progress returns a phase with status="In Progress" and remaining_tasks > 0
|
|
156
155
|
-> Action: /maxsim:execute {N}
|
|
157
|
-
-> Reasoning: "Phase {N} ({name}) has {
|
|
156
|
+
-> Reasoning: "Phase {N} ({name}) has {remaining} tasks remaining. Ready to continue."
|
|
158
157
|
|
|
159
|
-
Rule
|
|
160
|
-
-> Check:
|
|
158
|
+
Rule 5: Phase "To Do" on GitHub board (not yet started)?
|
|
159
|
+
-> Check: mcp_get_all_progress returns the next unstarted phase (status="To Do")
|
|
161
160
|
-> Action: /maxsim:plan {N}
|
|
162
161
|
-> Reasoning: "Phase {N} ({name}) needs planning."
|
|
163
162
|
|
|
164
|
-
Sub-check: Does CONTEXT.md exist?
|
|
163
|
+
Sub-check: Does local CONTEXT.md exist?
|
|
165
164
|
-> If yes: "Discussion complete, ready for research + planning."
|
|
166
165
|
-> If no: "Starting from discussion stage."
|
|
167
166
|
|
|
168
|
-
Rule
|
|
169
|
-
-> Check:
|
|
170
|
-
-> Action: /maxsim:
|
|
171
|
-
-> Reasoning: "Phase {N}
|
|
167
|
+
Rule 6: Current phase "In Review" on GitHub board?
|
|
168
|
+
-> Check: mcp_get_all_progress returns a phase with status="In Review"
|
|
169
|
+
-> Action: /maxsim:verify {N}
|
|
170
|
+
-> Reasoning: "Phase {N} ({name}) is awaiting verification."
|
|
172
171
|
|
|
173
|
-
Rule
|
|
174
|
-
-> Check: all phases
|
|
172
|
+
Rule 7: All phases "Done" on GitHub board?
|
|
173
|
+
-> Check: mcp_get_all_progress — all phases have status="Done"
|
|
175
174
|
-> Action: /maxsim:progress
|
|
176
175
|
-> Reasoning: "All phases complete. Milestone ready for review."
|
|
177
176
|
|
|
178
|
-
Rule
|
|
177
|
+
Rule 8: None of the above?
|
|
179
178
|
-> Action: Show interactive menu
|
|
180
179
|
-> Reasoning: "Project state is ambiguous. Here are your options."
|
|
181
180
|
```
|
|
@@ -186,53 +185,55 @@ Rule 7: None of the above?
|
|
|
186
185
|
|
|
187
186
|
Once a rule matches, display detection reasoning FIRST, then act immediately.
|
|
188
187
|
|
|
189
|
-
**Format for auto-dispatch (Rules 1-
|
|
188
|
+
**Format for auto-dispatch (Rules 1-7):**
|
|
190
189
|
|
|
191
190
|
```
|
|
192
191
|
## Detected: {summary of what was found}
|
|
193
192
|
|
|
194
193
|
**Project:** {project name from PROJECT.md, or "New project"}
|
|
195
194
|
**Milestone:** {milestone from ROADMAP.md, or "Not started"}
|
|
196
|
-
**Current phase:** {phase N - name, or "None"}
|
|
197
|
-
**Status:** {
|
|
195
|
+
**Current phase:** {phase N - name, or "None"} (GitHub Issue #{issue_number})
|
|
196
|
+
**GitHub Status:** {board column from live mcp_get_all_progress data}
|
|
197
|
+
**Tasks:** {completed}/{total} complete
|
|
198
198
|
|
|
199
199
|
**Action:** Running /maxsim:{command} {args}...
|
|
200
200
|
```
|
|
201
201
|
|
|
202
202
|
Then immediately dispatch the command using the SlashCommand tool. The user can Ctrl+C if the detection is wrong.
|
|
203
203
|
|
|
204
|
-
**Important:** Show the detection block, then dispatch. Do not ask for confirmation
|
|
204
|
+
**Important:** Show the detection block, then dispatch. Do not ask for confirmation — this is Show + Act, not Show + Ask.
|
|
205
205
|
</step>
|
|
206
206
|
|
|
207
207
|
<step name="interactive_menu">
|
|
208
|
-
**Phase 5: Interactive Menu (Rule
|
|
208
|
+
**Phase 5: Interactive Menu (Rule 8 — no obvious action)**
|
|
209
209
|
|
|
210
|
-
When no clear action is detected, show a contextual menu. The menu items are NOT static
|
|
210
|
+
When no clear action is detected, show a contextual menu. The menu items are NOT static — filter based on what makes sense for the current project state (use live GitHub data from mcp_get_all_progress).
|
|
211
211
|
|
|
212
212
|
```
|
|
213
213
|
## Project Status
|
|
214
214
|
|
|
215
215
|
**Project:** {project name}
|
|
216
216
|
**Milestone:** {milestone}
|
|
217
|
-
**Progress:** {X}/{Y} phases
|
|
217
|
+
**GitHub Progress:** {X}/{Y} phases Done on board
|
|
218
218
|
|
|
219
219
|
What would you like to do?
|
|
220
220
|
|
|
221
|
-
1. /maxsim:plan {next_phase}
|
|
222
|
-
2. /maxsim:quick
|
|
223
|
-
3. /maxsim:progress
|
|
224
|
-
4. /maxsim:debug
|
|
221
|
+
1. /maxsim:plan {next_phase} — Plan next phase
|
|
222
|
+
2. /maxsim:quick — Quick ad-hoc task
|
|
223
|
+
3. /maxsim:progress — View detailed progress
|
|
224
|
+
4. /maxsim:debug — Debug an issue
|
|
225
225
|
|
|
226
226
|
Or describe what you'd like to do:
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
**Contextual filtering rules:**
|
|
230
|
-
- If phases are
|
|
231
|
-
- If all phases are
|
|
230
|
+
- If phases are "In Progress" on GitHub: show execute options prominently
|
|
231
|
+
- If all phases are "Done" on GitHub: show `/maxsim:progress` (offers milestone completion)
|
|
232
232
|
- If recent git activity suggests debugging: show `/maxsim:debug` prominently
|
|
233
|
-
- If no phases exist: show `/maxsim:plan` prominently
|
|
233
|
+
- If no phases exist on board: show `/maxsim:plan` prominently
|
|
234
234
|
- Always include `/maxsim:quick` as it is always relevant
|
|
235
235
|
- Always include an open-ended fallback ("Or describe what you'd like to do")
|
|
236
|
+
- If GitHub not available (mcp calls fail): fall back to local ROADMAP analysis and note degraded mode
|
|
236
237
|
|
|
237
238
|
Wait for user selection, then dispatch the chosen command.
|
|
238
239
|
</step>
|
|
@@ -242,9 +243,12 @@ Wait for user selection, then dispatch the chosen command.
|
|
|
242
243
|
<constraints>
|
|
243
244
|
- Never ask for confirmation before dispatching (Show + Act, not Show + Ask)
|
|
244
245
|
- Always surface problems BEFORE suggesting actions
|
|
245
|
-
- All problems block
|
|
246
|
-
- No arguments accepted
|
|
246
|
+
- All problems block — no severity tiers, no "warnings"
|
|
247
|
+
- No arguments accepted — this is pure auto-detection
|
|
247
248
|
- No mention of old commands (plan-phase, execute-phase, etc.)
|
|
248
|
-
- Keep initial feedback fast
|
|
249
|
+
- Keep initial feedback fast — show "Analyzing..." before heavy operations
|
|
250
|
+
- Primary source for phase state: live GitHub (mcp_get_all_progress, mcp_detect_interrupted)
|
|
251
|
+
- Local reads: STATE.md for blockers/decisions, ROADMAP.md for phase ordering only
|
|
249
252
|
- If context gathering fails (tools not available, etc.), fall back to the interactive menu
|
|
250
253
|
</constraints>
|
|
254
|
+
</output>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Check project progress, milestone status, and offer milestone completion when all phases are done.
|
|
2
|
+
Check project progress, milestone status, and offer milestone completion when all phases are done. Reads status from live GitHub queries (always-live, no cached state). Detects phase gaps and intelligently routes to the next action.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
@@ -37,64 +37,91 @@ If missing both ROADMAP.md and PROJECT.md: suggest `/maxsim:init`.
|
|
|
37
37
|
</step>
|
|
38
38
|
|
|
39
39
|
<step name="load">
|
|
40
|
-
**
|
|
40
|
+
**Load local project context (always from local files per WIRE-02):**
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
- `ROADMAP=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs roadmap analyze)`
|
|
42
|
+
Use targeted tools to get data needed for the report:
|
|
44
43
|
- `STATE=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs state-snapshot)`
|
|
45
44
|
|
|
45
|
+
Read local files for project context:
|
|
46
|
+
- `.planning/config.json` — model profile, workflow flags
|
|
47
|
+
- `.planning/PROJECT.md` — project name and vision
|
|
48
|
+
- `.planning/REQUIREMENTS.md` — requirements context
|
|
49
|
+
- `.planning/STATE.md` — decisions, blockers, metrics
|
|
50
|
+
|
|
46
51
|
This minimizes orchestrator context usage.
|
|
47
52
|
</step>
|
|
48
53
|
|
|
49
|
-
<step name="
|
|
50
|
-
**Get
|
|
54
|
+
<step name="live_github_phase_overview">
|
|
55
|
+
**Get live phase status from GitHub (primary source — always-live, no cached state):**
|
|
56
|
+
|
|
57
|
+
Call `mcp_get_all_progress` to get progress for all phases. This returns live data from GitHub Issues:
|
|
58
|
+
- `phase_number`, `title`, `issue_number`
|
|
59
|
+
- `total_tasks`, `completed_tasks`, `remaining_tasks`
|
|
60
|
+
- `status` (the GitHub board column: To Do / In Progress / In Review / Done)
|
|
61
|
+
|
|
62
|
+
Display as formatted table:
|
|
51
63
|
|
|
52
|
-
```bash
|
|
53
|
-
ROADMAP=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs roadmap analyze)
|
|
54
64
|
```
|
|
65
|
+
## GitHub Issues Progress (Live)
|
|
66
|
+
|
|
67
|
+
| Phase | Title | Issue | Completed | Total | Remaining | Status |
|
|
68
|
+
|-------|-------|-------|-----------|-------|-----------|--------|
|
|
69
|
+
| 01 | ... | #12 | 3 | 5 | 2 | In Progress |
|
|
70
|
+
| 02 | ... | #13 | 0 | 4 | 4 | To Do |
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Also get board column view:**
|
|
55
74
|
|
|
56
|
-
|
|
57
|
-
- All phases with disk status (complete/partial/planned/empty/no_directory)
|
|
58
|
-
- Goal and dependencies per phase
|
|
59
|
-
- Plan and summary counts per phase
|
|
60
|
-
- Aggregated stats: total plans, summaries, progress percent
|
|
61
|
-
- Current and next phase identification
|
|
75
|
+
Call `mcp_query_board` with the project number (from init context / config). Group items by status column (To Do, In Progress, In Review, Done). Display column counts and issue details:
|
|
62
76
|
|
|
63
|
-
|
|
77
|
+
```
|
|
78
|
+
## Board Status (Live)
|
|
79
|
+
|
|
80
|
+
| Column | Count | Issues |
|
|
81
|
+
|-------------|-------|--------|
|
|
82
|
+
| To Do | 2 | #13, #14 |
|
|
83
|
+
| In Progress | 1 | #12 |
|
|
84
|
+
| In Review | 0 | — |
|
|
85
|
+
| Done | 3 | #9, #10, #11 |
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Cross-validate with local ROADMAP.md:**
|
|
89
|
+
- Run `ROADMAP=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs roadmap analyze)` to get local phase data
|
|
90
|
+
- Compare local completion status against GitHub board status
|
|
91
|
+
- Highlight any discrepancies between local and GitHub state in the Issues Detected section
|
|
64
92
|
</step>
|
|
65
93
|
|
|
66
|
-
<step name="
|
|
67
|
-
**
|
|
94
|
+
<step name="live_github_detail">
|
|
95
|
+
**Per-phase detail (when user requests or for current phase):**
|
|
68
96
|
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
97
|
+
For the current active phase (or any phase requested by user):
|
|
98
|
+
- Call `mcp_get_phase_progress` with the phase issue number to get task-level progress
|
|
99
|
+
- Call `mcp_list_sub_issues` to get individual task status with sub-issue details
|
|
100
|
+
- Display task breakdown with status indicators (✓ done / ⏳ in progress / ○ to do)
|
|
101
|
+
|
|
102
|
+
**Detect external edits:**
|
|
103
|
+
|
|
104
|
+
After reading phase data from GitHub, call `mcp_detect_external_edits` for each phase with the stored `body_hash`. Warn in the Issues Detected section if modifications were detected outside the normal workflow.
|
|
105
|
+
</step>
|
|
76
106
|
|
|
77
107
|
<step name="position">
|
|
78
|
-
**Parse current position from init context and
|
|
108
|
+
**Parse current position from init context and live GitHub data:**
|
|
79
109
|
|
|
80
|
-
- Use `current_phase` and `next_phase` from `$ROADMAP`
|
|
110
|
+
- Use `current_phase` and `next_phase` from `$ROADMAP` (local) cross-referenced with GitHub board status
|
|
81
111
|
- Note `paused_at` if work was paused (from `$STATE`)
|
|
82
|
-
- Count pending todos: use `
|
|
83
|
-
- Check for
|
|
84
|
-
|
|
112
|
+
- Count pending todos: use `mcp_list_todos` for live todo count
|
|
113
|
+
- Check for interrupted phases via `mcp_detect_interrupted`
|
|
114
|
+
</step>
|
|
85
115
|
|
|
86
116
|
<step name="report">
|
|
87
117
|
**Generate progress bar from maxsim-tools, then present rich status report:**
|
|
88
118
|
|
|
89
119
|
```bash
|
|
90
|
-
# Get formatted progress bar
|
|
120
|
+
# Get formatted progress bar (local computation)
|
|
91
121
|
PROGRESS_BAR=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs progress phase-bars --raw)
|
|
92
|
-
|
|
93
|
-
# Get GitHub Issues-based progress (best-effort, may fail if gh not authenticated)
|
|
94
|
-
GH_PROGRESS=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs mcp_get_all_progress 2>/dev/null || echo '{"error": "GitHub not available"}')
|
|
95
122
|
```
|
|
96
123
|
|
|
97
|
-
Present (
|
|
124
|
+
Present (GitHub Issues is the primary progress source; local ROADMAP is cross-validation):
|
|
98
125
|
|
|
99
126
|
```
|
|
100
127
|
# [Project Name]
|
|
@@ -102,13 +129,15 @@ Present (include GitHub Issues progress if available for cross-validation):
|
|
|
102
129
|
**Progress:** {PROGRESS_BAR}
|
|
103
130
|
**Profile:** [quality/balanced/budget]
|
|
104
131
|
|
|
105
|
-
##
|
|
106
|
-
|
|
107
|
-
|
|
132
|
+
## GitHub Issues Progress (Live)
|
|
133
|
+
[formatted table from mcp_get_all_progress — see live_github_phase_overview step]
|
|
134
|
+
|
|
135
|
+
## Board Status (Live)
|
|
136
|
+
[column view from mcp_query_board — see live_github_phase_overview step]
|
|
108
137
|
|
|
109
138
|
## Current Position
|
|
110
139
|
Phase [N] of [total]: [phase-name]
|
|
111
|
-
|
|
140
|
+
GitHub Status: [board column from live data]
|
|
112
141
|
CONTEXT: [✓ if has_context | - if not]
|
|
113
142
|
|
|
114
143
|
## Key Decisions Made
|
|
@@ -119,26 +148,16 @@ CONTEXT: [✓ if has_context | - if not]
|
|
|
119
148
|
- [extract from $STATE.blockers[]]
|
|
120
149
|
- [e.g. jq -r '.blockers[].text' from state-snapshot]
|
|
121
150
|
|
|
122
|
-
## GitHub Issues Progress
|
|
123
|
-
(If GH_PROGRESS available and not error)
|
|
124
|
-
- Phase completion status from GitHub Issues
|
|
125
|
-
- Cross-validate with local ROADMAP.md progress
|
|
126
|
-
- Highlight any discrepancies between local and GitHub state
|
|
127
|
-
|
|
128
151
|
## Issues Detected
|
|
129
152
|
(Only show if gaps found during analysis)
|
|
130
|
-
- Phase [N]: [issue description, e.g., "
|
|
131
|
-
- Phase [M]: [issue description, e.g., "
|
|
153
|
+
- Phase [N]: [issue description, e.g., "External edit detected — body_hash mismatch"]
|
|
154
|
+
- Phase [M]: [issue description, e.g., "Local: complete, GitHub: In Progress — discrepancy"]
|
|
132
155
|
|
|
133
156
|
## Pending Todos
|
|
134
157
|
- [count] pending — /maxsim:quick --todo to review
|
|
135
158
|
|
|
136
|
-
## Active Debug Sessions
|
|
137
|
-
- [count] active — /maxsim:debug to continue
|
|
138
|
-
(Only show this section if count > 0)
|
|
139
|
-
|
|
140
159
|
## What's Next
|
|
141
|
-
[Next phase/plan objective from roadmap
|
|
160
|
+
[Next phase/plan objective from live GitHub data and local roadmap]
|
|
142
161
|
```
|
|
143
162
|
|
|
144
163
|
**Performance metrics table truncation:**
|
|
@@ -152,54 +171,40 @@ When displaying the performance metrics table from STATE.md (the `## Performance
|
|
|
152
171
|
</step>
|
|
153
172
|
|
|
154
173
|
<step name="route">
|
|
155
|
-
**Determine next action based on
|
|
156
|
-
|
|
157
|
-
**Step 1: Count plans, summaries, and issues in current phase**
|
|
174
|
+
**Determine next action based on live GitHub data.**
|
|
158
175
|
|
|
159
|
-
|
|
176
|
+
**Step 1: Get live phase state from GitHub**
|
|
160
177
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
State: "This phase has {X} plans, {Y} summaries."
|
|
168
|
-
|
|
169
|
-
**Step 1.5: Check for unaddressed UAT gaps**
|
|
178
|
+
Call `mcp_get_all_progress` (already fetched above). Identify:
|
|
179
|
+
- Phases with status "In Progress" that have remaining tasks
|
|
180
|
+
- Phases with status "To Do" (not yet started)
|
|
181
|
+
- Phases with status "Done"
|
|
170
182
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
# Check for diagnosed UAT with gaps
|
|
175
|
-
grep -l "status: diagnosed" .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null
|
|
176
|
-
```
|
|
183
|
+
**Step 1.5: Check for interrupted or external edit issues**
|
|
177
184
|
|
|
178
|
-
|
|
179
|
-
- `uat_with_gaps`: UAT.md files with status "diagnosed" (gaps need fixing)
|
|
185
|
+
Call `mcp_detect_interrupted` to check for any phases that were interrupted mid-execution. If any are found, note them — they take priority over new work.
|
|
180
186
|
|
|
181
|
-
**Step 2: Route based on
|
|
187
|
+
**Step 2: Route based on live GitHub status**
|
|
182
188
|
|
|
183
189
|
| Condition | Meaning | Action |
|
|
184
190
|
|-----------|---------|--------|
|
|
185
|
-
|
|
|
186
|
-
|
|
|
187
|
-
|
|
|
188
|
-
|
|
|
191
|
+
| Interrupted phase detected | Work was cut off | Go to **Route A** (resume) |
|
|
192
|
+
| Phase "In Progress" with remaining tasks | Unfinished execution | Go to **Route A** (continue) |
|
|
193
|
+
| Phase "To Do" | Phase not yet started | Go to **Route B** |
|
|
194
|
+
| All phases "Done" | Milestone complete | Go to **Route D** |
|
|
189
195
|
|
|
190
196
|
---
|
|
191
197
|
|
|
192
|
-
**Route A:
|
|
198
|
+
**Route A: Phase in progress or interrupted — continue execution**
|
|
193
199
|
|
|
194
|
-
|
|
195
|
-
Read its `<objective>` section.
|
|
200
|
+
Identify the in-progress or interrupted phase (from `mcp_get_all_progress` or `mcp_detect_interrupted`).
|
|
196
201
|
|
|
197
202
|
```
|
|
198
203
|
---
|
|
199
204
|
|
|
200
205
|
## ▶ Next Up
|
|
201
206
|
|
|
202
|
-
**{
|
|
207
|
+
**Phase {N}: [Phase Name]** — resuming execution
|
|
203
208
|
|
|
204
209
|
`/maxsim:execute {phase}`
|
|
205
210
|
|
|
@@ -250,50 +255,6 @@ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
|
|
|
250
255
|
|
|
251
256
|
---
|
|
252
257
|
|
|
253
|
-
**Route E: UAT gaps need fix plans**
|
|
254
|
-
|
|
255
|
-
UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## ⚠ UAT Gaps Found
|
|
261
|
-
|
|
262
|
-
**{phase_num}-UAT.md** has {N} gaps requiring fixes.
|
|
263
|
-
|
|
264
|
-
`/maxsim:plan {phase} --gaps`
|
|
265
|
-
|
|
266
|
-
<sub>`/clear` first → fresh context window</sub>
|
|
267
|
-
|
|
268
|
-
---
|
|
269
|
-
|
|
270
|
-
**Also available:**
|
|
271
|
-
- `/maxsim:execute {phase}` — execute phase plans (includes verification)
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
**Step 3: Check milestone status (only when phase complete)**
|
|
279
|
-
|
|
280
|
-
Read ROADMAP.md and identify:
|
|
281
|
-
1. Current phase number
|
|
282
|
-
2. All phase numbers in the current milestone section
|
|
283
|
-
|
|
284
|
-
Count total phases and identify the highest phase number.
|
|
285
|
-
|
|
286
|
-
State: "Current phase is {X}. Milestone has {N} phases (highest: {Y})."
|
|
287
|
-
|
|
288
|
-
**Route based on milestone status:**
|
|
289
|
-
|
|
290
|
-
| Condition | Meaning | Action |
|
|
291
|
-
|-----------|---------|--------|
|
|
292
|
-
| current phase < highest phase | More phases remain | Go to **Route C** |
|
|
293
|
-
| current phase = highest phase | Milestone complete | Go to **Route D** |
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
258
|
**Route C: Phase complete, more phases remain**
|
|
298
259
|
|
|
299
260
|
Read ROADMAP.md to get the next phase's name and goal.
|
|
@@ -318,14 +279,14 @@ Read ROADMAP.md to get the next phase's name and goal.
|
|
|
318
279
|
|
|
319
280
|
**Route D: Milestone complete**
|
|
320
281
|
|
|
321
|
-
All phases are
|
|
282
|
+
All phases are "Done" on the GitHub board. Offer milestone completion interactively:
|
|
322
283
|
|
|
323
284
|
```
|
|
324
285
|
---
|
|
325
286
|
|
|
326
287
|
## Milestone Complete!
|
|
327
288
|
|
|
328
|
-
All {N} phases are complete. Ready to wrap up?
|
|
289
|
+
All {N} phases are complete (all "Done" on GitHub board). Ready to wrap up?
|
|
329
290
|
|
|
330
291
|
1. Complete milestone (archive, create release notes) → `/maxsim:init` (detects milestone completion)
|
|
331
292
|
2. Start new milestone → `/maxsim:init` (starts new milestone flow)
|
|
@@ -373,21 +334,27 @@ Ready to plan the next milestone.
|
|
|
373
334
|
- Phase complete but next phase not planned → offer `/maxsim:plan [next]`
|
|
374
335
|
- All work complete → offer milestone completion via `/maxsim:init`
|
|
375
336
|
- Blockers present → highlight before offering to continue
|
|
376
|
-
-
|
|
377
|
-
-
|
|
337
|
+
- External edits detected → surface in Issues Detected section before routing
|
|
338
|
+
- Discrepancy between local ROADMAP and GitHub board → surface in Issues Detected, ask user to reconcile
|
|
339
|
+
- GitHub not available (mcp calls fail) → fall back to local ROADMAP analysis and note degraded mode
|
|
378
340
|
</step>
|
|
379
341
|
|
|
380
342
|
</process>
|
|
381
343
|
|
|
382
344
|
<success_criteria>
|
|
383
345
|
|
|
384
|
-
- [ ] Rich context provided (
|
|
385
|
-
- [ ] GitHub Issues progress shown (
|
|
386
|
-
- [ ]
|
|
346
|
+
- [ ] Rich context provided (decisions, blockers, issues)
|
|
347
|
+
- [ ] GitHub Issues progress shown as primary source (always-live reads via mcp_get_all_progress)
|
|
348
|
+
- [ ] Board column view shown via mcp_query_board
|
|
349
|
+
- [ ] Per-phase task detail available via mcp_get_phase_progress and mcp_list_sub_issues
|
|
350
|
+
- [ ] External edit detection via mcp_detect_external_edits
|
|
351
|
+
- [ ] Cross-validation between local ROADMAP.md and GitHub board status
|
|
352
|
+
- [ ] Phase gaps and discrepancies detected and surfaced in Issues Detected section
|
|
387
353
|
- [ ] Current position clear with visual progress
|
|
388
354
|
- [ ] What's next clearly explained
|
|
389
|
-
- [ ] Smart routing: /maxsim:execute if
|
|
355
|
+
- [ ] Smart routing: /maxsim:execute if in progress, /maxsim:plan if not started
|
|
390
356
|
- [ ] Milestone completion offered when all phases done
|
|
391
357
|
- [ ] User confirms before any action
|
|
392
358
|
- [ ] Seamless handoff to appropriate maxsim command
|
|
393
359
|
</success_criteria>
|
|
360
|
+
</output>
|
|
@@ -5,7 +5,7 @@ Before executing any step in this workflow, verify:
|
|
|
5
5
|
</sanity_check>
|
|
6
6
|
|
|
7
7
|
<purpose>
|
|
8
|
-
Verify phase goal achievement through goal-backward analysis. Check that the codebase delivers what the phase promised, not just that tasks completed.
|
|
8
|
+
Verify phase goal achievement through goal-backward analysis. Check that the codebase delivers what the phase promised, not just that tasks completed. Posts verification results as GitHub comments on the phase issue (no local VERIFICATION.md or UAT.md files are written).
|
|
9
9
|
|
|
10
10
|
Executed by a verification subagent spawned from execute-phase.md.
|
|
11
11
|
</purpose>
|
|
@@ -39,13 +39,16 @@ INIT=$(node ~/.claude/maxsim/bin/maxsim-tools.cjs init phase-op "${PHASE_ARG}")
|
|
|
39
39
|
|
|
40
40
|
Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`, `has_plans`, `plan_count`.
|
|
41
41
|
|
|
42
|
-
Then load phase details
|
|
42
|
+
Then load phase details:
|
|
43
43
|
```bash
|
|
44
44
|
node ~/.claude/maxsim/bin/maxsim-tools.cjs roadmap get-phase "${phase_number}"
|
|
45
45
|
grep -E "^| ${phase_number}" .planning/REQUIREMENTS.md 2>/dev/null
|
|
46
|
-
ls "$phase_dir"/*-SUMMARY.md "$phase_dir"/*-PLAN.md 2>/dev/null
|
|
47
46
|
```
|
|
48
47
|
|
|
48
|
+
**Get the phase issue number from GitHub (live):**
|
|
49
|
+
|
|
50
|
+
Call `mcp_get_all_progress` and find the entry where `phase_number` matches. Extract `issue_number` — this is used for posting all verification results as GitHub comments.
|
|
51
|
+
|
|
49
52
|
Extract **phase goal** from ROADMAP.md (the outcome to verify, not tasks) and **requirements** from REQUIREMENTS.md if it exists.
|
|
50
53
|
</step>
|
|
51
54
|
|
|
@@ -172,7 +175,7 @@ For each requirement: parse description → identify supporting truths/artifacts
|
|
|
172
175
|
</step>
|
|
173
176
|
|
|
174
177
|
<step name="scan_antipatterns">
|
|
175
|
-
Extract files modified in this phase from
|
|
178
|
+
Extract files modified in this phase from local plan files, scan each:
|
|
176
179
|
|
|
177
180
|
| Pattern | Search | Severity |
|
|
178
181
|
|---------|--------|----------|
|
|
@@ -212,21 +215,105 @@ If gaps_found:
|
|
|
212
215
|
3. **Order by dependency:** Fix missing → fix stubs → fix wiring → verify.
|
|
213
216
|
</step>
|
|
214
217
|
|
|
215
|
-
<step name="
|
|
216
|
-
|
|
217
|
-
|
|
218
|
+
<step name="post_verification_to_github">
|
|
219
|
+
**Post verification results as a GitHub comment (primary output — no local file written).**
|
|
220
|
+
|
|
221
|
+
Build the verification content in memory using the same structured format as the verification report template. Then call `mcp_post_comment` with `type: 'verification'` on the phase issue:
|
|
222
|
+
|
|
218
223
|
```
|
|
224
|
+
mcp_post_comment({
|
|
225
|
+
issue_number: {PHASE_ISSUE_NUMBER},
|
|
226
|
+
type: 'verification',
|
|
227
|
+
body: {
|
|
228
|
+
status: 'passed' | 'gaps_found' | 'human_needed',
|
|
229
|
+
score: '{verified}/{total}',
|
|
230
|
+
phase: '{phase_number} — {phase_name}',
|
|
231
|
+
timestamp: '{ISO timestamp}',
|
|
232
|
+
truths_checked: [
|
|
233
|
+
{ truth: '...', status: 'VERIFIED | FAILED | UNCERTAIN', evidence: '...' }
|
|
234
|
+
],
|
|
235
|
+
artifacts_verified: [
|
|
236
|
+
{ path: '...', exists: true/false, substantive: true/false, wired: true/false, status: 'VERIFIED | STUB | MISSING | ORPHANED' }
|
|
237
|
+
],
|
|
238
|
+
key_links_validated: [
|
|
239
|
+
{ from: '...', to: '...', via: '...', status: 'WIRED | PARTIAL | NOT_WIRED' }
|
|
240
|
+
],
|
|
241
|
+
antipatterns: [
|
|
242
|
+
{ file: '...', line: N, pattern: '...', severity: 'Blocker | Warning | Info' }
|
|
243
|
+
],
|
|
244
|
+
human_verification_items: [
|
|
245
|
+
{ name: '...', steps: '...', expected: '...', reason: '...' }
|
|
246
|
+
],
|
|
247
|
+
gaps: [
|
|
248
|
+
{ description: '...', fix_plan: '...' }
|
|
249
|
+
],
|
|
250
|
+
fix_plans: [
|
|
251
|
+
{ name: '...', objective: '...', tasks: ['...'] }
|
|
252
|
+
]
|
|
253
|
+
}
|
|
254
|
+
})
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
The comment is the canonical record of this verification run.
|
|
258
|
+
</step>
|
|
259
|
+
|
|
260
|
+
<step name="run_uat">
|
|
261
|
+
**User Acceptance Testing (UAT):**
|
|
262
|
+
|
|
263
|
+
Present the human verification items to the user and walk through each one. After the user completes UAT:
|
|
264
|
+
|
|
265
|
+
Build the UAT results in memory, then post as a GitHub comment by calling `mcp_post_comment` with `type: 'uat'` on the phase issue:
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
mcp_post_comment({
|
|
269
|
+
issue_number: {PHASE_ISSUE_NUMBER},
|
|
270
|
+
type: 'uat',
|
|
271
|
+
body: {
|
|
272
|
+
status: 'passed' | 'gaps_found',
|
|
273
|
+
phase: '{phase_number} — {phase_name}',
|
|
274
|
+
timestamp: '{ISO timestamp}',
|
|
275
|
+
items: [
|
|
276
|
+
{ name: '...', result: 'pass | fail', notes: '...' }
|
|
277
|
+
],
|
|
278
|
+
gaps: [
|
|
279
|
+
{ description: '...', severity: 'Blocker | Warning' }
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
})
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Do NOT write a UAT.md file to `.planning/phases/`.
|
|
286
|
+
</step>
|
|
287
|
+
|
|
288
|
+
<step name="board_transition">
|
|
289
|
+
**Update GitHub board based on verification outcome.**
|
|
290
|
+
|
|
291
|
+
**If verification passes AND PR is merged:**
|
|
292
|
+
1. Call `mcp_move_issue` to move the phase issue to the "Done" column on the board
|
|
293
|
+
2. Call `mcp_close_issue` to close the phase issue
|
|
294
|
+
3. Report to orchestrator: phase complete, issue closed
|
|
295
|
+
|
|
296
|
+
**If verification passes but PR not yet merged:**
|
|
297
|
+
1. Keep the phase issue in "In Review" on the board
|
|
298
|
+
2. Note: board will be updated when PR merges
|
|
219
299
|
|
|
220
|
-
|
|
300
|
+
**If verification fails (gaps_found):**
|
|
301
|
+
1. Check current board column for the phase issue
|
|
302
|
+
2. If in "In Review": call `mcp_move_issue` to move back to "In Progress"
|
|
303
|
+
3. Post failure details as a verification comment (already done in post_verification_to_github step)
|
|
304
|
+
4. Note which gaps need fixing before re-verification
|
|
221
305
|
|
|
222
|
-
|
|
306
|
+
**If human_needed:**
|
|
307
|
+
1. Keep the phase issue in its current column (do not move)
|
|
308
|
+
2. The UAT comment posted above documents what needs human testing
|
|
223
309
|
</step>
|
|
224
310
|
|
|
225
311
|
<step name="return_to_orchestrator">
|
|
226
|
-
Return status (`passed` | `gaps_found` | `human_needed`), score (N/M must-haves),
|
|
312
|
+
Return status (`passed` | `gaps_found` | `human_needed`), score (N/M must-haves), GitHub issue number and comment URL.
|
|
227
313
|
|
|
228
|
-
If gaps_found: list gaps + recommended fix plan names.
|
|
229
|
-
If human_needed: list items requiring human testing.
|
|
314
|
+
If gaps_found: list gaps + recommended fix plan names. Phase issue has been moved back to "In Progress" on the board.
|
|
315
|
+
If human_needed: list items requiring human testing. UAT comment posted to GitHub issue.
|
|
316
|
+
If passed: phase issue moved to "Done" and closed on GitHub.
|
|
230
317
|
|
|
231
318
|
Orchestrator routes: `passed` → update_roadmap | `gaps_found` → create/execute fixes, re-verify | `human_needed` → present to user.
|
|
232
319
|
</step>
|
|
@@ -234,6 +321,7 @@ Orchestrator routes: `passed` → update_roadmap | `gaps_found` → create/execu
|
|
|
234
321
|
</process>
|
|
235
322
|
|
|
236
323
|
<success_criteria>
|
|
324
|
+
- [ ] Phase issue number retrieved from live GitHub via mcp_get_all_progress
|
|
237
325
|
- [ ] Must-haves established (from frontmatter or derived)
|
|
238
326
|
- [ ] All truths verified with status and evidence
|
|
239
327
|
- [ ] All artifacts checked at all three levels
|
|
@@ -243,6 +331,9 @@ Orchestrator routes: `passed` → update_roadmap | `gaps_found` → create/execu
|
|
|
243
331
|
- [ ] Human verification items identified
|
|
244
332
|
- [ ] Overall status determined
|
|
245
333
|
- [ ] Fix plans generated (if gaps_found)
|
|
246
|
-
- [ ] VERIFICATION.md
|
|
334
|
+
- [ ] Verification results posted as GitHub comment via mcp_post_comment (type: 'verification') — NO local VERIFICATION.md written
|
|
335
|
+
- [ ] UAT results posted as GitHub comment via mcp_post_comment (type: 'uat') — NO local UAT.md written
|
|
336
|
+
- [ ] Board transition executed: mcp_move_issue + mcp_close_issue on pass; mcp_move_issue back to In Progress on fail
|
|
247
337
|
- [ ] Results returned to orchestrator
|
|
248
338
|
</success_criteria>
|
|
339
|
+
</output>
|
package/package.json
CHANGED