maestro-flow 0.4.12 → 0.4.13

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 (129) hide show
  1. package/.agents/agents/role-design-author.md +6 -4
  2. package/.agents/skills/learn-decompose/SKILL.md +6 -6
  3. package/.agents/skills/learn-follow/SKILL.md +4 -4
  4. package/.agents/skills/learn-investigate/SKILL.md +6 -6
  5. package/.agents/skills/learn-retro/SKILL.md +7 -7
  6. package/.agents/skills/learn-second-opinion/SKILL.md +4 -4
  7. package/.agents/skills/maestro-amend/SKILL.md +1 -0
  8. package/.agents/skills/maestro-analyze/SKILL.md +10 -3
  9. package/.agents/skills/maestro-blueprint/SKILL.md +4 -3
  10. package/.agents/skills/maestro-brainstorm/SKILL.md +5 -4
  11. package/.agents/skills/maestro-fork/SKILL.md +1 -1
  12. package/.agents/skills/maestro-guard/SKILL.md +3 -2
  13. package/.agents/skills/maestro-impeccable/SKILL.md +13 -11
  14. package/.agents/skills/maestro-milestone-release/SKILL.md +1 -1
  15. package/.agents/skills/maestro-plan/SKILL.md +3 -1
  16. package/.agents/skills/maestro-ralph-execute/SKILL.md +4 -3
  17. package/.agents/skills/maestro-roadmap/SKILL.md +4 -3
  18. package/.agents/skills/manage-harvest/SKILL.md +1 -0
  19. package/.agents/skills/manage-issue-discover/SKILL.md +1 -1
  20. package/.agents/skills/manage-knowhow/SKILL.md +1 -1
  21. package/.agents/skills/manage-learn/SKILL.md +4 -4
  22. package/.agents/skills/quality-auto-test/SKILL.md +5 -5
  23. package/.agents/skills/quality-refactor/SKILL.md +1 -1
  24. package/.agents/skills/quality-retrospective/SKILL.md +2 -2
  25. package/.agents/skills/security-audit/SKILL.md +24 -0
  26. package/.agents/skills/spec-remove/SKILL.md +6 -2
  27. package/.agy/agents/role-design-author.md +6 -4
  28. package/.agy/skills/learn-decompose/SKILL.md +6 -6
  29. package/.agy/skills/learn-follow/SKILL.md +4 -4
  30. package/.agy/skills/learn-investigate/SKILL.md +6 -6
  31. package/.agy/skills/learn-retro/SKILL.md +7 -7
  32. package/.agy/skills/learn-second-opinion/SKILL.md +4 -4
  33. package/.agy/skills/maestro-amend/SKILL.md +1 -0
  34. package/.agy/skills/maestro-analyze/SKILL.md +10 -3
  35. package/.agy/skills/maestro-blueprint/SKILL.md +4 -3
  36. package/.agy/skills/maestro-brainstorm/SKILL.md +5 -4
  37. package/.agy/skills/maestro-fork/SKILL.md +1 -1
  38. package/.agy/skills/maestro-guard/SKILL.md +3 -2
  39. package/.agy/skills/maestro-impeccable/SKILL.md +13 -11
  40. package/.agy/skills/maestro-milestone-release/SKILL.md +1 -1
  41. package/.agy/skills/maestro-plan/SKILL.md +3 -1
  42. package/.agy/skills/maestro-ralph-execute/SKILL.md +4 -3
  43. package/.agy/skills/maestro-roadmap/SKILL.md +4 -3
  44. package/.agy/skills/manage-harvest/SKILL.md +1 -0
  45. package/.agy/skills/manage-issue-discover/SKILL.md +1 -1
  46. package/.agy/skills/manage-knowhow/SKILL.md +1 -1
  47. package/.agy/skills/manage-learn/SKILL.md +4 -4
  48. package/.agy/skills/quality-auto-test/SKILL.md +5 -5
  49. package/.agy/skills/quality-refactor/SKILL.md +1 -1
  50. package/.agy/skills/quality-retrospective/SKILL.md +2 -2
  51. package/.agy/skills/security-audit/SKILL.md +24 -0
  52. package/.agy/skills/spec-remove/SKILL.md +6 -2
  53. package/.claude/agents/role-design-author.md +6 -4
  54. package/.claude/commands/learn-decompose.md +6 -6
  55. package/.claude/commands/learn-follow.md +4 -4
  56. package/.claude/commands/learn-investigate.md +6 -6
  57. package/.claude/commands/learn-retro.md +7 -7
  58. package/.claude/commands/learn-second-opinion.md +4 -4
  59. package/.claude/commands/maestro-amend.md +1 -0
  60. package/.claude/commands/maestro-analyze.md +10 -3
  61. package/.claude/commands/maestro-blueprint.md +4 -3
  62. package/.claude/commands/maestro-brainstorm.md +5 -4
  63. package/.claude/commands/maestro-fork.md +1 -1
  64. package/.claude/commands/maestro-guard.md +3 -2
  65. package/.claude/commands/maestro-impeccable.md +13 -11
  66. package/.claude/commands/maestro-milestone-release.md +1 -1
  67. package/.claude/commands/maestro-plan.md +3 -1
  68. package/.claude/commands/maestro-ralph-execute.md +4 -3
  69. package/.claude/commands/maestro-roadmap.md +4 -3
  70. package/.claude/commands/manage-harvest.md +1 -0
  71. package/.claude/commands/manage-issue-discover.md +1 -1
  72. package/.claude/commands/manage-knowhow.md +1 -1
  73. package/.claude/commands/manage-learn.md +4 -4
  74. package/.claude/commands/quality-auto-test.md +5 -5
  75. package/.claude/commands/quality-refactor.md +1 -1
  76. package/.claude/commands/quality-retrospective.md +2 -2
  77. package/.claude/commands/security-audit.md +24 -0
  78. package/.claude/commands/spec-remove.md +6 -2
  79. package/.codex/skills/learn-decompose/SKILL.md +4 -4
  80. package/.codex/skills/learn-follow/SKILL.md +3 -3
  81. package/.codex/skills/learn-investigate/SKILL.md +3 -3
  82. package/.codex/skills/learn-retro/SKILL.md +3 -3
  83. package/.codex/skills/learn-second-opinion/SKILL.md +3 -3
  84. package/.codex/skills/maestro-analyze/SKILL.md +4 -3
  85. package/.codex/skills/maestro-blueprint/SKILL.md +4 -3
  86. package/.codex/skills/maestro-brainstorm/SKILL.md +148 -7
  87. package/.codex/skills/maestro-fork/SKILL.md +2 -0
  88. package/.codex/skills/maestro-guard/SKILL.md +3 -2
  89. package/.codex/skills/maestro-impeccable/SKILL.md +13 -11
  90. package/.codex/skills/maestro-ralph/SKILL.md +1 -1
  91. package/.codex/skills/maestro-roadmap/SKILL.md +4 -3
  92. package/.codex/skills/manage-codebase-rebuild/SKILL.md +9 -5
  93. package/.codex/skills/manage-harvest/SKILL.md +1 -1
  94. package/.codex/skills/manage-issue-discover/SKILL.md +1 -1
  95. package/.codex/skills/manage-knowhow/SKILL.md +1 -1
  96. package/.codex/skills/manage-learn/SKILL.md +3 -3
  97. package/.codex/skills/quality-refactor/SKILL.md +2 -2
  98. package/.codex/skills/quality-retrospective/SKILL.md +3 -3
  99. package/.codex/skills/security-audit/SKILL.md +24 -0
  100. package/.codex/skills/spec-remove/SKILL.md +8 -2
  101. package/package.json +1 -1
  102. package/workflows/agy-instructions.md +2 -0
  103. package/workflows/auto-test.md +6 -1
  104. package/workflows/brainstorm.md +22 -8
  105. package/workflows/claude-instructions.md +2 -0
  106. package/workflows/codex-instructions.md +16 -83
  107. package/workflows/debug.md +1 -1
  108. package/workflows/harvest.md +1 -1
  109. package/workflows/impeccable.md +2 -0
  110. package/workflows/issue-analyze.md +14 -100
  111. package/workflows/issue-discover.md +2 -3
  112. package/workflows/issue-execute.md +1 -1
  113. package/workflows/issue-gaps-analyze.md +2 -0
  114. package/workflows/learn.md +1 -1
  115. package/workflows/maestro-chain-execute.md +10 -228
  116. package/workflows/maestro.md +1 -0
  117. package/workflows/milestone-complete.md +3 -3
  118. package/workflows/milestone-release.md +82 -0
  119. package/workflows/plan.md +4 -4
  120. package/workflows/retrospective.md +1 -1
  121. package/workflows/roadmap.md +1 -1
  122. package/workflows/spec-generate.md +2 -0
  123. package/workflows/specs-add.md +6 -1
  124. package/workflows/specs-load.md +6 -1
  125. package/workflows/specs-setup.md +6 -1
  126. package/workflows/sync.md +13 -0
  127. package/workflows/tools-spec.md +4 -0
  128. package/workflows/ui-design.md +3 -3
  129. package/workflows/wiki-manage.md +2 -0
