maestro-flow 0.3.43 → 0.3.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/learn-decompose.md +10 -15
- package/.claude/commands/learn-follow.md +11 -16
- package/.claude/commands/learn-investigate.md +18 -22
- package/.claude/commands/learn-retro.md +23 -26
- package/.claude/commands/learn-second-opinion.md +11 -16
- package/.claude/commands/maestro-analyze.md +8 -0
- package/.claude/commands/maestro-brainstorm.md +8 -0
- package/.claude/commands/maestro-execute.md +11 -3
- package/.claude/commands/maestro-learn.md +4 -4
- package/.claude/commands/maestro-milestone-complete.md +6 -6
- package/.claude/commands/maestro-plan.md +8 -0
- package/.claude/commands/maestro-ralph-execute.md +1 -2
- package/.claude/commands/maestro-tools-execute.md +117 -0
- package/.claude/commands/maestro-tools-register.md +136 -0
- package/.claude/commands/maestro-ui-codify.md +67 -0
- package/.claude/commands/manage-harvest.md +1 -1
- package/.claude/commands/manage-learn.md +5 -7
- package/.claude/commands/manage-wiki.md +1 -1
- package/.claude/commands/quality-auto-test.md +1 -1
- package/.claude/commands/quality-debug.md +8 -0
- package/.claude/commands/quality-retrospective.md +4 -5
- package/.claude/commands/quality-review.md +8 -0
- package/.claude/commands/spec-add.md +18 -2
- package/.claude/commands/spec-load.md +25 -6
- package/.claude/commands/spec-setup.md +2 -2
- package/.claude/commands/wiki-connect.md +1 -1
- package/.claude/commands/wiki-digest.md +5 -6
- package/.claude/skills/codify-to-knowhow/SKILL.md +167 -0
- package/.claude/skills/codify-to-knowhow/phases/01-load-manifest.md +101 -0
- package/.claude/skills/codify-to-knowhow/phases/02-generate-knowhow.md +97 -0
- package/.claude/skills/codify-to-knowhow/phases/03-generate-specs.md +92 -0
- package/.claude/skills/codify-to-knowhow/phases/04-index-verify.md +119 -0
- package/.codex/skills/codify-to-knowhow/SKILL.md +427 -0
- package/.codex/skills/learn-decompose/SKILL.md +8 -8
- package/.codex/skills/learn-follow/SKILL.md +6 -6
- package/.codex/skills/learn-investigate/SKILL.md +4 -4
- package/.codex/skills/learn-retro/SKILL.md +7 -7
- package/.codex/skills/learn-second-opinion/SKILL.md +6 -6
- package/.codex/skills/maestro-analyze/SKILL.md +491 -491
- package/.codex/skills/maestro-collab/SKILL.md +1 -1
- package/.codex/skills/maestro-learn/SKILL.md +1 -1
- package/.codex/skills/maestro-milestone-complete/SKILL.md +122 -122
- package/.codex/skills/maestro-plan/SKILL.md +485 -485
- package/.codex/skills/maestro-tools-execute/SKILL.md +105 -0
- package/.codex/skills/maestro-tools-register/SKILL.md +149 -0
- package/.codex/skills/maestro-ui-codify/SKILL.md +398 -0
- package/.codex/skills/maestro-verify/SKILL.md +486 -486
- package/.codex/skills/manage-harvest/SKILL.md +3 -3
- package/.codex/skills/manage-issue-discover/SKILL.md +431 -431
- package/.codex/skills/manage-learn/SKILL.md +13 -13
- package/.codex/skills/manage-wiki/SKILL.md +1 -1
- package/.codex/skills/quality-auto-test/SKILL.md +553 -553
- package/.codex/skills/quality-refactor/SKILL.md +151 -151
- package/.codex/skills/quality-retrospective/SKILL.md +6 -6
- package/.codex/skills/spec-add/SKILL.md +104 -101
- package/.codex/skills/spec-load/SKILL.md +73 -77
- package/.codex/skills/team-quality-assurance/roles/executor/role.md +1 -1
- package/.codex/skills/wiki-connect/SKILL.md +5 -5
- package/.codex/skills/wiki-digest/SKILL.md +8 -8
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +0 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/fs-watcher.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/state/fs-watcher.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/supervisor/self-learning-service.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/supervisor/self-learning-service.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/supervisor/self-learning-service.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.d.ts +6 -3
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +29 -14
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +0 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.d.ts +1 -2
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +2 -52
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +68 -33
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +1 -11
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +5 -4
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +26 -12
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
- package/dashboard/dist-server/src/agents/cli-agent-runner.js +5 -5
- package/dashboard/dist-server/src/agents/cli-agent-runner.js.map +1 -1
- package/dashboard/dist-server/src/tools/spec-entry-parser.d.ts +4 -2
- package/dashboard/dist-server/src/tools/spec-entry-parser.js +19 -7
- package/dashboard/dist-server/src/tools/spec-entry-parser.js.map +1 -1
- package/dashboard/dist-server/src/tools/spec-loader.d.ts +4 -4
- package/dashboard/dist-server/src/tools/spec-loader.js +166 -23
- package/dashboard/dist-server/src/tools/spec-loader.js.map +1 -1
- package/dist/src/agents/cli-agent-runner.js +5 -5
- package/dist/src/agents/cli-agent-runner.js.map +1 -1
- package/dist/src/commands/knowhow.d.ts.map +1 -1
- package/dist/src/commands/knowhow.js +25 -6
- package/dist/src/commands/knowhow.js.map +1 -1
- package/dist/src/commands/spec.d.ts +1 -1
- package/dist/src/commands/spec.d.ts.map +1 -1
- package/dist/src/commands/spec.js +70 -3
- package/dist/src/commands/spec.js.map +1 -1
- package/dist/src/commands/wiki.d.ts.map +1 -1
- package/dist/src/commands/wiki.js +45 -6
- package/dist/src/commands/wiki.js.map +1 -1
- package/dist/src/hooks/keyword-spec-injector.js +1 -1
- package/dist/src/hooks/keyword-spec-injector.js.map +1 -1
- package/dist/src/hooks/plugins/spec-injection-plugin.js +2 -2
- package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
- package/dist/src/hooks/spec-injector.d.ts +0 -6
- package/dist/src/hooks/spec-injector.d.ts.map +1 -1
- package/dist/src/hooks/spec-injector.js +36 -43
- package/dist/src/hooks/spec-injector.js.map +1 -1
- package/dist/src/hooks/wiki-role-loader.d.ts +18 -0
- package/dist/src/hooks/wiki-role-loader.d.ts.map +1 -0
- package/dist/src/hooks/wiki-role-loader.js +43 -0
- package/dist/src/hooks/wiki-role-loader.js.map +1 -0
- package/dist/src/tools/spec-entry-parser.d.ts +4 -2
- package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
- package/dist/src/tools/spec-entry-parser.js +19 -7
- package/dist/src/tools/spec-entry-parser.js.map +1 -1
- package/dist/src/tools/spec-init.js +54 -54
- package/dist/src/tools/spec-loader.d.ts +4 -4
- package/dist/src/tools/spec-loader.d.ts.map +1 -1
- package/dist/src/tools/spec-loader.js +166 -23
- package/dist/src/tools/spec-loader.js.map +1 -1
- package/dist/src/tools/spec-writer.d.ts +5 -0
- package/dist/src/tools/spec-writer.d.ts.map +1 -1
- package/dist/src/tools/spec-writer.js +27 -0
- package/dist/src/tools/spec-writer.js.map +1 -1
- package/dist/src/tools/store-knowhow.d.ts.map +1 -1
- package/dist/src/tools/store-knowhow.js +56 -27
- package/dist/src/tools/store-knowhow.js.map +1 -1
- package/package.json +1 -1
- package/workflows/execute.md +1 -1
- package/workflows/harvest.md +13 -13
- package/workflows/knowhow.md +72 -11
- package/workflows/learn.md +70 -58
- package/workflows/milestone-complete.md +1 -1
- package/workflows/retrospective.md +50 -56
- package/workflows/specs-load.md +15 -14
- package/workflows/tools-spec.md +65 -0
- package/workflows/ui-codify-extract.md +373 -0
- package/workflows/ui-codify-knowhow.md +258 -0
- package/workflows/ui-codify-package.md +161 -0
- package/workflows/ui-codify.md +225 -0
- package/workflows/verify.md +1 -1
- package/workflows/wiki-connect.md +7 -7
- package/workflows/wiki-digest.md +13 -13
- package/workflows/wiki-manage.md +1 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro-tools-execute
|
|
3
|
+
description: Load and execute tool specs by role or name
|
|
4
|
+
argument-hint: "[tool-name | --category <category>]"
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Agent
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<purpose>
|
|
9
|
+
Load registered tool specs and execute them step-by-step. Two invocation modes:
|
|
10
|
+
|
|
11
|
+
1. **Direct** — Specify tool name, load full steps, execute sequentially
|
|
12
|
+
2. **Category-based** — List available tools for a category, user selects, then execute
|
|
13
|
+
|
|
14
|
+
Execution follows the tool definition steps in order, reporting progress per step and asking user on blockers.
|
|
15
|
+
</purpose>
|
|
16
|
+
|
|
17
|
+
<context>
|
|
18
|
+
$ARGUMENTS — Tool name, keyword, or --category filter
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
$maestro-tools-execute "integration-test"
|
|
22
|
+
$maestro-tools-execute "--category coding"
|
|
23
|
+
$maestro-tools-execute "--category review --keyword api"
|
|
24
|
+
$maestro-tools-execute
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Empty arguments enters interactive mode: list all tools for user selection.
|
|
28
|
+
</context>
|
|
29
|
+
|
|
30
|
+
<execution>
|
|
31
|
+
|
|
32
|
+
### Step 1: Load Tool
|
|
33
|
+
|
|
34
|
+
**By name**:
|
|
35
|
+
```bash
|
|
36
|
+
maestro spec load --category coding --keyword <name>
|
|
37
|
+
```
|
|
38
|
+
Match tool entries whose title or keywords contain the name.
|
|
39
|
+
|
|
40
|
+
**By category**:
|
|
41
|
+
```bash
|
|
42
|
+
maestro spec load --category <category>
|
|
43
|
+
```
|
|
44
|
+
Extract tool entries from output, list available tools.
|
|
45
|
+
|
|
46
|
+
**Empty args**:
|
|
47
|
+
Load all tool entries, present to user with AskUserQuestion for selection.
|
|
48
|
+
|
|
49
|
+
### Step 2: Display Tool
|
|
50
|
+
|
|
51
|
+
Show tool information:
|
|
52
|
+
- Name, category, keywords
|
|
53
|
+
- Steps overview (for ref entries, expand knowhow detail first)
|
|
54
|
+
|
|
55
|
+
Expand ref entries:
|
|
56
|
+
```bash
|
|
57
|
+
maestro wiki load <knowhow-id>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Step 3: Confirm Execution
|
|
61
|
+
|
|
62
|
+
Ask user:
|
|
63
|
+
- Execute steps as-is?
|
|
64
|
+
- Adjust parameters/scope?
|
|
65
|
+
- View only, do not execute?
|
|
66
|
+
|
|
67
|
+
### Step 4: Step-by-Step Execution
|
|
68
|
+
|
|
69
|
+
Follow the tool definition steps in order:
|
|
70
|
+
1. Read current step description
|
|
71
|
+
2. Execute step action (file ops, commands, code changes, etc.)
|
|
72
|
+
3. Verify step completion
|
|
73
|
+
4. Report progress: `[Step N/M] done — <step_name>`
|
|
74
|
+
5. Proceed to next step
|
|
75
|
+
|
|
76
|
+
**Blocker handling**:
|
|
77
|
+
- Step fails → report error, ask user: retry / skip / abort
|
|
78
|
+
- Needs user input → AskUserQuestion for parameters
|
|
79
|
+
- Prerequisites unmet → show missing items, ask how to proceed
|
|
80
|
+
|
|
81
|
+
### Step 5: Report Results
|
|
82
|
+
|
|
83
|
+
After completion, output:
|
|
84
|
+
- Completed steps list
|
|
85
|
+
- Skipped/failed steps (if any)
|
|
86
|
+
- Artifacts produced (generated files, test results, etc.)
|
|
87
|
+
- Suggested next actions
|
|
88
|
+
|
|
89
|
+
</execution>
|
|
90
|
+
|
|
91
|
+
<error_codes>
|
|
92
|
+
| Code | Severity | Description |
|
|
93
|
+
|------|----------|-------------|
|
|
94
|
+
| E001 | fatal | No matching tool found — check name/keyword |
|
|
95
|
+
| E002 | warning | Multiple tools match — list options for user selection |
|
|
96
|
+
| E003 | warning | Step execution failed — ask user how to proceed |
|
|
97
|
+
</error_codes>
|
|
98
|
+
|
|
99
|
+
<success_criteria>
|
|
100
|
+
- [ ] Tool correctly loaded (ref expanded if applicable)
|
|
101
|
+
- [ ] User confirmed before execution starts
|
|
102
|
+
- [ ] Each step has progress feedback
|
|
103
|
+
- [ ] Blockers handled interactively
|
|
104
|
+
- [ ] Results reported clearly
|
|
105
|
+
</success_criteria>
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro-tools-register
|
|
3
|
+
description: Register tool specs - extract, generate, or optimize reusable process definitions
|
|
4
|
+
argument-hint: "[description or intent]"
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Agent
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<purpose>
|
|
9
|
+
Codify reusable business processes as knowhow documents with `tool: true` in YAML frontmatter. Once registered, entries are auto-discovered by downstream agents via `spec load --category` — plan agents pick up design/architecture flows, test agents pick up verification methods, coding agents pick up execution steps.
|
|
10
|
+
|
|
11
|
+
Three modes:
|
|
12
|
+
|
|
13
|
+
1. **Extract** — Pull reusable processes from conversations/code/docs
|
|
14
|
+
2. **Generate** — Create new tool definitions from user description
|
|
15
|
+
3. **Optimize** — Improve existing tool spec steps, structure, clarity
|
|
16
|
+
|
|
17
|
+
Short processes (<10 steps) inline; long processes (>=10 steps or with code examples) use ref mode with knowhow detail doc (RCP-/DOC-).
|
|
18
|
+
</purpose>
|
|
19
|
+
|
|
20
|
+
<context>
|
|
21
|
+
$ARGUMENTS — User intent description, or empty (interactive guidance)
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
$maestro-tools-register "extract OAuth PKCE token exchange flow from src/auth/"
|
|
25
|
+
$maestro-tools-register "generate Stripe webhook idempotency verification"
|
|
26
|
+
$maestro-tools-register "generate E2E checkout flow with payment gateway mock setup"
|
|
27
|
+
$maestro-tools-register "optimize e2e-checkout tool"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Tool registration**: Creates knowhow documents in `knowhow/` folder with `tool: true` in YAML frontmatter. Tools are auto-discovered by `spec load` based on category + tool flag.
|
|
31
|
+
|
|
32
|
+
**Knowhow format**:
|
|
33
|
+
```yaml
|
|
34
|
+
---
|
|
35
|
+
title: Tool Name
|
|
36
|
+
type: recipe
|
|
37
|
+
category: coding
|
|
38
|
+
summary: "Use when <timing>. <scope description>"
|
|
39
|
+
tags: [testing, api]
|
|
40
|
+
tool: true
|
|
41
|
+
---
|
|
42
|
+
Step content...
|
|
43
|
+
```
|
|
44
|
+
</context>
|
|
45
|
+
|
|
46
|
+
<execution>
|
|
47
|
+
|
|
48
|
+
### Step 1: Intent Detection
|
|
49
|
+
|
|
50
|
+
Parse $ARGUMENTS to determine mode:
|
|
51
|
+
- Contains "extract" → extract mode
|
|
52
|
+
- Contains "optimize/improve" → optimize mode
|
|
53
|
+
- Other → generate mode
|
|
54
|
+
- Empty → ask user with AskUserQuestion
|
|
55
|
+
|
|
56
|
+
### Step 2: Gather Information
|
|
57
|
+
|
|
58
|
+
**Extract mode**:
|
|
59
|
+
- Identify source (current conversation, specified files, codebase scan)
|
|
60
|
+
- Extract step sequence, prerequisites, expected outputs
|
|
61
|
+
|
|
62
|
+
**Generate mode**:
|
|
63
|
+
- Confirm tool name, applicable roles, target scenario
|
|
64
|
+
- If unclear, ask user with AskUserQuestion
|
|
65
|
+
|
|
66
|
+
**Optimize mode**:
|
|
67
|
+
- Load existing tool: `maestro spec load --category coding --keyword <name>`
|
|
68
|
+
- Analyze improvement points (step splitting, prerequisites, error handling)
|
|
69
|
+
|
|
70
|
+
**For all modes** — identify the usage timing: when should an agent or user invoke this tool? This becomes the first line of the entry description (see Step 5).
|
|
71
|
+
|
|
72
|
+
### Step 3: Determine Category
|
|
73
|
+
|
|
74
|
+
Infer applicable category from context, or ask user:
|
|
75
|
+
- coding — execution tools (build, deploy, integrate)
|
|
76
|
+
- test — testing tools (test flows, verification steps)
|
|
77
|
+
- review — review tools (checklists, audit standards)
|
|
78
|
+
- arch — planning tools (design flows, analysis steps)
|
|
79
|
+
- debug — analysis tools (diagnostic flows, investigation steps)
|
|
80
|
+
|
|
81
|
+
### Step 4: Decide Inline vs Ref
|
|
82
|
+
|
|
83
|
+
- Steps <10 and no code blocks → **inline mode**
|
|
84
|
+
- Steps >=10 or contains code examples/config → **ref mode**
|
|
85
|
+
|
|
86
|
+
### Step 5: Write
|
|
87
|
+
|
|
88
|
+
**Description format**: First line after `### Title` must state **when to use** this tool (the usage timing from Step 2). This is critical for ref entries — `spec load` only shows the first 200 chars after the heading as the summary.
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
### {Title}
|
|
92
|
+
|
|
93
|
+
Use when {timing/trigger condition}.
|
|
94
|
+
|
|
95
|
+
1. Step one ...
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Inline mode**:
|
|
99
|
+
Create a knowhow document in `knowhow/` with `tool: true` frontmatter:
|
|
100
|
+
```yaml
|
|
101
|
+
---
|
|
102
|
+
title: <Title>
|
|
103
|
+
type: recipe
|
|
104
|
+
category: <category>
|
|
105
|
+
summary: "Use when <timing>. <scope description>"
|
|
106
|
+
tags: [<keywords>]
|
|
107
|
+
tool: true
|
|
108
|
+
---
|
|
109
|
+
Use when <timing>.
|
|
110
|
+
|
|
111
|
+
1. <step1>
|
|
112
|
+
2. <step2>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Ref mode**:
|
|
116
|
+
1. Generate knowhow detail document (RCP- or DOC- prefix). YAML frontmatter must include `summary` with usage timing and `tool: true`:
|
|
117
|
+
```yaml
|
|
118
|
+
---
|
|
119
|
+
title: <Title>
|
|
120
|
+
type: recipe
|
|
121
|
+
category: <category>
|
|
122
|
+
summary: "Use when <timing>. <scope description>"
|
|
123
|
+
tags: [<keywords>]
|
|
124
|
+
tool: true
|
|
125
|
+
---
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 6: Verify
|
|
129
|
+
|
|
130
|
+
- `maestro spec load --category <category> --keyword <keyword>` to confirm loadable
|
|
131
|
+
- Display result: title, category, keywords, storage location
|
|
132
|
+
|
|
133
|
+
</execution>
|
|
134
|
+
|
|
135
|
+
<error_codes>
|
|
136
|
+
| Code | Severity | Description |
|
|
137
|
+
|------|----------|-------------|
|
|
138
|
+
| E001 | fatal | `.workflow/specs/` does not exist — run `maestro spec init` |
|
|
139
|
+
| E002 | warning | Duplicate tool name detected — confirm overwrite/optimize |
|
|
140
|
+
| E003 | fatal | category parameter empty — tools must declare applicable category |
|
|
141
|
+
</error_codes>
|
|
142
|
+
|
|
143
|
+
<success_criteria>
|
|
144
|
+
- [ ] Tool registered as knowhow document with `tool: true` frontmatter
|
|
145
|
+
- [ ] category attribute correctly set
|
|
146
|
+
- [ ] keywords auto-extracted (3-5 terms)
|
|
147
|
+
- [ ] Loadable via `spec load --category <category>`
|
|
148
|
+
- [ ] Long processes use ref mode with knowhow file created
|
|
149
|
+
</success_criteria>
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro-ui-codify
|
|
3
|
+
description: Extract design system from code, generate reference package, persist as knowledge assets
|
|
4
|
+
argument-hint: "<source-path> [--package-name <name>] [--output-dir <path>] [--overwrite] [-y]"
|
|
5
|
+
allowed-tools: spawn_agents_on_csv, Read, Write, Edit, Bash, Glob, Grep
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<purpose>
|
|
9
|
+
Wave-based UI design system codification using `spawn_agents_on_csv`. Diamond topology: file discovery (Wave 1), parallel style/animation/layout extraction (Wave 2), reference package generation (Wave 3), knowledge asset persistence (Wave 4).
|
|
10
|
+
|
|
11
|
+
**Core workflow**: Validate & Setup -> File Discovery -> 3-Agent Extraction -> Package Generation -> Knowhow Persistence
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
+---------------------------------------------------------------------------+
|
|
15
|
+
| UI CODIFY CSV WAVE WORKFLOW |
|
|
16
|
+
+---------------------------------------------------------------------------+
|
|
17
|
+
| |
|
|
18
|
+
| Step 1-2: Parse & Validate (inline) |
|
|
19
|
+
| +-- Parse source-path, --package-name, --output-dir, --overwrite |
|
|
20
|
+
| +-- Validate source directory exists |
|
|
21
|
+
| +-- Resolve package name (auto or explicit) |
|
|
22
|
+
| +-- Setup workspace directories |
|
|
23
|
+
| |
|
|
24
|
+
| Step 3: Generate tasks.csv |
|
|
25
|
+
| +-- Wave 1: File discovery (1 agent, barrier) |
|
|
26
|
+
| +-- Wave 2: Parallel extraction (3 agents) |
|
|
27
|
+
| | +-- Style Agent: design-tokens.json |
|
|
28
|
+
| | +-- Animation Agent: animation-tokens.json |
|
|
29
|
+
| | +-- Layout Agent: layout-templates.json |
|
|
30
|
+
| +-- Wave 3: Reference package (1 agent, barrier) |
|
|
31
|
+
| | +-- Copy tokens to package dir |
|
|
32
|
+
| | +-- Generate preview.html + preview.css |
|
|
33
|
+
| +-- Wave 4: Knowledge assets (1 agent, barrier) |
|
|
34
|
+
| +-- Build knowhow-manifest.json |
|
|
35
|
+
| +-- Write knowhow files + spec entries |
|
|
36
|
+
| +-- Cleanup temp workspace |
|
|
37
|
+
| |
|
|
38
|
+
| Step 4: Wave Execution via spawn_agents_on_csv |
|
|
39
|
+
| |
|
|
40
|
+
| Step 5: Results & Completion Report |
|
|
41
|
+
| |
|
|
42
|
+
+---------------------------------------------------------------------------+
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
</purpose>
|
|
46
|
+
|
|
47
|
+
<context>
|
|
48
|
+
```bash
|
|
49
|
+
$maestro-ui-codify "src/components"
|
|
50
|
+
$maestro-ui-codify "src/components" --package-name my-design-v1
|
|
51
|
+
$maestro-ui-codify "src/styles" --output-dir .workflow/packages --overwrite -y
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Flags**:
|
|
55
|
+
- `<source-path>` (positional, required): Directory containing CSS/SCSS/JS/TS/HTML source files
|
|
56
|
+
- `--package-name <name>`: Package name for reference output (default: auto from source directory)
|
|
57
|
+
- `--output-dir <path>`: Output directory (default: `.workflow/reference_style`)
|
|
58
|
+
- `--overwrite`: Allow overwriting existing package directory
|
|
59
|
+
- `-y, --yes`: Skip all confirmations
|
|
60
|
+
|
|
61
|
+
**Output Directory**: `.workflow/.csv-wave/{session-id}/`
|
|
62
|
+
**Core Output**: `tasks.csv` (master state) + `results.csv` (final)
|
|
63
|
+
**Package Output**: `{output-dir}/{package-name}/` with design-tokens.json, layout-templates.json, animation-tokens.json, preview.html, preview.css, knowhow-manifest.json
|
|
64
|
+
</context>
|
|
65
|
+
|
|
66
|
+
<csv_schema>
|
|
67
|
+
|
|
68
|
+
### tasks.csv (Master State)
|
|
69
|
+
|
|
70
|
+
```csv
|
|
71
|
+
id,wave,title,description,agent_type,deps,status,findings,output_path,error
|
|
72
|
+
"discover-1","1","Discover design files","Scan source directory, categorize files by type (CSS/SCSS/JS/TS/HTML), build file inventory with import relationships","discover","","","","",""
|
|
73
|
+
"style-1","2","Extract visual design tokens","Extract color, typography, spacing, border, shadow tokens from source files. Output design-tokens.json","extract-style","discover-1","","","",""
|
|
74
|
+
"anim-1","2","Extract animation tokens","Extract animation/transition declarations: keyframes, durations, easings, motion patterns. Output animation-tokens.json","extract-animation","discover-1","","","",""
|
|
75
|
+
"layout-1","2","Extract layout patterns","Extract component layout patterns: grid/flex systems, responsive breakpoints, container patterns. Output layout-templates.json","extract-layout","discover-1","","","",""
|
|
76
|
+
"package-1","3","Generate reference package","Copy token JSONs to package dir, generate preview.html + preview.css interactive showcase","package","style-1;anim-1;layout-1","","","",""
|
|
77
|
+
"knowhow-1","4","Build knowledge assets","Read token JSONs, build knowhow-manifest.json, write knowhow files + spec entries, cleanup temp workspace","knowhow","package-1","","","",""
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Columns**:
|
|
81
|
+
|
|
82
|
+
| Column | Phase | Description |
|
|
83
|
+
|--------|-------|-------------|
|
|
84
|
+
| `id` | Input | Unique task identifier |
|
|
85
|
+
| `wave` | Input | Wave number (1=discover, 2=extract, 3=package, 4=knowhow) |
|
|
86
|
+
| `title` | Input | Short task title |
|
|
87
|
+
| `description` | Input | Detailed instructions for this task |
|
|
88
|
+
| `agent_type` | Input | Agent type: discover/extract-style/extract-animation/extract-layout/package/knowhow |
|
|
89
|
+
| `deps` | Input | Semicolon-separated dependency task IDs |
|
|
90
|
+
| `status` | Output | `pending` -> `completed` / `failed` |
|
|
91
|
+
| `findings` | Output | Key findings summary (max 500 chars) |
|
|
92
|
+
| `output_path` | Output | Path to generated artifact |
|
|
93
|
+
| `error` | Output | Error message if failed |
|
|
94
|
+
|
|
95
|
+
### Session Structure
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
.workflow/.csv-wave/{YYYYMMDD}-ui-codify-{slug}/
|
|
99
|
+
+-- tasks.csv
|
|
100
|
+
+-- results.csv
|
|
101
|
+
+-- wave-{N}.csv (temporary)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
</csv_schema>
|
|
105
|
+
|
|
106
|
+
<invariants>
|
|
107
|
+
1. **Start Immediately**: First action is argument parsing, then validation
|
|
108
|
+
2. **Wave Order is Sacred**: Never execute wave N+1 before wave N completes and results are merged
|
|
109
|
+
3. **CSV is Source of Truth**: Master tasks.csv holds all state
|
|
110
|
+
4. **Context Propagation**: Wave 2 agents receive file discovery findings via prev_context
|
|
111
|
+
5. **Animation is Optional**: Missing animation-tokens.json is W001 warning, not fatal
|
|
112
|
+
6. **Idempotent Package**: --overwrite required to replace existing package directory
|
|
113
|
+
7. **Cleanup Temp Files**: Remove wave-{N}.csv after results merged, remove temp workspace after Wave 4
|
|
114
|
+
8. **DO NOT STOP**: Continuous execution until all waves complete
|
|
115
|
+
</invariants>
|
|
116
|
+
|
|
117
|
+
<execution>
|
|
118
|
+
|
|
119
|
+
### Step 1: Parse Arguments
|
|
120
|
+
|
|
121
|
+
**Parse from `$ARGUMENTS`**:
|
|
122
|
+
|
|
123
|
+
| Variable | Source | Default |
|
|
124
|
+
|----------|--------|---------|
|
|
125
|
+
| `source_path` | positional (required) | ERROR if missing |
|
|
126
|
+
| `package_name` | `--package-name <name>` | auto from source dir |
|
|
127
|
+
| `output_dir` | `--output-dir <path>` | `.workflow/reference_style` |
|
|
128
|
+
| `overwrite` | `--overwrite` | false |
|
|
129
|
+
| `AUTO_YES` | `-y` or `--yes` | false |
|
|
130
|
+
|
|
131
|
+
### Step 2: Validate & Setup
|
|
132
|
+
|
|
133
|
+
**2a: Validate source path**:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# E001: Source path required
|
|
137
|
+
test -n "$source_path" || { echo "E001: Source path argument required"; exit 1; }
|
|
138
|
+
|
|
139
|
+
# E002: Source path must be a directory
|
|
140
|
+
test -d "$source_path" || { echo "E002: Source path not found or not a directory: $source_path"; exit 1; }
|
|
141
|
+
|
|
142
|
+
source_path=$(cd "$source_path" && pwd)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**2b: Resolve package name**:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Auto-generate: directory name -> kebab-case + "-style" suffix
|
|
149
|
+
if [ -z "$package_name" ]; then
|
|
150
|
+
dir_name=$(basename "$source_path")
|
|
151
|
+
package_name=$(echo "$dir_name" | tr '[:upper:]' '[:lower:]' | tr ' _' '-' | sed 's/[^a-z0-9-]//g')
|
|
152
|
+
package_name="${package_name}-style"
|
|
153
|
+
fi
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**2c: Setup directories**:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
output_dir="${output_dir:-.workflow/reference_style}"
|
|
160
|
+
package_dir="${output_dir}/${package_name}"
|
|
161
|
+
|
|
162
|
+
# E003: Overwrite protection
|
|
163
|
+
if [ -d "$package_dir" ] && [ "$(ls -A "$package_dir" 2>/dev/null)" ]; then
|
|
164
|
+
if [ "$overwrite" != "true" ]; then
|
|
165
|
+
echo "E003: Package directory exists: $package_dir"
|
|
166
|
+
echo "HINT: Use --overwrite to replace, or choose a different --package-name"
|
|
167
|
+
exit 1
|
|
168
|
+
fi
|
|
169
|
+
fi
|
|
170
|
+
|
|
171
|
+
# Create temp workspace + package dir
|
|
172
|
+
timestamp=$(date +%Y%m%d%H%M%S)
|
|
173
|
+
temp_dir=".workflow/codify-temp-${timestamp}"
|
|
174
|
+
mkdir -p "$temp_dir"
|
|
175
|
+
mkdir -p "$package_dir"
|
|
176
|
+
|
|
177
|
+
# Session directory
|
|
178
|
+
session_slug=$(echo "$package_name" | head -c 40)
|
|
179
|
+
session_date=$(date -u +%Y%m%d)
|
|
180
|
+
sessionFolder=".workflow/.csv-wave/${session_date}-ui-codify-${session_slug}"
|
|
181
|
+
mkdir -p "$sessionFolder"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Step 3: Generate tasks.csv
|
|
185
|
+
|
|
186
|
+
Build the master CSV with 4 waves. The `description` column contains full agent instructions.
|
|
187
|
+
|
|
188
|
+
**Wave 1 — File Discovery** (1 agent, barrier):
|
|
189
|
+
|
|
190
|
+
Description template:
|
|
191
|
+
```
|
|
192
|
+
Scan source directory '${source_path}' for design-relevant files. Categorize by type:
|
|
193
|
+
- CSS/SCSS files: stylesheets with design tokens
|
|
194
|
+
- JS/TS files: style objects, theme configs, styled-components
|
|
195
|
+
- HTML files: template structure with inline styles
|
|
196
|
+
|
|
197
|
+
Build file inventory JSON at '${temp_dir}/file-inventory.json':
|
|
198
|
+
{
|
|
199
|
+
"source_path": "${source_path}",
|
|
200
|
+
"files": [
|
|
201
|
+
{ "path": "...", "type": "css|scss|js|ts|html", "category": "tokens|components|layout|animation", "size": N }
|
|
202
|
+
],
|
|
203
|
+
"summary": { "total": N, "by_type": {...}, "by_category": {...} }
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
Use Glob to find files, Read to sample content for categorization. Report total file count and category breakdown in findings.
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Wave 2 — Parallel Extraction** (3 agents):
|
|
210
|
+
|
|
211
|
+
Each agent receives file discovery findings via `prev_context`. Agent prompts reference workflow files for detailed extraction logic:
|
|
212
|
+
|
|
213
|
+
- **Style Agent**: Follow `@~/.maestro/workflows/ui-codify-extract.md` Style Agent section. Source: `${source_path}`. Read file inventory from `${temp_dir}/file-inventory.json`. Write `${temp_dir}/design-tokens.json` with color, typography, spacing, border, shadow tokens.
|
|
214
|
+
- **Animation Agent**: Follow `@~/.maestro/workflows/ui-codify-extract.md` Animation Agent section. Source: `${source_path}`. Read file inventory from `${temp_dir}/file-inventory.json`. Write `${temp_dir}/animation-tokens.json` with keyframes, transitions, easings. Optional — W001 if no animations found.
|
|
215
|
+
- **Layout Agent**: Follow `@~/.maestro/workflows/ui-codify-extract.md` Layout Agent section. Source: `${source_path}`. Read file inventory from `${temp_dir}/file-inventory.json`. Write `${temp_dir}/layout-templates.json` with grid/flex systems, breakpoints, component patterns.
|
|
216
|
+
|
|
217
|
+
**Wave 3 — Reference Package** (1 agent, barrier):
|
|
218
|
+
|
|
219
|
+
Description template:
|
|
220
|
+
```
|
|
221
|
+
Follow @~/.maestro/workflows/ui-codify-package.md to generate reference package.
|
|
222
|
+
|
|
223
|
+
Copy token files from '${temp_dir}' to '${package_dir}':
|
|
224
|
+
- design-tokens.json (required)
|
|
225
|
+
- animation-tokens.json (optional, skip if missing)
|
|
226
|
+
- layout-templates.json (required)
|
|
227
|
+
|
|
228
|
+
Generate preview.html + preview.css in '${package_dir}' as interactive token showcase.
|
|
229
|
+
Preview must display all extracted tokens visually: color swatches, typography samples, spacing scale, animation demos.
|
|
230
|
+
|
|
231
|
+
Report file counts and package size in findings.
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Wave 4 — Knowledge Assets** (1 agent, barrier):
|
|
235
|
+
|
|
236
|
+
Description template:
|
|
237
|
+
```
|
|
238
|
+
Follow @~/.maestro/workflows/ui-codify-knowhow.md to build knowledge assets.
|
|
239
|
+
|
|
240
|
+
1. Read token JSONs from '${package_dir}' (design-tokens.json, layout-templates.json, animation-tokens.json if exists)
|
|
241
|
+
2. Build knowhow-manifest.json in '${package_dir}' with:
|
|
242
|
+
- slug: '${package_name}'
|
|
243
|
+
- domain: 'ui-design'
|
|
244
|
+
- roles: ['implement', 'review']
|
|
245
|
+
- packagePath: '${package_dir}'
|
|
246
|
+
- knowhow[]: AST- entries for tokens and components
|
|
247
|
+
- specs[]: coding + arch entries with ref links to knowhow files
|
|
248
|
+
3. Write knowhow files to .workflow/knowhow/ per manifest.knowhow[]
|
|
249
|
+
4. Write spec entries per manifest.specs[] using maestro spec add CLI (fallback: direct file append)
|
|
250
|
+
5. Refresh wiki index: maestro wiki health
|
|
251
|
+
6. Cleanup temp workspace: rm -rf '${temp_dir}'
|
|
252
|
+
|
|
253
|
+
Report knowhow file count and spec entry count in findings.
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Write `tasks.csv` to `${sessionFolder}/tasks.csv`.
|
|
257
|
+
|
|
258
|
+
### Step 4: Wave Execution
|
|
259
|
+
|
|
260
|
+
Execute waves sequentially via `spawn_agents_on_csv`.
|
|
261
|
+
|
|
262
|
+
#### Wave 1: File Discovery (Barrier)
|
|
263
|
+
|
|
264
|
+
Filter `wave == 1 && status == pending` from master CSV. Write `wave-1.csv`.
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
spawn_agents_on_csv({
|
|
268
|
+
csv_path: `${sessionFolder}/wave-1.csv`,
|
|
269
|
+
id_column: "id",
|
|
270
|
+
instruction: `You are scanning a source directory for design-relevant files. Read the 'description' column for full instructions. Use Glob to find files, Read to sample content. Write file inventory JSON to the specified path. Report findings as a concise summary.`,
|
|
271
|
+
max_concurrency: 1,
|
|
272
|
+
max_runtime_seconds: 1800,
|
|
273
|
+
output_csv_path: `${sessionFolder}/wave-1-results.csv`,
|
|
274
|
+
output_schema: { id, status: ["completed"|"failed"], findings, output_path, error }
|
|
275
|
+
})
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Merge results into master `tasks.csv`, delete `wave-1.csv`.
|
|
279
|
+
|
|
280
|
+
#### Wave 2: Parallel Extraction (3 agents)
|
|
281
|
+
|
|
282
|
+
Filter `wave == 2 && status == pending`. Build `prev_context` from wave 1 findings (file inventory summary). Write `wave-2.csv` with `prev_context` column.
|
|
283
|
+
|
|
284
|
+
```javascript
|
|
285
|
+
spawn_agents_on_csv({
|
|
286
|
+
csv_path: `${sessionFolder}/wave-2.csv`,
|
|
287
|
+
id_column: "id",
|
|
288
|
+
instruction: `You are extracting design tokens from source code. Read the 'description' column for your specific extraction task. Use prev_context for file inventory from discovery phase. Read source files, extract tokens, write output JSON to the specified path.`,
|
|
289
|
+
max_concurrency: 3,
|
|
290
|
+
max_runtime_seconds: 3600,
|
|
291
|
+
output_csv_path: `${sessionFolder}/wave-2-results.csv`,
|
|
292
|
+
output_schema: { id, status: ["completed"|"failed"], findings, output_path, error }
|
|
293
|
+
})
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Merge results into master `tasks.csv`, delete `wave-2.csv`.
|
|
297
|
+
|
|
298
|
+
**Degradation**: If animation agent fails (W001), continue — animation is optional. If style or layout agent fails, warn but continue with available results.
|
|
299
|
+
|
|
300
|
+
#### Wave 3: Reference Package (Barrier)
|
|
301
|
+
|
|
302
|
+
Filter `wave == 3 && status == pending`. Build `prev_context` from wave 2 findings (extraction summaries + output paths). Write `wave-3.csv` with `prev_context`.
|
|
303
|
+
|
|
304
|
+
```javascript
|
|
305
|
+
spawn_agents_on_csv({
|
|
306
|
+
csv_path: `${sessionFolder}/wave-3.csv`,
|
|
307
|
+
id_column: "id",
|
|
308
|
+
instruction: `You are generating a reference design package. Read the 'description' column for full instructions. Copy token files, generate preview.html and preview.css. Report package contents in findings.`,
|
|
309
|
+
max_concurrency: 1,
|
|
310
|
+
max_runtime_seconds: 1800,
|
|
311
|
+
output_csv_path: `${sessionFolder}/wave-3-results.csv`,
|
|
312
|
+
output_schema: { id, status: ["completed"|"failed"], findings, output_path, error }
|
|
313
|
+
})
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Merge results into master `tasks.csv`, delete `wave-3.csv`.
|
|
317
|
+
|
|
318
|
+
#### Wave 4: Knowledge Assets (Barrier)
|
|
319
|
+
|
|
320
|
+
Filter `wave == 4 && status == pending`. Build `prev_context` from wave 3 findings (package contents). Write `wave-4.csv` with `prev_context`.
|
|
321
|
+
|
|
322
|
+
```javascript
|
|
323
|
+
spawn_agents_on_csv({
|
|
324
|
+
csv_path: `${sessionFolder}/wave-4.csv`,
|
|
325
|
+
id_column: "id",
|
|
326
|
+
instruction: `You are building knowledge assets from a design package. Read the 'description' column for full instructions. Build manifest, write knowhow files, create spec entries, refresh wiki index, cleanup temp files. Report asset counts in findings.`,
|
|
327
|
+
max_concurrency: 1,
|
|
328
|
+
max_runtime_seconds: 1800,
|
|
329
|
+
output_csv_path: `${sessionFolder}/wave-4-results.csv`,
|
|
330
|
+
output_schema: { id, status: ["completed"|"failed"], findings, output_path, error }
|
|
331
|
+
})
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Merge results into master `tasks.csv`, delete `wave-4.csv`.
|
|
335
|
+
|
|
336
|
+
### Step 5: Results & Completion
|
|
337
|
+
|
|
338
|
+
1. Read final master `tasks.csv`
|
|
339
|
+
2. Export as `results.csv`
|
|
340
|
+
3. Display completion report:
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
UI Design System Codified!
|
|
344
|
+
|
|
345
|
+
Package: {package_name}
|
|
346
|
+
Location: {package_dir}
|
|
347
|
+
|
|
348
|
+
Files:
|
|
349
|
+
design-tokens.json Design tokens (colors, typography, spacing)
|
|
350
|
+
layout-templates.json Component patterns
|
|
351
|
+
animation-tokens.json Animation tokens {or "(not found)"}
|
|
352
|
+
preview.html Interactive showcase
|
|
353
|
+
preview.css Showcase styling
|
|
354
|
+
knowhow-manifest.json Knowledge asset manifest
|
|
355
|
+
|
|
356
|
+
Knowledge Assets:
|
|
357
|
+
Knowhow: {knowhow_count} files created
|
|
358
|
+
Specs: {spec_count} entries created
|
|
359
|
+
|
|
360
|
+
Open preview:
|
|
361
|
+
file://{absolute_path}/preview.html
|
|
362
|
+
|
|
363
|
+
Next steps:
|
|
364
|
+
maestro wiki list --category coding # Browse by role
|
|
365
|
+
maestro spec load --keyword {package_name} # Load related specs
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
</execution>
|
|
369
|
+
|
|
370
|
+
<error_codes>
|
|
371
|
+
|
|
372
|
+
| Error | Severity | Resolution |
|
|
373
|
+
|-------|----------|------------|
|
|
374
|
+
| E001: Source path required | fatal | Report usage, abort |
|
|
375
|
+
| E002: Source not found | fatal | Report path, abort |
|
|
376
|
+
| E003: Package exists | fatal | Suggest --overwrite, abort |
|
|
377
|
+
| W001: No animations found | warning | Continue without animation-tokens.json |
|
|
378
|
+
| Wave 1 failed | fatal | No files discovered, abort |
|
|
379
|
+
| Wave 2 partial failure | degraded | Continue with available extraction results |
|
|
380
|
+
| Wave 3 failed | fatal | Package generation failed, abort |
|
|
381
|
+
| Wave 4 failed | degraded | Package still usable, manifest remains for manual retry |
|
|
382
|
+
|
|
383
|
+
</error_codes>
|
|
384
|
+
|
|
385
|
+
<success_criteria>
|
|
386
|
+
- [ ] Source path validated and session folder created
|
|
387
|
+
- [ ] File discovery completed with inventory JSON
|
|
388
|
+
- [ ] design-tokens.json generated with color, typography, spacing tokens
|
|
389
|
+
- [ ] layout-templates.json generated with component patterns
|
|
390
|
+
- [ ] animation-tokens.json generated (optional, W001 if missing)
|
|
391
|
+
- [ ] preview.html + preview.css generated as interactive showcase
|
|
392
|
+
- [ ] knowhow-manifest.json created with AST assets and spec entries
|
|
393
|
+
- [ ] Knowhow files written to .workflow/knowhow/
|
|
394
|
+
- [ ] Spec entries written via maestro spec add
|
|
395
|
+
- [ ] Wiki index refreshed
|
|
396
|
+
- [ ] Temporary workspace cleaned up
|
|
397
|
+
- [ ] results.csv exported
|
|
398
|
+
</success_criteria>
|