@bonesofspring/ai-rules 0.2.22 → 0.2.23

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 (213) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +6 -2
  3. package/bin/cli.js +32 -8
  4. package/bin/mavis-install.js +441 -0
  5. package/package.json +9 -2
  6. package/presets/_shared/core/meta/preset-pr-checklist.md +1 -0
  7. package/presets/_shared/core/meta/preset-twin-sync.md +16 -0
  8. package/presets/claude/android-kotlin/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  9. package/presets/claude/android-kotlin/rules/tooling-and-review/preset-twin-sync.md +16 -0
  10. package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  11. package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +16 -0
  12. package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  13. package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +16 -0
  14. package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  15. package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +16 -0
  16. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  17. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +16 -0
  18. package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  19. package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +16 -0
  20. package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  21. package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +16 -0
  22. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  23. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +16 -0
  24. package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  25. package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +16 -0
  26. package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  27. package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +16 -0
  28. package/presets/cursor/android-kotlin/rules/preset-pr-checklist.mdc +1 -0
  29. package/presets/cursor/android-kotlin/rules/preset-twin-sync.mdc +16 -0
  30. package/presets/cursor/go/rules/preset-pr-checklist.mdc +1 -0
  31. package/presets/cursor/go/rules/preset-twin-sync.mdc +16 -0
  32. package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +1 -0
  33. package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +16 -0
  34. package/presets/cursor/java/rules/preset-pr-checklist.mdc +1 -0
  35. package/presets/cursor/java/rules/preset-twin-sync.mdc +16 -0
  36. package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +1 -0
  37. package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +16 -0
  38. package/presets/cursor/next/rules/preset-pr-checklist.mdc +1 -0
  39. package/presets/cursor/next/rules/preset-twin-sync.mdc +16 -0
  40. package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +1 -0
  41. package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +16 -0
  42. package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +1 -0
  43. package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +16 -0
  44. package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +1 -0
  45. package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +16 -0
  46. package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +1 -0
  47. package/presets/cursor/svelte/rules/preset-twin-sync.mdc +16 -0
  48. package/presets/mavis/README.md +60 -0
  49. package/presets/mavis/next/MAVIS.md +67 -0
  50. package/presets/mavis/next/MCP.md +36 -0
  51. package/presets/mavis/next/README.md +15 -0
  52. package/presets/mavis/next/REPO_AGENTS.md +94 -0
  53. package/presets/mavis/next/adapter-map.json +959 -0
  54. package/presets/mavis/next/agents/README.md +206 -0
  55. package/presets/mavis/next/agents/accessibility-reviewer.md +61 -0
  56. package/presets/mavis/next/agents/api-contract-reviewer.md +57 -0
  57. package/presets/mavis/next/agents/build-verifier.md +110 -0
  58. package/presets/mavis/next/agents/ci-investigator.md +63 -0
  59. package/presets/mavis/next/agents/code-reviewer.md +61 -0
  60. package/presets/mavis/next/agents/codebase-analyzer.md +21 -0
  61. package/presets/mavis/next/agents/debugger.md +80 -0
  62. package/presets/mavis/next/agents/feature-developer.md +101 -0
  63. package/presets/mavis/next/agents/migration-specialist.md +67 -0
  64. package/presets/mavis/next/agents/mockup-reviewer.md +53 -0
  65. package/presets/mavis/next/agents/openspec-author.md +157 -0
  66. package/presets/mavis/next/agents/performance-auditor.md +68 -0
  67. package/presets/mavis/next/agents/playwright-test-generator.md +28 -0
  68. package/presets/mavis/next/agents/playwright-test-healer.md +28 -0
  69. package/presets/mavis/next/agents/playwright-test-planner.md +21 -0
  70. package/presets/mavis/next/agents/qa-tester.md +52 -0
  71. package/presets/mavis/next/agents/security-reviewer.md +54 -0
  72. package/presets/mavis/next/agents/solution-architect.md +68 -0
  73. package/presets/mavis/next/agents/task-analyst.md +166 -0
  74. package/presets/mavis/next/agents/task-router.md +178 -0
  75. package/presets/mavis/next/agents/tech-writer.md +57 -0
  76. package/presets/mavis/next/agents/unit-test-generator.md +31 -0
  77. package/presets/mavis/next/agents/unit-test-healer.md +32 -0
  78. package/presets/mavis/next/agents/unit-test-planner.md +54 -0
  79. package/presets/mavis/next/commands/README.md +49 -0
  80. package/presets/mavis/next/commands/spec-start.md +24 -0
  81. package/presets/mavis/next/commands/task-continue.md +50 -0
  82. package/presets/mavis/next/commands/task.md +50 -0
  83. package/presets/mavis/next/commands/technical-retro.md +80 -0
  84. package/presets/mavis/next/hooks/README.md +22 -0
  85. package/presets/mavis/next/hooks/chain-team-phases.sh +845 -0
  86. package/presets/mavis/next/mcp.json +19 -0
  87. package/presets/mavis/next/rules/README.md +16 -0
  88. package/presets/mavis/next/rules/agent-team-intake.md +11 -0
  89. package/presets/mavis/next/rules/agent-team-orchestrator.md +210 -0
  90. package/presets/mavis/next/rules/ai-local-overlay.md +37 -0
  91. package/presets/mavis/next/rules/anti-sycophancy-discipline.md +23 -0
  92. package/presets/mavis/next/rules/api-services.md +72 -0
  93. package/presets/mavis/next/rules/architecture-boundaries-ui.md +9 -0
  94. package/presets/mavis/next/rules/architecture-boundaries.md +86 -0
  95. package/presets/mavis/next/rules/arrow-functions.md +25 -0
  96. package/presets/mavis/next/rules/code-quality-and-refactoring.md +40 -0
  97. package/presets/mavis/next/rules/code-review-mr.md +40 -0
  98. package/presets/mavis/next/rules/css-property-order-stylelint.md +5 -0
  99. package/presets/mavis/next/rules/design-guidance.md +99 -0
  100. package/presets/mavis/next/rules/feature-delivery-workflow.md +49 -0
  101. package/presets/mavis/next/rules/http-client.md +55 -0
  102. package/presets/mavis/next/rules/layer-barrel-exports.md +68 -0
  103. package/presets/mavis/next/rules/mcp-usage.md +86 -0
  104. package/presets/mavis/next/rules/mockup-review.md +107 -0
  105. package/presets/mavis/next/rules/navigation-router-stack.md +56 -0
  106. package/presets/mavis/next/rules/navigation-router-ui.md +10 -0
  107. package/presets/mavis/next/rules/next-app-core.md +29 -0
  108. package/presets/mavis/next/rules/next-app-router.md +44 -0
  109. package/presets/mavis/next/rules/no-props-spread.md +56 -0
  110. package/presets/mavis/next/rules/no-type-assertion-as-import-export.md +51 -0
  111. package/presets/mavis/next/rules/package-manager.md +11 -0
  112. package/presets/mavis/next/rules/playwright-agents.md +67 -0
  113. package/presets/mavis/next/rules/post-change-lint.md +35 -0
  114. package/presets/mavis/next/rules/preset-layering.md +27 -0
  115. package/presets/mavis/next/rules/preset-no-cross-stack-leakage.md +90 -0
  116. package/presets/mavis/next/rules/preset-pr-checklist.md +35 -0
  117. package/presets/mavis/next/rules/preset-token-budget.md +36 -0
  118. package/presets/mavis/next/rules/preset-twin-sync.md +65 -0
  119. package/presets/mavis/next/rules/product-specs-authoring.md +112 -0
  120. package/presets/mavis/next/rules/product-specs.md +56 -0
  121. package/presets/mavis/next/rules/public-imports.md +50 -0
  122. package/presets/mavis/next/rules/react-a11y-coding.md +31 -0
  123. package/presets/mavis/next/rules/react-next-anti-hallucination.md +60 -0
  124. package/presets/mavis/next/rules/react-ui.md +105 -0
  125. package/presets/mavis/next/rules/reference-features.md +45 -0
  126. package/presets/mavis/next/rules/security-next.md +45 -0
  127. package/presets/mavis/next/rules/store-rtk.md +78 -0
  128. package/presets/mavis/next/rules/technical-retro.md +11 -0
  129. package/presets/mavis/next/rules/tests-e2e-structure.md +72 -0
  130. package/presets/mavis/next/rules/tests-unit.md +72 -0
  131. package/presets/mavis/next/rules/types-jsdoc.md +43 -0
  132. package/presets/mavis/next/rules/ux-design.md +99 -0
  133. package/presets/mavis/next/skills/README.md +21 -0
  134. package/presets/mavis/next/skills/ci-investigation/SKILL.md +39 -0
  135. package/presets/mavis/next/skills/code-review/SKILL.md +39 -0
  136. package/presets/mavis/next/skills/debug-investigation/SKILL.md +26 -0
  137. package/presets/mavis/next/skills/feature-delivery/SKILL.md +34 -0
  138. package/presets/mavis/next/skills/mockup-review/SKILL.md +24 -0
  139. package/presets/mavis/next/skills/playwright-e2e/SKILL.md +28 -0
  140. package/presets/mavis/next/skills/react-performance/SKILL.md +39 -0
  141. package/presets/mavis/next/skills/spec-authoring/SKILL.md +21 -0
  142. package/presets/mavis/next/skills/spec-discovery/SKILL.md +53 -0
  143. package/presets/mavis/next/skills/technical-retro/SKILL.md +49 -0
  144. package/presets/mavis/next/skills/unit-testing/SKILL.md +29 -0
  145. package/presets/mavis/next/skills/ux-design/SKILL.md +31 -0
  146. package/presets/mavis/next/skills/write-adr/SKILL.md +36 -0
  147. package/presets/mavis/next/team/README.md +148 -0
  148. package/presets/mavis/next/team/conventions.md +21 -0
  149. package/presets/mavis/next/team/fixtures/artifact-manifest.example.json +79 -0
  150. package/presets/mavis/next/team/fixtures/bugfix-standard.json +25 -0
  151. package/presets/mavis/next/team/fixtures/feature-full.json +29 -0
  152. package/presets/mavis/next/team/fixtures/feature-light.json +27 -0
  153. package/presets/mavis/next/team/fixtures/feature-with-figma-url.json +17 -0
  154. package/presets/mavis/next/team/fixtures/feature-with-ux-no-figma.json +17 -0
  155. package/presets/mavis/next/team/fixtures/memlog.example.md +9 -0
  156. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
  157. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
  158. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
  159. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
  160. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
  161. package/presets/mavis/next/team/fixtures/metrics.example.json +54 -0
  162. package/presets/mavis/next/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  163. package/presets/mavis/next/team/fixtures/mockup-review-standalone.json +14 -0
  164. package/presets/mavis/next/team/fixtures/ux-design-standalone.json +15 -0
  165. package/presets/mavis/next/team/tasks/.gitkeep +0 -0
  166. package/presets/mavis/platform-contract.json +131 -0
  167. package/scripts/capture-cli-golden.mjs +44 -0
  168. package/scripts/check-chain-hook-coverage.sh +1 -0
  169. package/scripts/check-mavis-adapter-map.mjs +294 -0
  170. package/scripts/check-mavis-local-overlay.mjs +56 -0
  171. package/scripts/check-mavis-platform-contract.mjs +388 -0
  172. package/scripts/check-mavis-token-budget.mjs +48 -0
  173. package/scripts/check-preset-leakage.sh +35 -3
  174. package/scripts/check-preset-structure.sh +63 -0
  175. package/scripts/check-shared-core-drift.sh +18 -0
  176. package/scripts/check-task-router-intents.sh +15 -2
  177. package/scripts/fixtures/cli-golden/claude/next.json +130 -0
  178. package/scripts/fixtures/cli-golden/cursor/next.json +132 -0
  179. package/scripts/fixtures/cli-golden/mavis/next.json +125 -0
  180. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/AGENTS.md +1 -0
  181. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/rules/extra.mdc +1 -0
  182. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/rules/sample.mdc +2 -0
  183. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/MAVIS.md +1 -0
  184. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/adapter-map.json +26 -0
  185. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/rules/sample.md +2 -0
  186. package/scripts/fixtures/mavis-adapter-map/valid/cursor/AGENTS.md +1 -0
  187. package/scripts/fixtures/mavis-adapter-map/valid/cursor/rules/sample.mdc +2 -0
  188. package/scripts/fixtures/mavis-adapter-map/valid/mavis/MAVIS.md +1 -0
  189. package/scripts/fixtures/mavis-adapter-map/valid/mavis/adapter-map.json +26 -0
  190. package/scripts/fixtures/mavis-adapter-map/valid/mavis/rules/sample.md +2 -0
  191. package/scripts/fixtures/mavis-platform-contract/invalid-minimax-destination.json +131 -0
  192. package/scripts/fixtures/mavis-platform-contract/invalid-missing-capability.json +126 -0
  193. package/scripts/fixtures/mavis-platform-contract/invalid-released-unknown-stack.json +133 -0
  194. package/scripts/fixtures/mavis-platform-contract/invalid-unknown-native-path.json +131 -0
  195. package/scripts/fixtures/mavis-platform-contract/invalid-version-pin.json +132 -0
  196. package/scripts/fixtures/mavis-platform-contract/valid.json +131 -0
  197. package/scripts/fixtures/mavis-probe/AGENTS.md +6 -0
  198. package/scripts/fixtures/mavis-probe/agents/probe-agent.md +6 -0
  199. package/scripts/fixtures/mavis-probe/fake-mcode.mjs +98 -0
  200. package/scripts/fixtures/mavis-probe/output.schema.json +28 -0
  201. package/scripts/fixtures/mavis-probe/rules/probe.md +5 -0
  202. package/scripts/fixtures/mavis-probe/skills/probe/SKILL.md +11 -0
  203. package/scripts/generate-mavis-next.mjs +704 -0
  204. package/scripts/lib/cli-golden.mjs +50 -0
  205. package/scripts/lib/discover-hooks.mjs +72 -0
  206. package/scripts/probe-mavis-capabilities.mjs +480 -0
  207. package/scripts/test-agent-task-metrics-hooks.mjs +22 -16
  208. package/scripts/test-chain-team-phases-coverage.mjs +10 -7
  209. package/scripts/test-cli-init-clean.mjs +256 -0
  210. package/scripts/test-cli-mcp-merge.mjs +23 -0
  211. package/scripts/test-mavis-context-budget.mjs +55 -0
  212. package/scripts/test-mavis-orchestration.mjs +649 -0
  213. package/scripts/test-probe-mavis-capabilities.mjs +205 -0
