orchestrix-yuri 1.0.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/LICENSE +21 -0
- package/README.md +122 -0
- package/bin/install.js +25 -0
- package/lib/installer.js +86 -0
- package/package.json +31 -0
- package/skill/SKILL.md +136 -0
- package/skill/data/deployment-options.yaml +44 -0
- package/skill/data/phase-routing.yaml +50 -0
- package/skill/resources/.gitignore.template +29 -0
- package/skill/resources/core-config.template.yaml +67 -0
- package/skill/resources/handoff-detector.sh +374 -0
- package/skill/resources/mcp.json.template +18 -0
- package/skill/resources/o-help.md +23 -0
- package/skill/resources/o-status.md +37 -0
- package/skill/resources/o.md +87 -0
- package/skill/resources/settings.local.json +15 -0
- package/skill/resources/start-orchestrix.sh +373 -0
- package/skill/scripts/ensure-session.sh +61 -0
- package/skill/scripts/monitor-agent.sh +61 -0
- package/skill/scripts/scan-stories.sh +16 -0
- package/skill/scripts/start-planning.sh +20 -0
- package/skill/tasks/yuri-create-project.md +258 -0
- package/skill/tasks/yuri-deploy-project.md +139 -0
- package/skill/tasks/yuri-develop-project.md +150 -0
- package/skill/tasks/yuri-handle-change.md +239 -0
- package/skill/tasks/yuri-plan-project.md +158 -0
- package/skill/tasks/yuri-resume.md +132 -0
- package/skill/tasks/yuri-status.md +156 -0
- package/skill/tasks/yuri-test-project.md +172 -0
- package/skill/templates/memory.template.yaml +77 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Change Management
|
|
2
|
+
|
|
3
|
+
**Command**: `*change "{description}"`
|
|
4
|
+
**Purpose**: Handle mid-project requirement changes by assessing scope and routing to the appropriate workflow.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Step 0: Load Memory and Context
|
|
9
|
+
|
|
10
|
+
1. Read `.yuri/memory.yaml` — restore project context
|
|
11
|
+
2. Set `PROJECT_DIR` from `project.project_root`
|
|
12
|
+
3. Determine current phase from `lifecycle.current_phase`
|
|
13
|
+
4. Extract the change description from the user's command argument
|
|
14
|
+
|
|
15
|
+
Update memory:
|
|
16
|
+
- `lifecycle.current_step` → "change_management"
|
|
17
|
+
- Save immediately
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Step 1: Scope Assessment
|
|
22
|
+
|
|
23
|
+
Assess the change size based on the current phase and change description.
|
|
24
|
+
|
|
25
|
+
### Scope Assessment Matrix
|
|
26
|
+
|
|
27
|
+
| Current Phase | Change Size | Action | Needs Planning Session? |
|
|
28
|
+
|---------------|-------------|--------|------------------------|
|
|
29
|
+
| Phase 2 | Any | Modify current/subsequent planning step inputs | Already exists |
|
|
30
|
+
| Phase 3 | Small (≤5 files) | Dev `*solo "{description}"` | No |
|
|
31
|
+
| Phase 3 | Medium | PO `*route-change` → standard workflow | **Yes** |
|
|
32
|
+
| Phase 3 | Large (cross-module/DB/security) | Pause dev → partial Phase 2 re-plan | **Yes** |
|
|
33
|
+
| Phase 4 | Any | Queue for next iteration | No (record only) |
|
|
34
|
+
| Phase 5+ | New iteration | PM `*start-iteration` → plan → dev → test | **Yes** |
|
|
35
|
+
|
|
36
|
+
Present assessment to user:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
## 📋 Change Assessment
|
|
40
|
+
|
|
41
|
+
| Item | Detail |
|
|
42
|
+
|------|--------|
|
|
43
|
+
| **Current Phase** | Phase {n} ({phase_name}) |
|
|
44
|
+
| **Change** | {description} |
|
|
45
|
+
| **Assessed Size** | {Small / Medium / Large} |
|
|
46
|
+
| **Recommended Action** | {action} |
|
|
47
|
+
|
|
48
|
+
Proceed with this approach? (Y/N, or specify alternative)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Wait for user confirmation.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Step 2: Execute Based on Scope
|
|
56
|
+
|
|
57
|
+
### Small Change (Phase 3, ≤5 files)
|
|
58
|
+
|
|
59
|
+
No planning session needed. Use Dev directly:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
SESSION="{tmux.dev_session}"
|
|
63
|
+
# Ensure dev session is alive
|
|
64
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
65
|
+
SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" dev "$PROJECT_DIR")
|
|
66
|
+
|
|
67
|
+
# Send to Dev
|
|
68
|
+
tmux send-keys -t "$SESSION:2" "/clear" Enter
|
|
69
|
+
sleep 2
|
|
70
|
+
tmux send-keys -t "$SESSION:2" "/o dev" Enter
|
|
71
|
+
sleep 12
|
|
72
|
+
tmux send-keys -t "$SESSION:2" "*solo \"$CHANGE_DESCRIPTION\"" Enter
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Monitor Dev completion, then resume normal Phase 3 monitoring.
|
|
76
|
+
|
|
77
|
+
### Medium Change (Phase 3)
|
|
78
|
+
|
|
79
|
+
Requires planning session for PO routing:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
83
|
+
|
|
84
|
+
# 1. Ensure planning session
|
|
85
|
+
PLAN_SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" planning "$PROJECT_DIR")
|
|
86
|
+
|
|
87
|
+
# 2. Activate PO and route change
|
|
88
|
+
tmux send-keys -t "$PLAN_SESSION:0" "/o po" Enter
|
|
89
|
+
sleep 15
|
|
90
|
+
tmux send-keys -t "$PLAN_SESSION:0" "*route-change \"$CHANGE_DESCRIPTION\"" Enter
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Wait for PO routing result. Then:
|
|
94
|
+
|
|
95
|
+
- IF routes to **Architect**:
|
|
96
|
+
```bash
|
|
97
|
+
tmux send-keys -t "$PLAN_SESSION:0" "/clear" Enter
|
|
98
|
+
sleep 2
|
|
99
|
+
tmux send-keys -t "$PLAN_SESSION:0" "/o architect" Enter
|
|
100
|
+
sleep 15
|
|
101
|
+
tmux send-keys -t "$PLAN_SESSION:0" "*resolve-change" Enter
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- IF routes to **PM**:
|
|
105
|
+
```bash
|
|
106
|
+
tmux send-keys -t "$PLAN_SESSION:0" "/clear" Enter
|
|
107
|
+
sleep 2
|
|
108
|
+
tmux send-keys -t "$PLAN_SESSION:0" "/o pm" Enter
|
|
109
|
+
sleep 15
|
|
110
|
+
tmux send-keys -t "$PLAN_SESSION:0" "*revise-prd" Enter
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Wait for Proposal output (PCP/TCP).
|
|
114
|
+
|
|
115
|
+
Then switch to dev session:
|
|
116
|
+
```bash
|
|
117
|
+
DEV_SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" dev "$PROJECT_DIR")
|
|
118
|
+
|
|
119
|
+
# In SM window: apply proposal
|
|
120
|
+
tmux send-keys -t "$DEV_SESSION:1" "/clear" Enter
|
|
121
|
+
sleep 2
|
|
122
|
+
tmux send-keys -t "$DEV_SESSION:1" "/o sm" Enter
|
|
123
|
+
sleep 12
|
|
124
|
+
tmux send-keys -t "$DEV_SESSION:1" "*apply-proposal {proposal_id}" Enter
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
SM → Architect → Dev → QA auto-loop resumes.
|
|
128
|
+
|
|
129
|
+
### Large Change (Phase 3, cross-module/DB/security)
|
|
130
|
+
|
|
131
|
+
Same as medium change flow but with explicit pause notification:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
⚠️ Large change detected. Pausing development loop for re-planning...
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Follow the medium change flow, then resume Phase 3 monitoring.
|
|
138
|
+
|
|
139
|
+
### Phase 4 Change (Queue for next iteration)
|
|
140
|
+
|
|
141
|
+
Record only — do not execute during testing:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
📝 Change recorded for next iteration: {description}
|
|
145
|
+
Current testing will continue. This change will be addressed in the next development cycle.
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Post-MVP Iteration (Phase 5+)
|
|
149
|
+
|
|
150
|
+
Full iteration flow using PM `*start-iteration`:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
154
|
+
|
|
155
|
+
# Step 1: PM generates next-steps.md
|
|
156
|
+
PLAN_SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" planning "$PROJECT_DIR")
|
|
157
|
+
tmux send-keys -t "$PLAN_SESSION:0" "/o pm" Enter
|
|
158
|
+
sleep 15
|
|
159
|
+
tmux send-keys -t "$PLAN_SESSION:0" "*start-iteration" Enter
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Monitor PM completion. PM creates: `docs/prd/epic-*.yaml` + `docs/prd/*next-steps.md`
|
|
163
|
+
|
|
164
|
+
**Step 2: Parse next-steps.md**
|
|
165
|
+
|
|
166
|
+
Read the generated next-steps file. Split on `🎯 HANDOFF TO {agent}:` markers.
|
|
167
|
+
Build ordered execution queue:
|
|
168
|
+
```
|
|
169
|
+
[{agent: "ux-expert", content: "..."},
|
|
170
|
+
{agent: "architect", content: "..."},
|
|
171
|
+
{agent: "sm", content: "..."}]
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Step 3: Execute each HANDOFF section (STOP before SM)**
|
|
175
|
+
|
|
176
|
+
FOR EACH section WHERE agent != "sm":
|
|
177
|
+
1. Create new window in planning tmux session
|
|
178
|
+
2. Start `cc`, wait for startup
|
|
179
|
+
3. Activate agent: `/o {agent}`
|
|
180
|
+
4. Paste the section content as instructions to the agent
|
|
181
|
+
5. Monitor completion (detect "Xed for Ns" / ○ idle)
|
|
182
|
+
6. Report to user, offer review
|
|
183
|
+
7. Save progress to memory
|
|
184
|
+
|
|
185
|
+
**Step 4: SM handoff → transition to dev automation**
|
|
186
|
+
|
|
187
|
+
When reaching `🎯 HANDOFF TO sm:`:
|
|
188
|
+
1. Kill planning session (done)
|
|
189
|
+
2. Ensure dev session:
|
|
190
|
+
```bash
|
|
191
|
+
DEV_SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" dev "$PROJECT_DIR")
|
|
192
|
+
```
|
|
193
|
+
3. In SM window (window 1) of dev session:
|
|
194
|
+
```bash
|
|
195
|
+
tmux send-keys -t "$DEV_SESSION:1" "/clear" Enter
|
|
196
|
+
sleep 2
|
|
197
|
+
tmux send-keys -t "$DEV_SESSION:1" "/o sm" Enter
|
|
198
|
+
sleep 12
|
|
199
|
+
tmux send-keys -t "$DEV_SESSION:1" "*draft" Enter
|
|
200
|
+
```
|
|
201
|
+
SM creates first story → handoff chain auto-starts (SM → Arch → Dev → QA)
|
|
202
|
+
|
|
203
|
+
**Step 5: Resume Phase 3 monitoring**
|
|
204
|
+
|
|
205
|
+
Enter standard development monitoring loop (see `tasks/yuri-develop-project.md` Step 2).
|
|
206
|
+
When all new stories complete → Phase 4 testing → Phase 5 incremental deployment if needed.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Step 3: Record Change
|
|
211
|
+
|
|
212
|
+
Save change record to memory regardless of scope:
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
changes.history:
|
|
216
|
+
- timestamp: "{ISO 8601}"
|
|
217
|
+
phase: {current_phase}
|
|
218
|
+
description: "{change_description}"
|
|
219
|
+
scope: "{small/medium/large}"
|
|
220
|
+
action_taken: "{what was done}"
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Save memory immediately.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Step 4: Resume Normal Flow
|
|
228
|
+
|
|
229
|
+
After change is handled:
|
|
230
|
+
- If in Phase 3 → resume development monitoring loop
|
|
231
|
+
- If in Phase 4 → continue testing
|
|
232
|
+
- If post-MVP iteration → follow through Phase 3 → 4 → 5 cycle
|
|
233
|
+
|
|
234
|
+
Report to user:
|
|
235
|
+
```
|
|
236
|
+
✅ Change handled: {description}
|
|
237
|
+
Action taken: {action_summary}
|
|
238
|
+
Resuming {current_phase_name}...
|
|
239
|
+
```
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Phase 2: Plan Project
|
|
2
|
+
|
|
3
|
+
**Command**: `*plan`
|
|
4
|
+
**Purpose**: Drive all planning agents (Analyst → PM → UX-Expert → Architect → PO) via tmux to generate complete project documentation.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Prerequisites
|
|
9
|
+
|
|
10
|
+
- Phase 1 (Create) must be complete
|
|
11
|
+
- `.yuri/memory.yaml` must exist with `phase1_create: complete`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Step 0: Load Memory and Validate
|
|
16
|
+
|
|
17
|
+
1. Read `.yuri/memory.yaml` — restore project context
|
|
18
|
+
2. Verify `lifecycle.phase_status.phase1_create == complete`
|
|
19
|
+
- If not → "Phase 1 not complete. Run `*create` first."
|
|
20
|
+
3. Set `PROJECT_DIR` from `project.project_root`
|
|
21
|
+
4. If `phase2_plan == in_progress` → find last completed planning step, resume from next
|
|
22
|
+
5. If `phase2_plan == complete` → offer skip to Phase 3
|
|
23
|
+
|
|
24
|
+
Update memory:
|
|
25
|
+
- `lifecycle.current_phase` → 2
|
|
26
|
+
- `lifecycle.phase_status.phase2_plan` → "in_progress"
|
|
27
|
+
- Save immediately
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Step 1: Create Planning tmux Session
|
|
32
|
+
|
|
33
|
+
Use the lazy session creation script:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
37
|
+
SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" planning "$PROJECT_DIR")
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This creates an `op-{project-name}` tmux session with an initial window running Claude Code.
|
|
41
|
+
|
|
42
|
+
Update memory:
|
|
43
|
+
- `tmux.planning_session` → `$SESSION`
|
|
44
|
+
- Save immediately
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Step 2: Execute Planning Agents
|
|
49
|
+
|
|
50
|
+
Execute each agent step sequentially. Each step runs in a NEW tmux window.
|
|
51
|
+
|
|
52
|
+
### Agent Sequence
|
|
53
|
+
|
|
54
|
+
| Window | Agent | Command | Expected Output |
|
|
55
|
+
|--------|-------|---------|-----------------|
|
|
56
|
+
| 0 | analyst | `*create-doc project-brief` | `docs/project-brief.md` |
|
|
57
|
+
| 1 | pm | `*create-doc prd` | `docs/prd.md` |
|
|
58
|
+
| 2 | ux-expert | `*create-doc front-end-spec` | `docs/front-end-spec.md` |
|
|
59
|
+
| 3 | architect | `*create-doc fullstack-architecture` | `docs/architecture.md` |
|
|
60
|
+
| 4 | po | `*execute-checklist po-master-validation` | Validation report |
|
|
61
|
+
| 5 | po | `*shard` | `docs/prd/` + `docs/architecture/` |
|
|
62
|
+
|
|
63
|
+
### FOR EACH step (window_idx = 0..5):
|
|
64
|
+
|
|
65
|
+
**2.1** Report to user:
|
|
66
|
+
```
|
|
67
|
+
Starting {agent} ({n}/6)...
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**2.2** Create new tmux window + start Claude Code:
|
|
71
|
+
```bash
|
|
72
|
+
if [ "$WINDOW_IDX" -gt 0 ]; then
|
|
73
|
+
tmux new-window -t "$SESSION:$WINDOW_IDX" -n "{agent}" -c "$PROJECT_DIR"
|
|
74
|
+
fi
|
|
75
|
+
tmux send-keys -t "$SESSION:$WINDOW_IDX" "cc" C-m
|
|
76
|
+
sleep 2 # Wait for Claude Code to start
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**2.3** Activate agent and send command:
|
|
80
|
+
```bash
|
|
81
|
+
tmux send-keys -t "$SESSION:$WINDOW_IDX" "/o {agent}" Enter
|
|
82
|
+
sleep 15 # Wait for agent to load
|
|
83
|
+
tmux send-keys -t "$SESSION:$WINDOW_IDX" "{command}" Enter
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**2.4** Monitor completion:
|
|
87
|
+
```bash
|
|
88
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
89
|
+
RESULT=$(bash "$SCRIPT_DIR/monitor-agent.sh" "$SESSION" "$WINDOW_IDX" "{expected_file}" 30 30)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Detection priority:
|
|
93
|
+
1. `/[A-Z][a-z]*ed for [0-9]/` — Claude Code completion (e.g. "Baked for 31s")
|
|
94
|
+
2. `○` idle indicator
|
|
95
|
+
3. `◐` approval prompt → auto-send `y` Enter
|
|
96
|
+
4. Content hash stable 3 polls (90s)
|
|
97
|
+
|
|
98
|
+
**2.5** Verify output file exists (if applicable):
|
|
99
|
+
```bash
|
|
100
|
+
test -f "$PROJECT_DIR/{expected_file}"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**2.6** Report to user and confirm:
|
|
104
|
+
```
|
|
105
|
+
✅ {agent} complete. Output: {file}
|
|
106
|
+
Continue / Review / Modify?
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- **Continue** → next step
|
|
110
|
+
- **Review** → show file content summary
|
|
111
|
+
- **Modify** → user specifies changes, resend to agent in same window
|
|
112
|
+
|
|
113
|
+
**2.7** Save memory:
|
|
114
|
+
```
|
|
115
|
+
planning.steps[n].status = complete
|
|
116
|
+
planning.steps[n].output = "{expected_file}"
|
|
117
|
+
planning.steps[n].completed_at = "{ISO 8601 timestamp}"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Special: Steps 4-5 (PO validate + shard)
|
|
121
|
+
|
|
122
|
+
Steps 4 and 5 share the same window (window 4):
|
|
123
|
+
1. Run `*execute-checklist po-master-validation` first, monitor completion
|
|
124
|
+
2. Then send `*shard` in the same window, monitor completion
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Step 3: All Complete
|
|
129
|
+
|
|
130
|
+
1. Kill planning session:
|
|
131
|
+
```bash
|
|
132
|
+
tmux kill-session -t "$SESSION"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
2. Save checkpoint:
|
|
136
|
+
- `lifecycle.phase_status.phase2_plan` → "complete"
|
|
137
|
+
- `lifecycle.current_step` → "phase2.complete"
|
|
138
|
+
- Write checkpoint → `.yuri/checkpoints/checkpoint-phase2.yaml`
|
|
139
|
+
|
|
140
|
+
3. Output summary:
|
|
141
|
+
```
|
|
142
|
+
## ✅ Planning Phase Complete
|
|
143
|
+
|
|
144
|
+
All planning documents generated:
|
|
145
|
+
- `docs/project-brief.md` — Project brief
|
|
146
|
+
- `docs/prd/*.md` — Product requirements (sharded)
|
|
147
|
+
- `docs/front-end-spec*.md` — Frontend spec (if applicable)
|
|
148
|
+
- `docs/architecture*.md` — Architecture doc (sharded)
|
|
149
|
+
- Sharded context files for development
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
4. Ask:
|
|
153
|
+
```
|
|
154
|
+
🚀 Ready to start automated development? (Y/N)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
- If Y → execute `tasks/yuri-develop-project.md`
|
|
158
|
+
- If N → save state, end with reminder: "Run `/yuri *develop` when ready."
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Resume from Checkpoint
|
|
2
|
+
|
|
3
|
+
**Command**: `*resume`
|
|
4
|
+
**Purpose**: Detect interrupted state and resume project execution from the last saved checkpoint.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Step 1: Read Memory
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
MEMORY_FILE=".yuri/memory.yaml"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- If `.yuri/memory.yaml` not found → "No project state found. Use `*create` to start a new project."
|
|
15
|
+
- If found → read and parse full memory state
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Step 2: Display Status Summary
|
|
20
|
+
|
|
21
|
+
Present current project state:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
## 📊 Project Status
|
|
25
|
+
|
|
26
|
+
| Item | Detail |
|
|
27
|
+
|------|--------|
|
|
28
|
+
| **Project** | {project.name} |
|
|
29
|
+
| **Path** | {project.project_root} |
|
|
30
|
+
| **Current Phase** | Phase {lifecycle.current_phase} |
|
|
31
|
+
| **Current Step** | {lifecycle.current_step} |
|
|
32
|
+
| **Last Active** | {timestamp from memory file mtime} |
|
|
33
|
+
|
|
34
|
+
### Phase Progress
|
|
35
|
+
| Phase | Status |
|
|
36
|
+
|-------|--------|
|
|
37
|
+
| 1. Create | {phase1_create} |
|
|
38
|
+
| 2. Plan | {phase2_plan} |
|
|
39
|
+
| 3. Develop | {phase3_develop} |
|
|
40
|
+
| 4. Test | {phase4_test} |
|
|
41
|
+
| 5. Deploy | {phase5_deploy} |
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If in Phase 3 (Develop), also show:
|
|
45
|
+
```
|
|
46
|
+
### Development Progress
|
|
47
|
+
- Stories: {stories_done}/{total_stories}
|
|
48
|
+
- In Progress: {stories_in_progress}
|
|
49
|
+
- Stuck Count: {stuck_count}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Step 3: Check Recoverability
|
|
55
|
+
|
|
56
|
+
Perform diagnostic checks:
|
|
57
|
+
|
|
58
|
+
1. **tmux sessions alive?**
|
|
59
|
+
```bash
|
|
60
|
+
# Check planning session
|
|
61
|
+
tmux has-session -t "{tmux.planning_session}" 2>/dev/null && echo "ALIVE" || echo "DEAD"
|
|
62
|
+
|
|
63
|
+
# Check dev session
|
|
64
|
+
tmux has-session -t "{tmux.dev_session}" 2>/dev/null && echo "ALIVE" || echo "DEAD"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
2. **Expected files exist?**
|
|
68
|
+
- Check for output files of completed planning steps
|
|
69
|
+
- Check for story files if in development phase
|
|
70
|
+
|
|
71
|
+
3. **Incomplete operations?**
|
|
72
|
+
- Any planning step marked `in_progress`?
|
|
73
|
+
- Any stories stuck in `InProgress` or `Review`?
|
|
74
|
+
|
|
75
|
+
Report findings:
|
|
76
|
+
```
|
|
77
|
+
### Recovery Diagnostics
|
|
78
|
+
- Planning session: {ALIVE/DEAD}
|
|
79
|
+
- Dev session: {ALIVE/DEAD}
|
|
80
|
+
- Expected files: {all present / missing: list}
|
|
81
|
+
- Incomplete operations: {none / list}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Step 4: Offer Resume Options
|
|
87
|
+
|
|
88
|
+
Based on the interrupted state, present options:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Detected interruption at Phase {n}, Step {m}.
|
|
92
|
+
|
|
93
|
+
Options:
|
|
94
|
+
1. **Resume from checkpoint** — Continue from last saved state
|
|
95
|
+
2. **Re-execute current step** — Retry the step that was interrupted
|
|
96
|
+
3. **Skip to next phase** — Mark current phase complete and advance
|
|
97
|
+
|
|
98
|
+
Select (1/2/3):
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Wait for user selection.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Step 5: Execute Recovery
|
|
106
|
+
|
|
107
|
+
Based on user's choice:
|
|
108
|
+
|
|
109
|
+
### Option 1: Resume from checkpoint
|
|
110
|
+
|
|
111
|
+
1. Load the latest checkpoint from `.yuri/checkpoints/`
|
|
112
|
+
2. Recreate any needed tmux sessions using `ensure-session.sh`
|
|
113
|
+
3. Call the appropriate phase task file with resume context:
|
|
114
|
+
- Phase 2 → `tasks/yuri-plan-project.md` (will detect `in_progress` and resume)
|
|
115
|
+
- Phase 3 → `tasks/yuri-develop-project.md` (will re-enter monitoring loop)
|
|
116
|
+
- Phase 4 → `tasks/yuri-test-project.md` (will resume from last untested epic)
|
|
117
|
+
- Phase 5 → `tasks/yuri-deploy-project.md` (will resume deployment)
|
|
118
|
+
|
|
119
|
+
### Option 2: Re-execute current step
|
|
120
|
+
|
|
121
|
+
1. Reset the current step status to `pending` in memory
|
|
122
|
+
2. Recreate any needed tmux sessions
|
|
123
|
+
3. Call the appropriate phase task file (step will re-run from beginning)
|
|
124
|
+
|
|
125
|
+
### Option 3: Skip to next phase
|
|
126
|
+
|
|
127
|
+
1. Mark current phase as `complete` in memory
|
|
128
|
+
2. Write checkpoint
|
|
129
|
+
3. Advance `lifecycle.current_phase` by 1
|
|
130
|
+
4. Call the next phase task file
|
|
131
|
+
|
|
132
|
+
After any option, save updated memory immediately.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Project Status Query
|
|
2
|
+
|
|
3
|
+
**Command**: `*status`
|
|
4
|
+
**Purpose**: Display comprehensive project status without modifying any state.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Step 1: Read Memory
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
MEMORY_FILE=".yuri/memory.yaml"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- If `.yuri/memory.yaml` not found → "No project state found. Use `*create` to start a new project."
|
|
15
|
+
- If found → read and parse full memory state
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Step 2: Display Project Overview
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
## 📊 Project Status: {project.name}
|
|
23
|
+
|
|
24
|
+
| Item | Detail |
|
|
25
|
+
|------|--------|
|
|
26
|
+
| **Project** | {project.name} |
|
|
27
|
+
| **Path** | {project.project_root} |
|
|
28
|
+
| **Description** | {project.description} |
|
|
29
|
+
| **Tech Stack** | {project.tech_stack} |
|
|
30
|
+
| **Created** | {project.created_at} |
|
|
31
|
+
| **License** | {configured / pending} |
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Step 3: Display Phase Progress
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
### Lifecycle Progress
|
|
40
|
+
|
|
41
|
+
| Phase | Status | Detail |
|
|
42
|
+
|-------|--------|--------|
|
|
43
|
+
| 1. Create | {✅/🔄/⏳} {status} | Project scaffold |
|
|
44
|
+
| 2. Plan | {✅/🔄/⏳} {status} | Planning docs |
|
|
45
|
+
| 3. Develop | {✅/🔄/⏳} {status} | Story implementation |
|
|
46
|
+
| 4. Test | {✅/🔄/⏳} {status} | Smoke testing |
|
|
47
|
+
| 5. Deploy | {✅/🔄/⏳} {status} | Deployment |
|
|
48
|
+
|
|
49
|
+
**Current**: Phase {current_phase} — {current_step}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Status icons:
|
|
53
|
+
- `✅` = complete
|
|
54
|
+
- `🔄` = in_progress
|
|
55
|
+
- `⏳` = pending
|
|
56
|
+
- `❌` = failed
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Step 4: Display Phase-Specific Details
|
|
61
|
+
|
|
62
|
+
### If Phase 2 (Plan) is in progress or complete:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
### Planning Progress
|
|
66
|
+
|
|
67
|
+
| Step | Agent | Status | Output |
|
|
68
|
+
|------|-------|--------|--------|
|
|
69
|
+
| 0 | Analyst | {status} | {output file} |
|
|
70
|
+
| 1 | PM | {status} | {output file} |
|
|
71
|
+
| 2 | UX Expert | {status} | {output file} |
|
|
72
|
+
| 3 | Architect | {status} | {output file} |
|
|
73
|
+
| 4 | PO Validate | {status} | {output file} |
|
|
74
|
+
| 5 | PO Shard | {status} | {output file} |
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### If Phase 3 (Develop) is in progress or complete:
|
|
78
|
+
|
|
79
|
+
Scan current story statuses:
|
|
80
|
+
```bash
|
|
81
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
82
|
+
bash "$SCRIPT_DIR/scan-stories.sh" "$PROJECT_DIR"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
### Development Progress
|
|
87
|
+
|
|
88
|
+
| Metric | Value |
|
|
89
|
+
|--------|-------|
|
|
90
|
+
| Total Stories | {total} |
|
|
91
|
+
| Done | {done} |
|
|
92
|
+
| In Progress | {in_progress} |
|
|
93
|
+
| In Review | {review} |
|
|
94
|
+
| Blocked | {blocked} |
|
|
95
|
+
| Remaining | {remaining} |
|
|
96
|
+
|
|
97
|
+
Progress: [{done}/{total}] {'█' * pct}{'░' * (100-pct)} {pct}%
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### If Phase 4 (Test) is in progress or complete:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
### Testing Progress
|
|
104
|
+
|
|
105
|
+
| Epic | Status | Rounds |
|
|
106
|
+
|------|--------|--------|
|
|
107
|
+
| {id} | {✅ Pass / ❌ Fail / ⏳ Pending} | {n} |
|
|
108
|
+
| ... | ... | ... |
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### If Phase 5 (Deploy) is complete:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
### Deployment
|
|
115
|
+
|
|
116
|
+
| Item | Detail |
|
|
117
|
+
|------|--------|
|
|
118
|
+
| Strategy | {strategy} |
|
|
119
|
+
| URL | {url} |
|
|
120
|
+
| Status | {status} |
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Step 5: Display tmux Session Status
|
|
126
|
+
|
|
127
|
+
Check if tmux sessions are alive:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Planning session
|
|
131
|
+
tmux has-session -t "{tmux.planning_session}" 2>/dev/null && echo "ALIVE" || echo "DEAD"
|
|
132
|
+
|
|
133
|
+
# Dev session
|
|
134
|
+
tmux has-session -t "{tmux.dev_session}" 2>/dev/null && echo "ALIVE" || echo "DEAD"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
### Active Sessions
|
|
139
|
+
|
|
140
|
+
| Session | Name | Status |
|
|
141
|
+
|---------|------|--------|
|
|
142
|
+
| Planning | {planning_session} | {ALIVE/DEAD/N/A} |
|
|
143
|
+
| Development | {dev_session} | {ALIVE/DEAD/N/A} |
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
If any change history exists:
|
|
147
|
+
```
|
|
148
|
+
### Change History
|
|
149
|
+
|
|
150
|
+
| # | Timestamp | Phase | Description | Action |
|
|
151
|
+
|---|-----------|-------|-------------|--------|
|
|
152
|
+
| 1 | {ts} | {phase} | {desc} | {action} |
|
|
153
|
+
| ... | ... | ... | ... | ... |
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Note**: This command is read-only. No state is modified.
|