orchestrix 16.1.1 → 16.1.3
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/lib/embedded/yuri.md +46 -8
- package/lib/license.js +36 -4
- package/package.json +1 -1
package/lib/embedded/yuri.md
CHANGED
|
@@ -189,19 +189,57 @@ This creates a tmux session with 4 windows:
|
|
|
189
189
|
|
|
190
190
|
### HANDOFF Auto-Collaboration Flow
|
|
191
191
|
|
|
192
|
+
The HANDOFF chain depends on the story's **test_design_level** (set by SM based on complexity):
|
|
193
|
+
|
|
194
|
+
#### Standard/Comprehensive Stories (most stories)
|
|
195
|
+
|
|
192
196
|
```
|
|
193
197
|
SM (win 1) *draft → Create Story
|
|
194
198
|
↓ 🎯 HANDOFF TO architect: *review {story_id}
|
|
195
199
|
Architect (win 0) → Technical review
|
|
200
|
+
↓ 🎯 HANDOFF TO qa: *test-design {story_id}
|
|
201
|
+
QA (win 3) → Design test scenarios & strategy BEFORE development
|
|
196
202
|
↓ 🎯 HANDOFF TO dev: *develop-story {story_id}
|
|
197
|
-
Dev (win 2) → Code implementation
|
|
203
|
+
Dev (win 2) → Code implementation (guided by QA's test design)
|
|
198
204
|
↓ 🎯 HANDOFF TO qa: *review {story_id}
|
|
199
|
-
QA (win 3) →
|
|
200
|
-
↓ 🎯 HANDOFF TO sm: *draft (next Story)
|
|
205
|
+
QA (win 3) → Review implementation against test design
|
|
206
|
+
↓ pass → 🎯 HANDOFF TO sm: *draft (next Story)
|
|
207
|
+
↓ fail → 🎯 HANDOFF TO dev: *apply-qa-fixes {story_id}
|
|
201
208
|
SM (win 1) → Create next Story
|
|
202
209
|
↓ ... loop until all stories complete
|
|
203
210
|
```
|
|
204
211
|
|
|
212
|
+
#### Simple Stories (low complexity, no security concerns)
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
SM (win 1) *draft → Create Story
|
|
216
|
+
↓ 🎯 HANDOFF TO architect: *review {story_id}
|
|
217
|
+
Architect (win 0) → Technical review
|
|
218
|
+
↓ 🎯 HANDOFF TO dev: *develop-story {story_id} (skip test-design)
|
|
219
|
+
Dev (win 2) → Code implementation
|
|
220
|
+
↓ 🎯 HANDOFF TO qa: *review {story_id}
|
|
221
|
+
QA (win 3) → Review implementation
|
|
222
|
+
↓ ... same as above
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### Quick Mode Stories (trivial, skip Architect + test-design)
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
SM (win 1) *draft → Create Story (mode=quick)
|
|
229
|
+
↓ 🎯 HANDOFF TO dev: *quick-develop {story_id}
|
|
230
|
+
Dev (win 2) → Quick implementation
|
|
231
|
+
↓ 🎯 HANDOFF TO qa: *quick-verify {story_id}
|
|
232
|
+
QA (win 3) → Lightweight verification
|
|
233
|
+
↓ ... next story
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
#### QA Feedback Loops
|
|
237
|
+
|
|
238
|
+
When QA finds issues:
|
|
239
|
+
- **Code issues** → `🎯 HANDOFF TO dev: *apply-qa-fixes {story_id}` → Dev fixes → QA re-reviews
|
|
240
|
+
- **Architecture concerns** → `🎯 HANDOFF TO architect: *review-escalation {story_id}` → Architect resolves → back to Dev
|
|
241
|
+
- **Story issues** → `🎯 HANDOFF TO sm: *revise-story {story_id}` → SM revises → restart from Architect
|
|
242
|
+
|
|
205
243
|
### Monitoring
|
|
206
244
|
|
|
207
245
|
```bash
|
|
@@ -453,16 +491,16 @@ For unfamiliar projects, start with: `/o architect` → `*document-project`
|
|
|
453
491
|
|
|
454
492
|
| Agent | ID | Commands | Output |
|
|
455
493
|
|-------|----|----------|--------|
|
|
456
|
-
| SM | `sm` | `*draft`, `*draft-bugfix {bug}` | `docs/stories/*.md` |
|
|
457
|
-
| Architect | `architect` | `*review {
|
|
458
|
-
|
|
|
459
|
-
|
|
|
494
|
+
| SM | `sm` | `*draft`, `*draft-bugfix {bug}`, `*revise-story {id}`, `*apply-proposal {id}` | `docs/stories/*.md` |
|
|
495
|
+
| Architect | `architect` | `*review {id}`, `*review-escalation {id}` | Technical review |
|
|
496
|
+
| QA | `qa` | `*test-design {id}`, `*review {id}`, `*quick-verify {id}`, `*smoke-test {epic}` | Test design / review report |
|
|
497
|
+
| Dev | `dev` | `*develop-story {id}`, `*quick-develop {id}`, `*apply-qa-fixes {id}`, `*solo "{desc}"`, `*quick-fix "{desc}"` | Code + git commit |
|
|
460
498
|
|
|
461
499
|
### Management Agents
|
|
462
500
|
|
|
463
501
|
| Agent | ID | Commands |
|
|
464
502
|
|-------|----|----------|
|
|
465
|
-
| PO | `po` | `*route-change` |
|
|
503
|
+
| PO | `po` | `*route-change`, `*execute-checklist`, `*shard` |
|
|
466
504
|
|
|
467
505
|
|
|
468
506
|
---
|
package/lib/license.js
CHANGED
|
@@ -2,14 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
5
6
|
const ui = require('./ui');
|
|
6
7
|
|
|
8
|
+
// License key format: orch_{tier}_{identifier}
|
|
9
|
+
// Examples: orch_live_xxx, orch_trial_xxx, ORCH-TEAM-xxx
|
|
10
|
+
const KEY_PATTERN = /^(orch_[a-z]+_[\w]+|ORCH-[A-Z]+-[\w-]+)$/;
|
|
11
|
+
|
|
12
|
+
function isValidKeyFormat(key) {
|
|
13
|
+
return KEY_PATTERN.test(key);
|
|
14
|
+
}
|
|
15
|
+
|
|
7
16
|
/**
|
|
8
17
|
* Resolve license key from multiple sources (priority order):
|
|
9
18
|
* 1. --key CLI flag
|
|
10
19
|
* 2. ORCHESTRIX_LICENSE_KEY env var
|
|
11
|
-
* 3. .
|
|
12
|
-
* 4.
|
|
20
|
+
* 3. .orchestrix-key hidden file (project dir → home dir)
|
|
21
|
+
* 4. .env.local file in cwd
|
|
22
|
+
* 5. Interactive prompt (saves to .orchestrix-key for next time)
|
|
13
23
|
*/
|
|
14
24
|
async function resolveKey(flags) {
|
|
15
25
|
// 1. CLI flag
|
|
@@ -23,7 +33,23 @@ async function resolveKey(flags) {
|
|
|
23
33
|
return process.env.ORCHESTRIX_LICENSE_KEY;
|
|
24
34
|
}
|
|
25
35
|
|
|
26
|
-
// 3. .
|
|
36
|
+
// 3. .orchestrix-key hidden file (project dir first, then home dir)
|
|
37
|
+
const keyLocations = [
|
|
38
|
+
path.join(process.cwd(), '.orchestrix-key'),
|
|
39
|
+
path.join(os.homedir(), '.orchestrix-key'),
|
|
40
|
+
];
|
|
41
|
+
for (const keyPath of keyLocations) {
|
|
42
|
+
if (fs.existsSync(keyPath)) {
|
|
43
|
+
const raw = fs.readFileSync(keyPath, 'utf-8').trim();
|
|
44
|
+
if (raw && isValidKeyFormat(raw)) {
|
|
45
|
+
const rel = keyPath.startsWith(process.cwd()) ? '.orchestrix-key' : '~/.orchestrix-key';
|
|
46
|
+
ui.info(`Using license key from ${rel}`);
|
|
47
|
+
return raw;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 4. .env.local file
|
|
27
53
|
const envLocalPath = path.join(process.cwd(), '.env.local');
|
|
28
54
|
if (fs.existsSync(envLocalPath)) {
|
|
29
55
|
const content = fs.readFileSync(envLocalPath, 'utf-8');
|
|
@@ -34,11 +60,17 @@ async function resolveKey(flags) {
|
|
|
34
60
|
}
|
|
35
61
|
}
|
|
36
62
|
|
|
37
|
-
//
|
|
63
|
+
// 5. Interactive prompt
|
|
38
64
|
const key = await ui.prompt('Enter your Orchestrix license key');
|
|
39
65
|
if (!key) {
|
|
40
66
|
throw new Error('License key is required. Use --key <KEY> or set ORCHESTRIX_LICENSE_KEY env var.');
|
|
41
67
|
}
|
|
68
|
+
|
|
69
|
+
// Save to ~/.orchestrix-key for future use
|
|
70
|
+
const globalKeyPath = path.join(os.homedir(), '.orchestrix-key');
|
|
71
|
+
fs.writeFileSync(globalKeyPath, key + '\n', { mode: 0o600 });
|
|
72
|
+
ui.success(`License key saved to ~/.orchestrix-key`);
|
|
73
|
+
|
|
42
74
|
return key;
|
|
43
75
|
}
|
|
44
76
|
|