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
package/workflows/memory.md
CHANGED
|
@@ -8,7 +8,7 @@ Two memory stores with different purposes:
|
|
|
8
8
|
|
|
9
9
|
| Store | Path | Format | Index |
|
|
10
10
|
|-------|------|--------|-------|
|
|
11
|
-
| `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` |
|
|
11
|
+
| `workflow` | `.workflow/memory/` | `MEM-*.md`, `TIP-*.md` | `.workflow/wiki-index.json` (unified, auto-managed by WikiIndexer) |
|
|
12
12
|
| `system` | `~/.claude/projects/{project}/memory/` | `MEMORY.md` + topic `.md` files | None (flat files) |
|
|
13
13
|
|
|
14
14
|
**System memory path detection:**
|
|
@@ -30,7 +30,7 @@ Detect both memory store paths:
|
|
|
30
30
|
```bash
|
|
31
31
|
# Workflow memory
|
|
32
32
|
WF_MEMORY_DIR=".workflow/memory"
|
|
33
|
-
WF_INDEX_FILE="
|
|
33
|
+
WF_INDEX_FILE=".workflow/wiki-index.json" # unified index (auto-managed by WikiIndexer)
|
|
34
34
|
|
|
35
35
|
# System memory — derive from project git root or cwd
|
|
36
36
|
PROJECT_ROOT=$(pwd)
|
|
@@ -40,7 +40,7 @@ SYS_MEMORY_DIR="$HOME/.claude/projects/$(echo "$PROJECT_ROOT" | sed 's|[/\\:]|-|
|
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Verify which stores exist:
|
|
43
|
-
- Workflow: check
|
|
43
|
+
- Workflow: check `.workflow/memory/` directory exists (index is auto-managed)
|
|
44
44
|
- System: check `$SYS_MEMORY_DIR/MEMORY.md` exists
|
|
45
45
|
|
|
46
46
|
If neither exists, report E001.
|
|
@@ -69,7 +69,7 @@ Parse arguments and detect subcommand:
|
|
|
69
69
|
List entries from targeted stores.
|
|
70
70
|
|
|
71
71
|
**Workflow store** (if exists):
|
|
72
|
-
1.
|
|
72
|
+
1. Use `maestro wiki list --type memory --json` (reads unified `.workflow/wiki-index.json`)
|
|
73
73
|
2. Apply filters (--tag, --type, --before, --after)
|
|
74
74
|
3. Sort by timestamp descending
|
|
75
75
|
|
|
@@ -108,7 +108,7 @@ Hints:
|
|
|
108
108
|
Full-text search across both stores.
|
|
109
109
|
|
|
110
110
|
**Workflow store:**
|
|
111
|
-
1.
|
|
111
|
+
1. Use `maestro wiki search "<query>" --json` or filter `.workflow/wiki-index.json` fields: `summary`, `tags`, `id`
|
|
112
112
|
2. For deeper matches, read individual `.md` files and search content
|
|
113
113
|
|
|
114
114
|
**System store:**
|
|
@@ -138,7 +138,7 @@ View: /manage-memory view <ID|filename>
|
|
|
138
138
|
Display full content of a memory entry.
|
|
139
139
|
|
|
140
140
|
**Workflow entry** (ID matches `MEM-*` or `TIP-*`):
|
|
141
|
-
1. Validate ID exists in
|
|
141
|
+
1. Validate ID exists via `maestro wiki get <id>` or in `.workflow/wiki-index.json`
|
|
142
142
|
2. Read the corresponding `.md` file
|
|
143
143
|
3. Display with metadata header
|
|
144
144
|
|
|
@@ -188,9 +188,9 @@ Changes: {summary of edits}
|
|
|
188
188
|
Remove a memory entry or file.
|
|
189
189
|
|
|
190
190
|
**Workflow entry:**
|
|
191
|
-
1. Validate ID in
|
|
191
|
+
1. Validate ID via `maestro wiki get <id>` or in `.workflow/wiki-index.json`
|
|
192
192
|
2. Show summary, confirm with AskUserQuestion (unless --confirm)
|
|
193
|
-
3. Remove `.md` file
|
|
193
|
+
3. Remove `.md` file (WikiIndexer auto-updates index on next access)
|
|
194
194
|
|
|
195
195
|
**System file:**
|
|
196
196
|
1. Validate file exists (NEVER allow deleting MEMORY.md — only topic files)
|
|
@@ -213,7 +213,7 @@ Bulk cleanup — workflow store only.
|
|
|
213
213
|
|
|
214
214
|
At least one filter required: --tag, --type, --before, --after.
|
|
215
215
|
|
|
216
|
-
1. Read
|
|
216
|
+
1. Read `.workflow/wiki-index.json`, apply filters
|
|
217
217
|
2. Display candidates table
|
|
218
218
|
3. If `--dry-run`, stop after display
|
|
219
219
|
4. Confirm with AskUserQuestion
|
|
@@ -232,9 +232,9 @@ Post-operation integrity check.
|
|
|
232
232
|
|
|
233
233
|
**Workflow store:**
|
|
234
234
|
1. Scan `.workflow/memory/` for `.md` files
|
|
235
|
-
2. Compare with
|
|
235
|
+
2. Compare with `.workflow/wiki-index.json` entries (type=memory)
|
|
236
236
|
3. Report orphaned files or dangling references
|
|
237
|
-
4. Offer to fix inconsistencies
|
|
237
|
+
4. Offer to fix inconsistencies (WikiIndexer re-indexes on next write)
|
|
238
238
|
|
|
239
239
|
**System store:**
|
|
240
240
|
1. Check MEMORY.md links to topic files
|
|
@@ -260,13 +260,9 @@ Parse arguments and detect execution mode:
|
|
|
260
260
|
|
|
261
261
|
```bash
|
|
262
262
|
MEMORY_DIR=".workflow/memory"
|
|
263
|
-
INDEX_FILE="$MEMORY_DIR/memory-index.json"
|
|
264
263
|
mkdir -p "$MEMORY_DIR"
|
|
265
|
-
|
|
266
|
-
#
|
|
267
|
-
if [ ! -f "$INDEX_FILE" ]; then
|
|
268
|
-
echo '{"entries":[],"_metadata":{"created":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","version":"1.0"}}' > "$INDEX_FILE"
|
|
269
|
-
fi
|
|
264
|
+
# Note: wiki-index.json is auto-managed by WikiIndexer at .workflow/wiki-index.json
|
|
265
|
+
# No manual index initialization needed
|
|
270
266
|
```
|
|
271
267
|
|
|
272
268
|
When ambiguous, use AskUserQuestion:
|
|
@@ -355,36 +351,14 @@ Write entry file with sections:
|
|
|
355
351
|
- Tags (from --tag flag)
|
|
356
352
|
- Context (auto-detected from recent conversation files)
|
|
357
353
|
|
|
358
|
-
### Step 4:
|
|
359
|
-
|
|
360
|
-
Append entry metadata to memory-index.json.
|
|
361
|
-
|
|
362
|
-
Read `memory-index.json`, append new entry to `entries[]`:
|
|
354
|
+
### Step 4: Wiki Index (Auto-managed)
|
|
363
355
|
|
|
364
|
-
|
|
365
|
-
{
|
|
366
|
-
"id": "MEM-20260315-143022",
|
|
367
|
-
"type": "compact",
|
|
368
|
-
"timestamp": "2026-03-15T14:30:22Z",
|
|
369
|
-
"file": "MEM-20260315-143022.md",
|
|
370
|
-
"summary": "Session objective in one line",
|
|
371
|
-
"tags": [],
|
|
372
|
-
"project_root": "/path/to/project",
|
|
373
|
-
"session_id": "WFS-001"
|
|
374
|
-
}
|
|
375
|
-
```
|
|
356
|
+
Memory files are automatically indexed by WikiIndexer into the unified `.workflow/wiki-index.json`. No manual index update is needed — the persistent index is regenerated on next `maestro wiki` access or any write operation.
|
|
376
357
|
|
|
377
|
-
For
|
|
378
|
-
```
|
|
379
|
-
{
|
|
380
|
-
|
|
381
|
-
"type": "tip",
|
|
382
|
-
"timestamp": "2026-03-15T14:30:22Z",
|
|
383
|
-
"file": "TIP-20260315-143022.md",
|
|
384
|
-
"summary": "First 80 chars of note content",
|
|
385
|
-
"tags": ["config", "redis"],
|
|
386
|
-
"project_root": "/path/to/project"
|
|
387
|
-
}
|
|
358
|
+
For immediate visibility after capture:
|
|
359
|
+
```bash
|
|
360
|
+
maestro wiki get memory-{slug} # verify entry exists in wiki
|
|
361
|
+
maestro wiki list --type memory # list all memory entries
|
|
388
362
|
```
|
|
389
363
|
|
|
390
364
|
### Step 5: Report
|
|
@@ -400,7 +374,7 @@ Type: compact
|
|
|
400
374
|
Plan: {plan_source} ({plan_line_count} lines preserved)
|
|
401
375
|
|
|
402
376
|
To restore: Read .workflow/memory/{ENTRY_ID}.md
|
|
403
|
-
To search:
|
|
377
|
+
To search: maestro wiki list --type memory
|
|
404
378
|
```
|
|
405
379
|
|
|
406
380
|
**Tip mode:**
|
|
@@ -410,33 +384,14 @@ Entry: {ENTRY_ID}
|
|
|
410
384
|
File: .workflow/memory/{ENTRY_ID}.md
|
|
411
385
|
Tags: {tags}
|
|
412
386
|
|
|
413
|
-
To search:
|
|
387
|
+
To search: maestro wiki list --type memory --tag {tags}
|
|
414
388
|
```
|
|
415
389
|
|
|
416
390
|
---
|
|
417
391
|
|
|
418
|
-
## Index
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
{
|
|
422
|
-
"entries": [
|
|
423
|
-
{
|
|
424
|
-
"id": "MEM-20260315-143022",
|
|
425
|
-
"type": "compact | tip",
|
|
426
|
-
"timestamp": "2026-03-15T14:30:22Z",
|
|
427
|
-
"file": "MEM-20260315-143022.md",
|
|
428
|
-
"summary": "One-line description",
|
|
429
|
-
"tags": [],
|
|
430
|
-
"project_root": "D:\\project",
|
|
431
|
-
"session_id": "WFS-001 | null"
|
|
432
|
-
}
|
|
433
|
-
],
|
|
434
|
-
"_metadata": {
|
|
435
|
-
"created": "2026-03-15T00:00:00Z",
|
|
436
|
-
"version": "1.0"
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
```
|
|
392
|
+
## Index
|
|
393
|
+
|
|
394
|
+
Memory entries are indexed in the unified `.workflow/wiki-index.json` by WikiIndexer. Each memory file becomes a wiki entry of type `memory` with fields derived from frontmatter (id, title, tags, summary). Use `maestro wiki list --type memory --json` to query the index programmatically.
|
|
440
395
|
|
|
441
396
|
## Compact Entry Structure
|
|
442
397
|
|
|
@@ -492,5 +447,5 @@ Quick note for ideas, snippets, reminders.
|
|
|
492
447
|
|
|
493
448
|
## Retrieval
|
|
494
449
|
|
|
495
|
-
|
|
496
|
-
|
|
450
|
+
Use `maestro wiki list --type memory` to find entries by type, tags, or date.
|
|
451
|
+
Use `maestro wiki get <id>` or read individual `.md` files for full content.
|
package/workflows/merge.md
CHANGED
|
@@ -106,28 +106,15 @@ incompletePhases = []
|
|
|
106
106
|
// Read worktree state for artifact registry check
|
|
107
107
|
Read {target.path}/.workflow/state.json → wtState (if exists)
|
|
108
108
|
wtArtifacts = wtState?.artifacts ?? []
|
|
109
|
-
useArtifactRegistry = wtArtifacts.length > 0
|
|
110
|
-
|
|
111
|
-
IF useArtifactRegistry:
|
|
112
|
-
// Check phase completeness via artifact registry
|
|
113
|
-
for (phaseNum of target.owned_phases):
|
|
114
|
-
execArtifacts = wtArtifacts.filter(a => a.type === 'execute' && a.phase === phaseNum)
|
|
115
|
-
IF execArtifacts.some(a => a.status === 'completed'):
|
|
116
|
-
completedPhases.push({ phase: phaseNum })
|
|
117
|
-
ELSE:
|
|
118
|
-
status = execArtifacts.length > 0 ? execArtifacts[0].status : 'no_execute_artifact'
|
|
119
|
-
incompletePhases.push({ phase: phaseNum, status })
|
|
120
|
-
ELSE:
|
|
121
|
-
// Legacy: check phases/ directory
|
|
122
|
-
for (phaseNum of target.owned_phases):
|
|
123
|
-
NN = String(phaseNum).padStart(2, '0')
|
|
124
|
-
Glob: {target.path}/.workflow/phases/{NN}-*/index.json
|
|
125
|
-
Read → wtIndex
|
|
126
109
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
110
|
+
// Check phase completeness via artifact registry
|
|
111
|
+
for (phaseNum of target.owned_phases):
|
|
112
|
+
execArtifacts = wtArtifacts.filter(a => a.type === 'execute' && a.phase === phaseNum)
|
|
113
|
+
IF execArtifacts.some(a => a.status === 'completed'):
|
|
114
|
+
completedPhases.push({ phase: phaseNum })
|
|
115
|
+
ELSE:
|
|
116
|
+
status = execArtifacts.length > 0 ? execArtifacts[0].status : 'no_execute_artifact'
|
|
117
|
+
incompletePhases.push({ phase: phaseNum, status })
|
|
131
118
|
|
|
132
119
|
IF incompletePhases.length > 0 AND NOT force:
|
|
133
120
|
WARN W002: "M{target.milestone_num} ({target.milestone}) has incomplete phases:"
|
|
@@ -199,88 +186,42 @@ Display "Syncing workflow artifacts for M{target.milestone_num} ({target.milesto
|
|
|
199
186
|
|
|
200
187
|
Read .workflow/state.json → mainState
|
|
201
188
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
ELSE:
|
|
239
|
-
// Legacy: copy phase directories from worktree to main
|
|
240
|
-
// 7a: Copy all owned phase directories
|
|
241
|
-
for (phaseNum of target.owned_phases):
|
|
242
|
-
NN = String(phaseNum).padStart(2, '0')
|
|
243
|
-
Glob: {target.path}/.workflow/phases/{NN}-*/
|
|
244
|
-
phaseDir = matched directory name
|
|
245
|
-
|
|
246
|
-
srcDir = target.path + "/.workflow/phases/" + phaseDir + "/"
|
|
247
|
-
dstDir = ".workflow/phases/" + phaseDir + "/"
|
|
248
|
-
|
|
249
|
-
Bash("cp -r {srcDir}* {dstDir}")
|
|
250
|
-
|
|
251
|
-
// 7b: Update phase summaries
|
|
252
|
-
for (phaseNum of target.owned_phases):
|
|
253
|
-
NN = String(phaseNum).padStart(2, '0')
|
|
254
|
-
Glob: .workflow/phases/{NN}-*/index.json
|
|
255
|
-
Read → phaseIndex
|
|
256
|
-
|
|
257
|
-
IF phaseIndex.status === "completed":
|
|
258
|
-
mainState.phases_summary.completed += 1
|
|
259
|
-
mainState.phases_summary.pending -= 1
|
|
260
|
-
IF mainState.phases_summary.pending < 0:
|
|
261
|
-
mainState.phases_summary.pending = 0
|
|
262
|
-
|
|
263
|
-
mainState.transition_history = mainState.transition_history ?? []
|
|
264
|
-
mainState.transition_history.push({
|
|
265
|
-
milestone_num: target.milestone_num,
|
|
266
|
-
milestone: target.milestone,
|
|
267
|
-
phase: phaseNum,
|
|
268
|
-
action: "worktree_merge",
|
|
269
|
-
completed_at: phaseIndex.completed_at ?? getUtc8ISOString(),
|
|
270
|
-
branch: target.branch
|
|
271
|
-
})
|
|
272
|
-
ELSE IF phaseIndex.status !== "forked":
|
|
273
|
-
mainState.phases_summary.in_progress += 1
|
|
274
|
-
mainState.phases_summary.pending -= 1
|
|
275
|
-
IF mainState.phases_summary.pending < 0:
|
|
276
|
-
mainState.phases_summary.pending = 0
|
|
277
|
-
|
|
278
|
-
phaseIndex.updated_at = getUtc8ISOString()
|
|
279
|
-
Write .workflow/phases/{NN}-{slug}/index.json: phaseIndex
|
|
280
|
-
|
|
281
|
-
// Merge accumulated context from worktree (both paths)
|
|
282
|
-
IF NOT useArtifactRegistry:
|
|
283
|
-
Read target.path + "/.workflow/state.json" → wtState (if exists)
|
|
189
|
+
// 7a: Copy scratch dirs from worktree to main
|
|
190
|
+
Read {target.path}/.workflow/state.json → wtState
|
|
191
|
+
wtArtifacts = wtState?.artifacts ?? []
|
|
192
|
+
milestoneArtifacts = wtArtifacts.filter(a =>
|
|
193
|
+
a.path && (a.milestone === target.milestone || target.owned_phases.includes(a.phase))
|
|
194
|
+
)
|
|
195
|
+
for (art of milestoneArtifacts):
|
|
196
|
+
srcDir = target.path + "/.workflow/" + art.path
|
|
197
|
+
dstDir = ".workflow/" + art.path
|
|
198
|
+
IF directory_exists(srcDir):
|
|
199
|
+
Bash("mkdir -p {dstDir} && cp -r {srcDir}/* {dstDir}/")
|
|
200
|
+
|
|
201
|
+
// 7b: Merge artifact registries
|
|
202
|
+
mainArtifacts = mainState.artifacts ?? []
|
|
203
|
+
existingIds = new Set(mainArtifacts.map(a => a.id))
|
|
204
|
+
for (art of wtArtifacts):
|
|
205
|
+
IF existingIds.has(art.id):
|
|
206
|
+
// Update existing artifact status
|
|
207
|
+
idx = mainArtifacts.findIndex(a => a.id === art.id)
|
|
208
|
+
mainArtifacts[idx] = art
|
|
209
|
+
ELSE:
|
|
210
|
+
mainArtifacts.push(art)
|
|
211
|
+
mainState.artifacts = mainArtifacts
|
|
212
|
+
|
|
213
|
+
// Record merge in transition history
|
|
214
|
+
mainState.transition_history = mainState.transition_history ?? []
|
|
215
|
+
mainState.transition_history.push({
|
|
216
|
+
milestone_num: target.milestone_num,
|
|
217
|
+
milestone: target.milestone,
|
|
218
|
+
action: "worktree_merge",
|
|
219
|
+
completed_at: getUtc8ISOString(),
|
|
220
|
+
branch: target.branch,
|
|
221
|
+
phases: target.owned_phases
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
// Merge accumulated context from worktree
|
|
284
225
|
IF wtState?.accumulated_context:
|
|
285
226
|
for (decision of (wtState.accumulated_context.key_decisions ?? [])):
|
|
286
227
|
IF NOT mainState.accumulated_context.key_decisions.includes(decision):
|
|
@@ -294,10 +235,7 @@ Write .workflow/state.json: mainState
|
|
|
294
235
|
// 7c: Update roadmap.md (mark completed phases)
|
|
295
236
|
Read .workflow/roadmap.md → roadmap
|
|
296
237
|
for (phaseNum of target.owned_phases):
|
|
297
|
-
|
|
298
|
-
isCompleted = completedPhases.some(p => p.phase === phaseNum)
|
|
299
|
-
ELSE:
|
|
300
|
-
Read phase index → isCompleted = (status === "completed")
|
|
238
|
+
isCompleted = completedPhases.some(p => p.phase === phaseNum)
|
|
301
239
|
IF isCompleted:
|
|
302
240
|
Append " ✅ COMPLETED" to phase title line in roadmap
|
|
303
241
|
Write .workflow/roadmap.md: roadmap
|
|
@@ -66,24 +66,41 @@ Check existing entries to avoid duplicates when appending in Step 3.
|
|
|
66
66
|
- Extract patterns discovered
|
|
67
67
|
- Extract pitfalls encountered
|
|
68
68
|
|
|
69
|
-
2. Aggregate learnings and append to `.workflow/specs/learnings.md
|
|
69
|
+
2. Aggregate learnings and append to `.workflow/specs/learnings.md` using `<spec-entry>` closed-tag format:
|
|
70
70
|
```
|
|
71
71
|
For each strategy adjustment:
|
|
72
|
-
|
|
72
|
+
<spec-entry category="learning" keywords="{auto-extracted}" date="{YYYY-MM-DD}" source="milestone-complete">
|
|
73
|
+
|
|
74
|
+
### {summary}
|
|
75
|
+
|
|
73
76
|
{content}
|
|
74
|
-
Milestone: {milestone}
|
|
77
|
+
Milestone: {milestone}
|
|
78
|
+
|
|
79
|
+
</spec-entry>
|
|
75
80
|
|
|
76
81
|
For each pattern:
|
|
77
|
-
|
|
82
|
+
<spec-entry category="learning" keywords="{auto-extracted}" date="{YYYY-MM-DD}" source="milestone-complete">
|
|
83
|
+
|
|
84
|
+
### {summary}
|
|
85
|
+
|
|
78
86
|
{content}
|
|
79
|
-
Milestone: {milestone}
|
|
87
|
+
Milestone: {milestone}
|
|
88
|
+
|
|
89
|
+
</spec-entry>
|
|
80
90
|
|
|
81
91
|
For each pitfall:
|
|
82
|
-
|
|
92
|
+
<spec-entry category="learning" keywords="{auto-extracted}" date="{YYYY-MM-DD}" source="milestone-complete">
|
|
93
|
+
|
|
94
|
+
### {summary}
|
|
95
|
+
|
|
83
96
|
{content}
|
|
84
|
-
Milestone: {milestone}
|
|
97
|
+
Milestone: {milestone}
|
|
98
|
+
|
|
99
|
+
</spec-entry>
|
|
85
100
|
```
|
|
86
101
|
|
|
102
|
+
**Keyword extraction**: Extract 3-5 domain-specific terms from the content (same rules as `spec-add`).
|
|
103
|
+
|
|
87
104
|
---
|
|
88
105
|
|
|
89
106
|
## Step 4: Update State
|