@@ -39,13 +39,13 @@ Phase or task: $ARGUMENTS (required — phase number)
39
39
 
40
40
  **Intelligent routing** (auto-detected from project state):
41
41
 
42
- | Priority | Condition | Route | Equivalent to |
43
- |----------|-----------|-------|---------------|
42
+ | Priority | Condition | Route | Reference skill |
43
+ |----------|-----------|-------|-----------------|
44
44
  | 1 | Active session exists (state.json status=running) | Resume | — |
45
45
  | 2 | --re-run flag + previous failures | Re-run | — |
46
- | 3 | Spec package exists (REQ-*.md) | spec | quality-business-test |
47
- | 4 | Nyquist gaps exist (verification.json) | gap | quality-test-gen |
48
- | 5 | Default | code | quality-integration-test |
46
+ | 3 | Spec package exists (REQ-*.md) | spec | quality-business-test (separate skill) |
47
+ | 4 | Nyquist gaps exist (verification.json) | gap | quality-test-gen (separate skill) |
48
+ | 5 | Default | code | quality-integration-test (separate skill) |
49
49
 
50
50
  Flags, artifact context resolution, and output formats defined in workflow auto-test.md.
51
51
 
@@ -48,7 +48,7 @@ After successful refactoring, ask user once: "Record refactoring pattern as codi
48
48
 
49
49
  **Next-step routing on completion:**
50
50
  - All tests pass → `/quality-sync` (update codebase docs)
51
- - Test failures after refactor → `/quality-debug {scope}`
51
+ - Test failures after refactor → `/quality-debug "test failures after refactor in {scope}"`
52
52
  - No test suite available → `/quality-auto-test {phase}`
53
53
  </execution>
54
54
 
@@ -15,7 +15,7 @@ allowed-tools:
15
15
  - write_to_file
16
16
  ---
17
17
  <purpose>
18
- Post-execution multi-perspective retrospective (复盘) for completed phases. Consumes existing execution artifacts (verification.json, review.json, issues.jsonl, plan.json, .summaries/, uat.md, state.json) and runs four parallel lenses — technical, process, quality, decision — to distill reusable insights. Routes each insight into the appropriate store: spec stub for reusable patterns, memory tip for process notes, issue for recurring gaps. Auto-scans for unreviewed completed phases and reports the backlog. Every insight is also persisted to `.workflow/knowhow/specs/learnings.md` as `<spec-entry>` blocks for cross-phase queryability.
18
+ Post-execution multi-perspective retrospective (复盘) for completed phases. Consumes existing execution artifacts (verification.json, review.json, issues.jsonl, plan.json, .summaries/, uat.md, state.json) and runs four parallel lenses — technical, process, quality, decision — to distill reusable insights. Routes each insight into the appropriate store: spec stub for reusable patterns, memory tip for process notes, issue for recurring gaps. Auto-scans for unreviewed completed phases and reports the backlog. Every insight is also persisted to `.workflow/specs/learnings.md` as `<spec-entry>` blocks for cross-phase queryability.
19
19
  </purpose>
20
20
 
21
21
  <required_reading>
@@ -72,7 +72,7 @@ Follow `~/.maestro/workflows/retrospective.md` Stages 1–8 in order. Key invari
72
72
  - [ ] Spec entries (if any) appended as `<spec-entry>` to matching `.workflow/specs/{category-file}.md`
73
73
  - [ ] Issue rows (if any) match canonical issues.jsonl schema (status "open", full issue_history, all required fields)
74
74
  - [ ] Note tips (if any) created via `view_file(AbsolutePath="<agy-skills-dir>/manage-learn/SKILL.md") + execute inline (args: "tip ...")`
75
- - [ ] `specs/learnings.md` appended with one `<spec-entry>` per insight regardless of routing target
75
+ - [ ] `.workflow/specs/learnings.md` appended with one `<spec-entry>` per insight regardless of routing target
76
76
  - [ ] No existing phase artifacts modified (verification.json, review.json, plan.json untouched)
77
77
  - [ ] Confirmation banner displays routing counts and next-step suggestions
78
78
  - [ ] Next step: `/manage-status` to review state, or `/manage-issue list --source retrospective` to triage created issues, or `/manage-learn list` to browse the knowhow library
@@ -18,6 +18,10 @@ Systematic security audit covering OWASP Top 10, dependency supply chain, secret
18
18
  CI/CD pipeline review, and optional STRIDE threat modeling. Three tiers control depth vs speed.
19
19
  </purpose>
20
20
 
21
+ <required_reading>
22
+ @~/.maestro/workflows/review.md
23
+ </required_reading>
24
+
21
25
  <context>
22
26
  $ARGUMENTS — Parse tier and scope:
23
27
  - Tier: `quick` (default) | `standard` | `deep`
@@ -145,6 +149,26 @@ CONCERNS: {count} critical findings require immediate action
145
149
  NEXT: /quality-review
146
150
  --- END STATUS ---
