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,172 @@
|
|
|
1
|
+
# Phase 4: Test Project
|
|
2
|
+
|
|
3
|
+
**Command**: `*test`
|
|
4
|
+
**Purpose**: Run smoke tests on each epic via the QA agent, fix failures through the Dev agent, and verify all epics pass.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Prerequisites
|
|
9
|
+
|
|
10
|
+
- Phase 3 (Develop) must be complete
|
|
11
|
+
- Dev tmux session must be running (or will be recreated)
|
|
12
|
+
- `.yuri/memory.yaml` must exist with `phase3_develop: complete`
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Step 0: Load Memory and Collect Epic List
|
|
17
|
+
|
|
18
|
+
1. Read `.yuri/memory.yaml` — restore project context
|
|
19
|
+
2. Verify `lifecycle.phase_status.phase3_develop == complete`
|
|
20
|
+
- If not → "Phase 3 not complete. Run `*develop` first."
|
|
21
|
+
3. Set `PROJECT_DIR` from `project.project_root`
|
|
22
|
+
4. Collect epic list from sharded PRD files:
|
|
23
|
+
```bash
|
|
24
|
+
ls "$PROJECT_DIR/docs/prd/epic-"*.yaml 2>/dev/null | sed 's/.*epic-//' | sed 's/\.yaml//'
|
|
25
|
+
```
|
|
26
|
+
5. If `phase4_test == in_progress` → resume from last untested epic
|
|
27
|
+
6. If `phase4_test == complete` → offer skip to Phase 5
|
|
28
|
+
|
|
29
|
+
Update memory:
|
|
30
|
+
- `lifecycle.current_phase` → 4
|
|
31
|
+
- `lifecycle.phase_status.phase4_test` → "in_progress"
|
|
32
|
+
- Save immediately
|
|
33
|
+
|
|
34
|
+
Ensure dev session is alive:
|
|
35
|
+
```bash
|
|
36
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
37
|
+
SESSION=$(bash "$SCRIPT_DIR/ensure-session.sh" dev "$PROJECT_DIR")
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 1: Reload QA Agent
|
|
43
|
+
|
|
44
|
+
Reload the QA agent in a clean state:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
tmux send-keys -t "$SESSION:3" "/clear" Enter
|
|
48
|
+
sleep 2
|
|
49
|
+
tmux send-keys -t "$SESSION:3" "/o qa" Enter
|
|
50
|
+
sleep 12
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Report to user:
|
|
54
|
+
```
|
|
55
|
+
🧪 QA agent reloaded. Starting smoke tests...
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Step 2: Smoke Test Each Epic
|
|
61
|
+
|
|
62
|
+
FOR EACH `epic_id` in the epic list:
|
|
63
|
+
|
|
64
|
+
### 2.1 Send Smoke Test Command
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
tmux send-keys -t "$SESSION:3" "*smoke-test $EPIC_ID" Enter
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2.2 Monitor QA Completion
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
SCRIPT_DIR="${CLAUDE_SKILL_DIR}/scripts"
|
|
74
|
+
RESULT=$(bash "$SCRIPT_DIR/monitor-agent.sh" "$SESSION" 3 "" 30 30)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use the same detection strategy (completion message → idle → stability).
|
|
78
|
+
|
|
79
|
+
### 2.3 Parse Results
|
|
80
|
+
|
|
81
|
+
Check for smoke test evidence in `docs/qa/evidence/`.
|
|
82
|
+
|
|
83
|
+
### 2.4 IF FAIL
|
|
84
|
+
|
|
85
|
+
Extract bug descriptions from QA output.
|
|
86
|
+
|
|
87
|
+
FOR EACH bug:
|
|
88
|
+
|
|
89
|
+
1. Reload Dev agent:
|
|
90
|
+
```bash
|
|
91
|
+
tmux send-keys -t "$SESSION:2" "/clear" Enter
|
|
92
|
+
sleep 2
|
|
93
|
+
tmux send-keys -t "$SESSION:2" "/o dev" Enter
|
|
94
|
+
sleep 12
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
2. Send quick-fix:
|
|
98
|
+
```bash
|
|
99
|
+
tmux send-keys -t "$SESSION:2" "*quick-fix \"$BUG_DESCRIPTION\"" Enter
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
3. Monitor Dev completion:
|
|
103
|
+
```bash
|
|
104
|
+
RESULT=$(bash "$SCRIPT_DIR/monitor-agent.sh" "$SESSION" 2 "" 30 30)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
After all bugs fixed, run regression test:
|
|
108
|
+
|
|
109
|
+
1. Reload QA:
|
|
110
|
+
```bash
|
|
111
|
+
tmux send-keys -t "$SESSION:3" "/clear" Enter
|
|
112
|
+
sleep 2
|
|
113
|
+
tmux send-keys -t "$SESSION:3" "/o qa" Enter
|
|
114
|
+
sleep 12
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
2. Re-run smoke test:
|
|
118
|
+
```bash
|
|
119
|
+
tmux send-keys -t "$SESSION:3" "*smoke-test $EPIC_ID" Enter
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
3. Monitor and check results again
|
|
123
|
+
4. Increment `regression_rounds`
|
|
124
|
+
|
|
125
|
+
IF `regression_rounds > 3`:
|
|
126
|
+
- Escalate to user with full diagnostics
|
|
127
|
+
- Include QA evidence and Dev fix attempts
|
|
128
|
+
- Wait for user guidance
|
|
129
|
+
|
|
130
|
+
### 2.5 IF PASS
|
|
131
|
+
|
|
132
|
+
Mark epic as passed in memory:
|
|
133
|
+
```yaml
|
|
134
|
+
testing.epics[n].status: passed
|
|
135
|
+
testing.epics[n].rounds: {round_count}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Report:
|
|
139
|
+
```
|
|
140
|
+
✅ Epic {epic_id} passed smoke test ({rounds} round(s))
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Proceed to next epic.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Step 3: All Epics Pass
|
|
148
|
+
|
|
149
|
+
1. Save checkpoint:
|
|
150
|
+
- `lifecycle.phase_status.phase4_test` → "complete"
|
|
151
|
+
- `lifecycle.current_step` → "phase4.complete"
|
|
152
|
+
- Write checkpoint → `.yuri/checkpoints/checkpoint-phase4.yaml`
|
|
153
|
+
|
|
154
|
+
2. Report:
|
|
155
|
+
```
|
|
156
|
+
## ✅ Testing Phase Complete
|
|
157
|
+
|
|
158
|
+
All epics passed smoke testing:
|
|
159
|
+
|
|
160
|
+
| Epic | Status | Rounds |
|
|
161
|
+
|------|--------|--------|
|
|
162
|
+
| {id} | ✅ Pass | {n} |
|
|
163
|
+
| ... | ... | ... |
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
3. Present deployment options:
|
|
167
|
+
```
|
|
168
|
+
🚀 Ready to deploy! Run `/yuri *deploy` to see deployment options.
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
- If user confirms → execute `tasks/yuri-deploy-project.md`
|
|
172
|
+
- If user declines → save state, end with reminder
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Yuri Project Memory — auto-generated, do not edit manually
|
|
2
|
+
# Tracks the full lifecycle state of a Yuri-managed project.
|
|
3
|
+
|
|
4
|
+
project:
|
|
5
|
+
name: ""
|
|
6
|
+
dir_name: ""
|
|
7
|
+
project_root: ""
|
|
8
|
+
license_key: ""
|
|
9
|
+
description: ""
|
|
10
|
+
created_at: ""
|
|
11
|
+
tech_stack: ""
|
|
12
|
+
|
|
13
|
+
lifecycle:
|
|
14
|
+
current_phase: 0
|
|
15
|
+
current_step: ""
|
|
16
|
+
started_at: ""
|
|
17
|
+
phase_status:
|
|
18
|
+
phase1_create: pending
|
|
19
|
+
phase2_plan: pending
|
|
20
|
+
phase3_develop: pending
|
|
21
|
+
phase4_test: pending
|
|
22
|
+
phase5_deploy: pending
|
|
23
|
+
|
|
24
|
+
tmux:
|
|
25
|
+
planning_session: ""
|
|
26
|
+
dev_session: ""
|
|
27
|
+
|
|
28
|
+
planning:
|
|
29
|
+
steps:
|
|
30
|
+
- id: analyst
|
|
31
|
+
status: pending
|
|
32
|
+
output: ""
|
|
33
|
+
completed_at: ""
|
|
34
|
+
- id: pm
|
|
35
|
+
status: pending
|
|
36
|
+
output: ""
|
|
37
|
+
completed_at: ""
|
|
38
|
+
- id: ux-expert
|
|
39
|
+
status: pending
|
|
40
|
+
output: ""
|
|
41
|
+
completed_at: ""
|
|
42
|
+
- id: architect
|
|
43
|
+
status: pending
|
|
44
|
+
output: ""
|
|
45
|
+
completed_at: ""
|
|
46
|
+
- id: po-validate
|
|
47
|
+
status: pending
|
|
48
|
+
output: ""
|
|
49
|
+
completed_at: ""
|
|
50
|
+
- id: po-shard
|
|
51
|
+
status: pending
|
|
52
|
+
output: ""
|
|
53
|
+
completed_at: ""
|
|
54
|
+
|
|
55
|
+
development:
|
|
56
|
+
total_epics: 0
|
|
57
|
+
total_stories: 0
|
|
58
|
+
stories_done: 0
|
|
59
|
+
stories_in_progress: []
|
|
60
|
+
last_progress_at: ""
|
|
61
|
+
stuck_count: 0
|
|
62
|
+
|
|
63
|
+
testing:
|
|
64
|
+
epics: []
|
|
65
|
+
|
|
66
|
+
deployment:
|
|
67
|
+
strategy: ""
|
|
68
|
+
url: ""
|
|
69
|
+
status: ""
|
|
70
|
+
|
|
71
|
+
changes:
|
|
72
|
+
history: []
|
|
73
|
+
|
|
74
|
+
errors:
|
|
75
|
+
last_error: ""
|
|
76
|
+
total_errors: 0
|
|
77
|
+
recovery_log: []
|