maestro-flow 0.3.12 → 0.3.14
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/CLAUDE.md +7 -0
- package/.claude/agents/workflow-analyzer.md +0 -1
- package/.claude/agents/workflow-collab-planner.md +0 -1
- package/.claude/agents/workflow-debugger.md +0 -1
- package/.claude/agents/workflow-integration-checker.md +2 -2
- package/.claude/agents/workflow-nyquist-auditor.md +0 -1
- package/.claude/agents/workflow-phase-researcher.md +2 -2
- package/.claude/agents/workflow-plan-checker.md +1 -1
- package/.claude/agents/workflow-planner.md +1 -2
- package/.claude/agents/workflow-roadmapper.md +1 -1
- package/.claude/agents/workflow-verifier.md +0 -1
- package/.claude/commands/learn-retro.md +2 -2
- package/.claude/commands/learn-second-opinion.md +2 -2
- package/.claude/commands/maestro-analyze.md +10 -2
- package/.claude/commands/maestro-brainstorm.md +1 -1
- package/.claude/commands/maestro-execute.md +21 -4
- package/.claude/commands/maestro-milestone-complete.md +14 -0
- package/.claude/commands/maestro-plan.md +12 -6
- package/.claude/commands/maestro-roadmap.md +1 -1
- package/.claude/commands/maestro-ui-design.md +7 -7
- package/.claude/commands/maestro-update.md +176 -0
- package/.claude/commands/maestro-verify.md +18 -3
- package/.claude/commands/manage-codebase-rebuild.md +0 -1
- package/.claude/commands/manage-harvest.md +1 -1
- package/.claude/commands/manage-learn.md +5 -5
- package/.claude/commands/manage-memory-capture.md +4 -4
- package/.claude/commands/manage-memory.md +1 -1
- package/.claude/commands/manage-wiki.md +62 -0
- package/.claude/commands/quality-business-test.md +2 -2
- package/.claude/commands/quality-debug.md +53 -7
- package/.claude/commands/quality-retrospective.md +5 -5
- package/.claude/commands/quality-review.md +39 -7
- package/.claude/commands/quality-sync.md +1 -1
- package/.claude/commands/quality-test-gen.md +1 -1
- package/.claude/commands/quality-test.md +45 -12
- package/.claude/commands/spec-remove.md +51 -0
- package/.claude/commands/spec-setup.md +1 -3
- package/.claude/commands/wiki-connect.md +9 -5
- package/.claude/commands/wiki-digest.md +6 -3
- package/.codex/skills/maestro/SKILL.md +2 -2
- package/.codex/skills/maestro-analyze/SKILL.md +4 -4
- package/.codex/skills/maestro-brainstorm/SKILL.md +4 -4
- package/.codex/skills/maestro-coordinate/SKILL.md +2 -2
- package/.codex/skills/maestro-execute/SKILL.md +15 -5
- package/.codex/skills/maestro-init/SKILL.md +1 -1
- package/.codex/skills/maestro-link-coordinate/SKILL.md +430 -224
- package/.codex/skills/maestro-milestone-complete/SKILL.md +18 -1
- package/.codex/skills/maestro-plan/SKILL.md +6 -6
- package/.codex/skills/maestro-roadmap/SKILL.md +3 -4
- package/.codex/skills/maestro-spec-generate/SKILL.md +2 -2
- package/.codex/skills/maestro-ui-design/SKILL.md +6 -6
- package/.codex/skills/maestro-verify/SKILL.md +20 -11
- package/.codex/skills/manage-codebase-rebuild/SKILL.md +4 -4
- package/.codex/skills/manage-harvest/SKILL.md +10 -1
- package/.codex/skills/manage-issue-discover/SKILL.md +3 -3
- package/.codex/skills/manage-learn/SKILL.md +3 -2
- package/.codex/skills/manage-memory/SKILL.md +3 -3
- package/.codex/skills/manage-memory-capture/SKILL.md +8 -14
- package/.codex/skills/manage-status/SKILL.md +9 -4
- package/.codex/skills/manage-wiki/SKILL.md +55 -0
- package/.codex/skills/quality-business-test/SKILL.md +8 -6
- package/.codex/skills/quality-debug/SKILL.md +22 -9
- package/.codex/skills/quality-integration-test/SKILL.md +11 -7
- package/.codex/skills/quality-retrospective/SKILL.md +45 -26
- package/.codex/skills/quality-review/SKILL.md +10 -7
- package/.codex/skills/quality-test/SKILL.md +9 -4
- package/.codex/skills/quality-test-gen/SKILL.md +13 -9
- package/.codex/skills/spec-add/SKILL.md +11 -3
- package/.codex/skills/spec-load/SKILL.md +7 -0
- package/.codex/skills/spec-map/SKILL.md +2 -2
- package/.codex/skills/spec-remove/SKILL.md +101 -0
- package/.codex/skills/spec-setup/SKILL.md +4 -8
- package/.codex/skills/wiki-connect/SKILL.md +6 -5
- package/.codex/skills/wiki-digest/SKILL.md +2 -2
- package/chains/milestone-fork-merge.json +6 -6
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +9 -0
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +109 -9
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js +49 -0
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/index.js +5 -4
- package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +5 -13
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js +97 -155
- package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.d.ts +11 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +27 -6
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +25 -7
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +8 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +1 -0
- 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 +29 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +148 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +4 -2
- 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.js +8 -2
- 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.d.ts +5 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +80 -38
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +8 -6
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +40 -5
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +21 -23
- 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 +33 -3
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +184 -12
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
- package/dashboard/dist-server/src/commands/delegate.js +26 -0
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dashboard/dist-server/src/coordinator/graph-types.d.ts +11 -1
- package/dashboard/dist-server/src/coordinator/graph-walker.js +29 -2
- package/dashboard/dist-server/src/coordinator/graph-walker.js.map +1 -1
- package/dashboard/dist-server/src/coordinator/prompt-assembler.js +3 -2
- package/dashboard/dist-server/src/coordinator/prompt-assembler.js.map +1 -1
- package/dashboard/dist-server/src/hooks/constants.d.ts +29 -60
- package/dashboard/dist-server/src/hooks/constants.js +105 -82
- package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
- package/dashboard/dist-server/src/types/index.d.ts +2 -1
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +26 -0
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/hooks.d.ts +2 -4
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +4 -7
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.d.ts +2 -3
- package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.js +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.js +1 -2
- package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.js +5 -7
- package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts +3 -6
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
- package/dist/src/commands/install-ui/StatuslineConfig.js +21 -17
- package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +95 -0
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/wiki.d.ts.map +1 -1
- package/dist/src/commands/wiki.js +75 -11
- package/dist/src/commands/wiki.js.map +1 -1
- package/dist/src/coordinator/graph-types.d.ts +11 -1
- package/dist/src/coordinator/graph-types.d.ts.map +1 -1
- package/dist/src/coordinator/graph-walker.d.ts.map +1 -1
- package/dist/src/coordinator/graph-walker.js +29 -2
- package/dist/src/coordinator/graph-walker.js.map +1 -1
- package/dist/src/coordinator/prompt-assembler.d.ts.map +1 -1
- package/dist/src/coordinator/prompt-assembler.js +3 -2
- package/dist/src/coordinator/prompt-assembler.js.map +1 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +4 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.js +55 -174
- package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
- package/dist/src/hooks/auto-mode.d.ts +18 -0
- package/dist/src/hooks/auto-mode.d.ts.map +1 -0
- package/dist/src/hooks/auto-mode.js +28 -0
- package/dist/src/hooks/auto-mode.js.map +1 -0
- package/dist/src/hooks/constants.d.ts +29 -60
- package/dist/src/hooks/constants.d.ts.map +1 -1
- package/dist/src/hooks/constants.js +105 -82
- package/dist/src/hooks/constants.js.map +1 -1
- package/dist/src/hooks/context-monitor.d.ts.map +1 -1
- package/dist/src/hooks/context-monitor.js +14 -3
- package/dist/src/hooks/context-monitor.js.map +1 -1
- package/dist/src/hooks/coordinator-tracker.d.ts +1 -0
- package/dist/src/hooks/coordinator-tracker.d.ts.map +1 -1
- package/dist/src/hooks/coordinator-tracker.js +19 -9
- package/dist/src/hooks/coordinator-tracker.js.map +1 -1
- package/dist/src/hooks/skill-context.d.ts.map +1 -1
- package/dist/src/hooks/skill-context.js +54 -6
- package/dist/src/hooks/skill-context.js.map +1 -1
- package/dist/src/hooks/statusline.d.ts +11 -8
- package/dist/src/hooks/statusline.d.ts.map +1 -1
- package/dist/src/hooks/statusline.js +284 -182
- package/dist/src/hooks/statusline.js.map +1 -1
- package/dist/src/hooks/workspace.d.ts.map +1 -1
- package/dist/src/hooks/workspace.js +2 -1
- package/dist/src/hooks/workspace.js.map +1 -1
- package/dist/src/migrations/_template.d.ts +12 -0
- package/dist/src/migrations/_template.d.ts.map +1 -0
- package/dist/src/migrations/_template.js +55 -0
- package/dist/src/migrations/_template.js.map +1 -0
- package/dist/src/migrations/index.d.ts +14 -0
- package/dist/src/migrations/index.d.ts.map +1 -0
- package/dist/src/migrations/index.js +20 -0
- package/dist/src/migrations/index.js.map +1 -0
- package/dist/src/migrations/run.d.ts +12 -0
- package/dist/src/migrations/run.d.ts.map +1 -0
- package/dist/src/migrations/run.js +119 -0
- package/dist/src/migrations/run.js.map +1 -0
- package/dist/src/migrations/v1-to-v2.d.ts +10 -0
- package/dist/src/migrations/v1-to-v2.d.ts.map +1 -0
- package/dist/src/migrations/v1-to-v2.js +71 -0
- package/dist/src/migrations/v1-to-v2.js.map +1 -0
- package/dist/src/tools/team-activity.d.ts.map +1 -1
- package/dist/src/tools/team-activity.js +22 -0
- package/dist/src/tools/team-activity.js.map +1 -1
- package/dist/src/tools/transition-recorder.d.ts +2 -17
- package/dist/src/tools/transition-recorder.d.ts.map +1 -1
- package/dist/src/tools/transition-recorder.js +6 -3
- package/dist/src/tools/transition-recorder.js.map +1 -1
- package/dist/src/types/index.d.ts +2 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/migration-registry.d.ts +65 -0
- package/dist/src/utils/migration-registry.d.ts.map +1 -0
- package/dist/src/utils/migration-registry.js +117 -0
- package/dist/src/utils/migration-registry.js.map +1 -0
- package/dist/src/utils/state-schema.d.ts +153 -0
- package/dist/src/utils/state-schema.d.ts.map +1 -0
- package/dist/src/utils/state-schema.js +329 -0
- package/dist/src/utils/state-schema.js.map +1 -0
- package/package.json +1 -1
- package/templates/state.json +17 -39
- package/workflows/brainstorm.md +3 -3
- package/workflows/codebase-rebuild.md +2 -12
- package/workflows/debug.md +7 -8
- package/workflows/execute.md +18 -4
- package/workflows/fork.md +37 -86
- package/workflows/init.md +1 -4
- package/workflows/integration-test.md +4 -5
- package/workflows/issue.md +3 -9
- package/workflows/learn.md +20 -19
- package/workflows/maestro-coordinate.codex.md +9 -9
- package/workflows/maestro-coordinate.md +9 -9
- package/workflows/maestro.codex.md +8 -1
- package/workflows/maestro.md +14 -5
- package/workflows/memory.md +26 -71
- package/workflows/merge.md +45 -107
- package/workflows/milestone-complete.md +24 -7
- package/workflows/retrospective.md +77 -109
- package/workflows/review.md +5 -12
- package/workflows/specs-remove.md +115 -0
- package/workflows/specs-setup.md +10 -32
- package/workflows/status.md +291 -290
- package/workflows/sync.md +5 -5
- package/workflows/test.md +4 -5
- package/workflows/ui-style.md +3 -4
- package/workflows/verify.md +2 -2
- package/workflows/wiki-connect.md +188 -0
- package/workflows/wiki-digest.md +221 -0
- package/workflows/wiki-manage.md +204 -0
- package/.codex/skills/maestro-chain/SKILL.md +0 -233
|
@@ -62,7 +62,7 @@ Linear pipeline test execution using `spawn_agents_on_csv`. Progressive L0 -> L1
|
|
|
62
62
|
$quality-integration-test "3"
|
|
63
63
|
$quality-integration-test -c 4 "3 --max-iterations 8"
|
|
64
64
|
$quality-integration-test -y "3 --target-coverage 90"
|
|
65
|
-
$quality-integration-test --continue "integration-test-
|
|
65
|
+
$quality-integration-test --continue "20260318-integration-test-P3-auth"
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
**Flags**:
|
|
@@ -129,7 +129,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column populated fr
|
|
|
129
129
|
### Session Structure
|
|
130
130
|
|
|
131
131
|
```
|
|
132
|
-
.workflow/.csv-wave/integration-test-{
|
|
132
|
+
.workflow/.csv-wave/{YYYYMMDD}-integration-test-P{N}-{slug}/
|
|
133
133
|
+-- tasks.csv
|
|
134
134
|
+-- results.csv
|
|
135
135
|
+-- discoveries.ndjson
|
|
@@ -183,7 +183,7 @@ const phaseArg = $ARGUMENTS
|
|
|
183
183
|
.trim()
|
|
184
184
|
|
|
185
185
|
const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
|
|
186
|
-
const sessionId =
|
|
186
|
+
const sessionId = `${dateStr}-integration-test-P${phaseArg}-${phaseSlug}` // phaseSlug from index.json or roadmap
|
|
187
187
|
const sessionFolder = `.workflow/.csv-wave/${sessionId}`
|
|
188
188
|
|
|
189
189
|
Bash(`mkdir -p ${sessionFolder}`)
|
|
@@ -213,9 +213,11 @@ Write(`${sessionFolder}/reflection-log.md`,
|
|
|
213
213
|
|
|
214
214
|
**Decomposition Rules**:
|
|
215
215
|
|
|
216
|
-
1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{
|
|
216
|
+
1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
|
|
217
217
|
|
|
218
|
-
2. **
|
|
218
|
+
2. **Related session discovery**: Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: review → review.json (critical findings inform integration test focus), debug → understanding.md (root causes guide regression test layers), test → uat.md/.tests/ (prior results inform layer priorities). Extract conclusions that may affect integration test strategy.
|
|
219
|
+
|
|
220
|
+
3. **Codebase exploration**:
|
|
219
221
|
- Cross-module imports and dependencies
|
|
220
222
|
- API endpoints and route definitions
|
|
221
223
|
- Database interactions and queries
|
|
@@ -228,7 +230,7 @@ Write(`${sessionFolder}/reflection-log.md`,
|
|
|
228
230
|
- Identify test utilities, fixtures, DB seed scripts
|
|
229
231
|
|
|
230
232
|
4. **Pre-generated test loading**:
|
|
231
|
-
Check `{
|
|
233
|
+
Check `{artifact_dir}/.tests/test-gen-report.json` for tests from `quality-test-gen`. Merge integration/e2e tests into plan (execute but don't re-generate).
|
|
232
234
|
|
|
233
235
|
5. **Layer design**:
|
|
234
236
|
|
|
@@ -455,7 +457,9 @@ Update `state.json` with new strategy and iteration count.
|
|
|
455
457
|
|
|
456
458
|
6. Update `index.json` with integration test status.
|
|
457
459
|
|
|
458
|
-
7.
|
|
460
|
+
7. **Register artifact**: Append to `state.json.artifacts[]` with `type: "test"`, `id: TST-NNN`, `path: "scratch/{YYYYMMDD}-integration-test-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch.
|
|
461
|
+
|
|
462
|
+
8. Display summary.
|
|
459
463
|
|
|
460
464
|
**Next step routing**:
|
|
461
465
|
|
|
@@ -66,18 +66,27 @@ $quality-retrospective "3 --compare 2 --auto-yes"
|
|
|
66
66
|
When `--auto-yes`: Accept all routing recommendations without prompting. Route all insights automatically.
|
|
67
67
|
|
|
68
68
|
**Storage written**:
|
|
69
|
-
- `{target_dir}/retrospective.md` -- human-readable record (target_dir resolved via state.json artifact registry to `.workflow/scratch/{
|
|
69
|
+
- `{target_dir}/retrospective.md` -- human-readable record (target_dir resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
|
|
70
70
|
- `{target_dir}/retrospective.json` -- structured record
|
|
71
|
-
- `.workflow/specs/
|
|
71
|
+
- `.workflow/specs/{category-file}.md` -- `<spec-entry>` entries appended to matching category files (one per spec-routed insight)
|
|
72
72
|
- `.workflow/issues/issues.jsonl` -- appended issue rows (`source: "retrospective"`)
|
|
73
73
|
- `.workflow/memory/TIP-*.md` -- memory tips (via `manage-memory-capture` skill)
|
|
74
74
|
- `.workflow/learning/lessons.jsonl` -- append-only insight log
|
|
75
75
|
- `.workflow/learning/learning-index.json` -- updated searchable index
|
|
76
76
|
|
|
77
|
-
**Storage read (never modified)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
**Storage read (never modified)** — all resolved via `state.json.artifacts[]`:
|
|
78
|
+
```
|
|
79
|
+
related = artifacts.filter(a =>
|
|
80
|
+
a.phase === target_phase && a.milestone === current_milestone
|
|
81
|
+
).sort_by(completed_at asc)
|
|
82
|
+
```
|
|
83
|
+
Each artifact's type determines its outputs at `.workflow/{a.path}/`:
|
|
84
|
+
- **execute** → index.json, plan.json, .task/TASK-*.json, .summaries/TASK-*-summary.md
|
|
85
|
+
- **verify** → verification.json
|
|
86
|
+
- **review** → review.json (findings, verdict, severity distribution)
|
|
87
|
+
- **debug** → understanding.md, evidence.ndjson (root causes, fix directions)
|
|
88
|
+
- **test** → uat.md, .tests/ (UAT results, gaps, coverage)
|
|
89
|
+
- Also reads: `.workflow/issues/issues.jsonl`, `.workflow/state.json`
|
|
81
90
|
|
|
82
91
|
### Agent Registry
|
|
83
92
|
|
|
@@ -151,7 +160,7 @@ functions.update_plan({
|
|
|
151
160
|
Validate `--lens` values. If `--compare <M>` present, require single mode.
|
|
152
161
|
|
|
153
162
|
**Stage 2: Validate phase artifacts**. For each target phase:
|
|
154
|
-
- Phase directory must exist (resolved via state.json artifact registry to `.workflow/scratch/{
|
|
163
|
+
- Phase directory must exist (resolved via state.json artifact registry to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`)
|
|
155
164
|
- `index.json` must show `status: "completed"`
|
|
156
165
|
- `.task/` directory must exist with at least one `TASK-*.json`
|
|
157
166
|
- If existing `retrospective.json` found and not `--all`: emit W002, prompt overwrite
|
|
@@ -175,7 +184,7 @@ functions.update_plan({
|
|
|
175
184
|
### Stage 4: Context-Agent Fork + Parallel Lens Analysis
|
|
176
185
|
|
|
177
186
|
**Archive if overwriting**:
|
|
178
|
-
If existing `retrospective.{md,json}` present, move to `{
|
|
187
|
+
If existing `retrospective.{md,json}` present, move to `{artifact_dir}/.history/` with timestamp suffix before spawning.
|
|
179
188
|
|
|
180
189
|
**Step 4a: Spawn context agent**
|
|
181
190
|
```javascript
|
|
@@ -190,13 +199,18 @@ spawn_agent({
|
|
|
190
199
|
---
|
|
191
200
|
|
|
192
201
|
Goal: Load and summarize all phase artifacts for retrospective analysis.
|
|
193
|
-
Phase: ${
|
|
202
|
+
Phase: ${targetPhase}
|
|
194
203
|
|
|
195
204
|
TASK:
|
|
196
|
-
1. Read
|
|
197
|
-
2.
|
|
205
|
+
1. Read .workflow/state.json -- query artifacts[] for all entries matching phase === ${targetPhase} && milestone === current_milestone
|
|
206
|
+
2. For each artifact, load outputs from .workflow/{artifact.path}/:
|
|
207
|
+
- execute artifacts → index.json, plan.json, .task/TASK-*.json, .summaries/TASK-*-summary.md
|
|
208
|
+
- verify artifacts → verification.json
|
|
209
|
+
- review artifacts → review.json (findings, verdict, severity distribution)
|
|
210
|
+
- debug artifacts → understanding.md, evidence.ndjson (root causes, fix directions)
|
|
211
|
+
- test artifacts → uat.md, .tests/ (UAT results, gaps, coverage)
|
|
198
212
|
3. Read .workflow/issues/issues.jsonl -- filter rows with phase link to this phase
|
|
199
|
-
4. Read .workflow/state.json for project context
|
|
213
|
+
4. Read .workflow/state.json for project context (milestones, accumulated_context)
|
|
200
214
|
|
|
201
215
|
EXPECTED: Comprehensive artifact summary covering:
|
|
202
216
|
- Phase goals and outcomes (from plan.json vs verification.json)
|
|
@@ -357,18 +371,21 @@ If `--no-route`: skip this stage.
|
|
|
357
371
|
For each insight in `synthResult.insights`, route based on `routing` field:
|
|
358
372
|
|
|
359
373
|
**Spec routing** (`routing: "spec"`):
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
374
|
+
|
|
375
|
+
Map insight type to spec category: pattern/convention → `coding`, architecture → `arch`, quality → `quality`.
|
|
376
|
+
Append `<spec-entry>` to matching category file:
|
|
377
|
+
|
|
378
|
+
```markdown
|
|
379
|
+
<spec-entry category="{category}" keywords="{auto-extracted}" date="{YYYY-MM-DD}" source="retrospective">
|
|
380
|
+
|
|
381
|
+
### <title>
|
|
382
|
+
|
|
383
|
+
<summary>
|
|
384
|
+
|
|
385
|
+
**Evidence:** <evidence_refs>
|
|
386
|
+
**Phase:** <N> | **Lens:** <lens> | **Insight:** <INS-id>
|
|
387
|
+
|
|
388
|
+
</spec-entry>
|
|
372
389
|
+
|
|
373
390
|
+<summary>
|
|
374
391
|
+
|
|
@@ -441,7 +458,7 @@ functions.apply_patch:
|
|
|
441
458
|
|
|
442
459
|
Append each insight to `.workflow/learning/lessons.jsonl` and update `learning-index.json`.
|
|
443
460
|
|
|
444
|
-
If `.workflow/specs/learnings.md` already exists, append
|
|
461
|
+
If `.workflow/specs/learnings.md` already exists, append each insight using `<spec-entry>` closed-tag format (category=`learning`, auto-extract keywords, date=today, source=`retrospective`). Never create the file — only append if it exists.
|
|
445
462
|
|
|
446
463
|
```javascript
|
|
447
464
|
functions.update_plan({
|
|
@@ -466,7 +483,7 @@ Lenses: technical, process, quality, decision
|
|
|
466
483
|
Insights: <total> (<N> new, <N> duplicates merged)
|
|
467
484
|
|
|
468
485
|
ROUTING:
|
|
469
|
-
Spec
|
|
486
|
+
Spec entries: <N> -> .workflow/specs/{category-file}.md
|
|
470
487
|
Issues: <N> -> .workflow/issues/issues.jsonl
|
|
471
488
|
Memory tips: <N> -> .workflow/memory/TIP-*.md
|
|
472
489
|
Lessons: <N> -> .workflow/learning/lessons.jsonl
|
|
@@ -480,6 +497,8 @@ Next:
|
|
|
480
497
|
$manage-status
|
|
481
498
|
$manage-issue "list --source retrospective"
|
|
482
499
|
$manage-learn "list --phase <N>"
|
|
500
|
+
$manage-wiki health
|
|
501
|
+
$wiki-digest "<phase-topic>"
|
|
483
502
|
```
|
|
484
503
|
</execution>
|
|
485
504
|
|
|
@@ -52,7 +52,7 @@ Wave-based multi-dimensional code review using `spawn_agents_on_csv`. Decomposes
|
|
|
52
52
|
$quality-review "3"
|
|
53
53
|
$quality-review -c 6 "3 --level deep"
|
|
54
54
|
$quality-review -y "3 --dimensions security,performance"
|
|
55
|
-
$quality-review --continue "review-
|
|
55
|
+
$quality-review --continue "20260318-review-P3-auth"
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
**Flags**:
|
|
@@ -119,7 +119,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
|
|
|
119
119
|
### Session Structure
|
|
120
120
|
|
|
121
121
|
```
|
|
122
|
-
.workflow/.csv-wave/review-{
|
|
122
|
+
.workflow/.csv-wave/{YYYYMMDD}-review-P{N}-{slug}/
|
|
123
123
|
+-- tasks.csv
|
|
124
124
|
+-- results.csv
|
|
125
125
|
+-- discoveries.ndjson
|
|
@@ -163,7 +163,7 @@ const phaseArg = $ARGUMENTS
|
|
|
163
163
|
.trim()
|
|
164
164
|
|
|
165
165
|
const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
|
|
166
|
-
const sessionId =
|
|
166
|
+
const sessionId = `${dateStr}-review-P${phaseArg}-${phaseSlug}` // phaseSlug from index.json or roadmap
|
|
167
167
|
const sessionFolder = `.workflow/.csv-wave/${sessionId}`
|
|
168
168
|
|
|
169
169
|
Bash(`mkdir -p ${sessionFolder}`)
|
|
@@ -175,8 +175,9 @@ Bash(`mkdir -p ${sessionFolder}`)
|
|
|
175
175
|
|
|
176
176
|
**Decomposition Rules**:
|
|
177
177
|
|
|
178
|
-
1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{
|
|
179
|
-
2. **
|
|
178
|
+
1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
|
|
179
|
+
2. **Related session discovery**: Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: execute → .summaries/.task/, review → review.json, debug → understanding.md, test → uat.md. Extract conclusions that may affect this review (prior verdicts, root causes, UAT gaps) and pass as prior quality context to reviewer agents.
|
|
180
|
+
3. **File collection**: Read `.task/TASK-*.json` -> collect all `files[].path` where action != "read"
|
|
180
181
|
3. **Level detection**:
|
|
181
182
|
|
|
182
183
|
| Condition | Level |
|
|
@@ -332,9 +333,11 @@ spawn_agents_on_csv({
|
|
|
332
333
|
| standard | critical + high |
|
|
333
334
|
| deep | critical + high + medium |
|
|
334
335
|
|
|
335
|
-
7. **Phase index update**: Update `{
|
|
336
|
+
7. **Phase index update**: Update `{artifact_dir}/index.json` with review status.
|
|
336
337
|
|
|
337
|
-
8.
|
|
338
|
+
8. **Register artifact**: Append to `state.json.artifacts[]` with `type: "review"`, `id: REV-NNN`, `path: "scratch/{YYYYMMDD}-review-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch, not shared with plan.
|
|
339
|
+
|
|
340
|
+
9. Display summary.
|
|
338
341
|
|
|
339
342
|
### Shared Discovery Board Protocol
|
|
340
343
|
|
|
@@ -49,7 +49,7 @@ No auto mode -- UAT is inherently interactive. `--auto-fix` only automates gap c
|
|
|
49
49
|
### Step 1: Resolve Target
|
|
50
50
|
|
|
51
51
|
1. Parse `$ARGUMENTS` for phase number, scratch task ID, or flags
|
|
52
|
-
2. **Phase mode**: resolve `PHASE_DIR` via artifact registry in `state.json` to `.workflow/scratch/{
|
|
52
|
+
2. **Phase mode**: resolve `PHASE_DIR` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
|
|
53
53
|
3. **Scratch mode**: set `SCRATCH_DIR = .workflow/scratch/{id}/`
|
|
54
54
|
4. Validate target exists and has `verification.json` -- if missing: **E002**
|
|
55
55
|
|
|
@@ -71,7 +71,11 @@ If any smoke fails: **E003** -- abort, suggest Skill({ skill: "quality-debug" })
|
|
|
71
71
|
|
|
72
72
|
### Step 4: Load Verification Context
|
|
73
73
|
|
|
74
|
-
Read from target directory: verification.json, validation.json, index.json, plan.json, `.summaries/TASK-*.md`. Build testable list from user-observable outcomes.
|
|
74
|
+
Read from target directory (resolved via artifact registry): verification.json, validation.json, index.json, plan.json, `.summaries/TASK-*.md`. Build testable list from user-observable outcomes.
|
|
75
|
+
|
|
76
|
+
### Step 4.5: Load Quality Context
|
|
77
|
+
|
|
78
|
+
Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: review → review.json (findings become additional test scenarios), debug → understanding.md (confirmed root causes become regression tests). Extract conclusions that may affect test scenario design.
|
|
75
79
|
|
|
76
80
|
### Step 5: Design Test Scenarios
|
|
77
81
|
|
|
@@ -132,8 +136,9 @@ Read `uat.md`, find first `result: [pending]` test, announce progress, continue
|
|
|
132
136
|
2. Archive previous result artifacts to `.history/`
|
|
133
137
|
3. Write `.tests/test-results.json` and `.tests/coverage-report.json`
|
|
134
138
|
4. Update `index.json` with UAT results
|
|
135
|
-
5.
|
|
136
|
-
6. If issues
|
|
139
|
+
5. **Register artifact**: Append to `state.json.artifacts[]` with `type: "test"`, `id: TST-NNN`, `path: "scratch/{YYYYMMDD}-test-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch.
|
|
140
|
+
6. If no issues: go to Step 13
|
|
141
|
+
7. If issues found: go to Step 11
|
|
137
142
|
|
|
138
143
|
### Step 11: Auto-Diagnose
|
|
139
144
|
|
|
@@ -49,7 +49,7 @@ Wave-based test generation using `spawn_agents_on_csv`. Each source file/module
|
|
|
49
49
|
$quality-test-gen "3"
|
|
50
50
|
$quality-test-gen -c 4 "3 --type unit"
|
|
51
51
|
$quality-test-gen -y "3 --type e2e --framework vitest"
|
|
52
|
-
$quality-test-gen --continue "
|
|
52
|
+
$quality-test-gen --continue "20260318-testgen-P3-auth"
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
**Flags**:
|
|
@@ -113,7 +113,7 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column (empty for w
|
|
|
113
113
|
### Session Structure
|
|
114
114
|
|
|
115
115
|
```
|
|
116
|
-
.workflow/.csv-wave/
|
|
116
|
+
.workflow/.csv-wave/{YYYYMMDD}-testgen-P{N}-{slug}/
|
|
117
117
|
+-- tasks.csv
|
|
118
118
|
+-- results.csv
|
|
119
119
|
+-- discoveries.ndjson
|
|
@@ -158,7 +158,7 @@ const phaseArg = $ARGUMENTS
|
|
|
158
158
|
.trim()
|
|
159
159
|
|
|
160
160
|
const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
|
|
161
|
-
const sessionId =
|
|
161
|
+
const sessionId = `${dateStr}-testgen-P${phaseArg}-${phaseSlug}` // phaseSlug from index.json or roadmap
|
|
162
162
|
const sessionFolder = `.workflow/.csv-wave/${sessionId}`
|
|
163
163
|
|
|
164
164
|
Bash(`mkdir -p ${sessionFolder}`)
|
|
@@ -170,9 +170,11 @@ Bash(`mkdir -p ${sessionFolder}`)
|
|
|
170
170
|
|
|
171
171
|
**Decomposition Rules**:
|
|
172
172
|
|
|
173
|
-
1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{
|
|
173
|
+
1. **Phase resolution**: Resolve `{phaseArg}` via artifact registry in `state.json` to `.workflow/scratch/{YYYYMMDD}-{type}-{slug}/`
|
|
174
174
|
|
|
175
|
-
2. **
|
|
175
|
+
2. **Related session discovery**: Query `state.json.artifacts[]` for all artifacts matching `phase === target_phase && milestone === current_milestone`. Each artifact's type determines its outputs: review → review.json (critical findings become focused test targets), debug → understanding.md (confirmed root causes become regression test targets), test → uat.md (UAT gaps inform which behaviors need tests). Extract conclusions that may affect test generation priorities.
|
|
176
|
+
|
|
177
|
+
3. **Test infrastructure discovery**:
|
|
176
178
|
- Find config files: `jest.config.*`, `vitest.config.*`, `pytest.ini`, `.mocharc.*`
|
|
177
179
|
- Find existing test files: `*.test.*`, `*.spec.*`, `test_*`
|
|
178
180
|
- Find test utilities: `test-utils.*`, `testHelper*`, `conftest.py`
|
|
@@ -277,9 +279,9 @@ Each agent receives:
|
|
|
277
279
|
|
|
278
280
|
4. **Archive previous artifacts** before writing:
|
|
279
281
|
```
|
|
280
|
-
IF file exists "{
|
|
281
|
-
mkdir -p "{
|
|
282
|
-
mv to "{
|
|
282
|
+
IF file exists "{artifact_dir}/.tests/test-gen-report.json":
|
|
283
|
+
mkdir -p "{artifact_dir}/.history"
|
|
284
|
+
mv to "{artifact_dir}/.history/test-gen-report-{TIMESTAMP}.json"
|
|
283
285
|
```
|
|
284
286
|
|
|
285
287
|
5. Build `test-gen-report.json`:
|
|
@@ -362,7 +364,9 @@ Each agent receives:
|
|
|
362
364
|
|
|
363
365
|
8. Copy `test-gen-report.json` to phase `.tests/` directory.
|
|
364
366
|
|
|
365
|
-
9.
|
|
367
|
+
9. **Register artifact**: Append to `state.json.artifacts[]` with `type: "test"`, `id: TST-NNN`, `path: "scratch/{YYYYMMDD}-testgen-P{N}-{slug}"`, `depends_on: exec_art.id`. Output directory is independent scratch.
|
|
368
|
+
|
|
369
|
+
10. Display summary.
|
|
366
370
|
|
|
367
371
|
**Next step routing**:
|
|
368
372
|
|
|
@@ -15,7 +15,7 @@ $spec-add "arch Use Zod for runtime validation over io-ts"
|
|
|
15
15
|
$spec-add "quality All API endpoints must return structured error objects"
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
**Valid categories**: coding, arch, quality, debug, test, review, learning.
|
|
18
|
+
**Valid categories**: coding, arch, quality, debug, test, review, learning, bug, pattern, decision, rule, validation.
|
|
19
19
|
</purpose>
|
|
20
20
|
|
|
21
21
|
<context>
|
|
@@ -31,6 +31,13 @@ $ARGUMENTS — `<category> <content>` where category selects the target file.
|
|
|
31
31
|
| `test` | `test-conventions.md` |
|
|
32
32
|
| `review` | `review-standards.md` |
|
|
33
33
|
| `learning` | `learnings.md` |
|
|
34
|
+
| `bug` | `learnings.md` |
|
|
35
|
+
| `pattern` | `coding-conventions.md` |
|
|
36
|
+
| `decision` | `architecture-constraints.md` |
|
|
37
|
+
| `rule` | `quality-rules.md` |
|
|
38
|
+
| `validation` | `quality-rules.md` |
|
|
39
|
+
|
|
40
|
+
Extended types (`bug`, `pattern`, `decision`, `rule`, `validation`) are stored in the file of their closest core category but retain their specific category in the `<spec-entry>` tag.
|
|
34
41
|
</context>
|
|
35
42
|
|
|
36
43
|
<execution>
|
|
@@ -38,7 +45,7 @@ $ARGUMENTS — `<category> <content>` where category selects the target file.
|
|
|
38
45
|
### Step 1: Parse Input
|
|
39
46
|
|
|
40
47
|
Extract category (first token) and content (remainder) from arguments.
|
|
41
|
-
- Validate category is one of: coding, arch, quality, debug, test, review, learning (E003 if invalid)
|
|
48
|
+
- Validate category is one of: coding, arch, quality, debug, test, review, learning, bug, pattern, decision, rule, validation (E003 if invalid)
|
|
42
49
|
- Validate content is non-empty (E001 if missing)
|
|
43
50
|
|
|
44
51
|
### Step 2: Validate Specs Directory
|
|
@@ -78,6 +85,7 @@ Append `<spec-entry>` closed-tag block to target file:
|
|
|
78
85
|
Added [{category}] to {target_file}
|
|
79
86
|
Keywords: {kw1}, {kw2}, {kw3}
|
|
80
87
|
Verify: /spec-load --keyword {kw1}
|
|
88
|
+
Remove: /spec-remove <entry-id>
|
|
81
89
|
```
|
|
82
90
|
</execution>
|
|
83
91
|
|
|
@@ -86,7 +94,7 @@ Verify: /spec-load --keyword {kw1}
|
|
|
86
94
|
|------|----------|-------------|
|
|
87
95
|
| E001 | fatal | Category and content are both required |
|
|
88
96
|
| E002 | fatal | `.workflow/specs/` not initialized -- run `Skill({ skill: "spec-setup" })` first |
|
|
89
|
-
| E003 | fatal | Invalid category -- must be one of: coding, arch, quality, debug, test, review, learning |
|
|
97
|
+
| E003 | fatal | Invalid category -- must be one of: coding, arch, quality, debug, test, review, learning, bug, pattern, decision, rule, validation |
|
|
90
98
|
</error_codes>
|
|
91
99
|
|
|
92
100
|
<success_criteria>
|
|
@@ -30,8 +30,15 @@ $spec-load "--category coding --keyword naming"
|
|
|
30
30
|
| `test` | `test-conventions.md` |
|
|
31
31
|
| `review` | `review-standards.md` |
|
|
32
32
|
| `learning` | `learnings.md` |
|
|
33
|
+
| `bug` | `learnings.md` |
|
|
34
|
+
| `pattern` | `coding-conventions.md` |
|
|
35
|
+
| `decision` | `architecture-constraints.md` |
|
|
36
|
+
| `rule` | `quality-rules.md` |
|
|
37
|
+
| `validation` | `quality-rules.md` |
|
|
33
38
|
| `all` (default) | All spec files |
|
|
34
39
|
|
|
40
|
+
Extended types (`bug`, `pattern`, `decision`, `rule`, `validation`) are stored in their closest core category's file but retain their specific category in the `<spec-entry>` tag.
|
|
41
|
+
|
|
35
42
|
**Keyword filtering**: When `--keyword` is provided, only entries with matching keyword in their `<spec-entry keywords="...">` attribute are returned. Legacy entries (heading format) are filtered by text grep.
|
|
36
43
|
</context>
|
|
37
44
|
|
|
@@ -43,7 +43,7 @@ Single-wave parallel execution — 4 independent mapper agents each analyze a di
|
|
|
43
43
|
$spec-map ""
|
|
44
44
|
$spec-map "auth"
|
|
45
45
|
$spec-map -c 4 "api layer"
|
|
46
|
-
$spec-map --continue "map-auth
|
|
46
|
+
$spec-map --continue "20260318-map-auth"
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
**Flags**:
|
|
@@ -102,7 +102,7 @@ id,title,description,focus_area,output_file,deps,context_from,wave,status,findin
|
|
|
102
102
|
const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
|
|
103
103
|
const focusArea = $ARGUMENTS.replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+/g, '').trim() || 'full'
|
|
104
104
|
const dateStr = new Date(Date.now() + 8*60*60*1000).toISOString().substring(0,10).replace(/-/g,'')
|
|
105
|
-
const sessionId =
|
|
105
|
+
const sessionId = `${dateStr}-map-${focusArea.substring(0,20)}`
|
|
106
106
|
const sessionFolder = `.workflow/.csv-wave/${sessionId}`
|
|
107
107
|
|
|
108
108
|
Bash(`mkdir -p ${sessionFolder}`)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-remove
|
|
3
|
+
description: Remove a spec entry from a specs file by entry ID using maestro wiki remove-entry
|
|
4
|
+
argument-hint: "<entry-id>"
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<purpose>
|
|
9
|
+
Remove a `<spec-entry>` block from a specs container file. Symmetric with `spec-add`.
|
|
10
|
+
Uses `maestro wiki remove-entry` for atomic removal with automatic index update.
|
|
11
|
+
</purpose>
|
|
12
|
+
|
|
13
|
+
<required_reading>
|
|
14
|
+
@~/.maestro/workflows/specs-remove.md
|
|
15
|
+
</required_reading>
|
|
16
|
+
|
|
17
|
+
<context>
|
|
18
|
+
$ARGUMENTS — entry ID to remove (e.g., `spec-learnings-003`)
|
|
19
|
+
|
|
20
|
+
**Entry ID format**: `spec-{file-stem}-{NNN}` — sub-node ID from WikiIndexer atomic indexing.
|
|
21
|
+
|
|
22
|
+
**Discovery**:
|
|
23
|
+
- `maestro wiki list --type spec --json` — list all spec entries
|
|
24
|
+
- `/spec-load --keyword <term>` — find by keyword
|
|
25
|
+
- `maestro wiki search "<query>"` — BM25 search
|
|
26
|
+
</context>
|
|
27
|
+
|
|
28
|
+
<execution>
|
|
29
|
+
|
|
30
|
+
### Step 1: Parse Input
|
|
31
|
+
|
|
32
|
+
Extract entry ID from arguments.
|
|
33
|
+
- Validate non-empty (E001 if missing)
|
|
34
|
+
- Validate `.workflow/specs/` exists (E002 if not)
|
|
35
|
+
|
|
36
|
+
### Step 2: Lookup Entry
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
maestro wiki get <entry-id> --json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- Validate entry exists (E003 if not found)
|
|
43
|
+
- Validate entry is spec sub-node: `type` = "spec" and `parent` field set (E004 if not)
|
|
44
|
+
- Extract: title, category, keywords, container path, body preview
|
|
45
|
+
|
|
46
|
+
### Step 3: Confirm
|
|
47
|
+
|
|
48
|
+
Display entry details. Ask user to confirm unless `-y` flag present.
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
== Spec Entry to Remove ==
|
|
52
|
+
ID: {entry-id}
|
|
53
|
+
Title: {title}
|
|
54
|
+
Category: {category}
|
|
55
|
+
Keywords: {keywords}
|
|
56
|
+
Container: .workflow/specs/{filename}
|
|
57
|
+
|
|
58
|
+
Remove this entry? [y/N]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Step 4: Remove
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
maestro wiki remove-entry <entry-id>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
WikiIndexer auto-updates `.workflow/wiki-index.json`.
|
|
68
|
+
|
|
69
|
+
### Step 5: Verify & Report
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
maestro wiki get <entry-id> # should return not-found
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
== Entry Removed ==
|
|
77
|
+
ID: {entry-id}
|
|
78
|
+
From: .workflow/specs/{filename}
|
|
79
|
+
|
|
80
|
+
To verify: maestro wiki list --type spec --category {category}
|
|
81
|
+
To re-add: /spec-add {category} {content}
|
|
82
|
+
```
|
|
83
|
+
</execution>
|
|
84
|
+
|
|
85
|
+
<error_codes>
|
|
86
|
+
| Code | Severity | Description |
|
|
87
|
+
|------|----------|-------------|
|
|
88
|
+
| E001 | fatal | Entry ID is required -- usage: `/spec-remove <entry-id>` |
|
|
89
|
+
| E002 | fatal | `.workflow/specs/` not initialized -- run `/spec-setup` first |
|
|
90
|
+
| E003 | fatal | Entry ID not found in wiki index |
|
|
91
|
+
| E004 | fatal | Entry is not a spec sub-node (wrong type or no parent) |
|
|
92
|
+
</error_codes>
|
|
93
|
+
|
|
94
|
+
<success_criteria>
|
|
95
|
+
- [ ] Entry ID parsed and validated
|
|
96
|
+
- [ ] Entry found in wiki index (type=spec, has parent)
|
|
97
|
+
- [ ] User confirmed removal
|
|
98
|
+
- [ ] Entry removed via `maestro wiki remove-entry`
|
|
99
|
+
- [ ] Wiki index auto-updated
|
|
100
|
+
- [ ] Confirmation displayed
|
|
101
|
+
</success_criteria>
|
|
@@ -53,12 +53,7 @@ Create `.workflow/specs/` directory and write:
|
|
|
53
53
|
| `debug-notes.md` | Skipped — created on demand via `spec-add debug` |
|
|
54
54
|
| `review-standards.md` | Skipped — created on demand via `spec-add review` |
|
|
55
55
|
|
|
56
|
-
### Step 5:
|
|
57
|
-
|
|
58
|
-
Read template from `~/.maestro/templates/project-tech.json` if available.
|
|
59
|
-
Write `.workflow/project-tech.json` with detected tech stack.
|
|
60
|
-
|
|
61
|
-
### Step 6: Display Report
|
|
56
|
+
### Step 5: Display Report
|
|
62
57
|
|
|
63
58
|
```
|
|
64
59
|
=== SPEC SETUP COMPLETE ===
|
|
@@ -67,10 +62,12 @@ Created:
|
|
|
67
62
|
- .workflow/specs/architecture-constraints.md (category: arch)
|
|
68
63
|
- .workflow/specs/learnings.md (category: learning)
|
|
69
64
|
{optional files if created}
|
|
70
|
-
- .workflow/project-tech.json
|
|
71
65
|
|
|
72
66
|
Next: Run Skill({ skill: "spec-add", args: "<category> <content>" }) to add entries
|
|
73
67
|
Categories: coding, arch, quality, debug, test, review, learning
|
|
68
|
+
Extended: bug, pattern, decision, rule, validation (stored in closest core category file)
|
|
69
|
+
Remove: /spec-remove <entry-id>
|
|
70
|
+
Wiki: maestro wiki list --type spec (entries auto-indexed in wiki graph)
|
|
74
71
|
```
|
|
75
72
|
|
|
76
73
|
</execution>
|
|
@@ -89,6 +86,5 @@ Categories: coding, arch, quality, debug, test, review, learning
|
|
|
89
86
|
- [ ] `.workflow/specs/` directory created
|
|
90
87
|
- [ ] 3 core spec files always created (coding, arch, learning)
|
|
91
88
|
- [ ] Optional files created only when relevant signals detected
|
|
92
|
-
- [ ] `.workflow/project-tech.json` written with detected tech stack
|
|
93
89
|
- [ ] Completion report displayed with category labels
|
|
94
90
|
</success_criteria>
|
|
@@ -15,7 +15,7 @@ optionally auto-applies new `related` links to improve graph connectivity.
|
|
|
15
15
|
$ARGUMENTS — optional flags.
|
|
16
16
|
|
|
17
17
|
**Flags:**
|
|
18
|
-
- `--scope <type>` — Limit to wiki type (spec,
|
|
18
|
+
- `--scope <type>` — Limit to wiki type (spec, memory, note, lesson, issue). Default: all.
|
|
19
19
|
- `--min-similarity N` — Threshold 0.0-1.0 (default: 0.3)
|
|
20
20
|
- `--fix` — Auto-apply top suggestions
|
|
21
21
|
- `--max N` — Max suggestions (default: 20)
|
|
@@ -29,14 +29,15 @@ $ARGUMENTS — optional flags.
|
|
|
29
29
|
Parallel `maestro wiki` commands: `list --json`, `health`, `orphans`, `hubs --top 10`.
|
|
30
30
|
|
|
31
31
|
### Stage 2: Identify Connection Candidates
|
|
32
|
-
- **Orphan rescue**: BM25 search by title, tag overlap, same
|
|
32
|
+
- **Orphan rescue**: BM25 search by title, tag overlap, same category/parent
|
|
33
33
|
- **Missing bidirectional**: A→B exists but B→A missing
|
|
34
|
-
- **Transitive closure**: A→B and B→C but no A→C (with shared tags/
|
|
34
|
+
- **Transitive closure**: A→B and B→C but no A→C (with shared tags/category)
|
|
35
35
|
- **Type bridge**: Different types referencing same concept but unlinked
|
|
36
|
+
- **Parent cluster**: Entries sharing the same parent but not linked to each other
|
|
36
37
|
|
|
37
38
|
### Stage 3: Score Candidates
|
|
38
39
|
```
|
|
39
|
-
score = 0.4 × tag_overlap + 0.3 × title_bm25 + 0.2 ×
|
|
40
|
+
score = 0.4 × tag_overlap + 0.3 × title_bm25 + 0.2 × same_category + 0.1 × type_bridge
|
|
40
41
|
```
|
|
41
42
|
Filter by `--min-similarity`, rank desc, limit by `--max`.
|
|
42
43
|
|
|
@@ -51,7 +52,7 @@ Re-run `maestro wiki health` for delta.
|
|
|
51
52
|
### Stage 6: Persist
|
|
52
53
|
Write `wiki-connections-{date}.md`. Append graph insights to `lessons.jsonl` (source: "wiki-connect").
|
|
53
54
|
|
|
54
|
-
**Next steps:** `/wiki-digest <topic>`, `/learn-follow <wiki-id>`, `maestro wiki graph`
|
|
55
|
+
**Next steps:** `/wiki-digest <topic>`, `/manage-wiki health`, `/learn-follow <wiki-id>`, `maestro wiki graph`
|
|
55
56
|
</execution>
|
|
56
57
|
|
|
57
58
|
<error_codes>
|
|
@@ -48,7 +48,7 @@ Type × theme matrix showing knowledge density:
|
|
|
48
48
|
```
|
|
49
49
|
Theme 1 Theme 2 Theme 3
|
|
50
50
|
spec ███░░ ░░░░░ █████
|
|
51
|
-
|
|
51
|
+
memory ████░ ███░░ ░░░░░
|
|
52
52
|
lesson █░░░░ ██░░░ ████░
|
|
53
53
|
```
|
|
54
54
|
Empty cells = knowledge gaps.
|
|
@@ -62,7 +62,7 @@ For each gap: dedup against issues.jsonl, append with `type: "knowledge-gap"`, `
|
|
|
62
62
|
### Stage 8: Persist
|
|
63
63
|
Append meta-insights to `lessons.jsonl` (source: "wiki-digest"). Display summary.
|
|
64
64
|
|
|
65
|
-
**Next steps:** `/learn-follow <wiki-id>`, `/wiki-connect --fix`, `/learn-decompose <path>`
|
|
65
|
+
**Next steps:** `/learn-follow <wiki-id>`, `/wiki-connect --fix`, `/manage-wiki cleanup`, `/learn-decompose <path>`
|
|
66
66
|
</execution>
|
|
67
67
|
|
|
68
68
|
<error_codes>
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
},
|
|
28
28
|
"merge_decision": {
|
|
29
29
|
"type": "decision",
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"true": "merge",
|
|
34
|
-
"false": "lifecycle_in_worktree"
|
|
35
|
-
|
|
30
|
+
"strategy": "expr",
|
|
31
|
+
"eval": "all_phases_completed",
|
|
32
|
+
"edges": [
|
|
33
|
+
{ "value": true, "target": "merge", "description": "All phases completed — merge back" },
|
|
34
|
+
{ "value": false, "target": "lifecycle_in_worktree", "default": true, "description": "Phases remaining — continue lifecycle" }
|
|
35
|
+
]
|
|
36
36
|
},
|
|
37
37
|
"merge": {
|
|
38
38
|
"type": "command",
|