147
151
  ```
152
+
153
+ **Register artifact on completion** (so retrospective/harvest can trace this audit):
154
+ ```
155
+ Append to state.json.artifacts[]:
156
+ {
157
+ id: nextArtifactId(artifacts, "review"), // RVW-NNN (security-audit reuses review type)
158
+ type: "review",
159
+ subtype: "security-audit",
160
+ milestone: current_milestone || null,
161
+ phase: target_phase || null,
162
+ scope: target_phase ? "phase" : "standalone",
163
+ path: "scratch/{YYYYMMDD}-security-audit-{tier}-{slug}",
164
+ status: critical_count == 0 ? "completed" : "completed_with_concerns",
165
+ tier: tier, // quick|standard|deep
166
+ harvested: false,
167
+ created_at: start_time,
168
+ completed_at: now()
169
+ }
170
+ ```
171
+ Write findings report to the same `path` (severity matrix, file:line refs, remediation).
148
172
  </execution>
149
173
 
150
174
  <success_criteria>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: spec-remove
3
3
  description: Remove spec entry by ID
4
- argument-hint: <entry-id>
4
+ argument-hint: <entry-id> [--cascade]
5
5
  allowed-tools:
6
6
  - ask_question
7
7
  - grep_search
@@ -25,6 +25,9 @@ $ARGUMENTS -- expects `<entry-id>` (e.g., `spec-learnings-003`, `spec-coding-con
25
25
  **Entry ID format**: `spec-{file-stem}-{NNN}` — the sub-node ID assigned by WikiIndexer when indexing `<spec-entry>` blocks.
26
26
 
27
27
  **Discovery**: Use `maestro wiki list --type spec --json` or `/spec-load --keyword <term>` to find entry IDs.
28
+
29
+ **Flags:**
30
+ - `--cascade` — When the target spec is a ref-type entry (created via `spec-add --ref` and linked to a knowhow document), also delete the referenced knowhow file. Without this flag, ref-type removal leaves an orphan knowhow file.
28
31
  </context>
29
32
 
30
33
  <execution>
@@ -46,5 +49,6 @@ Follow '~/.maestro/workflows/specs-remove.md' completely.
46
49
  - [ ] User confirmed removal (unless -y flag)
47
50
  - [ ] Entry removed from container file via `maestro wiki remove-entry`
48
51
  - [ ] Wiki index auto-updated
49
- - [ ] Confirmation displayed with removed entry details
52
+ - [ ] If `--cascade` and entry has a `ref` attribute: referenced knowhow file deleted, orphan avoided
53
+ - [ ] Confirmation displayed with removed entry details (and cascaded knowhow path if applicable)
50
54
  </success_criteria>
@@ -17,9 +17,9 @@ You produce a set of analysis files for one role in a brainstorm session, organi
17
17
  | Field | Required | Notes |
18
18
  |---|---|---|
19
19
  | `role_name` | yes | kebab-case slug, e.g. `system-architect` |
20
- | `role_template_path` | yes | `~/.maestro/templates/planning-roles/{role}.md` |
21
- | `guidance_path` | yes | path to `guidance-specification.md` |
22
- | `output_dir` | yes | absolute path to role folder — `{session_dir}/{role}/` |
20
+ | `role_template_path` | yes | **absolute** path to `planning-roles/{role}.md` (orchestrator MUST expand `~/`) |
21
+ | `guidance_path` | yes | **absolute** path to `guidance-specification.md` |
22
+ | `output_dir` | yes | **absolute** path to role folder — `{session_dir}/{role}/`. If you receive a relative path or a literal `{output_dir}` placeholder, fail fast with `TASK BLOCKED: output_dir is not absolute`. |
23
23
  | `feature_list` | optional | F-id + slug + title rows; if missing, fall back to non-feature organization |
24
24
  | `design_research` | optional | external research markdown to integrate as evidence |
25
25
  | `project_specs` | optional | pre-loaded `maestro spec load` output |
@@ -28,7 +28,9 @@ You produce a set of analysis files for one role in a brainstorm session, organi
28
28
 
29
29
  ## Output Contract
30
30
 
31
- Write files to `output_dir/`. Do NOT write files anywhere else.
31
+ Write files to `output_dir/` using the Write tool. Do NOT write files anywhere else. Do NOT return analysis as chat text — files on disk are the only valid deliverable. After writing, verify with Glob that `analysis.md` exists; if any Write call fails (e.g. relative path rejected), fail fast with `TASK BLOCKED`.
32
+
33
+ **Authority note**: This Output Contract is authoritative for file layout. The role template at `role_template_path` may contain a legacy "## Brainstorming Analysis Structure" section describing a single-file layout — ignore it for file structure. Use the role template ONLY to source §3 subsection headings (via its "## MUST-Have Sections (Brainstorming)" block when present).
32
34
 
33
35
  ### File Structure
34
36
 
@@ -25,8 +25,8 @@ $ARGUMENTS — target path/module and optional flags.
25
25
  - `--save-spec`: `Skill("spec-add")` for each new pattern
26
26
  - `--save-wiki`: create wiki note per dimension group
27
27
 
28
- **Storage read**: target files + `coding-conventions.md` + `specs/learnings.md` (dedup)
29
- **Storage write**: `.workflow/knowhow/KNW-decompose-{slug}-{date}.md` + append `specs/learnings.md`
28
+ **Storage read**: target files + `coding-conventions.md` + `.workflow/specs/learnings.md` (dedup)
29
+ **Storage write**: `.workflow/knowhow/KNW-decompose-{slug}-{date}.md` + append `.workflow/specs/learnings.md`
30
30
  </context>
31
31
 
32
32
  <state_machine>
@@ -47,7 +47,7 @@ S_RESOLVE:
47
47
  → S_RESOLVE WHEN: unresolvable DO: AskUserQuestion
48
48
 
49
49
  S_DEDUP:
50
- → S_ANALYZE DO: read coding-conventions.md + specs/learnings.md → build known pattern set
50
+ → S_ANALYZE DO: read coding-conventions.md + .workflow/specs/learnings.md → build known pattern set
51
51
 
52
52
  S_ANALYZE:
53
53
  → S_CROSSREF DO: A_PARALLEL_DIMENSION_ANALYSIS
@@ -59,7 +59,7 @@ S_CATALOG:
59
59
  → S_PERSIST DO: write KNW-decompose report (grouped by dimension: pattern table + details)
60
60
 
61
61
  S_PERSIST:
62
- → END DO: append specs/learnings.md [+ spec-add if --save-spec] [+ wiki note if --save-wiki]
62
+ → END DO: append .workflow/specs/learnings.md [+ spec-add if --save-spec] [+ wiki note if --save-wiki]
63
63
 
64
64
  </transitions>
65
65
 
@@ -86,7 +86,7 @@ For each finding, match against known pattern set:
86
86
  | Status | Condition |
87
87
  |--------|-----------|
88
88
  | documented | Already in coding-conventions.md |
89
- | known | In specs/learnings.md |
89
+ | known | In .workflow/specs/learnings.md |
90
90
  | new | Not seen before |
