maestro-flow 0.5.37 → 0.5.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/.agents/skills/maestro/SKILL.md +11 -5
  2. package/.agents/skills/maestro-ralph/SKILL.md +80 -12
  3. package/.agents/skills/maestro-ralph-execute/SKILL.md +17 -6
  4. package/.agents/skills/manage-drift-realign/SKILL.md +153 -0
  5. package/.agents/skills/odyssey-debug/SKILL.md +90 -269
  6. package/.agents/skills/odyssey-improve/SKILL.md +39 -240
  7. package/.agents/skills/odyssey-planex/SKILL.md +21 -105
  8. package/.agents/skills/odyssey-review-test-fix/SKILL.md +98 -318
  9. package/.agents/skills/odyssey-ui/SKILL.md +82 -265
  10. package/.agy/skills/maestro/SKILL.md +11 -5
  11. package/.agy/skills/maestro-ralph/SKILL.md +80 -12
  12. package/.agy/skills/maestro-ralph-execute/SKILL.md +17 -6
  13. package/.agy/skills/manage-drift-realign/SKILL.md +153 -0
  14. package/.agy/skills/odyssey-debug/SKILL.md +90 -269
  15. package/.agy/skills/odyssey-improve/SKILL.md +39 -240
  16. package/.agy/skills/odyssey-planex/SKILL.md +21 -105
  17. package/.agy/skills/odyssey-review-test-fix/SKILL.md +98 -318
  18. package/.agy/skills/odyssey-ui/SKILL.md +82 -265
  19. package/.claude/commands/maestro-ralph-execute.md +17 -6
  20. package/.claude/commands/maestro-ralph.md +80 -12
  21. package/.claude/commands/maestro.md +11 -5
  22. package/.claude/commands/manage-drift-realign.md +151 -0
  23. package/.claude/commands/odyssey-debug.md +90 -269
  24. package/.claude/commands/odyssey-improve.md +39 -240
  25. package/.claude/commands/odyssey-planex.md +21 -105
  26. package/.claude/commands/odyssey-review-test-fix.md +98 -318
  27. package/.claude/commands/odyssey-ui.md +82 -265
  28. package/.codex/skills/maestro/SKILL.md +16 -8
  29. package/.codex/skills/maestro-ralph/SKILL.md +138 -11
  30. package/.codex/skills/maestro-ralph-execute/SKILL.md +17 -6
  31. package/.codex/skills/manage-drift-realign/SKILL.md +471 -0
  32. package/.codex/skills/odyssey-debug/SKILL.md +167 -338
  33. package/.codex/skills/odyssey-improve/SKILL.md +226 -395
  34. package/.codex/skills/odyssey-planex/SKILL.md +317 -159
  35. package/.codex/skills/odyssey-review-test-fix/SKILL.md +137 -255
  36. package/.codex/skills/odyssey-ui/SKILL.md +197 -338
  37. package/README.md +25 -8
  38. package/README.zh-CN.md +6 -6
  39. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.d.ts +23 -2
  40. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js +242 -26
  41. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js.map +1 -1
  42. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.d.ts +2 -0
  43. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +92 -29
  44. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  45. package/dashboard/dist-server/src/commands/hooks.d.ts +2 -1
  46. package/dashboard/dist-server/src/commands/hooks.js +16 -9
  47. package/dashboard/dist-server/src/commands/hooks.js.map +1 -1
  48. package/dashboard/dist-server/src/commands/install-backend.d.ts +10 -0
  49. package/dashboard/dist-server/src/commands/install-backend.js +69 -0
  50. package/dashboard/dist-server/src/commands/install-backend.js.map +1 -1
  51. package/dashboard/dist-server/src/core/component-defs.d.ts +11 -0
  52. package/dashboard/dist-server/src/core/component-defs.js +34 -2
  53. package/dashboard/dist-server/src/core/component-defs.js.map +1 -1
  54. package/dashboard/dist-server/src/hooks/kg-sync-hook.js +5 -0
  55. package/dashboard/dist-server/src/hooks/kg-sync-hook.js.map +1 -1
  56. package/dashboard/dist-server/src/hooks/session-context.js +276 -3
  57. package/dashboard/dist-server/src/hooks/session-context.js.map +1 -1
  58. package/dashboard/dist-server/src/search/daemon-client.d.ts +8 -3
  59. package/dashboard/dist-server/src/search/daemon-client.js +20 -0
  60. package/dashboard/dist-server/src/search/daemon-client.js.map +1 -1
  61. package/dist/src/cli.js +3 -2
  62. package/dist/src/cli.js.map +1 -1
  63. package/dist/src/commands/domain.d.ts.map +1 -1
  64. package/dist/src/commands/domain.js +12 -3
  65. package/dist/src/commands/domain.js.map +1 -1
  66. package/dist/src/commands/hooks.d.ts +2 -1
  67. package/dist/src/commands/hooks.d.ts.map +1 -1
  68. package/dist/src/commands/hooks.js +16 -9
  69. package/dist/src/commands/hooks.js.map +1 -1
  70. package/dist/src/commands/install-backend.d.ts +10 -0
  71. package/dist/src/commands/install-backend.d.ts.map +1 -1
  72. package/dist/src/commands/install-backend.js +69 -0
  73. package/dist/src/commands/install-backend.js.map +1 -1
  74. package/dist/src/commands/install.js +34 -2
  75. package/dist/src/commands/install.js.map +1 -1
  76. package/dist/src/commands/ralph.d.ts.map +1 -1
  77. package/dist/src/commands/ralph.js +8 -0
  78. package/dist/src/commands/ralph.js.map +1 -1
  79. package/dist/src/commands/search.d.ts.map +1 -1
  80. package/dist/src/commands/search.js +59 -6
  81. package/dist/src/commands/search.js.map +1 -1
  82. package/dist/src/commands/spec.d.ts.map +1 -1
  83. package/dist/src/commands/spec.js +15 -0
  84. package/dist/src/commands/spec.js.map +1 -1
  85. package/dist/src/commands/timeline.d.ts +14 -0
  86. package/dist/src/commands/timeline.d.ts.map +1 -0
  87. package/dist/src/commands/timeline.js +377 -0
  88. package/dist/src/commands/timeline.js.map +1 -0
  89. package/dist/src/core/component-defs.d.ts +11 -0
  90. package/dist/src/core/component-defs.d.ts.map +1 -1
  91. package/dist/src/core/component-defs.js +34 -2
  92. package/dist/src/core/component-defs.js.map +1 -1
  93. package/dist/src/core/install-executor.d.ts.map +1 -1
  94. package/dist/src/core/install-executor.js +11 -1
  95. package/dist/src/core/install-executor.js.map +1 -1
  96. package/dist/src/core/install-profile.d.ts.map +1 -1
  97. package/dist/src/core/install-profile.js +52 -17
  98. package/dist/src/core/install-profile.js.map +1 -1
  99. package/dist/src/hooks/kg-sync-hook.d.ts.map +1 -1
  100. package/dist/src/hooks/kg-sync-hook.js +5 -0
  101. package/dist/src/hooks/kg-sync-hook.js.map +1 -1
  102. package/dist/src/hooks/session-context.d.ts.map +1 -1
  103. package/dist/src/hooks/session-context.js +276 -3
  104. package/dist/src/hooks/session-context.js.map +1 -1
  105. package/dist/src/i18n/locales/en.d.ts.map +1 -1
  106. package/dist/src/i18n/locales/en.js +4 -1
  107. package/dist/src/i18n/locales/en.js.map +1 -1
  108. package/dist/src/i18n/locales/zh.d.ts.map +1 -1
  109. package/dist/src/i18n/locales/zh.js +4 -1
  110. package/dist/src/i18n/locales/zh.js.map +1 -1
  111. package/dist/src/i18n/types.d.ts +3 -0
  112. package/dist/src/i18n/types.d.ts.map +1 -1
  113. package/dist/src/ralph/cmd-complete.d.ts +4 -0
  114. package/dist/src/ralph/cmd-complete.d.ts.map +1 -1
  115. package/dist/src/ralph/cmd-complete.js +8 -0
  116. package/dist/src/ralph/cmd-complete.js.map +1 -1
  117. package/dist/src/ralph/cmd-next.js +58 -8
  118. package/dist/src/ralph/cmd-next.js.map +1 -1
  119. package/dist/src/ralph/status-schema.d.ts +29 -2
  120. package/dist/src/ralph/status-schema.d.ts.map +1 -1
  121. package/dist/src/ralph/status-schema.js +1 -1
  122. package/dist/src/search/daemon-client.d.ts +8 -3
  123. package/dist/src/search/daemon-client.d.ts.map +1 -1
  124. package/dist/src/search/daemon-client.js +20 -0
  125. package/dist/src/search/daemon-client.js.map +1 -1
  126. package/dist/src/search/daemon.d.ts +3 -3
  127. package/dist/src/search/daemon.d.ts.map +1 -1
  128. package/dist/src/search/daemon.js +9 -3
  129. package/dist/src/search/daemon.js.map +1 -1
  130. package/dist/src/tui/install-ui/ComponentGrid.d.ts.map +1 -1
  131. package/dist/src/tui/install-ui/ComponentGrid.js +71 -38
  132. package/dist/src/tui/install-ui/ComponentGrid.js.map +1 -1
  133. package/dist/src/tui/install-ui/ComponentGrid.logic.d.ts +12 -3
  134. package/dist/src/tui/install-ui/ComponentGrid.logic.d.ts.map +1 -1
  135. package/dist/src/tui/install-ui/ComponentGrid.logic.js +21 -4
  136. package/dist/src/tui/install-ui/ComponentGrid.logic.js.map +1 -1
  137. package/dist/src/tui/install-ui/CyberItem.d.ts +3 -1
  138. package/dist/src/tui/install-ui/CyberItem.d.ts.map +1 -1
  139. package/dist/src/tui/install-ui/CyberItem.js +6 -5
  140. package/dist/src/tui/install-ui/CyberItem.js.map +1 -1
  141. package/dist/src/tui/install-ui/GroupedHub.d.ts +9 -0
  142. package/dist/src/tui/install-ui/GroupedHub.d.ts.map +1 -1
  143. package/dist/src/tui/install-ui/GroupedHub.js +54 -47
  144. package/dist/src/tui/install-ui/GroupedHub.js.map +1 -1
  145. package/dist/src/tui/install-ui/InstallConfirm.js +1 -1
  146. package/dist/src/tui/install-ui/InstallConfirm.js.map +1 -1
  147. package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
  148. package/dist/src/tui/install-ui/InstallFlow.js +54 -5
  149. package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
  150. package/dist/src/tui/install-ui/types.d.ts +1 -0
  151. package/dist/src/tui/install-ui/types.d.ts.map +1 -1
  152. package/dist/src/tui/install-ui/types.js.map +1 -1
  153. package/dist/src/tui/install-ui/useInstallFlowState.d.ts +8 -2
  154. package/dist/src/tui/install-ui/useInstallFlowState.d.ts.map +1 -1
  155. package/dist/src/tui/install-ui/useInstallFlowState.js +145 -15
  156. package/dist/src/tui/install-ui/useInstallFlowState.js.map +1 -1
  157. package/dist/src/utils/update-notices.js +12 -0
  158. package/dist/src/utils/update-notices.js.map +1 -1
  159. package/package.json +1 -1
  160. package/workflows/agy-instructions.md +127 -88
  161. package/workflows/analyze.md +2 -2
  162. package/workflows/auto-test.md +7 -1
  163. package/workflows/blueprint.md +22 -19
  164. package/workflows/brainstorm.md +11 -3
  165. package/workflows/business-test.md +4 -0
  166. package/workflows/codebase-rebuild.md +8 -1
  167. package/workflows/codebase-refresh.md +7 -1
  168. package/workflows/codex-instructions.md +1 -1
  169. package/workflows/debug.md +5 -2
  170. package/workflows/domain-add.md +6 -0
  171. package/workflows/drift-realign.md +396 -0
  172. package/workflows/execute.md +5 -4
  173. package/workflows/explore-usage.md +2 -2
  174. package/workflows/finish-work.md +6 -6
  175. package/workflows/fork.md +2 -2
  176. package/workflows/grill.md +6 -5
  177. package/workflows/harvest.md +2 -2
  178. package/workflows/impeccable.md +3 -2
  179. package/workflows/init.md +7 -7
  180. package/workflows/integration-test.md +1 -0
  181. package/workflows/issue-gaps-analyze.codex.md +2 -0
  182. package/workflows/issue-gaps-analyze.md +4 -4
  183. package/workflows/issue-plan.md +1 -1
  184. package/workflows/knowhow.md +7 -1
  185. package/workflows/knowledge-audit.md +1 -1
  186. package/workflows/maestro-super.md +2 -2
  187. package/workflows/maestro.md +3 -3
  188. package/workflows/map.md +2 -2
  189. package/workflows/milestone-audit.md +1 -1
  190. package/workflows/milestone-complete.md +1 -1
  191. package/workflows/odyssey-base.md +258 -0
  192. package/workflows/plan.md +7 -6
  193. package/workflows/quick.md +8 -6
  194. package/workflows/ralph-amend-goal.md +177 -0
  195. package/workflows/refactor.md +2 -0
  196. package/workflows/retrospective.md +7 -3
  197. package/workflows/review.md +6 -4
  198. package/workflows/roadmap-common.md +3 -3
  199. package/workflows/roadmap.md +8 -5
  200. package/workflows/spec-generate.md +23 -18
  201. package/workflows/specs-load.md +1 -1
  202. package/workflows/specs-setup.md +2 -0
  203. package/workflows/sync.md +4 -2
  204. package/workflows/test-gen.md +1 -1
  205. package/workflows/test.md +1 -1
  206. package/workflows/ui-codify-extract.md +1 -0
  207. package/workflows/ui-codify-knowhow.md +1 -1
  208. package/workflows/ui-codify-package.md +1 -1
  209. package/workflows/ui-codify.md +9 -7
  210. package/workflows/ui-design.md +9 -7
  211. package/workflows/ui-style.md +6 -4
  212. package/workflows/verify.md +4 -4
  213. package/workflows/wiki-connect.md +2 -0
  214. package/workflows/wiki-digest.md +5 -3
  215. package/workflows/wiki-manage.md +4 -0
  216. package/workflows/maestro.codex.md +0 -365
