owflow 0.6.0 → 0.7.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.
Files changed (195) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +448 -283
  3. package/dist/agents/bottleneck-analyzer.md +332 -333
  4. package/dist/agents/code-quality-pragmatist.md +353 -354
  5. package/dist/agents/code-reviewer.md +238 -239
  6. package/dist/agents/codebase-analysis-reporter.md +245 -246
  7. package/dist/agents/docs-operator.md +22 -23
  8. package/dist/agents/e2e-test-verifier.md +447 -448
  9. package/dist/agents/gap-analyzer.md +501 -502
  10. package/dist/agents/implementation-completeness-checker.md +219 -220
  11. package/dist/agents/implementation-planner.md +308 -309
  12. package/dist/agents/information-gatherer.md +690 -691
  13. package/dist/agents/production-readiness-checker.md +278 -279
  14. package/dist/agents/project-analyzer.md +403 -403
  15. package/dist/agents/reality-assessor.md +365 -366
  16. package/dist/agents/research-planner.md +449 -450
  17. package/dist/agents/research-synthesizer.md +402 -403
  18. package/dist/agents/solution-brainstormer.md +256 -257
  19. package/dist/agents/solution-designer.md +371 -372
  20. package/dist/agents/spec-auditor.md +297 -298
  21. package/dist/agents/specification-creator.md +333 -334
  22. package/dist/agents/task-classifier.md +449 -450
  23. package/dist/agents/task-group-implementer.md +283 -284
  24. package/dist/agents/test-suite-runner.md +194 -195
  25. package/dist/agents/user-docs-generator.md +508 -509
  26. package/dist/commands/reviews-code.md +90 -90
  27. package/dist/commands/reviews-pragmatic.md +99 -99
  28. package/dist/commands/reviews-production-readiness.md +113 -113
  29. package/dist/commands/reviews-reality-check.md +110 -110
  30. package/dist/commands/reviews-spec-audit.md +114 -114
  31. package/dist/commands/work.md +280 -280
  32. package/dist/configuration/agents-config.d.ts +2 -0
  33. package/dist/configuration/agents-config.js +8 -44
  34. package/dist/configuration/commands-config.d.ts +23 -0
  35. package/dist/configuration/commands-config.js +17 -17
  36. package/dist/configuration/skills-config.d.ts +2 -0
  37. package/dist/configuration/skills-config.js +3 -3
  38. package/dist/hooks/hooks-diagnostics.d.ts +3 -0
  39. package/dist/hooks/hooks-diagnostics.js +21 -0
  40. package/dist/hooks/hooks-persistence.d.ts +17 -0
  41. package/dist/hooks/hooks-persistence.js +207 -0
  42. package/dist/hooks/hooks-registry.d.ts +6 -0
  43. package/dist/hooks/hooks-registry.js +104 -0
  44. package/dist/hooks/hooks-wrapper.d.ts +25 -0
  45. package/dist/hooks/hooks-wrapper.js +318 -0
  46. package/dist/hooks/internal/before-tool.d.ts +6 -0
  47. package/dist/hooks/internal/before-tool.js +13 -0
  48. package/dist/hooks/internal/session-compaction.d.ts +9 -0
  49. package/dist/hooks/{session-compaction.js → internal/session-compaction.js} +9 -7
  50. package/dist/hooks/runtime/circuit-breaker.d.ts +23 -0
  51. package/dist/hooks/runtime/circuit-breaker.js +39 -0
  52. package/dist/hooks/runtime/failure-policy.d.ts +15 -0
  53. package/dist/hooks/runtime/failure-policy.js +49 -0
  54. package/dist/hooks/runtime/process-executor.d.ts +33 -0
  55. package/dist/hooks/runtime/process-executor.js +147 -0
  56. package/dist/hooks/runtime/status-recorder.d.ts +27 -0
  57. package/dist/hooks/runtime/status-recorder.js +111 -0
  58. package/dist/index.d.ts +7 -0
  59. package/dist/index.js +111 -40
  60. package/dist/skills/agents-md-generator/SKILL.md +223 -223
  61. package/dist/skills/codebase-analyzer/SKILL.md +162 -162
  62. package/dist/skills/codebase-analyzer/references/code-analysis.md +63 -63
  63. package/dist/skills/codebase-analyzer/references/combined.md +31 -31
  64. package/dist/skills/codebase-analyzer/references/context-discovery.md +63 -63
  65. package/dist/skills/codebase-analyzer/references/file-discovery.md +51 -51
  66. package/dist/skills/codebase-analyzer/references/migration-target.md +23 -23
  67. package/dist/skills/codebase-analyzer/references/pattern-mining.md +22 -22
  68. package/dist/skills/dev-analyze/SKILL.md +115 -115
  69. package/dist/skills/dev-bugfix/SKILL.md +452 -452
  70. package/dist/skills/dev-finalize/SKILL.md +118 -118
  71. package/dist/skills/dev-implement/SKILL.md +167 -167
  72. package/dist/skills/dev-plan/SKILL.md +147 -147
  73. package/dist/skills/dev-spec/SKILL.md +182 -182
  74. package/dist/skills/dev-tdd-red/SKILL.md +94 -94
  75. package/dist/skills/dev-verify/SKILL.md +153 -153
  76. package/dist/skills/development/SKILL.md +260 -260
  77. package/dist/skills/diagrams-mermaid/SKILL.md +183 -159
  78. package/dist/skills/diagrams-mermaid/references/reference.md +220 -148
  79. package/dist/skills/docs-manager/SKILL.md +379 -379
  80. package/dist/skills/docs-manager/docs/INDEX.md +199 -199
  81. package/dist/skills/docs-manager/docs/standards/backend/api.md +25 -25
  82. package/dist/skills/docs-manager/docs/standards/backend/migrations.md +22 -22
  83. package/dist/skills/docs-manager/docs/standards/backend/models.md +25 -25
  84. package/dist/skills/docs-manager/docs/standards/backend/queries.md +22 -22
  85. package/dist/skills/docs-manager/docs/standards/frontend/accessibility.md +25 -25
  86. package/dist/skills/docs-manager/docs/standards/frontend/components.md +28 -28
  87. package/dist/skills/docs-manager/docs/standards/frontend/css.md +16 -16
  88. package/dist/skills/docs-manager/docs/standards/frontend/responsive.md +28 -28
  89. package/dist/skills/docs-manager/docs/standards/global/coding-style.md +25 -25
  90. package/dist/skills/docs-manager/docs/standards/global/commenting.md +10 -10
  91. package/dist/skills/docs-manager/docs/standards/global/conventions.md +31 -31
  92. package/dist/skills/docs-manager/docs/standards/global/error-handling.md +22 -22
  93. package/dist/skills/docs-manager/docs/standards/global/minimal-implementation.md +22 -22
  94. package/dist/skills/docs-manager/docs/standards/global/validation.md +28 -28
  95. package/dist/skills/docs-manager/docs/standards/testing/test-writing.md +25 -25
  96. package/dist/skills/docs-manager/references/agents-md-template.md +29 -29
  97. package/dist/skills/docs-manager/references/index-md-template.md +73 -73
  98. package/dist/skills/flow-init/SKILL.md +234 -234
  99. package/dist/skills/flow-init/references/architecture-template.md +45 -45
  100. package/dist/skills/flow-init/references/roadmap-templates.md +93 -93
  101. package/dist/skills/flow-init/references/tech-stack-template.md +70 -70
  102. package/dist/skills/flow-init/references/vision-templates.md +75 -75
  103. package/dist/skills/goal-development/SKILL.md +96 -96
  104. package/dist/skills/goal-migration/SKILL.md +114 -114
  105. package/dist/skills/goal-performance/SKILL.md +126 -126
  106. package/dist/skills/goal-research/SKILL.md +118 -118
  107. package/dist/skills/html-renderer/SKILL.md +173 -173
  108. package/dist/skills/html-renderer/references/index.html +318 -318
  109. package/dist/skills/html-renderer/references/styles.css +388 -388
  110. package/dist/skills/html-renderer/references/tokens.json +104 -104
  111. package/dist/skills/implementation-plan-executor/SKILL.md +378 -378
  112. package/dist/skills/implementation-verifier/SKILL.md +307 -307
  113. package/dist/skills/migration/SKILL.md +268 -268
  114. package/dist/skills/migration-analyze/SKILL.md +126 -126
  115. package/dist/skills/migration-finalize/SKILL.md +161 -161
  116. package/dist/skills/migration-fix/SKILL.md +155 -155
  117. package/dist/skills/migration-implement/SKILL.md +131 -131
  118. package/dist/skills/migration-plan/SKILL.md +131 -131
  119. package/dist/skills/migration-spec/SKILL.md +135 -135
  120. package/dist/skills/migration-spec/references/migration-strategies.md +430 -430
  121. package/dist/skills/migration-target/SKILL.md +134 -134
  122. package/dist/skills/migration-target/references/migration-types.md +489 -489
  123. package/dist/skills/migration-verify/SKILL.md +184 -184
  124. package/dist/skills/orchestrator-framework/SKILL.md +65 -65
  125. package/dist/skills/orchestrator-framework/references/command-namespacing.md +7 -7
  126. package/dist/skills/orchestrator-framework/references/confirm-or-revise-exception.md +20 -20
  127. package/dist/skills/orchestrator-framework/references/delegation-rules.md +54 -54
  128. package/dist/skills/orchestrator-framework/references/dispatcher-handoff.md +27 -27
  129. package/dist/skills/orchestrator-framework/references/fix-loop-contract.md +65 -65
  130. package/dist/skills/orchestrator-framework/references/gate-contract.md +122 -122
  131. package/dist/skills/orchestrator-framework/references/orchestrator-creation-checklist.md +51 -51
  132. package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +235 -235
  133. package/dist/skills/performance/SKILL.md +267 -267
  134. package/dist/skills/performance-analyze/SKILL.md +129 -129
  135. package/dist/skills/performance-analyze/references/performance-optimization-guide.md +271 -271
  136. package/dist/skills/performance-finalize/SKILL.md +117 -117
  137. package/dist/skills/performance-implement/SKILL.md +114 -114
  138. package/dist/skills/performance-plan/SKILL.md +112 -112
  139. package/dist/skills/performance-spec/SKILL.md +145 -145
  140. package/dist/skills/performance-verify/SKILL.md +164 -164
  141. package/dist/skills/research/SKILL.md +249 -249
  142. package/dist/skills/research-brainstorm/SKILL.md +120 -120
  143. package/dist/skills/research-brainstorm/references/brainstorming-techniques.md +84 -84
  144. package/dist/skills/research-converge/SKILL.md +130 -130
  145. package/dist/skills/research-design/SKILL.md +146 -146
  146. package/dist/skills/research-design/references/design-techniques.md +40 -40
  147. package/dist/skills/research-finalize/SKILL.md +125 -125
  148. package/dist/skills/research-fork/SKILL.md +190 -190
  149. package/dist/skills/research-gather/SKILL.md +133 -133
  150. package/dist/skills/research-plan/SKILL.md +141 -141
  151. package/dist/skills/research-plan/references/research-methodologies.md +710 -710
  152. package/dist/skills/research-quick/SKILL.md +139 -139
  153. package/dist/skills/research-synthesize/SKILL.md +127 -127
  154. package/dist/skills/rule-reviewer/SKILL.md +334 -334
  155. package/dist/skills/standards-discover/SKILL.md +260 -260
  156. package/dist/skills/standards-discover/references/aggregation-strategy.md +76 -76
  157. package/dist/skills/standards-discover/references/code-pattern-prompt.md +68 -68
  158. package/dist/skills/standards-discover/references/config-analyzer-prompt.md +67 -67
  159. package/dist/skills/standards-discover/references/docs-extractor-prompt.md +65 -65
  160. package/dist/skills/standards-discover/references/external-analyzer-prompt.md +75 -75
  161. package/dist/skills/standards-update/SKILL.md +207 -207
  162. package/dist/templates/orchestrator-state-base.yml +17 -17
  163. package/dist/templates/orchestrator-state-development.yml +95 -95
  164. package/dist/templates/orchestrator-state-migration.yml +95 -95
  165. package/dist/templates/orchestrator-state-performance.yml +64 -64
  166. package/dist/templates/orchestrator-state-research.yml +67 -67
  167. package/dist/tools/fork_task.d.ts +17 -0
  168. package/dist/tools/fork_task.js +21 -11
  169. package/dist/tools/verify_template.d.ts +11 -0
  170. package/dist/tools/verify_template.js +32 -17
  171. package/dist/tui/hooks-dialogs.d.ts +20 -0
  172. package/dist/tui/hooks-dialogs.js +181 -0
  173. package/dist/tui/hooks-presenter.d.ts +15 -0
  174. package/dist/tui/hooks-presenter.js +70 -0
  175. package/dist/tui/hooks-sidebar.d.ts +10 -0
  176. package/dist/tui/hooks-sidebar.js +104 -0
  177. package/dist/tui/primitives.d.ts +21 -0
  178. package/dist/tui/primitives.js +47 -0
  179. package/dist/tui.d.ts +12 -0
  180. package/dist/tui.js +129 -0
  181. package/dist/types/hook-types.d.ts +125 -0
  182. package/dist/types/hook-types.js +76 -0
  183. package/dist/types/opencode-types.d.ts +13 -0
  184. package/dist/utils/file-util.d.ts +2 -0
  185. package/dist/utils/file-util.js +6 -6
  186. package/dist/utils/fork-task.d.ts +27 -0
  187. package/dist/utils/fork-task.js +18 -23
  188. package/dist/utils/plugin-info.d.ts +3 -0
  189. package/dist/utils/plugin-info.js +8 -10
  190. package/dist/utils/workflow-paths.d.ts +17 -0
  191. package/dist/utils/workflow-paths.js +18 -0
  192. package/dist/utils/yaml-structure.d.ts +7 -0
  193. package/dist/utils/yaml-structure.js +7 -11
  194. package/package.json +68 -48
  195. package/dist/hooks/before-tool.js +0 -19