91
91
 
92
92
  Flag contradictions (finding conflicts with documented convention). Merge duplicates across agents (same pattern found by multiple dimensions).
@@ -106,7 +106,7 @@ Flag contradictions (finding conflicts with documented convention). Merge duplic
106
106
  <success_criteria>
107
107
  - [ ] 4 dimension agents spawned in parallel, findings with anchors
108
108
  - [ ] Cross-reference: documented/known/new status assigned
109
- - [ ] Pattern catalog written + specs/learnings.md appended
109
+ - [ ] Pattern catalog written + .workflow/specs/learnings.md appended
110
110
  </success_criteria>
111
111
 
112
112
  <next_step_routing>
@@ -12,7 +12,7 @@ allowed-tools:
12
12
  - AskUserQuestion
13
13
  ---
14
14
  <purpose>
15
- Guided reading: walk through content section-by-section using forcing questions to extract patterns, identify assumptions, and build an understanding map. Findings persist to `specs/learnings.md` as `<spec-entry>` blocks.
15
+ Guided reading: walk through content section-by-section using forcing questions to extract patterns, identify assumptions, and build an understanding map. Findings persist to `.workflow/specs/learnings.md` as `<spec-entry>` blocks.
16
16
  </purpose>
17
17
 
18
18
  <context>
@@ -30,8 +30,8 @@ $ARGUMENTS — target and optional flags.
30
30
  - `--depth deep`: every function, every branch, every assumption
31
31
  - `--save-wiki`: create wiki note entry with reading notes
32
32
 
33
- **Storage read**: target file + wiki forward/backlinks + `coding-conventions.md` + `specs/learnings.md` (dedup)
34
- **Storage write**: `.workflow/knowhow/KNW-follow-{slug}-{date}.md` + append `specs/learnings.md`
33
+ **Storage read**: target file + wiki forward/backlinks + `coding-conventions.md` + `.workflow/specs/learnings.md` (dedup)
34
+ **Storage write**: `.workflow/knowhow/KNW-follow-{slug}-{date}.md` + append `.workflow/specs/learnings.md`
35
35
  </context>
36
36
 
37
37
  <state_machine>
@@ -64,7 +64,7 @@ S_EXTRACT:
64
64
  → S_PERSIST DO: A_EXTRACT_PATTERNS
65
65
 
66
66
  S_PERSIST:
67
- → END DO: write KNW-follow + append specs/learnings.md [+ wiki note if --save-wiki]
67
+ → END DO: write KNW-follow + append .workflow/specs/learnings.md [+ wiki note if --save-wiki]
68
68
 
69
69
  </transitions>
70
70
 
@@ -28,9 +28,9 @@ $ARGUMENTS — question text and optional flags.
28
28
  - `.workflow/knowhow/KNW-investigate-{slug}/evidence.ndjson` — structured evidence (one JSON line per item)
29
29
  - `.workflow/knowhow/KNW-investigate-{slug}/understanding.md` — evolving understanding
30
30
  - `.workflow/knowhow/KNW-investigate-{slug}/report.md` — final report
31
- - `specs/learnings.md` — appended `<spec-entry>` blocks
31
+ - `.workflow/specs/learnings.md` — appended `<spec-entry>` blocks
32
32
 
33
- **Storage read**: source files in scope + `maestro wiki search` + `specs/learnings.md` + `debug-notes.md` + `codebase/architecture.md`
33
+ **Storage read**: source files in scope + `maestro wiki search` + `.workflow/specs/learnings.md` + `debug-notes.md` + `codebase/architecture.md`
34
34
  </context>
35
35
 
36
36
  <state_machine>
@@ -43,7 +43,7 @@ S_HYPOTHESIZE — 生成假设列表 PERSIST:
43
43
  S_CLI_EXPLORE — CLI 辅助探索(可选) PERSIST: evidence.ndjson (append)
44
44
  S_TEST — 逐假设测试 PERSIST: evidence.ndjson + understanding.md
45
45
  S_ESCALATE — 3-strike 升级 PERSIST: —
46
- S_REPORT — 综合报告 + persist PERSIST: report.md + specs/learnings.md
46
+ S_REPORT — 综合报告 + persist PERSIST: report.md + .workflow/specs/learnings.md
47
47
  </states>
48
48
 
49
49
  <transitions>
@@ -55,7 +55,7 @@ S_EVIDENCE:
55
55
  → S_PATTERN DO: A_COLLECT_EVIDENCE
56
56
 
57
57
  S_PATTERN:
58
- → S_HYPOTHESIZE DO: match evidence against debug-notes.md + specs/learnings.md patterns
58
+ → S_HYPOTHESIZE DO: match evidence against debug-notes.md + .workflow/specs/learnings.md patterns
59
59
 
60
60
  S_HYPOTHESIZE:
61
61
  → S_CLI_EXPLORE WHEN: CLI tools enabled AND hypotheses non-trivial DO: A_FORM_HYPOTHESES
@@ -83,7 +83,7 @@ S_REPORT:
83
83
  ### A_FRAME_QUESTION
84
84
 
85
85
  1. Parse question, generate slug, create KNW-investigate-{slug}/
86
- 2. Search prior knowledge: `maestro wiki search "<question>"` + search specs/learnings.md + read debug-notes.md
86
+ 2. Search prior knowledge: `maestro wiki search "<question>"` + search .workflow/specs/learnings.md + read debug-notes.md
87
87
  3. Write initial understanding.md (question, prior knowledge summary, scope, timestamp)
88
88
 
89
89
  ### A_COLLECT_EVIDENCE
@@ -124,7 +124,7 @@ For each hypothesis (rank order):
124
124
  ### A_SYNTHESIZE_REPORT
125
125
 
126
126
  Write report.md: Answer (or INCONCLUSIVE), Evidence Trail table, Hypotheses Tested table, Key Learnings, Open Questions.
127
- Append to specs/learnings.md: confirmed → roles="implement", disproved → roles="analyze" (gotcha).
127
+ Append to .workflow/specs/learnings.md: confirmed → roles="implement", disproved → roles="analyze" (gotcha).
128
128
 
129
129
  </actions>
130
130
 
@@ -14,7 +14,7 @@ allowed-tools:
14
14
  <purpose>
15
15
  Unified retrospective combining git activity analysis and decision quality evaluation. Works on raw git history and wiki/spec data. Two lenses (git, decision), usable independently or together.
16
16
 
17
- All insights persist to `specs/learnings.md` as `<spec-entry>` blocks.
17
+ All insights persist to `.workflow/specs/learnings.md` as `<spec-entry>` blocks.
18
18
  </purpose>
19
19
 
20
20
  <context>
@@ -28,9 +28,9 @@ $ARGUMENTS — lens selection and scope flags.
28
28
  **Storage write**:
29
29
  - `.workflow/knowhow/KNW-retro-{date}.md` — unified report
30
30
  - `.workflow/knowhow/KNW-retro-{date}.json` — structured metrics