@@ -0,0 +1,124 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "task": {
4
+ "runId": "validation-failed-run",
5
+ "slug": "validation-failed",
6
+ "preset": "ai-rules",
7
+ "stack": "next",
8
+ "platform": "cursor",
9
+ "intent": "feature",
10
+ "profile": "full"
11
+ },
12
+ "events": [
13
+ {
14
+ "eventId": "validation-failed-run:task",
15
+ "type": "task_started",
16
+ "at": "2026-07-31T15:00:00.000Z",
17
+ "source": "router",
18
+ "attributionConfidence": "high"
19
+ },
20
+ {
21
+ "eventId": "validation-failed-run:2:build-verifier:1:start",
22
+ "type": "attempt_started",
23
+ "at": "2026-07-31T15:00:00.000Z",
24
+ "attemptId": "validation-failed-run:step-2:build-verifier:attempt-1",
25
+ "stepIndex": 2,
26
+ "stepLabel": null,
27
+ "agent": "build-verifier",
28
+ "role": "validation",
29
+ "attempt": 1,
30
+ "parallelGroupId": null,
31
+ "source": "hook",
32
+ "attributionConfidence": "high"
33
+ },
34
+ {
35
+ "eventId": "validation-failed-run:2:build-verifier:1:finish",
36
+ "type": "attempt_finished",
37
+ "at": "2026-07-31T15:02:00.000Z",
38
+ "attemptId": "validation-failed-run:step-2:build-verifier:attempt-1",
39
+ "outcome": "validation_failed",
40
+ "durationMs": 120000,
41
+ "retryAfterFix": null,
42
+ "source": "hook",
43
+ "attributionConfidence": "high"
44
+ },
45
+ {
46
+ "eventId": "validation-failed-run:retry:1",
47
+ "type": "retry_scheduled",
48
+ "at": "2026-07-31T15:02:00.000Z",
49
+ "attemptId": "validation-failed-run:step-2:build-verifier:attempt-1",
50
+ "nextAgent": "feature-developer",
51
+ "retryAfterFix": "build-verifier",
52
+ "source": "hook",
53
+ "attributionConfidence": "high"
54
+ },
55
+ {
56
+ "eventId": "validation-failed-run:1:feature-developer:1:start",
57
+ "type": "attempt_started",
58
+ "at": "2026-07-31T15:02:00.000Z",
59
+ "attemptId": "validation-failed-run:step-1:feature-developer:attempt-1",
60
+ "stepIndex": 1,
61
+ "stepLabel": null,
62
+ "agent": "feature-developer",
63
+ "role": "implementation",
64
+ "attempt": 1,
65
+ "parallelGroupId": null,
66
+ "source": "hook",
67
+ "attributionConfidence": "high"
68
+ },
69
+ {
70
+ "eventId": "validation-failed-run:1:feature-developer:1:finish",
71
+ "type": "attempt_finished",
72
+ "at": "2026-07-31T15:05:00.000Z",
73
+ "attemptId": "validation-failed-run:step-1:feature-developer:attempt-1",
74
+ "outcome": "completed",
75
+ "durationMs": 180000,
76
+ "retryAfterFix": null,
77
+ "source": "hook",
78
+ "attributionConfidence": "high"
79
+ },
80
+ {
81
+ "eventId": "validation-failed-run:retry:2",
82
+ "type": "retry_scheduled",
83
+ "at": "2026-07-31T15:05:00.000Z",
84
+ "attemptId": "validation-failed-run:step-1:feature-developer:attempt-1",
85
+ "nextAgent": "build-verifier",
86
+ "retryAfterFix": null,
87
+ "source": "hook",
88
+ "attributionConfidence": "high"
89
+ },
90
+ {
91
+ "eventId": "validation-failed-run:2:build-verifier:2:start",
92
+ "type": "attempt_started",
93
+ "at": "2026-07-31T15:05:00.000Z",
94
+ "attemptId": "validation-failed-run:step-2:build-verifier:attempt-2",
95
+ "stepIndex": 2,
96
+ "stepLabel": null,
97
+ "agent": "build-verifier",
98
+ "role": "validation",
99
+ "attempt": 2,
100
+ "parallelGroupId": null,
101
+ "source": "hook",
102
+ "attributionConfidence": "high"
103
+ },
104
+ {
105
+ "eventId": "validation-failed-run:2:build-verifier:2:finish",
106
+ "type": "attempt_finished",
107
+ "at": "2026-07-31T15:06:00.000Z",
108
+ "attemptId": "validation-failed-run:step-2:build-verifier:attempt-2",
109
+ "outcome": "completed",
110
+ "durationMs": 60000,
111
+ "retryAfterFix": null,
112
+ "source": "hook",
113
+ "attributionConfidence": "high"
114
+ },
115
+ {
116
+ "eventId": "validation-failed-run:done",
117
+ "type": "task_completed",
118
+ "at": "2026-07-31T15:06:00.000Z",
119
+ "outcome": "completed",
120
+ "source": "hook",
121
+ "attributionConfidence": "high"
122
+ }
123
+ ]
124
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "task": {
4
+ "runId": "example-run-1",
5
+ "slug": "example-feature-full",
6
+ "preset": "ai-rules",
7
+ "stack": "next",
8
+ "platform": "cursor",
9
+ "intent": "feature",
10
+ "profile": "full"
11
+ },
12
+ "events": [
13
+ {
14
+ "eventId": "example-run-1:task_started",
15
+ "type": "task_started",
16
+ "at": "2026-07-31T14:00:00.000Z",
17
+ "source": "router",
18
+ "attributionConfidence": "high"
19
+ },
20
+ {
21
+ "eventId": "example-run-1:attempt-1:start",
22
+ "type": "attempt_started",
23
+ "at": "2026-07-31T14:00:00.000Z",
24
+ "attemptId": "example-run-1:step-0:task-analyst:attempt-1",
25
+ "stepIndex": 0,
26
+ "stepLabel": "Clarify and decompose",
27
+ "agent": "task-analyst",
28
+ "role": "planning",
29
+ "attempt": 1,
30
+ "parallelGroupId": null,
31
+ "source": "router",
32
+ "attributionConfidence": "high"
33
+ },
34
+ {
35
+ "eventId": "example-run-1:attempt-1:end",
36
+ "type": "attempt_finished",
37
+ "at": "2026-07-31T14:02:00.000Z",
38
+ "attemptId": "example-run-1:step-0:task-analyst:attempt-1",
39
+ "outcome": "completed",
40
+ "durationMs": 120000,
41
+ "retryAfterFix": null,
42
+ "source": "hook",
43
+ "attributionConfidence": "high"
44
+ },
45
+ {
46
+ "eventId": "example-run-1:task_completed",
47
+ "type": "task_completed",
48
+ "at": "2026-07-31T14:02:00.000Z",
49
+ "outcome": "completed",
50
+ "source": "hook",
51
+ "attributionConfidence": "high"
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "slug": "example-mockup-fail-gate",
3
+ "state": "awaiting_approval",
4
+ "currentAgent": "mockup-reviewer",
5
+ "awaitingHumanGate": true,
6
+ "retryAfterFix": null,
7
+ "note": "Embedded mockup FAIL: hook must NOT set retryAfterFix to feature-developer. Resume only via /task-continue."
8
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "slug": "example-mockup-review-standalone",
3
+ "intent": "mockup-review",
4
+ "profile": "light",
5
+ "summary": "Standalone Figma mockup review (report-only)",
6
+ "steps": [
7
+ { "agent": "mockup-reviewer", "label": "Figma mockup review", "model": "strong" }
8
+ ],
9
+ "humanGates": [],
10
+ "autoChain": true,
11
+ "skipped": [
12
+ { "agent": "feature-developer", "reason": "Standalone mockup-review is report-only" }
13
+ ]
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "slug": "example-ux-design-standalone",
3
+ "intent": "ux-design",
4
+ "profile": "light",
5
+ "summary": "Standalone behavioral UX design (analyst + skill ux-design; report-only; no developer)",
6
+ "steps": [
7
+ { "agent": "task-analyst", "label": "UX design (skill ux-design)" }
8
+ ],
9
+ "humanGates": [],
10
+ "autoChain": true,
11
+ "skipped": [
12
+ { "agent": "feature-developer", "reason": "Standalone ux-design is report-only" },
13
+ { "agent": "mockup-reviewer", "reason": "No figma.com URL; not a mockup review" }
14
+ ]
15
+ }
File without changes
@@ -0,0 +1,131 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "mavis",
4
+ "runtimeExecutable": "mcode",
5
+ "sourceRoot": "presets/mavis",
6
+ "managedRoot": ".mavis",
7
+ "releasedStacks": ["next"],
8
+ "entryFiles": [
9
+ {
10
+ "source": "REPO_AGENTS.md",
11
+ "destination": "AGENTS.md"
12
+ },
13
+ {
14
+ "source": "MAVIS.md",
15
+ "destination": ".mavis/AGENTS.md"
16
+ }
17
+ ],
18
+ "directoryMappings": [
19
+ {
20
+ "source": "rules",
21
+ "destination": ".mavis/rules"
22
+ },
23
+ {
24
+ "source": "agents",
25
+ "destination": ".mavis/agents"
26
+ },
27
+ {
28
+ "source": "skills",
29
+ "destination": ".mavis/skills"
30
+ },
31
+ {
32
+ "source": "commands",
33
+ "destination": ".mavis/commands"
34
+ },
35
+ {
36
+ "source": "hooks",
37
+ "destination": ".mavis/hooks"
38
+ },
39
+ {
40
+ "source": "team",
41
+ "destination": ".mavis/team"
42
+ }
43
+ ],
44
+ "mcp": {
45
+ "source": "mcp.json",
46
+ "fallbackDestination": ".mavis/mcp.json",
47
+ "mode": "fallback-manual-import"
48
+ },
49
+ "docsSeed": {
50
+ "source": "presets/_shared/assets/docs-specs",
51
+ "behavior": "absent-only"
52
+ },
53
+ "cleanStrategy": "manifest-owned",
54
+ "nativeCapabilities": {
55
+ "cliVersion": {
56
+ "status": "confirmed",
57
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
58
+ "nativePath": null
59
+ },
60
+ "rootAgents": {
61
+ "status": "confirmed",
62
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
63
+ "nativePath": null
64
+ },
65
+ "explicitAgentFile": {
66
+ "status": "confirmed",
67
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
68
+ "nativePath": null
69
+ },
70
+ "structuredOutput": {
71
+ "status": "confirmed",
72
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
73
+ "nativePath": null
74
+ },
75
+ "referencedRule": {
76
+ "status": "confirmed",
77
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
78
+ "nativePath": null
79
+ },
80
+ "referencedSkill": {
81
+ "status": "confirmed",
82
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
83
+ "nativePath": null
84
+ },
85
+ "freshInit": {
86
+ "status": "unknown",
87
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
88
+ "nativePath": null
89
+ },
90
+ "nativeProjectRules": {
91
+ "status": "unknown",
92
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
93
+ "nativePath": null
94
+ },
95
+ "nativeWorkspaceSkills": {
96
+ "status": "unknown",
97
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
98
+ "nativePath": null
99
+ },
100
+ "nativeWorkspaceAgents": {
101
+ "status": "unknown",
102
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
103
+ "nativePath": null
104
+ },
105
+ "projectMcp": {
106
+ "status": "unknown",
107
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
108
+ "nativePath": null
109
+ },
110
+ "projectHooks": {
111
+ "status": "unknown",
112
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
113
+ "nativePath": null
114
+ },
115
+ "slashCommands": {
116
+ "status": "unknown",
117
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
118
+ "nativePath": null
119
+ },
120
+ "pluginSkillMcp": {
121
+ "status": "confirmed",
122
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
123
+ "nativePath": null
124
+ },
125
+ "nativeTeam": {
126
+ "status": "partial",
127
+ "evidence": "docs/MAVIS-COMPATIBILITY.md",
128
+ "nativePath": null
129
+ }
130
+ }
131
+ }
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Capture init file-tree goldens. Run before and after CLI refactors.
4
+ *
5
+ * node scripts/capture-cli-golden.mjs cursor next
6
+ * node scripts/capture-cli-golden.mjs claude next
7
+ * node scripts/capture-cli-golden.mjs mavis next
8
+ */
9
+ import fs from 'node:fs';
10
+ import os from 'node:os';
11
+ import path from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { goldenDocument, runInit, snapshotInstall } from './lib/cli-golden.mjs';
14
+
15
+ const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
16
+ const packageDirectory = path.resolve(scriptDirectory, '..');
17
+ const cli = path.join(packageDirectory, 'bin', 'cli.js');
18
+
19
+ const tool = process.argv[2];
20
+ const preset = process.argv[3] || 'next';
21
+ if (!tool) {
22
+ console.error('Usage: node scripts/capture-cli-golden.mjs <cursor|claude|mavis> [preset]');
23
+ process.exit(1);
24
+ }
25
+
26
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), `ai-rules-golden-${tool}-`));
27
+ try {
28
+ runInit(cli, tmp, tool, preset);
29
+ const files = snapshotInstall(tmp);
30
+ if (tool === 'mavis') {
31
+ delete files['.mavis/.ai-rules-install.json'];
32
+ }
33
+ const golden = goldenDocument({
34
+ tool,
35
+ preset,
36
+ files,
37
+ });
38
+ const dest = path.join(scriptDirectory, 'fixtures', 'cli-golden', tool, `${preset}.json`);
39
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
40
+ fs.writeFileSync(dest, `${JSON.stringify(golden, null, 2)}\n`);
41
+ console.log(`wrote ${path.relative(packageDirectory, dest)} (${Object.keys(golden.files).length} files)`);
42
+ } finally {
43
+ fs.rmSync(tmp, { recursive: true, force: true });
44
+ }
@@ -45,6 +45,7 @@ STACKS_WITH_OPENSPEC = {
45
45
  ("claude", "php-hexagonal"),
46
46
  ("claude", "php-laravel"),
47
47
  ("claude", "svelte"),
48
+ ("mavis", "next"),
48
49
  }
49
50
 
50
51
  # Agents used only outside the pipeline (no chain hook entry expected).