@@ -124,7 +124,7 @@ python3 "${SKILL_PATH}" "accessibility animation interaction" --domain ux
124
124
  #### 3b. Generate design direction options via ui-design-agent
125
125
 
126
126
  ```
127
- Agent(ui-design-agent): [DESIGN_DIRECTION_GENERATION]
127
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Agent(ui-design-agent): [DESIGN_DIRECTION_GENERATION]
128
128
 
129
129
  Generate ${styleCount} maximally contrasting design directions (min 6D distance: 0.7).
130
130
 
@@ -152,7 +152,7 @@ Update `analysis-options.json` with `user_selection` field.
152
152
  For each selected direction, spawn ui-design-agent:
153
153
 
154
154
  ```
155
- Agent(ui-design-agent): [DESIGN_SYSTEM_GENERATION #${variant_index}]
155
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Agent(ui-design-agent): [DESIGN_SYSTEM_GENERATION #${variant_index}]
156
156
 
157
157
  Generate production-ready design tokens from selected direction.
158
158
  Map 6D attributes to token values:
@@ -200,7 +200,7 @@ Requirements: ALL colors OKLCH, WCAG AA (4.5:1 text, 3:1 UI), complete combinati
200
200
  **Purpose:** Generate animation system complementing the selected styles.
201
201
 
202
202
  ```
203
- Agent(ui-design-agent): [ANIMATION_SYSTEM_GENERATION]
203
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Agent(ui-design-agent): [ANIMATION_SYSTEM_GENERATION]
204
204
 
205
205
  Input: selected variant's design-tokens.json (mood/weight context) + ui-ux-pro-max UX data.
206
206
  Output: ${PHASE_DIR}/design-ref/animation-tokens.json
@@ -227,7 +227,7 @@ Requirements: CSS custom properties, prefers-reduced-motion mandatory, var() ref
227
227
  #### 5a. Generate layout concept options
228
228
 
229
229
  ```
230
- Agent(ui-design-agent): [LAYOUT_CONCEPT_GENERATION]
230
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Agent(ui-design-agent): [LAYOUT_CONCEPT_GENERATION]
231
231
 
232
232
  Generate ${layoutCount} structurally distinct layout concepts per target.
233
233
  Concepts must differ in: grid structure, component arrangement, visual hierarchy, navigation pattern.
@@ -249,7 +249,7 @@ Update analysis-options.json with `user_selection.selected_variants`.
249
249
  For each selected concept × target:
250
250
 
251
251
  ```
252
- Agent(ui-design-agent): [LAYOUT_TEMPLATE_GENERATION -- ${target} variant ${variant_id}]
252
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Agent(ui-design-agent): [LAYOUT_TEMPLATE_GENERATION -- ${target} variant ${variant_id}]
253
253
 
254
254
  Structure ONLY, no visual style. Output: ${PHASE_DIR}/design-ref/layout-templates/layout-${target}-${variant_id}.json
255
255
 
@@ -267,6 +267,8 @@ Schema:
267
267
  Rules: semantic HTML5, ARIA roles, var() refs only (no hard-coded values), mobile-first responsive. NO colors/fonts/shadows.
268
268
  ```
269
269
 
270
+ GATE Step 5→6: design-tokens.json + animation-tokens.json + layout-templates exist BEFORE assembly; BLOCKED if any missing
271
+
270
272
  ---
271
273
 
272
274
  ### Step 6: Assemble HTML Prototypes (Layer 4 — Assembly)
@@ -276,7 +278,7 @@ Rules: semantic HTML5, ARIA roles, var() refs only (no hard-coded values), mobil
276
278
  For each `style × layout × target` combination, spawn ui-design-agent:
277
279
 
278
280
  ```
279
- Agent(ui-design-agent): [PROTOTYPE_ASSEMBLY -- ${target}-style-${s}-layout-${l}]
281
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Agent(ui-design-agent): [PROTOTYPE_ASSEMBLY -- ${target}-style-${s}-layout-${l}]
280
282
 
281
283
  Pure assembly: combine pre-extracted structure + tokens. NO design decisions.
282
284
 
@@ -375,7 +377,7 @@ Spacing & Layout, Effects & Interactions, Component Styles, Animation System, An
375
377
  | Python not found | Abort with install instructions per OS |
376
378
  | ui-ux-pro-max not found | Abort, suggest skill installation |
377
379
  | Design system returns empty | Retry with broader keywords, then abort |
378
- | Prototype agent fails | Log error, continue with other variants |
380
+ | Prototype agent fails | Log error, continue with other variants; flag variants as [LOW CONFIDENCE] (prototype agent failed) |
379
381
  | User cancels selection | Save all variants as-is, exit without MASTER.md |
380
382
  | --refine without existing design-ref | Error E004 |
381
383
 
@@ -94,6 +94,8 @@ Save variants to `${PHASE_DIR}/design-ref/prototypes/variant-{N}-system.md`.
94
94
  Display each variant summary (pattern, colors, typography, effects, anti-patterns).
95
95
  User selects: [1-N | "redo" | "all"]. Auto mode selects variant 1.
96
96
 
97
+ GATE Step 3→4: selected variant confirmed BEFORE solidification; BLOCKED if no variant selected
98
+
97
99
  ---
98
100
 
99
101
  ### Step 4: Solidify Selected Design
@@ -109,7 +111,7 @@ python3 "${SKILL_PATH}" "${selected_variant_keywords}" --design-system --persist
109
111
 
110
112
  #### 4b. Generate design-tokens.json
111
113
 
112
- Spawn agent to extract structured tokens from MASTER.md into `${PHASE_DIR}/design-ref/design-tokens.json`.
114
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Spawn agent to extract structured tokens from MASTER.md into `${PHASE_DIR}/design-ref/design-tokens.json`.
113
115
 
114
116
  **Token schema keys:** colors (brand/surface/semantic/text/border in OKLCH), typography (family/size/weight/line_height/combinations), spacing, border_radius, shadows, component_styles (button/card/input), breakpoints.
115
117
 
@@ -117,7 +119,7 @@ Spawn agent to extract structured tokens from MASTER.md into `${PHASE_DIR}/desig
117
119
 
118
120
  #### 4c. Generate animation-tokens.json
119
121
 
120
- Spawn agent to generate `${PHASE_DIR}/design-ref/animation-tokens.json` from design-tokens + MASTER.md.
122
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Spawn agent to generate `${PHASE_DIR}/design-ref/animation-tokens.json` from design-tokens + MASTER.md.
121
123
 
122
124
  **Token schema keys:** duration (instant-slower), easing (ease-out/ease-in-out/spring), transitions, keyframes, interactions (hover states), reduced_motion (prefers-reduced-motion strategy).
123
125
 
@@ -140,7 +142,7 @@ Copy `design-system/MASTER.md` and `design-system/pages/*.md` (if generated) to
140
142
 
141
143
  #### 4f. Optional: Generate HTML prototype
142
144
 
143
- For each target, spawn agent to create `${PHASE_DIR}/design-ref/prototypes/${target}.html` from design-tokens + animation-tokens + MASTER.md.
145
+ For each target, MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: spawn agent to create `${PHASE_DIR}/design-ref/prototypes/${target}.html` from design-tokens + animation-tokens + MASTER.md.
144
146
 
145
147
  **Rules:** standalone HTML with embedded CSS, realistic content (not lorem ipsum), SVG icons (Heroicons/Lucide CDN), cursor-pointer on clickables, responsive (375/768/1024px), WCAG AA, prefers-reduced-motion.
146
148
 
@@ -185,7 +187,7 @@ Same as ui-design.md — plan.md Step 4b detects `design-ref/MASTER.md` and incl
185
187
  | Error | Action |
186
188
  |-------|--------|
187
189
  | ui-ux-pro-max returns empty | Retry with broader keywords, then abort |
188
- | Token extraction agent fails | Retry once, warn if still fails |
190
+ | Token extraction agent fails | Retry once, warn if still fails; if still fails, mark design-tokens.json as [LOW CONFIDENCE] (token extraction agent failed) |
189
191
  | User cancels selection | Save all variants, exit without solidification |
190
192
 
191
193
  ---
@@ -405,7 +405,7 @@ For each success criterion / must-have truth:
405
405
 
406
406
  ### Step 4: Spawn Auditor Agent (if gaps found)
407
407
 
408
- Spawn workflow-nyquist-auditor agent with gap list, test infrastructure, and phase context.
408
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Spawn workflow-nyquist-auditor agent with gap list, test infrastructure, and phase context.
409
409
  Agent generates missing tests and returns:
410
410
  - GAPS FILLED -> record new tests
411
411
  - PARTIAL -> record resolved, escalate remainder
@@ -540,10 +540,10 @@ Next steps:
540
540
  |-------|--------|
541
541
  | Phase directory not found | Abort: "Phase {phase} not found." |
542
542
  | No execution results | Abort: "No completed tasks found. Run /workflow:execute first." |
543
- | No summaries found | Warn, proceed with task file analysis only |
543
+ | No summaries found | Warn, proceed with task file analysis only; flag verification.json as [LOW CONFIDENCE] (partial, summaries missing) |
544
544
  | Test framework not detected | Skip coverage calculation, warn user |
545
- | Coverage command fails | Log error, proceed with requirement mapping only |
546
- | Verifier agent fails | Retry once, then write partial verification.json |
545
+ | Coverage command fails | Log error, proceed with requirement mapping only; flag validation.json coverage as [LOW CONFIDENCE] (partial, coverage command failed) |
546
+ | Verifier agent fails | Retry once, then write partial verification.json; flag verification.json as [LOW CONFIDENCE] (partial, verifier agent failed) |
547
547
 
548
548
  ---
549
549
 
@@ -39,6 +39,8 @@ Knowledge graph link discovery and health improvement. Analyzes the unified wiki
39
39
 
40
40
  Gather baseline in parallel via `maestro wiki list --json`, `health`, `orphans`, `hubs --top 10`.
41
41
 
42
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: graph operations (`orphans`, `hubs --top 10`) — use the `maestro wiki` CLI to compute in-degree and orphan sets.
43
+
42
44
  Working state: entry count by type, baseline health score, orphan IDs, hub in-degree counts.
43
45
 
44
46
  Apply `--scope` filter if provided — restrict all subsequent analysis to matching type.
@@ -74,8 +74,8 @@ Synthesize what these entries collectively teach. Focus on the knowledge pattern
74
74
 
75
75
  ### Key Entries
76
76
  Top 3-5 most important entries by:
77
- - Hub score (in-degree from `maestro wiki hubs`)
78
- - Backlink count (from `maestro wiki backlinks <id>`)
77
+ - MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Hub score (in-degree from `maestro wiki hubs`)
78
+ - MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: Backlink count (from `maestro wiki backlinks <id>`)
79
79
  - Recency (recently updated entries weigh more)
80
80
 
81
81
  ### Gap Detection
@@ -93,7 +93,7 @@ Per-theme health adapted from wiki health formula (entries, connectivity, comple
93
93
 
94
94
  Search via `maestro wiki search` or parse `.workflow/specs/learnings.md` for keyword matches against each theme. Flag **unlinked insights** — learning entries matching a theme but not referenced by any wiki entry in that theme.
95
95
 
96
- If `learnings.md` not found, skip with W002 warning.
96
+ If `learnings.md` not found, skip with W002 warning; mark digest cross-reference as [LOW CONFIDENCE] (learnings.md missing).
97
97
 
98
98
  ---
99
99
 
@@ -152,6 +152,8 @@ Produce `.workflow/knowhow/KNW-digest-{slug}-{YYYY-MM-DD}.md`:
152
152
 
153
153
  ---
154
154
 
155
+ GATE Stage 6→7: gaps identified BEFORE issue routing; BLOCKED if no gaps identified in Stage 5
156
+
155
157
  ## Stage 7: Gap → Issue Routing (if --create-issues)
156
158
 
157
159
  For each knowledge gap from Stage 5: dedup against `.workflow/issues/issues.jsonl` (same theme + type). If new, append with `type: "knowledge-gap"`, `status: "open"`, `severity: "low"`, `source: "wiki-digest"`, `tags: ["knowledge-gap", "{theme-slug}"]`. Report created count.
@@ -40,6 +40,8 @@ Complements `wiki-connect.md` (link discovery) and `wiki-digest.md` (synthesis)
40
40
 
41
41
  Run in parallel: `maestro wiki health`, `list --json`, `orphans`, `hubs --top 5`.
42
42
 
43
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: graph operations (`orphans`, `hubs --top 5`) — use the `maestro wiki` CLI to compute orphan sets and hub in-degree.
44
+
43
45
  ### Step 2: Render Dashboard
44
46
 
45
47
  Display: health score, entry counts by type, broken links, orphan count, top hubs. Include health status message and quick-action commands (`/wiki-connect --fix`, `/wiki-digest`, `/manage-wiki cleanup --fix`, `maestro wiki graph`).
@@ -72,6 +74,8 @@ If not `--json`: offer to view an entry by number selection.
72
74
 
73
75
  Gather baseline via `maestro wiki health`, `orphans --json`, `graph`.
74
76
 
77
+ MANDATORY, NOT SUBSTITUTABLE by manual Read/Grep: graph operations (`orphans --json`, `graph`) — use the `maestro wiki` CLI to compute orphans and graph topology.
78
+
75
79
  ### Step 2: Categorize Issues
76
80
 
77
81
  | Issue Type | Detection | Auto-fix Action |
@@ -1,365 +0,0 @@
1
- # Workflow: Maestro (Codex Edition)
2
-
3
- ---
4
-
5
- ## Step 1: Parse Arguments
6
-
7
- Extract from `$ARGUMENTS`:
8
- - Flags: `-y`/`--yes` (AUTO_YES), `-c`/`--continue` (RESUME), `--dry-run`, `--chain <name>`
9
- - `intent` = remaining text after flag removal
10
-
11
- **Resume mode**: If RESUME, load latest `.workflow/.maestro/maestro-*/status.json`, set `current_step` to first pending step, jump to **Step 6**.
12
-
13
- ---
14
-
15
- ## Step 2: Read Project State
16
-
17
- Read `.workflow/state.json` if present. Derive `projectState`:
18
- - `current_phase`: first in-progress execute artifact, else first phase without completed execute
19
- - Fields: `phase_slug`, `phase_status` (pending|exploring|planning|executing|verifying|testing|completed|blocked), `phase_artifacts`, `execution` (tasks_completed/total), `verification_status`, `review_verdict`, `uat_status`, `phases_total/completed`, `has_blockers`, `accumulated_context`
20
-
21
- If not initialized and no intent → Error E001.
22
-
23
- ---
24
-
25
- ## Step 3: Classify Intent & Select Chain
26
-
27
- ### 3a: Exact-match keywords (fast path)
28
-
29
- If `forceChain` is set → validate against chainMap and jump to **3c**.
30
-
31
- Exact-match keywords: `continue`/`next`/`go`/`继续`/`下一步` → `state_continue`; `status`/`状态`/`dashboard` → `status`. If matched, skip to **3c**.
32
-
33
- ### 3a-2: Structured intent extraction (LLM-native)
34
-
35
- Instead of regex, extract a structured intent tuple using LLM semantic understanding:
36
-
37
- ```json
38
- {
39
- "action": "<create|fix|analyze|plan|execute|review|test|debug|refactor|explore|manage|transition|continue|sync|learn|retrospect>",
40
- "object": "<feature|bug|issue|code|test|spec|phase|milestone|doc|performance|security|ui|memory|codebase|config>",
41
- "scope": "<module/file/area or null>",
42
- "issue_id": "<ISS-XXXXXXXX-NNN if mentioned, else null>",
43
- "phase_ref": "<integer if mentioned, else null>",
44
- "urgency": "<low|normal|high>"
45
- }
46
- ```
47
-
48
- **Key disambiguation**: "问题"/"issue"/"problem" as something broken → `object: "bug"` (routes to debug). As a tracked item (with ISS-ID or management context) → `object: "issue"` (routes to issue management). When ambiguous, prefer `"bug"`.
49
-
50
- ### 3a-3: Route via action × object matrix
51
-
52
- Route via `action × object` matrix. If `issue_id` present → issue pipeline directly.
53
-
54
- | action | object-specific overrides | default |
55
- |--------|--------------------------|---------|
56
- | fix | bug/code/perf/security→debug, issue→issue | debug |
57
- | create | feature→quick, issue→issue, test→test_gen, spec→spec_generate, ui→ui_design, config→init | quick |
58
- | analyze | bug/code→analyze, issue→issue_analyze, codebase→spec_map | analyze |
59
- | explore | issue→issue_discover, feature/ui→brainstorm/ui_design | brainstorm |
60
- | plan | issue→issue_plan, spec→spec_generate | plan |
61
- | execute | issue→issue_execute | execute |
62
- | manage | issue→issue, milestone→milestone_audit, phase→phase_transition, memory/doc/codebase→memory/sync/codebase_refresh | status |
63
- | transition | phase→phase_transition, milestone→milestone_complete | phase_transition |
64
- | review, test, debug, refactor, continue, sync, learn, retrospect, release, amend, compose | — | self-named |
65
-
66
- **Clarity scoring**: 3 = action+object+scope, 2 = action+object, 1 = action only, 0 = empty.
67
- If `clarity < 2` and not `AUTO_YES`: request user input (max 2 rounds).
68
-
69
- ### 3b: State-based routing (when `taskType === 'state_continue'`)
70
-
71
- Returns `{ chain, argsOverride? }`. Steps resolved from `chainMap[chain]`.
72
-
73
- | Condition | Chain |
74
- |-----------|-------|
75
- | Not initialized | `init` |
76
- | No phases, no roadmap, has accumulated_context | `next-milestone` (with deferred/decisions context) |
77
- | No phases | `brainstorm-driven` |
78
- | pending + has context | `plan` |
79
- | pending, no context | `analyze` |
80
- | exploring/planning + has plan | `execute` |
81
- | exploring/planning, no plan | `plan` |
82
- | executing, all tasks done | `review` |
83
- | executing, tasks remain | `execute` |
84
- | exec completed + no review | `review` |
85
- | exec completed + review BLOCK | `review-fix` |
86
- | exec completed + UAT pending | `test` |
87
- | exec completed + UAT passed | `milestone-close` |
88
- | exec completed + UAT failed | `debug` |
89
- | testing, UAT passed | `milestone-close` |
90
- | testing, UAT not passed | `debug` |
91
- | completed | `milestone-close` |
92
- | blocked | `debug` |
93
- | fallback | `status` |
94
-
95
- ### 3c: Intent-based chain map
96
-
97
- ```javascript
98
- const chainMap = {
99
- // ── Single-step ──────────────────────────────────────────────────────────
100
- 'status': [{ cmd: 'manage-status' }],
101
- 'init': [{ cmd: 'maestro-init' }],
102
- 'analyze': [{ cmd: 'maestro-analyze', args: '{phase}' }],
103
- 'ui_design': [{ cmd: 'maestro-impeccable', args: '"{phase}" --chain build' }],
104
- 'plan': [{ cmd: 'maestro-plan', args: '{phase}' }],
105
- 'execute': [{ cmd: 'maestro-execute', args: '{phase}' }],
106
- 'test_gen': [{ cmd: 'quality-auto-test', args: '{phase}' }],
107
- 'auto_test': [{ cmd: 'quality-auto-test', args: '{phase}' }],
108
- 'test': [{ cmd: 'quality-test', args: '{phase}' }],
109
- 'debug': [{ cmd: 'quality-debug', args: '"{description}"' }],
110
- 'integration_test': [{ cmd: 'quality-auto-test', args: '{phase}' }],
111
- 'refactor': [{ cmd: 'quality-refactor', args: '"{description}"' }],
112
- 'review': [{ cmd: 'quality-review', args: '{phase}' }],
113
- 'retrospective': [{ cmd: 'quality-retrospective', args: '{phase}' }],
114
- 'learn': [{ cmd: 'manage-learn', args: '"{description}"' }],
115
- 'sync': [{ cmd: 'quality-sync' }],
116
- 'phase_transition': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
117
- 'milestone_audit': [{ cmd: 'maestro-milestone-audit' }],
118
- 'milestone_complete': [{ cmd: 'maestro-milestone-complete' }],
119
- 'codebase_rebuild': [{ cmd: 'manage-codebase-rebuild' }],
120
- 'codebase_refresh': [{ cmd: 'manage-codebase-refresh' }],
121
- 'spec_setup': [{ cmd: 'spec-setup' }],
122
- 'spec_add': [{ cmd: 'spec-add', args: '"{description}"' }],
123
- 'spec_load': [{ cmd: 'spec-load' }],
124
- 'spec_map': [{ cmd: 'manage-codebase-rebuild' }],
125
- 'knowhow_capture': [{ cmd: 'manage-knowhow-capture', args: '"{description}"' }],
126
- 'knowhow': [{ cmd: 'manage-knowhow', args: '"{description}"' }],
127
- 'issue': [{ cmd: 'manage-issue', args: '"{description}"' }],
128
- 'issue_discover': [{ cmd: 'manage-issue-discover', args: '"{description}"' }],
129
- 'issue_analyze': [{ cmd: 'maestro-analyze', args: '--gaps "{description}"' }],
130
- 'issue_plan': [{ cmd: 'maestro-plan', args: '--gaps' }],
131
- 'issue_execute': [{ cmd: 'maestro-execute', args: '' }],
132
- 'quick': [{ cmd: 'maestro-quick', args: '"{description}"' }],
133
- // ── Multi-step chains ────────────────────────────────────────────────────
134
- 'spec-driven': [
135
- { cmd: 'maestro-init' },
136
- { cmd: 'maestro-roadmap', args: '--mode full "{description}"' },
137
- { cmd: 'maestro-plan', args: '{phase}' },
138
- { cmd: 'maestro-execute', args: '{phase}' }
139
- ],
140
- 'brainstorm-driven': [
141
- { cmd: 'maestro-brainstorm', args: '"{description}"' },
142
- { cmd: 'maestro-plan', args: '{phase}' },
143
- { cmd: 'maestro-execute', args: '{phase}' }
144
- ],
145
- 'impeccable-build': [
146
- { cmd: 'maestro-impeccable', args: '"{phase}" --chain build' },
147
- { cmd: 'maestro-plan', args: '{phase}' },
148
- { cmd: 'maestro-execute', args: '{phase}' }
149
- ],
150
- 'full-lifecycle': [
151
- { cmd: 'maestro-plan', args: '{phase}' },
152
- { cmd: 'maestro-execute', args: '{phase}' },
153
- { cmd: 'quality-review', args: '{phase}' },
154
- { cmd: 'quality-test', args: '{phase}' },
155
- { cmd: 'maestro-milestone-audit' },
156
- { cmd: 'maestro-milestone-complete' }
157
- ],
158
- 'quality-loop': [
159
- { cmd: 'quality-review', args: '{phase}' },
160
- { cmd: 'quality-test', args: '{phase}' },
161
- { cmd: 'quality-debug', args: '--from-uat {phase}' },
162
- { cmd: 'maestro-plan', args: '{phase} --gaps' },
163
- { cmd: 'maestro-execute', args: '{phase}' }
164
- ],
165
- 'milestone-close': [
166
- { cmd: 'maestro-milestone-audit' },
167
- { cmd: 'maestro-milestone-complete' }
168
- ],
169
- 'roadmap-driven': [
170
- { cmd: 'maestro-init' },
171
- { cmd: 'maestro-roadmap', args: '"{description}"' },
172
- { cmd: 'maestro-plan', args: '{phase}' },
173
- { cmd: 'maestro-execute', args: '{phase}' }
174
- ],
175
- 'next-milestone': [
176
- { cmd: 'maestro-roadmap', args: '"{description}"' },
177
- { cmd: 'maestro-plan', args: '{phase}' },
178
- { cmd: 'maestro-execute', args: '{phase}' }
179
- ],
180
- 'analyze-plan-execute': [
181
- { cmd: 'maestro-analyze', args: '"{description}" -q' },
182
- { cmd: 'maestro-plan', args: '--dir {scratch_dir}' },
183
- { cmd: 'maestro-execute', args: '--dir {scratch_dir}' }
184
- ],
185
-
186
- // ── SKILL.md simplified aliases (--chain <name> shortcuts) ───────────────
187
- 'feature': [
188
- { cmd: 'maestro-plan', args: '{phase}' },
189
- { cmd: 'maestro-execute', args: '{phase}' }
190
- ],
191
- 'quality-fix': [
192
- { cmd: 'maestro-analyze', args: '--gaps "{description}"' },
193
- { cmd: 'maestro-plan', args: '--gaps' },
194
- { cmd: 'maestro-execute', args: '' }
195
- ],
196
- 'deploy': [
197
- { cmd: 'maestro-execute', args: '{phase}' },
198
- { cmd: 'maestro-milestone-release' }
199
- ],
200
-
201
- // ── Issue lifecycle chains (with quality gates) ────────────────────────────
202
- 'issue-full': [
203
- { cmd: 'maestro-analyze', args: '--gaps {issue_id}' },
204
- { cmd: 'maestro-plan', args: '--gaps' },
205
- { cmd: 'maestro-execute', args: '' },
206
- { cmd: 'quality-review', args: '{phase}' },
207
- { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }
208
- ],
209
- 'issue-quick': [
210
- { cmd: 'maestro-plan', args: '--gaps' },
211
- { cmd: 'maestro-execute', args: '' },
212
- { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }
213
- ],
214
-
215
- 'review-fix': [
216
- { cmd: 'maestro-plan', args: '{phase} --gaps' },
217
- { cmd: 'maestro-execute', args: '{phase}' },
218
- { cmd: 'quality-review', args: '{phase}' }
219
- ],
220
- 'quality-loop-partial': [
221
- { cmd: 'maestro-plan', args: '{phase} --gaps' },
222
- { cmd: 'maestro-execute', args: '{phase}' }
223
- ],
224
- 'milestone-release': [
225
- { cmd: 'maestro-milestone-audit' },
226
- { cmd: 'maestro-milestone-release' }
227
- ],
228
-
229
- 'learn': [{ cmd: 'maestro-learn', args: '"{description}"' }],
230
- 'harvest': [{ cmd: 'manage-harvest', args: '"{description}"' }],
231
- 'wiki': [{ cmd: 'manage-wiki' }],
232
- 'wiki_connect': [{ cmd: 'wiki-connect' }],
233
- 'wiki_digest': [{ cmd: 'wiki-digest' }],
234
- 'business_test': [{ cmd: 'quality-auto-test', args: '{phase}' }],
235
- 'spec_remove': [{ cmd: 'spec-remove', args: '"{description}"' }],
236
- 'amend': [{ cmd: 'maestro-amend', args: '"{description}"' }],
237
- 'release': [{ cmd: 'maestro-milestone-release' }],
238
- 'compose': [{ cmd: 'maestro-composer', args: '"{description}"' }],
239
- 'play': [{ cmd: 'maestro-player', args: '"{description}"' }],
240
- 'update': [{ cmd: 'maestro-update' }],
241
- 'overlay': [{ cmd: 'maestro-overlay', args: '"{description}"' }],
242
- 'link_coordinate': [{ cmd: 'maestro-link-coordinate', args: '"{description}"' }],
243
- };
244
-
245
- // Aliases: task type → named chain
246
- const taskToChain = {
247
- 'spec_generate': 'spec-driven',
248
- 'brainstorm': 'brainstorm-driven',
249
- 'issue_execute': 'issue-full', // issue execute always gets review gate
250
- };
251
- ```
252
-
253
- **Resolution order:**
254
- 1. `forceChain` → `chainMap[forceChain]` (E002 if not found)
255
- 2. `state_continue` → `detectNextAction(projectState)` → returns `{ chain, argsOverride? }`. Steps from `chainMap[chain]`. If `argsOverride` present, apply before template substitution.
256
- 3. `taskToChain[taskType]` → named chain
257
- 4. `chainMap[taskType]` → direct lookup
258
-
259
- ### 3d: Resolve phase, description, and issue ID
260
-
261
- **Phase**: from structured extraction → fallback regex (`phase N` or bare number) → `projectState.current_phase`.
262
- **Issue ID**: from structured extraction → regex match `ISS-*-NNN`.
263
-
264
- Build context: `{ current_phase, user_intent, issue_id, spec_session_id: null, scratch_dir: null }`.
265
-
266
- ---
267
-
268
- ## Step 4: Confirm
269
-
270
- **If `DRY_RUN`**: Display chain and exit.
271
-
272
- ```
273
- MAESTRO-COORDINATE: {chain_name} (dry run)
274
- 1. ${step.skill} {step.args}
275
- 2. ${step.skill} {step.args}
276
-
277
- ```
278
-
279
- **If not `AUTO_YES`**: Ask user via `functions.request_user_input`:
280
- - Execute all steps
281
- - Execute from step N
282
- - Cancel
283
-
284
- ---
285
-
286
- ## Step 5: Setup Session
287
-
288
- Create session directory `.workflow/.maestro/maestro-{timestamp}/`.
289
-
290
- **Barrier skills** (solo wave, coordinator analyzes artifacts after): `maestro-analyze`, `maestro-plan`, `maestro-brainstorm`, `maestro-roadmap`, `maestro-execute`.
291
-
292
- **Auto-flag injection** (when AUTO_YES): `maestro-analyze/-brainstorm/-roadmap/-ui-design` → `-y`, `maestro-plan` → `--auto`, `quality-test` → `--auto-fix`, `quality-retrospective` → `--auto-yes`.
293
-
294
- Initialize `state.json` with: session_id, intent, chain_name, auto_yes, context (phase, dirs, issue_id, gaps), waves[], and steps[] (each with index, skill, args, status=pending).
295
-
296
- ---
297
-
298
- ## Step 6: Wave Execution Loop
299
-
300
- ### 6a: Helper functions
301
-
302
- **buildSkillCall**: Replace template placeholders (`{phase}`, `{description}`, `{issue_id}`, `{plan_dir}`, `{analysis_dir}`, `{brainstorm_dir}`, `{spec_session_id}`, `{scratch_dir}`) from context. Inject auto-flag if AUTO_YES. Return `$<cmd> <args>`.
303
-
304
- **buildNextWave**: Take first pending step. If barrier → solo wave. Otherwise group consecutive non-barrier steps into one wave.
305
-
306
- ### 6b: Wave instruction template
307
-
308
- Sub-agent instruction: execute `{skill_call}`, complete `{topic}`, do not modify state files, call `report_agent_job_result` with result JSON.
309
-
310
- Result schema: `{ status: "completed"|"failed", skill_call, summary, artifacts, error }` (all required).
311
-
312
- ### 6c: Main loop
313
-
314
- While pending steps remain:
315
- 1. Build next wave via `buildNextWave` (barrier → solo, non-barriers → grouped)
316
- 2. Write wave CSV (`id, skill_call, topic`) to session dir
317
- 3. Execute via `spawn_agents_on_csv` (max_workers = wave size, timeout 1800s)
318
- 4. Read results CSV, update each step's status/findings/artifacts
319
- 5. If barrier wave → run `analyzeBarrierArtifacts` to update context
320
- 6. Record wave in state, persist `state.json`
321
- 7. On any failure → abort (mark remaining steps skipped, break)
322
-
323
- ---
324
-
325
- ## Step 7: Barrier Artifact Analysis
326
-
327
- After a barrier skill completes, the coordinator reads its artifacts and updates `context` for subsequent waves:
328
-
329
- Context updates per barrier skill:
330
-
331
- | Barrier | Extracts |
332
- |---------|----------|
333
- | `maestro-analyze` | `analysis_dir`, gaps (from context.md markers), phase (if detected) |
334
- | `maestro-plan` | `plan_dir`, task/wave count (from plan.json) |
335
- | `maestro-brainstorm` | `brainstorm_dir` |
336
- | `maestro-roadmap` | `spec_session_id` (SPEC-* pattern) |
337
- | `maestro-execute` | `exec_completed`/`exec_failed` counts (from results.csv) |
338
-
339
- **Key principle**: The coordinator owns all context assembly. Sub-agents receive a fully-resolved `skill_call`.
340
-
341
- ---
342
-
343
- ## Step 8: Completion Report
344
-
345
- Finalize `state.json` (status: completed or current, completed_at timestamp).
346
-
347
- Generate `context.md` report: session ID, chain name, waves executed, steps completed/failed, per-wave result table with context updates.
348
-
349
- Display completion banner: session, chain, wave results (per-step status + summary), artifacts path, resume command.
350
-
351
- ---
352
-
353
- ## Core Rules
354
-
355
- 1. **Semantic routing**: LLM-native structured extraction (`action × object`) replaces regex; disambiguates "问题" by context
356
- 2. **Wave-by-wave**: Never start wave N+1 before wave N results are read and barrier artifacts analyzed
357
- 3. **Barrier = solo wave**: A barrier skill always executes alone; coordinator analyzes its artifacts before proceeding
358
- 4. **Non-barriers can parallel**: Consecutive non-barrier skills share a wave with `max_workers = N`
359
- 5. **Coordinator owns context**: Sub-agents receive fully-resolved `skill_call` — no context discovery needed
360
- 6. **Simple instruction**: Sub-agent instruction is minimal — "execute {skill_call}, report result"
361
- 7. **Quality gates**: Issue chains auto-include review; `issue-full` is default for issue execution
362
- 8. **report_agent_job_result**: Every agent MUST call this with the output schema
363
- 9. **State.json tracks waves**: Each wave recorded with step IDs and results; `--continue` resumes from next pending
364
- 10. **Dry-run is read-only**: Display chain with [BARRIER] markers, no execution
365
- 11. **Abort on failure**: Failed step → skip remaining → report