31
- - `specs/learnings.md` — appended `<spec-entry>` blocks (source: retro-git / retro-decision)
31
+ - `.workflow/specs/learnings.md` — appended `<spec-entry>` blocks (source: retro-git / retro-decision)
32
32
 
33
- **Storage read**: git history, `.workflow/state.json`, prior `KNW-retro-*.json`, `specs/learnings.md`, wiki specs, `architecture-constraints.md`, phase context files
33
+ **Storage read**: git history, `.workflow/state.json`, prior `KNW-retro-*.json`, `.workflow/specs/learnings.md`, wiki specs, `architecture-constraints.md`, phase context files
34
34
  </context>
35
35
 
36
36
  <state_machine>
@@ -40,7 +40,7 @@ S_PARSE — 解析 lens + flags PERSIST: —
40
40
  S_GIT — git 活动分析(lens=git/all 时) PERSIST: metrics
41
41
  S_DECISION — 决策质量评估(lens=decision/all 时) PERSIST: evaluations
42
42
  S_REPORT — 生成统一报告 PERSIST: .md + .json
43
- S_PERSIST — 写 spec-entry 块 PERSIST: specs/learnings.md
43
+ S_PERSIST — 写 spec-entry 块 PERSIST: .workflow/specs/learnings.md
44
44
  </states>
45
45
 
46
46
  <transitions>
@@ -60,7 +60,7 @@ S_REPORT:
60
60
  → S_PERSIST DO: write KNW-retro-{date}.md + .json
61
61
 
62
62
  S_PERSIST:
63
- → END DO: append insights to specs/learnings.md via `maestro spec add learning`
63
+ → END DO: append insights to .workflow/specs/learnings.md via `maestro spec add learning`
64
64
  RULE: INS-id = hash(lens + metric_or_decision_id + date) for cross-session stability
65
65
 
66
66
  </transitions>
@@ -102,7 +102,7 @@ maestro wiki search "decision" --json
102
102
  maestro wiki list --type spec --json
103
103
  git log --oneline --all --grep="decision\|chose\|decided" -20
104
104
  ```
105
- Plus: architecture-constraints.md, phase context Locked/Deferred sections, specs/learnings.md.
105
+ Plus: architecture-constraints.md, phase context Locked/Deferred sections, .workflow/specs/learnings.md.
106
106
  Apply --phase/--tag/--id filters.
107
107
 
108
108
  **Build registry** per decision: id, title, source, date, rationale, alternatives, phase, implementation_evidence [file paths].
@@ -146,7 +146,7 @@ Apply --phase/--tag/--id filters.
146
146
  - [ ] Git lens: metrics computed (commits, LOC, test ratio, churn, sessions), insights distilled
147
147
  - [ ] Decision lens: decisions collected, 3 agents evaluated in parallel, lifecycle classified
148
148
  - [ ] Unified report + structured JSON written
149
- - [ ] specs/learnings.md appended with stable INS-ids
149
+ - [ ] .workflow/specs/learnings.md appended with stable INS-ids
150
150
  </success_criteria>
151
151
 
152
152
  <next_step_routing>
@@ -17,7 +17,7 @@ Structured second-opinion on code, decisions, or plans. Three modes:
17
17
  - **challenge**: single adversarial agent — break assumptions, propose alternatives
18
18
  - **consult**: interactive Q&A — agent studies target, answers your questions
19
19
 
20
- Findings persist to `specs/learnings.md` as `<spec-entry>` blocks.
20
+ Findings persist to `.workflow/specs/learnings.md` as `<spec-entry>` blocks.
21
21
  </purpose>
22
22
 
23
23
  <context>
@@ -45,7 +45,7 @@ S_RESOLVE — 解析 target PERSIST: —
45
45
  S_CONTEXT — 加载 specs/wiki 上下文 PERSIST: —
46
46
  S_EXECUTE — 按 mode 执行分析 PERSIST: —
47
47
  S_SYNTHESIZE — 综合观点、生成报告 PERSIST: outputs
48
- S_PERSIST — 写文件、append specs/learnings.md PERSIST: knowhow files
48
+ S_PERSIST — 写文件、append .workflow/specs/learnings.md PERSIST: knowhow files
49
49
  </states>
50
50
 
51
51
  <transitions>
@@ -66,7 +66,7 @@ S_SYNTHESIZE:
66
66
  → S_PERSIST DO: merge perspectives → agreements, disagreements, verdict, top 3 recommendations
67
67
 
68
68
  S_PERSIST:
69
- → END DO: write KNW-opinion + append <spec-entry> blocks to specs/learnings.md
69
+ → END DO: write KNW-opinion + append <spec-entry> blocks to .workflow/specs/learnings.md
70
70
 
71
71
  </transitions>
72
72
 
@@ -112,7 +112,7 @@ Interactive loop:
112
112
  <success_criteria>
113
113
  - [ ] Mode executed: review (3 parallel agents) / challenge (adversarial) / consult (interactive Q&A)
114
114
  - [ ] Synthesis with agreements, disagreements, verdict
115
- - [ ] Report written + findings appended to specs/learnings.md
115
+ - [ ] Report written + findings appended to .workflow/specs/learnings.md
116
116
  </success_criteria>
117
117
 
118
118
  <next_step_routing>
@@ -148,6 +148,7 @@ On validation failure: fix JSON, retry (max 2).
148
148
  | Code | Condition | Recovery |
149
149
  |------|-----------|----------|
150
150
  | E001 | No signals from any source | Verify artifact paths or provide description |
151
+ | E002 | Signal source path invalid or unreadable | Check `--from-*` path; ensure artifact exists |
151
152
  | E003 | All signals are code bugs, not command gaps | Use /maestro-quick or /maestro-plan --gaps |
152
153
  | E004 | Overlay validation failed after 2 retries | Review JSON manually |
153
154
  | W001 | Some signals skipped (code bugs) | Route to appropriate fix command |
@@ -38,6 +38,12 @@ $ARGUMENTS -- phase number for micro mode, topic text for macro/adhoc mode, no a
38
38
  - **Macro mode** (text argument): Explore impact surface of a topic/requirement. Produces coarse-grained context with `scope_verdict` to route next step. Use before roadmap or for standalone analysis.
39
39
  - **Micro mode** (numeric argument): Phase-level deep analysis within an existing roadmap. Produces fine-grained context for plan consumption. `analyze 1` = Phase 1 of current milestone.
40
40
 
41
+ **Disambiguation rule (mode selection):**
42
+ - First positional arg matches `^\d+$` (pure digits, e.g. `1`, `42`) → **micro mode** (treat as phase number)
43
+ - First positional arg is non-numeric text (e.g. `auth-refactor`, `improve search`) → **macro mode** (treat as topic)
44
+ - No positional arg → milestone-wide micro mode (when roadmap present) else macro fallback
45
+ - Mixed input like `"1 phase"` is treated as text → macro mode (only bare numerics trigger micro)
46
+
41
47
  **Flags:**
42
48
  - `-y` / `--yes`: Auto mode — skip interactive scoping, use recommended defaults, auto-deepen
43
49
  - `-c` / `--continue`: Resume from existing session (auto-detect session folder + discussion.md)
@@ -54,14 +60,15 @@ Scope routing, output directory format, artifact registration schema, and output
54
60
  <interview_protocol>
55
61
  Interview the user relentlessly until shared understanding is reached. Active only in interactive mode; skip when `-y/--yes`, `-c/--continue`, or input is already specific (explicit phase number or unambiguous topic).
56
62
 
57
- - One decision per turn via AskUserQuestion with 2–4 options + a (Recommended) default; every question must include a `Proceed now` option so the user can end the interview at any time.
58
- - Never ask what code can verify — resolve via `state.json`, `roadmap.md`, `issues.jsonl`, `maestro spec load`, `maestro wiki search`, Grep, or Read.
63
+ - One decision per turn via AskUserQuestion with 2–4 options + a (Recommended) default. The user controls termination keep interviewing until convergence; they can interrupt naturally or via `Other` at any time.
64
+ - Search-first when uncertain: before asking, resolve via `state.json`, `roadmap.md`, `issues.jsonl`, `maestro spec load`, `maestro wiki search`, Grep, Read, or — for open-ended multi-file scans — spawn `Agent(subagent_type: Explore)` / `maestro delegate ... --role explore`. Never ask what code or memory can verify; never bounce your own ambiguity back to the user — search first, then ask only what truly needs human judgment.
65
+ - Writeback cadence: each settled decision is immediately appended/updated in `discussion.md` (top table) and mirrored into `context.md` "Interview Decisions". Do NOT batch writeback to the end — partial decisions must already be on disk before the next question.
59
66
  - Walk the decision dependency tree strictly: scope → depth → dimensions → Go/No-Go threshold. Do not open the next branch until the current one is settled.
60
67
  - Scope guard: only ask about decisions owned by `analyze`. Do not prejudge plan/execute concerns.
61
68
 
62
69
  Decision points: scope (phase / topic / milestone-wide / adhoc / --gaps) → depth (quick / standard / deep) → dimensions (which of the 6 to keep) → Go/No-Go threshold.
63
70
 
64
- Exit: on `Proceed now` or when all decision points are settled, write the table below to the top of `discussion.md` and mirror it into `context.md` under an `Interview Decisions` section:
71
+ Exit: when all decision points are settled (or user explicitly signals to proceed), finalize session metadata. The decision table (populated incrementally during interview) uses this schema:
65
72
  `| # | Decision | Choice | Source (user / code / default) |`