@@ -1,130 +1,130 @@
1
- ---
2
- name: owflow:research-converge
3
- description: Research skill — optional subskill. Presents the brainstorming alternatives for EVERY decision area with identical full detail — one area, one question — records each chosen approach in phase_summaries.converge.decision_areas (approaches-chosen). Never a combined summary-table confirm.
4
- argument-hint: "[task-path-or-identifier]"
5
- user-invocable: true
6
- ---
7
-
8
- # Research Converge — Per-Area Decisions (approaches-chosen)
9
-
10
- Work phase of the research workflow. Interactive convergence: presents the brainstorming alternatives for each decision area — one area, one dedicated `question` — and records the chosen combination in state (state-only; no new artifacts). Conditional optional phase — runs only when brainstorming ran. There is no auto-continue from brainstorm: this skill's Entry Gate re-checks the artifact. State lives in `orchestrator-state.yml` — this skill reads it on entry and writes results on exit.
11
-
12
- Related phases: `/owflow:research-brainstorm` (produces `outputs/solution-exploration.md`, which this skill parses), `/owflow:research-design` (consumes the chosen combination as `selected_approach`), `/owflow:research-finalize` (the route when design is off).
13
-
14
- ## Entry Gate
15
-
16
- Resolve the `task-path-or-identifier` argument BEFORE anything else (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)):
17
-
18
- - **Path** (absolute or project-relative) to the task directory — use as-is.
19
- - **Identifier** — exact directory name inside `.owflow/tasks/research/` (e.g., `2026-09-26-my-research`); resolve to its path.
20
- - If the argument is **missing**, the path does **not exist**, or matches **no identifier** → print the blocked block, then STOP (never guess or auto-pick a task):
21
- 1. Steps that must be completed first (in order), each with its command:
22
- - Research brief & plan (`brief-written`, `plan-created`) → `/owflow:research-plan <task-path>`
23
- - Parallel findings fan (`findings-gathered`) → `/owflow:research-gather <task-path>`
24
- - Synthesis & research report (`synthesis-complete`) → `/owflow:research-synthesize <task-path>`
25
- - Solution alternatives (`alternatives-generated`) → `/owflow:research-brainstorm <task-path>`
26
- 2. List available research-task identifiers (directories under `.owflow/tasks/research/`) to resume from, if any.
27
- 3. Hint: `Run /owflow:research <question> to start a task from scratch, or pass a task path/identifier to resume.`
28
-
29
- ### Prerequisites
30
-
31
- | Required for this skill | Where verified | Produced by |
32
- | ----------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
33
- | State file exists | `<task-path>/orchestrator-state.yml` | `/owflow:research <question>` or `/owflow:research-quick` |
34
- | Foundation complete | `synthesis-complete` in `completed_phases` + `analysis/synthesis.md` exists | `/owflow:research-synthesize <task-path>` |
35
- | Alternatives exist | `alternatives-generated` in `completed_phases` + `outputs/solution-exploration.md` exists | `/owflow:research-brainstorm <task-path>` |
36
-
37
- 1. **Read `orchestrator-state.yml`** from the task path. If missing → mid-pipeline bootstrap ([Missing-state Bootstrap](../orchestrator-framework/references/gate-contract.md), starting slug `approaches-chosen`): `question` — create a fresh standard research task starting at this step, or decline → print `No research task found at <path>. Run /owflow:research <question> to start a task from scratch.` and STOP.
38
- 2. **Prerequisite check**: `synthesis-complete` AND `alternatives-generated` must be in `completed_phases`, and `outputs/solution-exploration.md` must exist. If missing → print the blocked block, then STOP:
39
- - `Run /owflow:research-brainstorm <task-path> first` (or the command for the earliest missing earlier step: `/owflow:research-plan`, `/owflow:research-gather`, or `/owflow:research-synthesize`).
40
- 3. **Skip/resume (per-area partial resume)**: if `approaches-chosen` is in `completed_phases`, validate every `phase_summaries.converge.decision_areas` entry carries `chosen_approach` — all resolve → report the existing chosen combination and route to the Exit Gate; any area unresolved → re-ask ONLY the unresolved areas below. Also — even WITHOUT the slug — skip any area whose `decision_areas` entry already carries `chosen_approach`; only unresolved areas are ever asked.
41
-
42
- ## Input / Output Artifacts
43
-
44
- | Artifact | Normal mode (full lane) | Quick mode (`research-quick`) |
45
- | ---------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
46
- | Consumed: `outputs/solution-exploration.md` | parsed for decision areas + alternatives | identical — when the optional chain runs after a quick pass, the exploration file was produced by research-brainstorm |
47
- | Produced: none (state-only) | decisions recorded inline per area | same mechanics — research-quick never converges inline |
48
- | State write | `approaches-chosen`; `phase_summaries.converge {summary, decision_areas, deferred_ideas}` (per-area partial writes) | same slug and fields |
49
-
50
- ## Execute (direct interactive — per-area convergence)
51
-
52
- **Read first**: the [Delegation Rules](../orchestrator-framework/references/delegation-rules.md) — per-area convergence is direct interactive work (like dev-verify's interactive phases); no agents involved.
53
-
54
- > **ANTI-PATTERN**: Do NOT present all decision areas in a single summary table and ask one combined "do you agree?" question. Each area MUST get its own detailed presentation and its own question call.
55
- >
56
- > **ANTI-PATTERN**: Do NOT show full alternatives/pros/cons for the first area and then shortcut remaining areas to just a recommendation line + question. EVERY area gets the SAME level of detail — all alternatives with descriptions, pros, and cons. No exceptions.
57
-
58
- **Per-area handling** (the two guards above apply to EVERY area, including partial resumes):
59
-
60
- 1. Read `outputs/solution-exploration.md`
61
- 2. For each decision area sequentially, output ALL of the following (steps a-d) BEFORE calling question:
62
- a. **Area header**: area name and why this decision matters (1-2 sentences of context)
63
- b. **Alternatives detail**: For EVERY alternative in this area, show:
64
- - Name and description (2-3 sentences)
65
- - Pros (bullet list)
66
- - Cons (bullet list)
67
- c. **Recommendation**: which alternative is recommended and why (1 sentence)
68
- d. **question**: this area's alternatives as options (mark recommended with "(Recommended)") + "Need more info" option
69
- e. If user picks → record choice (write the per-area partial state immediately — see State Update Convention), move to next area
70
- f. If "Need more info" → present the detailed trade-off analysis for the requested alternative, then re-ask
71
-
72
- > **SELF-CHECK before each question**: Did you output the alternatives with pros/cons for THIS area? If you only showed a recommendation line without listing all alternatives and their pros/cons, STOP and output the full detail before asking.
73
-
74
- 3. After all areas resolved, present a brief summary of the chosen combination (this summary moves into the Exit-Gate results box below — the boundary to design/finalize stays explicit, no AUTO-CONTINUE)
75
- 4. **GATE CHECK**: Verify that question was called for EACH decision area. If any decision area was skipped for any reason (e.g., output file missing, read failure), STOP and resolve before continuing. Do NOT mark the convergence complete without user convergence on all decision areas.
76
-
77
- ### Close (`approaches-chosen`)
78
-
79
- 1. **State write**: append `approaches-chosen` to `completed_phases` — ONLY after the LAST unresolved area resolves; update `phase_summaries.converge {summary, decision_areas, deferred_ideas}` (deferred ideas recorded when the exploration documents them); bump `orchestrator.updated`. On failure: append `approaches-chosen` to `failed_phases`, increment `auto_fix_attempts["approaches-chosen"]`. Then re-read state + run `verify_template` (see State Update Convention).
80
-
81
- ## State Update Convention (per step)
82
-
83
- Apply after EVERY step above:
84
-
85
- 1. **Write immediately — per area**: as each decision area resolves, record the `chosen_approach` into that area's entry in `phase_summaries.converge.decision_areas` immediately (never batch all areas into one end-of-skill write — the per-area write is what makes partial resume work). The `approaches-chosen` slug is appended ONLY after the LAST unresolved area resolves.
86
- 2. **Timestamp** — set `orchestrator.updated` to the current UTC timestamp on every write.
87
- 3. **Failures** — if a question cannot fire (read failure, tool failure) or an area could not resolve, do NOT append `approaches-chosen` to `completed_phases`; instead append it to `orchestrator.failed_phases` and increment `auto_fix_attempts["approaches-chosen"]`. A deliberate "stop here" at an area question is NOT a failure — the area simply stays unresolved and partial resume picks it up on the next run.
88
- 4. **Validate** — after every write, re-read the file to confirm values, then run the `verify_template` tool with `filePath: <task-path>/orchestrator-state.yml`, `templateName: orchestrator-state-research.yml`. Fix any reported issue immediately before proceeding.
89
- 5. **Final check** — before the Exit Gate, one consolidated re-read + `verify_template` run to confirm the full state matches everything performed in this session.
90
-
91
- ## Recovery
92
-
93
- | Step | Max Attempts | Strategy |
94
- | ------------------------------- | ------------ | -------------------------------------------- |
95
- | Converge (`approaches-chosen`) | 1 | Re-read exploration file, re-present areas |
96
-
97
- ## Exit Gate
98
-
99
- Present results, get user confirmation, then hand off (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)). Never auto-invoke the next skill. The chosen-combination summary (step 3 above) is folded into the results box.
100
-
101
- ### Results box
102
-
103
- ```markdown
104
- ## ✅ RESEARCH CONVERGE COMPLETE — <research question>
105
-
106
- **Decision areas** — [N areas resolved]
107
- **Chosen combination** — [area: choice, one line per area]
108
- **Deferred ideas** — [one line each / none]
109
- **Design decision** — [feeds into design as `selected_approach` / no design planned]
110
-
111
- **Artifacts**
112
-
113
- - none (state-only) — decisions live in `phase_summaries.converge.decision_areas` of `orchestrator-state.yml`; `outputs/solution-exploration.md` stays the shared record
114
- ```
115
-
116
- ### Results-acceptance question
117
-
118
- Use `question` — "Are these results correct?" with options:
119
-
120
- - **Accept** — the per-area decisions are good; continue.
121
- - **Adjust** — re-open a specific area: re-present that ONE area with full detail and re-ask its question (other areas untouched), update state, re-present the results box.
122
- - **Discuss** — walk through a specific area's trade-offs in more depth; then re-ask.
123
- - **Stop here** — print the resume command (`/owflow:research-converge <task-path>`) and end. Note: unresolved areas re-ask on the next run (per-area partial resume).
124
-
125
- ### Next steps (after Accept)
126
-
127
- - `→ /owflow:research-design <task-path>` — when the user wants high-level design: Part A asks design preferences, Part B delegates the solution-designer with the chosen combination as `selected_approach`, Part D refines diagrams. Remaining after: finalize.
128
- - `→ /owflow:research-finalize <task-path>` — when no design is wanted: inventories the research outputs and completes the task (`research-completed`). Remaining after: none.
129
-
130
- Then STOP.
1
+ ---
2
+ name: owflow:research-converge
3
+ description: Research skill — optional subskill. Presents the brainstorming alternatives for EVERY decision area with identical full detail — one area, one question — records each chosen approach in phase_summaries.converge.decision_areas (approaches-chosen). Never a combined summary-table confirm.
4
+ argument-hint: "[task-path-or-identifier]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Research Converge — Per-Area Decisions (approaches-chosen)
9
+
10
+ Work phase of the research workflow. Interactive convergence: presents the brainstorming alternatives for each decision area — one area, one dedicated `question` — and records the chosen combination in state (state-only; no new artifacts). Conditional optional phase — runs only when brainstorming ran. There is no auto-continue from brainstorm: this skill's Entry Gate re-checks the artifact. State lives in `orchestrator-state.yml` — this skill reads it on entry and writes results on exit.
11
+
12
+ Related phases: `/owflow:research-brainstorm` (produces `outputs/solution-exploration.md`, which this skill parses), `/owflow:research-design` (consumes the chosen combination as `selected_approach`), `/owflow:research-finalize` (the route when design is off).
13
+
14
+ ## Entry Gate
15
+
16
+ Resolve the `task-path-or-identifier` argument BEFORE anything else (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)):
17
+
18
+ - **Path** (absolute or project-relative) to the task directory — use as-is.
19
+ - **Identifier** — exact directory name inside `.owflow/tasks/research/` (e.g., `2026-09-26-my-research`); resolve to its path.
20
+ - If the argument is **missing**, the path does **not exist**, or matches **no identifier** → print the blocked block, then STOP (never guess or auto-pick a task):
21
+ 1. Steps that must be completed first (in order), each with its command:
22
+ - Research brief & plan (`brief-written`, `plan-created`) → `/owflow:research-plan <task-path>`
23
+ - Parallel findings fan (`findings-gathered`) → `/owflow:research-gather <task-path>`
24
+ - Synthesis & research report (`synthesis-complete`) → `/owflow:research-synthesize <task-path>`
25
+ - Solution alternatives (`alternatives-generated`) → `/owflow:research-brainstorm <task-path>`
26
+ 2. List available research-task identifiers (directories under `.owflow/tasks/research/`) to resume from, if any.
27
+ 3. Hint: `Run /owflow:research <question> to start a task from scratch, or pass a task path/identifier to resume.`
28
+
29
+ ### Prerequisites
30
+
31
+ | Required for this skill | Where verified | Produced by |
32
+ | ----------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
33
+ | State file exists | `<task-path>/orchestrator-state.yml` | `/owflow:research <question>` or `/owflow:research-quick` |
34
+ | Foundation complete | `synthesis-complete` in `completed_phases` + `analysis/synthesis.md` exists | `/owflow:research-synthesize <task-path>` |
35
+ | Alternatives exist | `alternatives-generated` in `completed_phases` + `outputs/solution-exploration.md` exists | `/owflow:research-brainstorm <task-path>` |
36
+
37
+ 1. **Read `orchestrator-state.yml`** from the task path. If missing → mid-pipeline bootstrap ([Missing-state Bootstrap](../orchestrator-framework/references/gate-contract.md), starting slug `approaches-chosen`): `question` — create a fresh standard research task starting at this step, or decline → print `No research task found at <path>. Run /owflow:research <question> to start a task from scratch.` and STOP.
38
+ 2. **Prerequisite check**: `synthesis-complete` AND `alternatives-generated` must be in `completed_phases`, and `outputs/solution-exploration.md` must exist. If missing → print the blocked block, then STOP:
39
+ - `Run /owflow:research-brainstorm <task-path> first` (or the command for the earliest missing earlier step: `/owflow:research-plan`, `/owflow:research-gather`, or `/owflow:research-synthesize`).
40
+ 3. **Skip/resume (per-area partial resume)**: if `approaches-chosen` is in `completed_phases`, validate every `phase_summaries.converge.decision_areas` entry carries `chosen_approach` — all resolve → report the existing chosen combination and route to the Exit Gate; any area unresolved → re-ask ONLY the unresolved areas below. Also — even WITHOUT the slug — skip any area whose `decision_areas` entry already carries `chosen_approach`; only unresolved areas are ever asked.
41
+
42
+ ## Input / Output Artifacts
43
+
44
+ | Artifact | Normal mode (full lane) | Quick mode (`research-quick`) |
45
+ | ---------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
46
+ | Consumed: `outputs/solution-exploration.md` | parsed for decision areas + alternatives | identical — when the optional chain runs after a quick pass, the exploration file was produced by research-brainstorm |
47
+ | Produced: none (state-only) | decisions recorded inline per area | same mechanics — research-quick never converges inline |
48
+ | State write | `approaches-chosen`; `phase_summaries.converge {summary, decision_areas, deferred_ideas}` (per-area partial writes) | same slug and fields |
49
+
50
+ ## Execute (direct interactive — per-area convergence)
51
+
52
+ **Read first**: the [Delegation Rules](../orchestrator-framework/references/delegation-rules.md) — per-area convergence is direct interactive work (like dev-verify's interactive phases); no agents involved.
53
+
54
+ > **ANTI-PATTERN**: Do NOT present all decision areas in a single summary table and ask one combined "do you agree?" question. Each area MUST get its own detailed presentation and its own question call.
55
+ >
56
+ > **ANTI-PATTERN**: Do NOT show full alternatives/pros/cons for the first area and then shortcut remaining areas to just a recommendation line + question. EVERY area gets the SAME level of detail — all alternatives with descriptions, pros, and cons. No exceptions.
57
+
58
+ **Per-area handling** (the two guards above apply to EVERY area, including partial resumes):
59
+
60
+ 1. Read `outputs/solution-exploration.md`
61
+ 2. For each decision area sequentially, output ALL of the following (steps a-d) BEFORE calling question:
62
+ a. **Area header**: area name and why this decision matters (1-2 sentences of context)
63
+ b. **Alternatives detail**: For EVERY alternative in this area, show:
64
+ - Name and description (2-3 sentences)
65
+ - Pros (bullet list)
66
+ - Cons (bullet list)
67
+ c. **Recommendation**: which alternative is recommended and why (1 sentence)
68
+ d. **question**: this area's alternatives as options (mark recommended with "(Recommended)") + "Need more info" option
69
+ e. If user picks → record choice (write the per-area partial state immediately — see State Update Convention), move to next area
70
+ f. If "Need more info" → present the detailed trade-off analysis for the requested alternative, then re-ask
71
+
72
+ > **SELF-CHECK before each question**: Did you output the alternatives with pros/cons for THIS area? If you only showed a recommendation line without listing all alternatives and their pros/cons, STOP and output the full detail before asking.
73
+
74
+ 3. After all areas resolved, present a brief summary of the chosen combination (this summary moves into the Exit-Gate results box below — the boundary to design/finalize stays explicit, no AUTO-CONTINUE)
75
+ 4. **GATE CHECK**: Verify that question was called for EACH decision area. If any decision area was skipped for any reason (e.g., output file missing, read failure), STOP and resolve before continuing. Do NOT mark the convergence complete without user convergence on all decision areas.
76
+
77
+ ### Close (`approaches-chosen`)
78
+
79
+ 1. **State write**: append `approaches-chosen` to `completed_phases` — ONLY after the LAST unresolved area resolves; update `phase_summaries.converge {summary, decision_areas, deferred_ideas}` (deferred ideas recorded when the exploration documents them); bump `orchestrator.updated`. On failure: append `approaches-chosen` to `failed_phases`, increment `auto_fix_attempts["approaches-chosen"]`. Then re-read state + run `verify_template` (see State Update Convention).
80
+
81
+ ## State Update Convention (per step)
82
+
83
+ Apply after EVERY step above:
84
+
85
+ 1. **Write immediately — per area**: as each decision area resolves, record the `chosen_approach` into that area's entry in `phase_summaries.converge.decision_areas` immediately (never batch all areas into one end-of-skill write — the per-area write is what makes partial resume work). The `approaches-chosen` slug is appended ONLY after the LAST unresolved area resolves.
86
+ 2. **Timestamp** — set `orchestrator.updated` to the current UTC timestamp on every write.
87
+ 3. **Failures** — if a question cannot fire (read failure, tool failure) or an area could not resolve, do NOT append `approaches-chosen` to `completed_phases`; instead append it to `orchestrator.failed_phases` and increment `auto_fix_attempts["approaches-chosen"]`. A deliberate "stop here" at an area question is NOT a failure — the area simply stays unresolved and partial resume picks it up on the next run.
88
+ 4. **Validate** — after every write, re-read the file to confirm values, then run the `verify_template` tool with `filePath: <task-path>/orchestrator-state.yml`, `templateName: orchestrator-state-research.yml`. Fix any reported issue immediately before proceeding.
89
+ 5. **Final check** — before the Exit Gate, one consolidated re-read + `verify_template` run to confirm the full state matches everything performed in this session.
90
+
91
+ ## Recovery
92
+
93
+ | Step | Max Attempts | Strategy |
94
+ | ------------------------------- | ------------ | -------------------------------------------- |
95
+ | Converge (`approaches-chosen`) | 1 | Re-read exploration file, re-present areas |
96
+
97
+ ## Exit Gate
98
+
99
+ Present results, get user confirmation, then hand off (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)). Never auto-invoke the next skill. The chosen-combination summary (step 3 above) is folded into the results box.
100
+
101
+ ### Results box
102
+
103
+ ```markdown
104
+ ## ✅ RESEARCH CONVERGE COMPLETE — <research question>
105
+
106
+ **Decision areas** — [N areas resolved]
107
+ **Chosen combination** — [area: choice, one line per area]
108
+ **Deferred ideas** — [one line each / none]
109
+ **Design decision** — [feeds into design as `selected_approach` / no design planned]
110
+
111
+ **Artifacts**
112
+
113
+ - none (state-only) — decisions live in `phase_summaries.converge.decision_areas` of `orchestrator-state.yml`; `outputs/solution-exploration.md` stays the shared record
114
+ ```
115
+
116
+ ### Results-acceptance question
117
+
118
+ Use `question` — "Are these results correct?" with options:
119
+
120
+ - **Accept** — the per-area decisions are good; continue.
121
+ - **Adjust** — re-open a specific area: re-present that ONE area with full detail and re-ask its question (other areas untouched), update state, re-present the results box.
122
+ - **Discuss** — walk through a specific area's trade-offs in more depth; then re-ask.
123
+ - **Stop here** — print the resume command (`/owflow:research-converge <task-path>`) and end. Note: unresolved areas re-ask on the next run (per-area partial resume).
124
+
125
+ ### Next steps (after Accept)
126
+
127
+ - `→ /owflow:research-design <task-path>` — when the user wants high-level design: Part A asks design preferences, Part B delegates the solution-designer with the chosen combination as `selected_approach`, Part D refines diagrams. Remaining after: finalize.
128
+ - `→ /owflow:research-finalize <task-path>` — when no design is wanted: inventories the research outputs and completes the task (`research-completed`). Remaining after: none.
129
+
130
+ Then STOP.
@@ -1,146 +1,146 @@
1
- ---
2
- name: owflow:research-design
3
- description: Research skill — optional subskill. Asks design preferences (Part A), delegates high-level architecture design to the solution-designer agent (outputs/high-level-design.md + outputs/decision-log.md), then refines diagrams via the diagrams-mermaid Skill — content-preserving (design-generated). Invoking this skill IS the decision to design — there is no enablement flag.
4
- argument-hint: "[task-path-or-identifier]"
5
- user-invocable: true
6
- ---
7
-
8
- # Research Design — High-Level Design (design-generated)
9
-
10
- Work phase of the research workflow. Creates the high-level architecture design from the selected solution approach — or, when brainstorming did not run, seeded from the research-report recommendations — as two artifacts (`outputs/high-level-design.md`, `outputs/decision-log.md`), then refines diagrams via the `diagrams-mermaid` Skill. Optional phase — runs when the user chooses it: invoking this skill IS the decision to design (no enablement flag in state). The design-only branch (brainstorming not run) is owned here: `selected_approach` is seeded from the research report. State lives in `orchestrator-state.yml` — this skill reads it on entry and writes results on exit.
11
-
12
- Related phases: `/owflow:research-brainstorm` + `/owflow:research-converge` (produce the chosen combination consumed as `selected_approach`), `/owflow:research-finalize` (always next). The design-techniques reference lives in this skill's own folder (`references/design-techniques.md`).
13
-
14
- ## Entry Gate
15
-
16
- Resolve the `task-path-or-identifier` argument BEFORE anything else (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)):
17
-
18
- - **Path** (absolute or project-relative) to the task directory — use as-is.
19
- - **Identifier** — exact directory name inside `.owflow/tasks/research/` (e.g., `2026-09-26-my-research`); resolve to its path.
20
- - If the argument is **missing**, the path does **not exist**, or matches **no identifier** → print the blocked block, then STOP (never guess or auto-pick a task):
21
- 1. Steps that must be completed first (in order), each with its command:
22
- - Research brief & plan (`brief-written`, `plan-created`) → `/owflow:research-plan <task-path>`
23
- - Parallel findings fan (`findings-gathered`) → `/owflow:research-gather <task-path>`
24
- - Synthesis & research report (`synthesis-complete`) → `/owflow:research-synthesize <task-path>`
25
- - Chosen approaches (`approaches-chosen`) → `/owflow:research-brainstorm <task-path>` + `/owflow:research-converge <task-path>` (only when brainstorming ran)
26
- 2. List available research-task identifiers (directories under `.owflow/tasks/research/`) to resume from, if any.
27
- 3. Hint: `Run /owflow:research <question> to start a task from scratch, or pass a task path/identifier to resume.`
28
-
29
- ### Prerequisites
30
-
31
- | Required for this skill | Where verified | Produced by |
32
- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
33
- | State file exists | `<task-path>/orchestrator-state.yml` | `/owflow:research <question>` or `/owflow:research-quick` |
34
- | Design input ready | brainstorm ran — `approaches-chosen` in `completed_phases`; OR brainstorm did not run — `outputs/research-report.md` exists with recommendations | `/owflow:research-converge <task-path>` (or `/owflow:research-synthesize <task-path>`) |
35
-
36
- 1. **Read `orchestrator-state.yml`** from the task path. If missing → mid-pipeline bootstrap ([Missing-state Bootstrap](../orchestrator-framework/references/gate-contract.md), starting slug `design-generated`): `question` — create a fresh standard research task starting at this step, or decline → print `No research task found at <path>. Run /owflow:research <question> to start a task from scratch.` and STOP.
37
- 2. **Prerequisite check**: `synthesis-complete` must be in `completed_phases`. If missing → print the blocked block (`→ /owflow:research-synthesize <task-path>`, or the earliest missing earlier step), then STOP.
38
- 3. **Design input (branch resolution)**:
39
- - `approaches-chosen` in `completed_phases` → brainstorm ran; the chosen combination from `phase_summaries.converge.decision_areas` is `selected_approach`.
40
- - `approaches-chosen` in `completed_phases` but `phase_summaries.converge.decision_areas` has no `chosen_approach` → convergence never resolved its areas: `→ /owflow:research-converge <task-path>`, then STOP.
41
- - `alternatives-generated` in `completed_phases` but `approaches-chosen` absent → the brainstorm chain is incomplete: `→ /owflow:research-converge <task-path>`, then STOP. Do NOT seed from the research report while alternatives exist.
42
- - Neither slug present → brainstorming has not produced alternatives. Ask via `question`: "Brainstorming hasn't run — seed the design from the research report, or brainstorm first?" → seed from report (design-only branch): state `Brainstorming did not run — seeding the design from research-report recommendations.`, validate `outputs/research-report.md` exists (missing → `→ /owflow:research-synthesize <task-path>`, then STOP) and proceed; → brainstorm first: `→ /owflow:research-brainstorm <task-path>`, then STOP.
43
- 4. **Skip/resume**: if `design-generated` is in `completed_phases`, validate BOTH `outputs/high-level-design.md` AND `outputs/decision-log.md` exist; either missing → re-run Parts B-D below; both present → report the existing design summary and route to the Exit Gate.
44
-
45
- ## Input / Output Artifacts
46
-
47
- | Artifact | Normal mode (full lane) | Quick mode (`research-quick`) |
48
- | ---------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
49
- | Consumed: `phase_summaries.converge.decision_areas` (chosen combination) | becomes `selected_approach` when brainstorm ran | same fields — when the optional chain runs after a quick pass, converge ran as the normal subskill |
50
- | Consumed: `outputs/research-report.md` | design-only branch seed (`selected_approach` from recommendations) | identical — research-quick produces the same report artifact |
51
- | Produced: `outputs/high-level-design.md`, `outputs/decision-log.md` | delegated to `solution-designer`, refined via `diagrams-mermaid` Skill | NOT produced in the quick pass — design always runs as this skill after the quick lane |
52
- | State write | `design-generated`; `phase_summaries.design {summary, architecture_style, decisions_count}`, `research_outputs.high_level_design` + `.decision_log` | same (this skill never runs inside a quick pass) |
53
-
54
- ## Execute (Part A direct + Part B delegated + Part C direct + Part D Skill)
55
-
56
- **Read first**: the [Delegation Rules](../orchestrator-framework/references/delegation-rules.md).
57
-
58
- **Read `references/design-techniques.md` NOW using the Read tool** — MADR format, ADR guidance, decision documentation patterns (own-folder reference).
59
-
60
- ### Part A — Design Direction (direct)
61
-
62
- 1. Brainstorm ran: read the chosen combination from `phase_summaries.converge.decision_areas` — it becomes `selected_approach`.
63
- 2. Brainstorm did not run (design-only branch, resolved in Entry Gate step 3): read `outputs/research-report.md` recommendations and derive `selected_approach` from them; note the provenance (research-report recommendations, not convergence).
64
- 3. `question` — "Any architectural constraints or preferences?" (free-form answer; empty means none). These `design_preferences` ride in the Part B context pass and are kept human-readable in `phase_summaries.design.summary` — the state template has NO dedicated `design_preferences` slot; that omission is deliberate (do NOT invent a template field).
65
-
66
- ### Part B — Design Generation (subagent)
67
-
68
- > **ANTI-PATTERN — do NOT generate C4 architecture diagrams or ADRs inline. "The approach is obvious" is NOT a reason to skip delegation. The solution-designer agent has specialized architecture and MADR documentation capabilities.**
69
-
70
- 1. **INVOKE NOW**: Task tool - `solution-designer` subagent (never the Skill tool — this is an agent). Pass (Pattern 7 — accumulated context):
71
- - `task_path`, `synthesis_path` (`analysis/synthesis.md`), `research_report_path` (`outputs/research-report.md`)
72
- - `solution_exploration_path` (`outputs/solution-exploration.md`) — only when brainstorm ran
73
- - `selected_approach` (from convergence; on the no-brainstorm branch, seeded from research-report recommendations — list the provenance in the prompt)
74
- - `design_preferences` (from Part A; omit when the user gave none)
75
- - Accumulated context: `research_type`, `research_question`, `confidence_level`, `phase_summaries`
76
- - `project_doc_paths` (from state)
77
- - MUST-contract: the designer writes BOTH `outputs/high-level-design.md` AND `outputs/decision-log.md`
78
- 2. > **SELF-CHECK**: After the Task tool returns, verify BOTH `outputs/high-level-design.md` and `outputs/decision-log.md` exist. If either is missing: **STOP. Do NOT proceed to Part D or the Exit Gate.** Re-invoke the designer with corrected context. If a second attempt also fails, use `question` to report the failure and ask whether to retry or skip design.
79
-
80
- ### Part C — Executive Summary (direct)
81
-
82
- Read `outputs/high-level-design.md` and `outputs/decision-log.md`, then present the executive summary through the Exit-Gate results box below (architecture style and key components, decision count, key decision highlights 1 line each, integration points with the existing system if applicable) — no separate presentation round.
83
-
84
- ### Part D — Diagram Refinement (Skill, content-preserving)
85
-
86
- 1. **INVOKE NOW**: Skill tool - `diagrams-mermaid` to refine visual communication in `outputs/high-level-design.md`.
87
- 2. Add diagrams that supplement (NOT replace) existing architecture content:
88
- - one architecture view (`C4Container` preferred; `C4Component` only if needed),
89
- - one interaction/state view (`sequenceDiagram` or `flowchart`) for the critical flow.
90
- 3. If minimum context for a diagram is missing, record explicit gaps in the document and avoid speculative components/relationships.
91
-
92
- ### Close (`design-generated`)
93
-
94
- 1. **State write**: append `design-generated` to `completed_phases` after the SELF-CHECK passes and Part D completes; update `research_context.phase_summaries.design {summary, architecture_style, decisions_count}` (keep the Part A preferences visible in `summary`); set `research_outputs.high_level_design` AND `research_outputs.decision_log`; bump `orchestrator.updated`. On failure: append `design-generated` to `failed_phases`, increment `auto_fix_attempts["design-generated"]`. Then re-read state + run `verify_template` (see State Update Convention).
95
-
96
- ## State Update Convention (per step)
97
-
98
- Apply after EVERY step above:
99
-
100
- 1. **Write immediately** — update `orchestrator-state.yml` as soon as the step completes, appending ONLY the step slug actually performed (`design-generated`) plus that step's fields. Never batch multiple steps into one end-of-skill write.
101
- 2. **Timestamp** — set `orchestrator.updated` to the current UTC timestamp on every write.
102
- 3. **Failures** — if the designer delegation fails or its retries are abandoned, do NOT append `design-generated` to `completed_phases`; instead append it to `orchestrator.failed_phases` and increment `auto_fix_attempts["design-generated"]`. A user-chosen skip via `question` after repeated failures is a deliberate decision, not a failure: record the reason in `phase_summaries.design.summary` and append neither `design-generated` nor a `failed_phases` entry. Then present the Exit Gate (results box notes the skip; next step is `/owflow:research-finalize <task-path>`).
103
- 4. **Validate** — after every write, re-read the file to confirm values, then run the `verify_template` tool with `filePath: <task-path>/orchestrator-state.yml`, `templateName: orchestrator-state-research.yml`. Fix any reported issue immediately before proceeding.
104
- 5. **Final check** — before the Exit Gate, one consolidated re-read + `verify_template` run to confirm the full state matches everything performed in this session.
105
-
106
- ## Recovery
107
-
108
- | Step | Max Attempts | Strategy |
109
- | ----------------------------- | ------------ | ----------------------------------------------- |
110
- | Design (`design-generated`) | 2 | Re-invoke solution-designer with adjusted context |
111
-
112
- ## Exit Gate
113
-
114
- Present results, get user confirmation, then hand off (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)). Never auto-invoke the next skill. A user-chosen skip still uses this Exit Gate; its results box says the step was skipped and why, and the next step is `/owflow:research-finalize <task-path>`.
115
-
116
- ### Results box
117
-
118
- ```markdown
119
- ## ✅ RESEARCH DESIGN COMPLETE — <research question>
120
-
121
- **Architecture style** — [style and key components]
122
- **Decisions recorded** — [N architectural decisions in decision-log.md]
123
- **Key highlights** — [1 line per key decision]
124
- **Integration points** — [with the existing system, if applicable]
125
- **Diagrams** — [refined by diagrams-mermaid / gaps recorded]
126
-
127
- **Artifacts**
128
-
129
- - `outputs/high-level-design.md`
130
- - `outputs/decision-log.md`
131
- ```
132
-
133
- ### Results-acceptance question
134
-
135
- Use `question` — "Are these results correct?" with options:
136
-
137
- - **Accept** — the architecture and decision log are good; continue.
138
- - **Adjust** — re-invoke the designer with the user's corrections (changed constraints or preferences), update state and artifacts, re-present the results box.
139
- - **Discuss** — walk through the architecture style or specific architectural decisions in more depth; then re-ask.
140
- - **Stop here** — print the resume command (`/owflow:research-design <task-path>`) and end.
141
-
142
- ### Next steps (after Accept)
143
-
144
- - `→ /owflow:research-finalize <task-path>` — `required` next: inventories all research outputs (including these design artifacts) and completes the task (`research-completed`). Remaining after: none — development starts from finalize's handoff (`→ /owflow:development <task-path>`).
145
-
146
- Then STOP.
1
+ ---
2
+ name: owflow:research-design
3
+ description: Research skill — optional subskill. Asks design preferences (Part A), delegates high-level architecture design to the solution-designer agent (outputs/high-level-design.md + outputs/decision-log.md), then refines diagrams via the diagrams-mermaid Skill — content-preserving (design-generated). Invoking this skill IS the decision to design — there is no enablement flag.
4
+ argument-hint: "[task-path-or-identifier]"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Research Design — High-Level Design (design-generated)
9
+
10
+ Work phase of the research workflow. Creates the high-level architecture design from the selected solution approach — or, when brainstorming did not run, seeded from the research-report recommendations — as two artifacts (`outputs/high-level-design.md`, `outputs/decision-log.md`), then refines diagrams via the `diagrams-mermaid` Skill. Optional phase — runs when the user chooses it: invoking this skill IS the decision to design (no enablement flag in state). The design-only branch (brainstorming not run) is owned here: `selected_approach` is seeded from the research report. State lives in `orchestrator-state.yml` — this skill reads it on entry and writes results on exit.
11
+
12
+ Related phases: `/owflow:research-brainstorm` + `/owflow:research-converge` (produce the chosen combination consumed as `selected_approach`), `/owflow:research-finalize` (always next). The design-techniques reference lives in this skill's own folder (`references/design-techniques.md`).
13
+
14
+ ## Entry Gate
15
+
16
+ Resolve the `task-path-or-identifier` argument BEFORE anything else (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)):
17
+
18
+ - **Path** (absolute or project-relative) to the task directory — use as-is.
19
+ - **Identifier** — exact directory name inside `.owflow/tasks/research/` (e.g., `2026-09-26-my-research`); resolve to its path.
20
+ - If the argument is **missing**, the path does **not exist**, or matches **no identifier** → print the blocked block, then STOP (never guess or auto-pick a task):
21
+ 1. Steps that must be completed first (in order), each with its command:
22
+ - Research brief & plan (`brief-written`, `plan-created`) → `/owflow:research-plan <task-path>`
23
+ - Parallel findings fan (`findings-gathered`) → `/owflow:research-gather <task-path>`
24
+ - Synthesis & research report (`synthesis-complete`) → `/owflow:research-synthesize <task-path>`
25
+ - Chosen approaches (`approaches-chosen`) → `/owflow:research-brainstorm <task-path>` + `/owflow:research-converge <task-path>` (only when brainstorming ran)
26
+ 2. List available research-task identifiers (directories under `.owflow/tasks/research/`) to resume from, if any.
27
+ 3. Hint: `Run /owflow:research <question> to start a task from scratch, or pass a task path/identifier to resume.`
28
+
29
+ ### Prerequisites
30
+
31
+ | Required for this skill | Where verified | Produced by |
32
+ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
33
+ | State file exists | `<task-path>/orchestrator-state.yml` | `/owflow:research <question>` or `/owflow:research-quick` |
34
+ | Design input ready | brainstorm ran — `approaches-chosen` in `completed_phases`; OR brainstorm did not run — `outputs/research-report.md` exists with recommendations | `/owflow:research-converge <task-path>` (or `/owflow:research-synthesize <task-path>`) |
35
+
36
+ 1. **Read `orchestrator-state.yml`** from the task path. If missing → mid-pipeline bootstrap ([Missing-state Bootstrap](../orchestrator-framework/references/gate-contract.md), starting slug `design-generated`): `question` — create a fresh standard research task starting at this step, or decline → print `No research task found at <path>. Run /owflow:research <question> to start a task from scratch.` and STOP.
37
+ 2. **Prerequisite check**: `synthesis-complete` must be in `completed_phases`. If missing → print the blocked block (`→ /owflow:research-synthesize <task-path>`, or the earliest missing earlier step), then STOP.
38
+ 3. **Design input (branch resolution)**:
39
+ - `approaches-chosen` in `completed_phases` → brainstorm ran; the chosen combination from `phase_summaries.converge.decision_areas` is `selected_approach`.
40
+ - `approaches-chosen` in `completed_phases` but `phase_summaries.converge.decision_areas` has no `chosen_approach` → convergence never resolved its areas: `→ /owflow:research-converge <task-path>`, then STOP.
41
+ - `alternatives-generated` in `completed_phases` but `approaches-chosen` absent → the brainstorm chain is incomplete: `→ /owflow:research-converge <task-path>`, then STOP. Do NOT seed from the research report while alternatives exist.
42
+ - Neither slug present → brainstorming has not produced alternatives. Ask via `question`: "Brainstorming hasn't run — seed the design from the research report, or brainstorm first?" → seed from report (design-only branch): state `Brainstorming did not run — seeding the design from research-report recommendations.`, validate `outputs/research-report.md` exists (missing → `→ /owflow:research-synthesize <task-path>`, then STOP) and proceed; → brainstorm first: `→ /owflow:research-brainstorm <task-path>`, then STOP.
43
+ 4. **Skip/resume**: if `design-generated` is in `completed_phases`, validate BOTH `outputs/high-level-design.md` AND `outputs/decision-log.md` exist; either missing → re-run Parts B-D below; both present → report the existing design summary and route to the Exit Gate.
44
+
45
+ ## Input / Output Artifacts
46
+
47
+ | Artifact | Normal mode (full lane) | Quick mode (`research-quick`) |
48
+ | ---------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
49
+ | Consumed: `phase_summaries.converge.decision_areas` (chosen combination) | becomes `selected_approach` when brainstorm ran | same fields — when the optional chain runs after a quick pass, converge ran as the normal subskill |
50
+ | Consumed: `outputs/research-report.md` | design-only branch seed (`selected_approach` from recommendations) | identical — research-quick produces the same report artifact |
51
+ | Produced: `outputs/high-level-design.md`, `outputs/decision-log.md` | delegated to `solution-designer`, refined via `diagrams-mermaid` Skill | NOT produced in the quick pass — design always runs as this skill after the quick lane |
52
+ | State write | `design-generated`; `phase_summaries.design {summary, architecture_style, decisions_count}`, `research_outputs.high_level_design` + `.decision_log` | same (this skill never runs inside a quick pass) |
53
+
54
+ ## Execute (Part A direct + Part B delegated + Part C direct + Part D Skill)
55
+
56
+ **Read first**: the [Delegation Rules](../orchestrator-framework/references/delegation-rules.md).
57
+
58
+ **Read `references/design-techniques.md` NOW using the Read tool** — MADR format, ADR guidance, decision documentation patterns (own-folder reference).
59
+
60
+ ### Part A — Design Direction (direct)
61
+
62
+ 1. Brainstorm ran: read the chosen combination from `phase_summaries.converge.decision_areas` — it becomes `selected_approach`.
63
+ 2. Brainstorm did not run (design-only branch, resolved in Entry Gate step 3): read `outputs/research-report.md` recommendations and derive `selected_approach` from them; note the provenance (research-report recommendations, not convergence).
64
+ 3. `question` — "Any architectural constraints or preferences?" (free-form answer; empty means none). These `design_preferences` ride in the Part B context pass and are kept human-readable in `phase_summaries.design.summary` — the state template has NO dedicated `design_preferences` slot; that omission is deliberate (do NOT invent a template field).
65
+
66
+ ### Part B — Design Generation (subagent)
67
+
68
+ > **ANTI-PATTERN — do NOT generate C4 architecture diagrams or ADRs inline. "The approach is obvious" is NOT a reason to skip delegation. The solution-designer agent has specialized architecture and MADR documentation capabilities.**
69
+
70
+ 1. **INVOKE NOW**: Task tool - `solution-designer` subagent (never the Skill tool — this is an agent). Pass (Pattern 7 — accumulated context):
71
+ - `task_path`, `synthesis_path` (`analysis/synthesis.md`), `research_report_path` (`outputs/research-report.md`)
72
+ - `solution_exploration_path` (`outputs/solution-exploration.md`) — only when brainstorm ran
73
+ - `selected_approach` (from convergence; on the no-brainstorm branch, seeded from research-report recommendations — list the provenance in the prompt)
74
+ - `design_preferences` (from Part A; omit when the user gave none)
75
+ - Accumulated context: `research_type`, `research_question`, `confidence_level`, `phase_summaries`
76
+ - `project_doc_paths` (from state)
77
+ - MUST-contract: the designer writes BOTH `outputs/high-level-design.md` AND `outputs/decision-log.md`
78
+ 2. > **SELF-CHECK**: After the Task tool returns, verify BOTH `outputs/high-level-design.md` and `outputs/decision-log.md` exist. If either is missing: **STOP. Do NOT proceed to Part D or the Exit Gate.** Re-invoke the designer with corrected context. If a second attempt also fails, use `question` to report the failure and ask whether to retry or skip design.
79
+
80
+ ### Part C — Executive Summary (direct)
81
+
82
+ Read `outputs/high-level-design.md` and `outputs/decision-log.md`, then present the executive summary through the Exit-Gate results box below (architecture style and key components, decision count, key decision highlights 1 line each, integration points with the existing system if applicable) — no separate presentation round.
83
+
84
+ ### Part D — Diagram Refinement (Skill, content-preserving)
85
+
86
+ 1. **INVOKE NOW**: Skill tool - `diagrams-mermaid` to refine visual communication in `outputs/high-level-design.md` (the skill writes the diagrams into the file and themes them github-dark by default).
87
+ 2. Add diagrams that supplement (NOT replace) existing architecture content:
88
+ - one architecture view (`flowchart` with subgraphs; nested subgraphs only if needed),
89
+ - one interaction/state view (`sequenceDiagram` or `flowchart`) for the critical flow.
90
+ 3. If minimum context for a diagram is missing, record explicit gaps in the document and avoid speculative components/relationships.
91
+
92
+ ### Close (`design-generated`)
93
+
94
+ 1. **State write**: append `design-generated` to `completed_phases` after the SELF-CHECK passes and Part D completes; update `research_context.phase_summaries.design {summary, architecture_style, decisions_count}` (keep the Part A preferences visible in `summary`); set `research_outputs.high_level_design` AND `research_outputs.decision_log`; bump `orchestrator.updated`. On failure: append `design-generated` to `failed_phases`, increment `auto_fix_attempts["design-generated"]`. Then re-read state + run `verify_template` (see State Update Convention).
95
+
96
+ ## State Update Convention (per step)
97
+
98
+ Apply after EVERY step above:
99
+
100
+ 1. **Write immediately** — update `orchestrator-state.yml` as soon as the step completes, appending ONLY the step slug actually performed (`design-generated`) plus that step's fields. Never batch multiple steps into one end-of-skill write.
101
+ 2. **Timestamp** — set `orchestrator.updated` to the current UTC timestamp on every write.
102
+ 3. **Failures** — if the designer delegation fails or its retries are abandoned, do NOT append `design-generated` to `completed_phases`; instead append it to `orchestrator.failed_phases` and increment `auto_fix_attempts["design-generated"]`. A user-chosen skip via `question` after repeated failures is a deliberate decision, not a failure: record the reason in `phase_summaries.design.summary` and append neither `design-generated` nor a `failed_phases` entry. Then present the Exit Gate (results box notes the skip; next step is `/owflow:research-finalize <task-path>`).
103
+ 4. **Validate** — after every write, re-read the file to confirm values, then run the `verify_template` tool with `filePath: <task-path>/orchestrator-state.yml`, `templateName: orchestrator-state-research.yml`. Fix any reported issue immediately before proceeding.
104
+ 5. **Final check** — before the Exit Gate, one consolidated re-read + `verify_template` run to confirm the full state matches everything performed in this session.
105
+
106
+ ## Recovery
107
+
108
+ | Step | Max Attempts | Strategy |
109
+ | ----------------------------- | ------------ | ----------------------------------------------- |
110
+ | Design (`design-generated`) | 2 | Re-invoke solution-designer with adjusted context |
111
+
112
+ ## Exit Gate
113
+
114
+ Present results, get user confirmation, then hand off (see [Gate Contract](../orchestrator-framework/references/gate-contract.md)). Never auto-invoke the next skill. A user-chosen skip still uses this Exit Gate; its results box says the step was skipped and why, and the next step is `/owflow:research-finalize <task-path>`.
115
+
116
+ ### Results box
117
+
118
+ ```markdown
119
+ ## ✅ RESEARCH DESIGN COMPLETE — <research question>
120
+
121
+ **Architecture style** — [style and key components]
122
+ **Decisions recorded** — [N architectural decisions in decision-log.md]
123
+ **Key highlights** — [1 line per key decision]
124
+ **Integration points** — [with the existing system, if applicable]
125
+ **Diagrams** — [refined by diagrams-mermaid / gaps recorded]
126
+
127
+ **Artifacts**
128
+
129
+ - `outputs/high-level-design.md`
130
+ - `outputs/decision-log.md`
131
+ ```
132
+
133
+ ### Results-acceptance question
134
+
135
+ Use `question` — "Are these results correct?" with options:
136
+
137
+ - **Accept** — the architecture and decision log are good; continue.
138
+ - **Adjust** — re-invoke the designer with the user's corrections (changed constraints or preferences), update state and artifacts, re-present the results box.
139
+ - **Discuss** — walk through the architecture style or specific architectural decisions in more depth; then re-ask.
140
+ - **Stop here** — print the resume command (`/owflow:research-design <task-path>`) and end.
141
+
142
+ ### Next steps (after Accept)
143
+
144
+ - `→ /owflow:research-finalize <task-path>` — `required` next: inventories all research outputs (including these design artifacts) and completes the task (`research-completed`). Remaining after: none — development starts from finalize's handoff (`→ /owflow:development <task-path>`).
145
+
146
+ Then STOP.