66
73
  </interview_protocol>
67
74
 
@@ -64,14 +64,15 @@ maestro-analyze → maestro-roadmap → maestro-plan
64
64
  <interview_protocol>
65
65
  Interview the user relentlessly about every aspect of the spec until shared understanding is reached. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one; if a question can be answered by exploring the codebase, explore the codebase instead. Active only in interactive mode; skip when `-y/--yes`, `-c/--continue`, or input is already specific (clear idea + scope).
66
66
 
67
- - Ask one question per turn via AskUserQuestion and wait for the user's feedback before continuing; every question must carry a recommended answer marked `(Recommended)`, 2–4 options total, and a `Proceed now` option.
68
- - Never ask what code can verify — resolve via `state.json`, existing artifacts, `maestro spec load`, or direct codebase exploration (Glob/Grep/Read) instead of prompting.
67
+ - Ask one question per turn via AskUserQuestion and wait for the user's feedback before continuing; every question must carry a recommended answer marked `(Recommended)`, 2–4 options total. The user controls termination — keep interviewing until convergence; they can interrupt naturally or via `Other` at any time.
68
+ - Search-first when uncertain: before asking, resolve via `state.json`, existing artifacts, `maestro spec load`, direct codebase exploration (Glob/Grep/Read), or for open-ended multi-file scans — spawn `Agent(subagent_type: Explore)` / `maestro delegate ... --role explore`. Never ask what code or memory can verify; never bounce your own ambiguity back to the user — search first, then ask only what truly needs human judgment.
69
+ - Writeback cadence: each settled decision is immediately persisted into `blueprint-config.json` before the next question. Do NOT batch writeback to the end — partial decisions must already be on disk.
69
70
  - Walk the decision dependency tree depth-first: scope → spec type → focus areas → requirement priorities. Do not open the next branch until the current one is settled.
70
71
  - Scope guard: only decide the shape of the specification. Do not pre-resolve roadmap phases or plan tasks — those belong to downstream commands.
71
72
 
72
73
  Decision points: scope (full product / feature set / single feature) → spec type (service / api / library / platform) → focus areas → whether to run codebase exploration.
73
74
 
74
- Exit: on consensus or `Proceed now`, persist decisions in blueprint-config.json and proceed to Phase 1.
75
+ Exit: on consensus or explicit user signal to proceed, finalize blueprint-config.json (decisions already written incrementally) and proceed to Phase 1.
75
76
  </interview_protocol>
76
77
 
77
78
  <execution>
@@ -30,7 +30,7 @@ $ARGUMENTS -- topic text for auto mode, or role name for single role mode.
30
30
 
31
31
  **Auto mode**: topic text (e.g., "Build real-time collaboration platform") triggers full pipeline.
32
32
  **Single role mode**: valid role name (e.g., "system-architect") runs one role analysis.
33
- **All output** goes to `.workflow/scratch/{YYYYMMDD}-brainstorm-{slug}/`.
33
+ **All output** goes to `.workflow/scratch/brainstorm-{slug}-{YYYYMMDD}/` (orchestrator MUST resolve this to an absolute path before passing to sub-agents).
34
34
  **Artifact registration**: On completion, registers artifact (type=brainstorm) in state.json.
35
35
  **Output boundary**: ALL file writes MUST target `{output_dir}/` or `.workflow/state.json` only. NEVER modify source code or files outside these paths.
36
36
  **Produced files**: `guidance-specification.md`, `design-research.md` (optional), `{role}/analysis.md` + `{role}/analysis-F-*.md` + `{role}/findings-*.md` (per selected role).
@@ -62,14 +62,15 @@ $ARGUMENTS -- topic text for auto mode, or role name for single role mode.
62
62
  <interview_protocol>
63
63
  Interview the user relentlessly until shared understanding is reached. Active only in interactive mode; skip when `--yes/-y`, `--skip-questions`, `--session` (existing session), or input is already specific.
64
64
 
65
- - One decision per turn via AskUserQuestion with 2–4 options + a (Recommended) default; every question must include a `Proceed now` option.
66
- - Never ask what code can verify — resolve via `state.json`, the session directory, `maestro spec load`, or `maestro wiki search`.
65
+ - One decision per turn via AskUserQuestion with 2–4 options + a (Recommended) default. The user controls termination — keep interviewing until convergence; they can interrupt naturally or via `Other` at any time.
66
+ - Search-first when uncertain: before asking, resolve via `state.json`, the session directory, `maestro spec load`, `maestro wiki search`, Glob/Grep/Read, or — for open-ended multi-file scans — spawn `Agent(subagent_type: Explore)` / `maestro delegate ... --role explore`. Never ask what code or memory can verify; never bounce your own ambiguity back to the user — search first, then ask only what truly needs human judgment.
67
+ - Writeback cadence: each time a decision settles, immediately append/update its row in `guidance-specification.md` §11 (create the section if absent). Do NOT batch writeback to the end — partial decisions must already be on disk before the next question.
67
68
  - Branch jumps allowed: the user may switch freely between mode / role / upstream / sub-pipeline branches; sequence is not enforced, but every decision point must end with a definite answer.
68
69
  - Scope guard: only ask about decisions owned by `brainstorm`. Do not pre-resolve roadmap/plan choices.
69
70
 
70
71
  Decision points: mode (auto / single-role / review-only) / role selection and `--count` / `--from` upstream source / whether to enable design-research and the DESIGN.md sub-pipeline.
71
72
 
72
- Exit: on consensus or `Proceed now`, write the table below into `guidance-specification.md` §11 and session metadata:
73
+ Exit: on consensus or explicit user signal to proceed, finalize session metadata. The §11 table (already populated incrementally) uses this schema:
73
74
  `| # | Decision | Choice | Source (user / code / default) |`
74
75
  </interview_protocol>
75
76
 
@@ -19,7 +19,7 @@ Since `.workflow/` is gitignored, this command explicitly copies project context
19
19
 
20
20
  Also supports `--sync` mode to pull latest main branch changes and shared artifacts into an active worktree (prevents source and artifact drift for long-lived worktrees).
21
21
 
22
- Produces `.workflow/worktrees.json` registry in the main worktree and `.workflow/worktree-scope.json` marker in the worktree.
22
+ Produces `.workflow/worktrees.json` registry in the main worktree and `.workflow/worktree-scope.json` marker in the worktree, and writes a scoped `state.json` inside the worktree containing only the forked milestone's artifacts.
23
23
  </purpose>
24
24
 
25
25
  <required_reading>
@@ -77,10 +77,11 @@ Read `.workflow/config.json`. If file missing, initialize with empty guard secti
77
77
  - Write config
78
78
 
79
79
  **`deny <path>`:**
80
- - Normalize path to forward slashes
80
+ - Normalize path to forward slashes, ensure trailing slash for directories
81
+ - If `guard.mode` is `allow`, switch to `deny` and clear paths with warning
81
82
  - Set `guard.mode = "deny"`
82
83
  - Add path to `guard.paths` (deduplicate)
83
- - Set `guard.enabled = true` if not already
84
+ - Set `guard.enabled = true` if not already (symmetric with `allow`: adding a deny path auto-enables the guard)
84
85
  - Write config
85
86
 
86
87
  **Step 4: Confirm**
@@ -74,6 +74,8 @@ responsive-design.md, spatial-design.md, typography.md, ux-writing.md
74
74
 
75
75
  ## Chains
76
76
 
77
+ Chain step names below reuse Command Routing names but resolve through the chain runner. To avoid ambiguity with Direct command invocation, internal display, todo items, and session status records always tag chain steps with the `impeccable:` prefix (e.g. `impeccable:craft`, `impeccable:critique`). The bare names in this table refer to the workflow file at `~/.maestro/workflows/impeccable/{name}.md` that the chain step reads.
78
+
77
79
  | Chain | Steps | Scenario |
78
80
  |-------|-------|----------|
79
81
  | build | teach? → explore? → shape → craft → critique → [refine] → audit → polish | New from scratch |
@@ -181,17 +183,17 @@ Before reading any command workflow:
181
183
  ## Chain Execution
182
184
 
183
185
  1. Prerequisites ✓
184
- 2. **Display chain preview**: parse chain definition, output full step preview:
186
+ 2. **Display chain preview**: parse chain definition, output full step preview (chain steps prefixed `impeccable:` to disambiguate from Direct commands):
185
187
  ```
186
188
  ── Chain: build ──────────────────────────
187
- 1. teach (conditional: PRODUCT.md missing)
188
- 2. explore (conditional: DESIGN.md missing)
189
- 3. shape
190
- 4. craft
191
- 5. critique ◆ quality gate (threshold: 26/40)
192
- 6. [refine] ↺ auto-fix loop (max: 3)
193
- 7. audit ◆ quality gate (threshold: 14/20)
194
- 8. polish
189
+ 1. impeccable:teach (conditional: PRODUCT.md missing)
190
+ 2. impeccable:explore (conditional: DESIGN.md missing)
191
+ 3. impeccable:shape
192
+ 4. impeccable:craft
193
+ 5. impeccable:critique ◆ quality gate (threshold: 26/40)
194
+ 6. impeccable:[refine] ↺ auto-fix loop (max: 3)
195
+ 7. impeccable:audit ◆ quality gate (threshold: 14/20)
196
+ 8. impeccable:polish
195
197
  ─────────────────────────────────────────
196
198
  Target: {target}
197
199
  ```
@@ -205,9 +207,9 @@ Before reading any command workflow:
205
207
  "gate_history": [], "loop_count": 0, "status": "running" }
206
208
  ```
207
209
  4. **TodoWrite init**: create todo items for all chain steps
208
- - One item per step, format: `[chain] step N: {command} — {description}`
210
+ - One item per step, format: `[chain] step N: impeccable:{command} — {description}` (use `impeccable:` prefix to disambiguate from Direct command items)
209
211
  - If conditional step is skipped, immediately mark completed
210
- - Quality gate steps include threshold: `[chain] step 5: critique ◆ gate ≥26/40`
212
+ - Quality gate steps include threshold: `[chain] step 5: impeccable:critique ◆ gate ≥26/40`
211
213
  5. For each step:
212
214
  - Read `~/.maestro/workflows/impeccable/{command}.md` → execute
213
215
  - **Step start**: TodoWrite marks current step in_progress
@@ -44,7 +44,7 @@ $ARGUMENTS -- optional explicit version string and flags.
44
44
  </context>
45
45
 
46
46
  <execution>
47
- Follow '~/.maestro/workflows/release.md' completely.
47
+ Follow '~/.maestro/workflows/milestone-release.md' completely.
48
48
 
49
49
  **High-level flow:**
50
50
  1. Validate preconditions (milestone completed, clean tree, audit PASS)
@@ -54,7 +54,9 @@ Scope routing, base flags (`--collab`, `--spec`, `-y`, `--gaps`, `--dir`), outpu
54
54
  5. No args + roadmap → scope = "milestone" (unchanged)
55
55
  6. No args + no roadmap → search state.json for latest analyze artifact, fallback standalone
56
56
 
57
- **Ad-hoc milestone (D-008):** When scope resolves to "standalone" and `current_milestone == null`, plan auto-creates an adhoc milestone (`type: "adhoc"`) in state.json before proceeding. This ensures downstream milestone-audit/complete have a valid milestone context. See workflow plan.md § "Ad-hoc Milestone Auto-Creation".
57
+ **Ad-hoc milestone (D-008):** When scope resolves to "standalone" via the standard standalone resolution (no `--from` source), and `current_milestone == null`, plan auto-creates an adhoc milestone (`type: "adhoc"`) in state.json before proceeding. This ensures downstream milestone-audit/complete have a valid milestone context. See workflow plan.md § "Ad-hoc Milestone Auto-Creation".
58
+
59
+ **Exception (`--from analyze:ANL-xxx` / `blueprint:BLP-xxx`):** When scope is set to "standalone" by `--from`, skip adhoc milestone auto-creation — the upstream analyze/blueprint artifact already provides the milestone context (or is intentionally milestone-free). Adhoc creation in this path would conflict with the `--from` semantic of "this is a one-shot plan rooted in an existing artifact".
58
60
 
59
61
  ### Role Knowledge
60
62
  `maestro wiki list --category arch` → select relevant → `maestro wiki load`
@@ -38,7 +38,8 @@ Also read `session.auto_mode` from status.json — if true, treat as `-y`.
38
38
  | external (opt-in) | `maestro delegate --to claude --mode write` (STOP → callback) | Self-invoke next |
39
39
 
40
40
  HARD RULES:
41
- - internal step MUST 通过 `Read({command_path})` 把命令 .md 加载进当前会话,再按内容执行;禁止 `Skill({skill})` 调用
41
+ - internal step:优先通过 `Read({command_path})` 把命令 .md 加载进当前会话,再按内容执行;不要对 internal step 使用 `Skill({skill})` 调用
42
+ - decision 节点例外:A_EXEC_DECISION 必须使用 `Skill({ skill: "maestro-ralph" })` 进行 handoff(这是 decision 节点的唯一允许用法)
42
43
  - `command_path` 由 ralph 在 A_BUILD_STEPS 写入 status.json;ralph-execute 不再自行解析(缺失 → 报错 E002)
43
44
  - external 仅在 `step.type == "external"` 显式声明时使用,并 always append `-y` 到 prompt args
44
45
  - 每个 step 必须产出 `--- COMPLETION STATUS ---` 块,否则视为 NEEDS_RETRY
@@ -157,10 +158,10 @@ Write enriched args back to status.json.
157
158
  1. Validate `step.command_path != null`;否则 raise E002,pause session
158
159
  2. Mark step running, write status.json
159
160
  3. Display: `[{index}/{total}] {step.skill} [internal · {step.command_scope}]`
160
- 4. `Read({ file_path: step.command_path })` — 把命令 .md 全文加载进当前会话
161
+ 4. `Read({ file_path: step.command_path })` — 把命令 .md 全文加载进当前会话(prefer Read over Skill for internal steps;decision 节点另行使用 Skill 见 A_EXEC_DECISION)
161
162
  5. 解析 frontmatter `argument-hint` 与 `<purpose>/<state_machine>/<actions>` 等指令块
162
163
  6. 计算 `effective_args`:`step.args` + auto flag(`auto ? (flag_map[step.skill] || "") : ""`)
163
- 7. 按读到的指令在本会话中**内联执行**:调用允许的工具完成命令所规定的工作,不再发起 Skill() 或 delegate
164
+ 7. 按读到的指令在本会话中**内联执行**:调用允许的工具完成命令所规定的工作,不再发起 delegate
164
165
  8. 执行结束:要求最后一段必须包含 `--- COMPLETION STATUS ---` 块(见 A_MARK_COMPLETE)
165
166
  9. Return success / failure
166
167
 
@@ -69,14 +69,15 @@ maestro-analyze {phase} → maestro-plan → maestro-execute → maestro-verify
69
69
  <interview_protocol>
70
70
  Interview the user relentlessly until shared understanding is reached. Active only in interactive mode; skip when `-y/--yes`, `--revise`, `--review`, `-c/--continue`, or input is already specific (clear requirement + mode).
71
71
 
72
- - One decision per turn via AskUserQuestion with 2–4 options + a (Recommended) default; every question must include a `Proceed now` option.
73
- - Never ask what code can verify — resolve via `state.json`, existing `roadmap.md`, `project.md`, or `maestro spec load`.
72
+ - One decision per turn via AskUserQuestion with 2–4 options + a (Recommended) default. The user controls termination — keep interviewing until convergence; they can interrupt naturally or via `Other` at any time.
73
+ - Search-first when uncertain: before asking, resolve via `state.json`, existing `roadmap.md`, `project.md`, `maestro spec load`, `maestro wiki search`, Glob/Grep/Read, or — for open-ended multi-file scans — spawn `Agent(subagent_type: Explore)` / `maestro delegate ... --role explore`. Never ask what code or memory can verify; never bounce your own ambiguity back to the user — search first, then ask only what truly needs human judgment.
74
+ - Writeback cadence: each settled decision is immediately appended/updated in the `Roadmap Decisions` section at the top of `.workflow/roadmap.md` (create the section if absent). Do NOT batch writeback to the end — partial decisions must already be on disk before the next question.
74
75
  - Walk the decision dependency tree strictly: mode → requirement scope → decomposition strategy → phase dependencies/order. Do not open the next branch until the current one is settled.
75
76
  - Scope guard: only decide the shape of the roadmap. Do not pre-resolve intra-phase task breakdown — that belongs to `plan`.
76
77
 
77
78
  Decision points: scope (MVP / complete / phased) → strategy (progressive / direct / auto) → milestone boundaries → phase dependencies and order.
78
79
 
79
- Exit: on consensus or `Proceed now`, append the table below to a `Roadmap Decisions` section at the top of `.workflow/roadmap.md`:
80
+ Exit: on consensus or explicit user signal to proceed, finalize the `Roadmap Decisions` section (rows already populated incrementally). Schema:
80
81
  `| # | Decision | Choice | Source (user / code / default) |`
81
82
  </interview_protocol>
82
83
 
@@ -47,6 +47,7 @@ Follow '~/.maestro/workflows/harvest.md' Stages 1-8 in order.
47
47
  1. **Read-only until Stage 6** — extraction and classification happen in-memory.
48
48
  2. **Dedup before write** — check harvest-log.jsonl and existing stores before each write.
49
49
  3. **Never modify source artifacts** — harvest is purely extractive.
50
+ 4. **Dedup contract with parallel writers** — when appending to `issues.jsonl`, set `source: "harvest"` on each row so concurrent writers (e.g. `manage-issue-discover` with `source: "discover"`) can be distinguished and deduplicated.
50
51
 
51
52
  Extraction patterns, classification rules, routing infrastructure, and fragment ID scheme defined in workflow harvest.md.
52
53
 
@@ -46,7 +46,7 @@ $ARGUMENTS -- optional. Parse first token to determine mode.
46
46
  - `--depth=standard|deep` -- exploration depth (by-prompt only, default: `standard`)
47
47
 
48
48
  **State files:**
49
- - `.workflow/issues/issues.jsonl` -- issues appended here
49
+ - `.workflow/issues/issues.jsonl` -- issues appended here (set `source: "discover"` on each row so concurrent writers like `manage-harvest` with `source: "harvest"` can be distinguished and deduplicated)
50
50
  - `.workflow/issues/discoveries/{SESSION_ID}/` -- session artifacts
51
51
 
52
52
  ### Pre-load specs