@mmerterden/multi-agent-pipeline 12.6.0 → 12.8.0

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 (481) hide show
  1. package/CHANGELOG.md +209 -0
  2. package/README.md +18 -18
  3. package/docs/FIGMA_PIPELINE.md +34 -34
  4. package/docs/adr/0001-three-model-triage.md +12 -12
  5. package/docs/adr/0002-instruction-driven-flag.md +5 -5
  6. package/docs/adr/0003-unified-shared-skills.md +5 -5
  7. package/docs/adr/0004-zero-dependency-philosophy.md +5 -5
  8. package/docs/adr/0005-lazy-phase-docs.md +2 -2
  9. package/docs/adr/0006-skills-core-external-split.md +6 -6
  10. package/docs/adr/0007-multi-tool-adapter-framework.md +19 -19
  11. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +19 -19
  12. package/docs/adr/README.md +1 -1
  13. package/docs/best-practices.md +3 -3
  14. package/docs/features.md +28 -28
  15. package/docs/performance.md +16 -16
  16. package/docs/recovery-guide.md +39 -39
  17. package/index.js +4 -4
  18. package/install/_common.mjs +53 -11
  19. package/install/_copilot-instructions.mjs +2 -2
  20. package/install/_dev-only-files.mjs +126 -6
  21. package/install/_platform-filter.mjs +1 -1
  22. package/install/_telemetry.mjs +1 -1
  23. package/install/claude.mjs +20 -13
  24. package/install/copilot.mjs +11 -23
  25. package/install/index.mjs +7 -15
  26. package/install/templates/copilot-instructions.md +54 -54
  27. package/install.js +1 -1
  28. package/package.json +29 -11
  29. package/pipeline/commands/multi-agent/SKILL.md +1 -1
  30. package/pipeline/commands/multi-agent/analysis/SKILL.md +2 -2
  31. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +1 -1
  32. package/pipeline/commands/multi-agent/autopilot/SKILL.md +1 -1
  33. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +1 -1
  34. package/pipeline/commands/multi-agent/create-jira/SKILL.md +1 -1
  35. package/pipeline/commands/multi-agent/design-check/SKILL.md +1 -1
  36. package/pipeline/commands/multi-agent/dev/SKILL.md +1 -1
  37. package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +1 -1
  38. package/pipeline/commands/multi-agent/dev-local/SKILL.md +1 -1
  39. package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +1 -1
  40. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +1 -1
  41. package/pipeline/commands/multi-agent/finish/SKILL.md +6 -6
  42. package/pipeline/commands/multi-agent/forget/SKILL.md +1 -1
  43. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
  44. package/pipeline/commands/multi-agent/help/SKILL.md +3 -3
  45. package/pipeline/commands/multi-agent/issue/SKILL.md +1 -1
  46. package/pipeline/commands/multi-agent/jira/SKILL.md +1 -1
  47. package/pipeline/commands/multi-agent/kill/SKILL.md +1 -1
  48. package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
  49. package/pipeline/commands/multi-agent/local/SKILL.md +1 -1
  50. package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
  51. package/pipeline/commands/multi-agent/log/SKILL.md +1 -1
  52. package/pipeline/commands/multi-agent/manual-test/SKILL.md +1 -1
  53. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -1
  54. package/pipeline/commands/multi-agent/purge/SKILL.md +1 -1
  55. package/pipeline/commands/multi-agent/refactor/SKILL.md +16 -8
  56. package/pipeline/commands/multi-agent/resume/SKILL.md +2 -2
  57. package/pipeline/commands/multi-agent/review/SKILL.md +1 -1
  58. package/pipeline/commands/multi-agent/review-issue/SKILL.md +1 -1
  59. package/pipeline/commands/multi-agent/review-jira/SKILL.md +1 -1
  60. package/pipeline/commands/multi-agent/routines/SKILL.md +1 -1
  61. package/pipeline/commands/multi-agent/save/SKILL.md +1 -1
  62. package/pipeline/commands/multi-agent/scan/SKILL.md +1 -1
  63. package/pipeline/commands/multi-agent/search/SKILL.md +1 -1
  64. package/pipeline/commands/multi-agent/setup/SKILL.md +2 -2
  65. package/pipeline/commands/multi-agent/stack/SKILL.md +3 -3
  66. package/pipeline/commands/multi-agent/status/SKILL.md +1 -1
  67. package/pipeline/commands/multi-agent/sync/SKILL.md +5 -5
  68. package/pipeline/commands/multi-agent/test/SKILL.md +1 -1
  69. package/pipeline/commands/multi-agent/uninstall/SKILL.md +1 -1
  70. package/pipeline/commands/multi-agent/update/SKILL.md +3 -3
  71. package/pipeline/lib/account-resolver.sh +1 -1
  72. package/pipeline/lib/channels-multi-repo.sh +1 -1
  73. package/pipeline/lib/context-link-extractor.sh +1 -1
  74. package/pipeline/lib/credential-store.sh +21 -1
  75. package/pipeline/lib/fetch-confluence.sh +1 -1
  76. package/pipeline/lib/fetch-crashlytics.sh +1 -1
  77. package/pipeline/lib/fetch-fortify.sh +1 -1
  78. package/pipeline/lib/fetch-graylog.sh +1 -1
  79. package/pipeline/lib/fetch-swagger.sh +1 -1
  80. package/pipeline/lib/issue-fetcher.sh +1 -1
  81. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  82. package/pipeline/lib/repo-cache.sh +1 -1
  83. package/pipeline/lib/submodule-detector.sh +1 -1
  84. package/pipeline/multi-agent-refs/_account-picker.md +1 -1
  85. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  86. package/pipeline/multi-agent-refs/_repo-picker.md +1 -1
  87. package/pipeline/multi-agent-refs/component-dispatch.md +1 -1
  88. package/pipeline/multi-agent-refs/component-generation.md +121 -0
  89. package/pipeline/multi-agent-refs/cross-cli-contract.md +1 -1
  90. package/pipeline/multi-agent-refs/features/model-fallback.md +2 -2
  91. package/pipeline/multi-agent-refs/phases/operations.md +28 -0
  92. package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -0
  93. package/pipeline/multi-agent-refs/phases/phase-2-planning.md +1 -1
  94. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +1 -2
  95. package/pipeline/multi-agent-refs/phases/phase-4-review.md +50 -5
  96. package/pipeline/preferences-template.json +5 -11
  97. package/pipeline/schemas/agent-state.schema.json +39 -9
  98. package/pipeline/schemas/analysis-output.schema.json +18 -4
  99. package/pipeline/schemas/analysis-spec.schema.json +120 -32
  100. package/pipeline/schemas/clarify-output.schema.json +15 -5
  101. package/pipeline/schemas/design-check-config.schema.json +32 -11
  102. package/pipeline/schemas/dev-critic-output.schema.json +20 -5
  103. package/pipeline/schemas/figma-project-config.schema.json +42 -10
  104. package/pipeline/schemas/learnings-ledger.schema.json +10 -2
  105. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +1 -4
  106. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +24 -7
  107. package/pipeline/schemas/plan-todos.schema.json +6 -3
  108. package/pipeline/schemas/planning-output.schema.json +5 -1
  109. package/pipeline/schemas/prefs.schema.json +97 -229
  110. package/pipeline/schemas/test-gap.schema.json +5 -5
  111. package/pipeline/schemas/token-budget.json +8 -8
  112. package/pipeline/schemas/triage-corpus.schema.json +1 -1
  113. package/pipeline/scripts/_smoke-root.sh +61 -0
  114. package/pipeline/scripts/aggregate-metrics.mjs +18 -6
  115. package/pipeline/scripts/audit-log.sh +25 -0
  116. package/pipeline/scripts/build-skills-index.mjs +6 -2
  117. package/pipeline/scripts/build-stack-plugins.mjs +142 -39
  118. package/pipeline/scripts/check-derived-drift.mjs +196 -0
  119. package/pipeline/scripts/classify-plan-safety.mjs +20 -7
  120. package/pipeline/scripts/cost-budget-check.mjs +2 -1
  121. package/pipeline/scripts/cost-table.json +1 -1
  122. package/pipeline/scripts/diff-explain.mjs +7 -3
  123. package/pipeline/scripts/diff-risk-score.mjs +13 -3
  124. package/pipeline/scripts/evidence-gate.mjs +7 -2
  125. package/pipeline/scripts/gen-mode-dispatch.mjs +38 -21
  126. package/pipeline/scripts/gen-skills-index.mjs +18 -3
  127. package/pipeline/scripts/learning-curve.mjs +13 -3
  128. package/pipeline/scripts/learnings-ledger.mjs +103 -36
  129. package/pipeline/scripts/localize-commands.mjs +6 -1
  130. package/pipeline/scripts/match-skills.mjs +15 -4
  131. package/pipeline/scripts/migrate-prefs.mjs +33 -16
  132. package/pipeline/scripts/phase-tracker.sh +3 -1
  133. package/pipeline/scripts/repo-map.mjs +110 -64
  134. package/pipeline/scripts/review-scope.mjs +7 -1
  135. package/pipeline/scripts/routine-registry.mjs +4 -9
  136. package/pipeline/scripts/run-aggregator.mjs +11 -5
  137. package/pipeline/scripts/run-metrics.mjs +13 -8
  138. package/pipeline/scripts/smoke-cross-cli-behavior.sh +21 -7
  139. package/pipeline/scripts/test-gap-scan.mjs +44 -12
  140. package/pipeline/scripts/test-integrity-gate.mjs +5 -1
  141. package/pipeline/scripts/token-budget-report.mjs +44 -21
  142. package/pipeline/scripts/triage-memory.mjs +126 -34
  143. package/pipeline/scripts/uninstall.mjs +74 -30
  144. package/pipeline/scripts/validate-analysis-doc.mjs +15 -5
  145. package/pipeline/scripts/validate-diff-risk.mjs +32 -18
  146. package/pipeline/scripts/validate-test-gap.mjs +17 -7
  147. package/pipeline/scripts/validate-triage.mjs +17 -5
  148. package/pipeline/scripts/write-state.mjs +32 -9
  149. package/pipeline/skills/.skills-index.json +91 -91
  150. package/pipeline/skills/shared/README.md +57 -57
  151. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +1 -1
  152. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +1 -1
  153. package/pipeline/skills/shared/core/multi-agent/SKILL.md +26 -279
  154. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +1 -1
  155. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
  156. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +1 -1
  157. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  158. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
  159. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
  160. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +1 -1
  161. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +1 -1
  162. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +1 -1
  163. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +1 -1
  164. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +1 -1
  165. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  166. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +1 -1
  167. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +1 -1
  168. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  169. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +1 -1
  170. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +1 -1
  171. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +1 -1
  172. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
  173. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
  174. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +1 -1
  175. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +1 -1
  176. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +1 -1
  177. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +1 -1
  178. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +1 -1
  179. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +16 -8
  180. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +1 -1
  181. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +1 -1
  182. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +1 -1
  183. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +1 -1
  184. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +1 -1
  185. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +1 -1
  186. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +1 -1
  187. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +1 -1
  188. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -1
  189. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +3 -3
  190. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +1 -1
  191. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +1 -1
  192. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +1 -1
  193. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +1 -1
  194. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +1 -1
  195. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +1 -1
  196. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -4
  197. package/pipeline/skills/shared/external/agentflow/SKILL.md +1 -1
  198. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +1 -1
  199. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +1 -1
  200. package/pipeline/skills/shared/external/api-patterns/SKILL.md +1 -1
  201. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +1 -1
  202. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +1 -1
  203. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  204. package/pipeline/skills/shared/external/backlog/SKILL.md +12 -12
  205. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -1
  206. package/pipeline/skills/shared/external/context-compression/SKILL.md +1 -1
  207. package/pipeline/skills/shared/external/council/SKILL.md +3 -3
  208. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -1
  209. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -1
  210. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +1 -1
  211. package/pipeline/skills/shared/external/docker-expert/SKILL.md +1 -1
  212. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +1 -1
  213. package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
  214. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +1 -1
  215. package/pipeline/skills/shared/external/help-skills/SKILL.md +1 -1
  216. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +1 -1
  217. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +1 -1
  218. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +1 -1
  219. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +1 -1
  220. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +1 -1
  221. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +1 -1
  222. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +1 -1
  223. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +1 -1
  224. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +1 -1
  225. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -1
  226. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -1
  227. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +1 -1
  228. package/pipeline/skills/shared/external/ios-developer/SKILL.md +1 -1
  229. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +1 -1
  230. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +1 -1
  231. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +1 -1
  232. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +1 -1
  233. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -1
  234. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +1 -1
  235. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +1 -1
  236. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -1
  237. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -1
  238. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -1
  239. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -2
  240. package/pipeline/skills/shared/external/skill-creator/SKILL.md +12 -12
  241. package/pipeline/skills/shared/external/skill-creator/audit.md +21 -21
  242. package/pipeline/skills/shared/external/skill-creator/checklist.md +3 -3
  243. package/pipeline/skills/shared/external/skill-creator/examples.md +10 -10
  244. package/pipeline/skills/shared/external/skill-creator/label-check.md +17 -17
  245. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +86 -50
  246. package/pipeline/skills/shared/external/skill-creator/template.md +9 -9
  247. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +1 -1
  248. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +1 -1
  249. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
  250. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +1 -1
  251. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -1
  252. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -1
  253. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -1
  254. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -1
  255. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -1
  256. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -1
  257. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -1
  258. package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +9 -49
  259. package/pipeline/skills/skills-index.md +57 -57
  260. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +0 -25
  261. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +0 -30
  262. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +0 -20
  263. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +0 -15
  264. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +0 -14
  265. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +0 -12
  266. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +0 -29
  267. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +0 -43
  268. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +0 -35
  269. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +0 -35
  270. package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +0 -14
  271. package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +0 -12
  272. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-1-analysis.json +0 -29
  273. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-2-plan.json +0 -42
  274. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-review.json +0 -20
  275. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-triage.json +0 -15
  276. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/metadata.json +0 -14
  277. package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/task.json +0 -12
  278. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-1-analysis.json +0 -29
  279. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-2-plan.json +0 -40
  280. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-review.json +0 -20
  281. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-triage.json +0 -15
  282. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/metadata.json +0 -14
  283. package/pipeline/eval/golden-tasks/04-frontend-next-hydration/task.json +0 -12
  284. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-1-analysis.json +0 -29
  285. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-2-plan.json +0 -42
  286. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-review.json +0 -28
  287. package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-triage.json +0 -27
  288. package/pipeline/eval/golden-tasks/05-ios-security-keychain/metadata.json +0 -14
  289. package/pipeline/eval/golden-tasks/05-ios-security-keychain/task.json +0 -12
  290. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-1-analysis.json +0 -29
  291. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-2-plan.json +0 -41
  292. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-review.json +0 -12
  293. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-triage.json +0 -6
  294. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/metadata.json +0 -14
  295. package/pipeline/eval/golden-tasks/06-android-refactor-usecase/task.json +0 -12
  296. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-1-analysis.json +0 -29
  297. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-2-plan.json +0 -42
  298. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-review.json +0 -28
  299. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-triage.json +0 -27
  300. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/metadata.json +0 -14
  301. package/pipeline/eval/golden-tasks/07-backend-node-idempotency/task.json +0 -12
  302. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-1-analysis.json +0 -25
  303. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-2-plan.json +0 -31
  304. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-review.json +0 -12
  305. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-triage.json +0 -18
  306. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/metadata.json +0 -14
  307. package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/task.json +0 -12
  308. package/pipeline/eval/golden-tasks/README.md +0 -65
  309. package/pipeline/eval/intent-cases.json +0 -40
  310. package/pipeline/eval/run-metrics-fixture.json +0 -46
  311. package/pipeline/eval/triage/01-empty-findings/expected.json +0 -6
  312. package/pipeline/eval/triage/01-empty-findings/input.json +0 -5
  313. package/pipeline/eval/triage/01-empty-findings/notes.md +0 -7
  314. package/pipeline/eval/triage/02-real-blocker/expected.json +0 -15
  315. package/pipeline/eval/triage/02-real-blocker/input.json +0 -14
  316. package/pipeline/eval/triage/02-real-blocker/notes.md +0 -7
  317. package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +0 -18
  318. package/pipeline/eval/triage/03-out-of-scope-defer/input.json +0 -14
  319. package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +0 -10
  320. package/pipeline/eval/triage/04-false-positive-reject/expected.json +0 -18
  321. package/pipeline/eval/triage/04-false-positive-reject/input.json +0 -14
  322. package/pipeline/eval/triage/04-false-positive-reject/notes.md +0 -10
  323. package/pipeline/eval/triage/05-mixed-classification/expected.json +0 -43
  324. package/pipeline/eval/triage/05-mixed-classification/input.json +0 -38
  325. package/pipeline/eval/triage/05-mixed-classification/notes.md +0 -17
  326. package/pipeline/eval/triage/06-severity-mismatch/expected.json +0 -15
  327. package/pipeline/eval/triage/06-severity-mismatch/input.json +0 -14
  328. package/pipeline/eval/triage/06-severity-mismatch/notes.md +0 -9
  329. package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +0 -27
  330. package/pipeline/eval/triage/07-duplicate-reviewers/input.json +0 -22
  331. package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +0 -9
  332. package/pipeline/eval/triage/08-style-misclassified/expected.json +0 -18
  333. package/pipeline/eval/triage/08-style-misclassified/input.json +0 -14
  334. package/pipeline/eval/triage/08-style-misclassified/notes.md +0 -9
  335. package/pipeline/eval/triage/09-cascading-finding/expected.json +0 -23
  336. package/pipeline/eval/triage/09-cascading-finding/input.json +0 -22
  337. package/pipeline/eval/triage/09-cascading-finding/notes.md +0 -9
  338. package/pipeline/eval/triage/10-deferred-crossref/expected.json +0 -18
  339. package/pipeline/eval/triage/10-deferred-crossref/input.json +0 -14
  340. package/pipeline/eval/triage/10-deferred-crossref/notes.md +0 -9
  341. package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +0 -27
  342. package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +0 -22
  343. package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +0 -14
  344. package/pipeline/eval/triage/README.md +0 -54
  345. package/pipeline/scripts/benchmark-phase-0.sh +0 -128
  346. package/pipeline/scripts/check-md-links.mjs +0 -84
  347. package/pipeline/scripts/eval-golden-tasks-live.mjs +0 -297
  348. package/pipeline/scripts/eval-golden-tasks.mjs +0 -212
  349. package/pipeline/scripts/eval-intent.mjs +0 -103
  350. package/pipeline/scripts/eval-mine-corpus.mjs +0 -201
  351. package/pipeline/scripts/eval-triage.mjs +0 -171
  352. package/pipeline/scripts/fixtures/diff-risk-android.diff +0 -40
  353. package/pipeline/scripts/fixtures/diff-risk-ios.diff +0 -48
  354. package/pipeline/scripts/fixtures/diff-risk-test-removal.diff +0 -40
  355. package/pipeline/scripts/fixtures/install-layout.tsv +0 -19
  356. package/pipeline/scripts/fixtures/pack-expected-count.txt +0 -1
  357. package/pipeline/scripts/fixtures/test-gap-node.diff +0 -30
  358. package/pipeline/scripts/fixtures/test-gap-python.diff +0 -32
  359. package/pipeline/scripts/lint-mcp-refs.mjs +0 -207
  360. package/pipeline/scripts/lint-skills.mjs +0 -143
  361. package/pipeline/scripts/run-smokes.mjs +0 -76
  362. package/pipeline/scripts/smoke-add-detail.sh +0 -137
  363. package/pipeline/scripts/smoke-agent-guard.sh +0 -74
  364. package/pipeline/scripts/smoke-agent-log-cost.sh +0 -262
  365. package/pipeline/scripts/smoke-agent-model-routing.sh +0 -87
  366. package/pipeline/scripts/smoke-ask-choice.sh +0 -42
  367. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +0 -36
  368. package/pipeline/scripts/smoke-bitbucket-contract.sh +0 -255
  369. package/pipeline/scripts/smoke-changelog-version.sh +0 -47
  370. package/pipeline/scripts/smoke-channels-approval-gate.sh +0 -60
  371. package/pipeline/scripts/smoke-channels-flow.sh +0 -130
  372. package/pipeline/scripts/smoke-ci-workflows.sh +0 -88
  373. package/pipeline/scripts/smoke-clarify.sh +0 -148
  374. package/pipeline/scripts/smoke-command-inventory.sh +0 -81
  375. package/pipeline/scripts/smoke-commands-skills-parity.sh +0 -87
  376. package/pipeline/scripts/smoke-community-gates.sh +0 -75
  377. package/pipeline/scripts/smoke-compliance-skills.sh +0 -119
  378. package/pipeline/scripts/smoke-config-hygiene.sh +0 -58
  379. package/pipeline/scripts/smoke-cost-budget.sh +0 -70
  380. package/pipeline/scripts/smoke-cost-summary.sh +0 -139
  381. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +0 -128
  382. package/pipeline/scripts/smoke-description-tr.sh +0 -82
  383. package/pipeline/scripts/smoke-dev-critic.sh +0 -144
  384. package/pipeline/scripts/smoke-diff-explain.sh +0 -147
  385. package/pipeline/scripts/smoke-diff-risk.sh +0 -190
  386. package/pipeline/scripts/smoke-dynamic-skill-loading.sh +0 -160
  387. package/pipeline/scripts/smoke-eval-live.sh +0 -136
  388. package/pipeline/scripts/smoke-evidence-gate.sh +0 -93
  389. package/pipeline/scripts/smoke-extract-conventions.sh +0 -163
  390. package/pipeline/scripts/smoke-fetchers-offline.sh +0 -448
  391. package/pipeline/scripts/smoke-figma-dispatch.sh +0 -112
  392. package/pipeline/scripts/smoke-gate-hooks.sh +0 -74
  393. package/pipeline/scripts/smoke-gc-tmp.sh +0 -130
  394. package/pipeline/scripts/smoke-gc-worktrees.sh +0 -125
  395. package/pipeline/scripts/smoke-generate-issue.sh +0 -120
  396. package/pipeline/scripts/smoke-handoff-contract.sh +0 -92
  397. package/pipeline/scripts/smoke-identity-isolation.sh +0 -70
  398. package/pipeline/scripts/smoke-install-layout.sh +0 -248
  399. package/pipeline/scripts/smoke-intent-guard.sh +0 -86
  400. package/pipeline/scripts/smoke-issue-comment-template.sh +0 -86
  401. package/pipeline/scripts/smoke-issue-jira-triad.sh +0 -120
  402. package/pipeline/scripts/smoke-keychain.sh +0 -158
  403. package/pipeline/scripts/smoke-language-axis.sh +0 -109
  404. package/pipeline/scripts/smoke-learning-curve.sh +0 -61
  405. package/pipeline/scripts/smoke-learnings-ledger.sh +0 -86
  406. package/pipeline/scripts/smoke-lib-scripts.sh +0 -448
  407. package/pipeline/scripts/smoke-mcp-gate.sh +0 -68
  408. package/pipeline/scripts/smoke-md-links.sh +0 -8
  409. package/pipeline/scripts/smoke-md2confluence.sh +0 -126
  410. package/pipeline/scripts/smoke-metrics-cache-ratio.sh +0 -72
  411. package/pipeline/scripts/smoke-migrate-state.sh +0 -102
  412. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +0 -161
  413. package/pipeline/scripts/smoke-model-fallback.sh +0 -89
  414. package/pipeline/scripts/smoke-multi-repo-integration.sh +0 -116
  415. package/pipeline/scripts/smoke-multi-repo-worktree.sh +0 -61
  416. package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +0 -115
  417. package/pipeline/scripts/smoke-no-token-prompt.sh +0 -85
  418. package/pipeline/scripts/smoke-pack-contents.sh +0 -140
  419. package/pipeline/scripts/smoke-pat-audit.sh +0 -128
  420. package/pipeline/scripts/smoke-per-repo-memory.sh +0 -156
  421. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +0 -170
  422. package/pipeline/scripts/smoke-phase-6-multi.sh +0 -79
  423. package/pipeline/scripts/smoke-phase-banner.sh +0 -101
  424. package/pipeline/scripts/smoke-phase-tracker.sh +0 -324
  425. package/pipeline/scripts/smoke-phase0-bridge-contract.sh +0 -241
  426. package/pipeline/scripts/smoke-phase4-gates.sh +0 -45
  427. package/pipeline/scripts/smoke-phase4-triage.sh +0 -229
  428. package/pipeline/scripts/smoke-plan-approval-gate.sh +0 -71
  429. package/pipeline/scripts/smoke-plan-safety.sh +0 -139
  430. package/pipeline/scripts/smoke-plan-todos.sh +0 -196
  431. package/pipeline/scripts/smoke-plugin-validate.sh +0 -64
  432. package/pipeline/scripts/smoke-pr-review-actions.sh +0 -152
  433. package/pipeline/scripts/smoke-pre-commit.sh +0 -170
  434. package/pipeline/scripts/smoke-pref-migration.sh +0 -226
  435. package/pipeline/scripts/smoke-prefs-language.sh +0 -134
  436. package/pipeline/scripts/smoke-progress-contract.sh +0 -127
  437. package/pipeline/scripts/smoke-prune-logs.sh +0 -137
  438. package/pipeline/scripts/smoke-purge.sh +0 -138
  439. package/pipeline/scripts/smoke-push-retry.sh +0 -75
  440. package/pipeline/scripts/smoke-repo-map.sh +0 -300
  441. package/pipeline/scripts/smoke-review-readiness.sh +0 -92
  442. package/pipeline/scripts/smoke-review-watch.sh +0 -146
  443. package/pipeline/scripts/smoke-routines.sh +0 -84
  444. package/pipeline/scripts/smoke-run-aggregator.sh +0 -216
  445. package/pipeline/scripts/smoke-run-metrics.sh +0 -50
  446. package/pipeline/scripts/smoke-search.sh +0 -187
  447. package/pipeline/scripts/smoke-shadow-git.sh +0 -224
  448. package/pipeline/scripts/smoke-skill-authoring.sh +0 -137
  449. package/pipeline/scripts/smoke-skill-language.sh +0 -83
  450. package/pipeline/scripts/smoke-skill-manifest.sh +0 -138
  451. package/pipeline/scripts/smoke-skill-scan.sh +0 -198
  452. package/pipeline/scripts/smoke-source-parity.sh +0 -85
  453. package/pipeline/scripts/smoke-subagent-validators.sh +0 -108
  454. package/pipeline/scripts/smoke-sync-parity.sh +0 -92
  455. package/pipeline/scripts/smoke-tasklist-ordering.sh +0 -112
  456. package/pipeline/scripts/smoke-telemetry.sh +0 -147
  457. package/pipeline/scripts/smoke-test-gap.sh +0 -183
  458. package/pipeline/scripts/smoke-token-budget.sh +0 -67
  459. package/pipeline/scripts/smoke-token-preflight.sh +0 -82
  460. package/pipeline/scripts/smoke-tracker-contract.sh +0 -191
  461. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +0 -73
  462. package/pipeline/scripts/smoke-triage-memory.sh +0 -174
  463. package/pipeline/scripts/smoke-update-check.sh +0 -135
  464. package/pipeline/scripts/smoke-url-enrichment.sh +0 -70
  465. package/pipeline/scripts/smoke-validate-analysis-doc.sh +0 -161
  466. package/pipeline/scripts/smoke-validator-contradiction.sh +0 -67
  467. package/pipeline/scripts/smoke-validator-gates.sh +0 -164
  468. package/pipeline/scripts/smoke-vercel-deploy-redact.sh +0 -129
  469. package/pipeline/scripts/smoke-verify-by-test.sh +0 -148
  470. package/pipeline/scripts/smoke-wiki-integration.sh +0 -122
  471. package/pipeline/scripts/smoke-work-summary.sh +0 -163
  472. package/pipeline/scripts/smoke-workflow-audit.sh +0 -69
  473. package/pipeline/scripts/smoke-worktree-path-convention.sh +0 -86
  474. package/pipeline/scripts/smoke-wrapper-preservation.sh +0 -68
  475. package/pipeline/scripts/smoke-write-state.sh +0 -115
  476. package/pipeline/scripts/sync-parity-check.sh +0 -135
  477. package/pipeline/scripts/test-gap-rules/android.json +0 -25
  478. package/pipeline/scripts/test-gap-rules/ios.json +0 -29
  479. package/pipeline/scripts/test-gap-rules/node.json +0 -17
  480. package/pipeline/scripts/test-gap-rules/python.json +0 -19
  481. package/pipeline/scripts/validate-schemas.mjs +0 -88
@@ -1,112 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-figma-dispatch.sh - Phase 3 component dispatch contract (plugin-based).
3
- #
4
- # Verifies that multi-agent Phase 3 dispatches component tasks to the
5
- # ai-<platform>-engineering-toolkit MARKETPLACE PLUGIN (create-component,
6
- # fallback create-ui-component) instead of a bundled figma-to-component skill.
7
- #
8
- # Runs offline - scans docs only, no skill invocation.
9
-
10
- set -euo pipefail
11
-
12
- HERE="$(cd "$(dirname "$0")" && pwd)"
13
- ROOT="$(cd "$HERE/../.." && pwd)"
14
- PHASE0="$ROOT/pipeline/multi-agent-refs/phases/phase-0-init.md"
15
- PHASE3="$ROOT/pipeline/multi-agent-refs/phases/phase-3-dev.md"
16
- DISPATCH="$ROOT/pipeline/multi-agent-refs/component-dispatch.md"
17
-
18
- PASS=0
19
- FAIL=0
20
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
21
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
22
-
23
- [ -f "$PHASE0" ] || { echo "error: $PHASE0 missing" >&2; exit 1; }
24
- [ -f "$PHASE3" ] || { echo "error: $PHASE3 missing" >&2; exit 1; }
25
- [ -f "$DISPATCH" ] || { echo "error: $DISPATCH missing" >&2; exit 1; }
26
-
27
- echo "→ 1. no bundled figma orchestrator remains in the tree"
28
- if [ -e "$ROOT/pipeline/skills/figma-ios" ] || [ -e "$ROOT/pipeline/skills/figma-android" ] || [ -e "$ROOT/pipeline/skills/figma-common" ]; then
29
- fail "bundled pipeline/skills/figma-* tree still present (should be plugin-only)"
30
- else
31
- pass "no pipeline/skills/figma-* tree (component skills live in the plugin)"
32
- fi
33
-
34
- echo ""
35
- echo "→ 2. Phase 0 routes component tasks to the plugin component skill"
36
- if grep -Fq "create-component" "$PHASE0"; then
37
- pass "Phase 0 references the plugin create-component skill"
38
- else
39
- fail "Phase 0 does NOT reference create-component"
40
- fi
41
- if grep -Fq "figma-to-swiftui" "$PHASE0" || grep -Fq "skills/figma-ios/figma-to-component" "$PHASE0"; then
42
- fail "Phase 0 still references a legacy/bundled figma orchestrator path"
43
- else
44
- pass "Phase 0 has no legacy/bundled figma orchestrator reference"
45
- fi
46
-
47
- echo ""
48
- echo "→ 3. dispatch guards taskType and resolves the plugin (dual-name)"
49
- if grep -Fq 'taskType === "component"' "$DISPATCH"; then
50
- pass "dispatch mentions taskType guard"
51
- else
52
- fail "dispatch missing taskType guard"
53
- fi
54
- if grep -Fq "create-component" "$DISPATCH" && grep -Fq "create-ui-component" "$DISPATCH"; then
55
- pass "dispatch documents dual-name resolution (create-component / create-ui-component)"
56
- else
57
- fail "dispatch missing dual-name plugin resolution"
58
- fi
59
-
60
- echo ""
61
- echo "→ 4. dispatch layer owns subphase state + phase-tracker"
62
- if grep -Fq 'subphases[]' "$DISPATCH" && grep -Fq "phase-tracker" "$DISPATCH"; then
63
- pass "dispatch documents state.phases[3].subphases[] + phase-tracker"
64
- else
65
- fail "dispatch missing subphases[]/phase-tracker documentation"
66
- fi
67
-
68
- echo ""
69
- echo "→ 5. phase docs carry the progress-contract adoption marker"
70
- if grep -Fq "<!-- progress-contract: applied -->" "$PHASE3"; then
71
- pass "Phase 3 carries the adoption marker"
72
- else
73
- fail "Phase 3 missing the adoption marker"
74
- fi
75
- if grep -Fq "<!-- progress-contract: applied -->" "$PHASE0"; then
76
- pass "Phase 0 carries the adoption marker"
77
- else
78
- fail "Phase 0 missing the adoption marker"
79
- fi
80
-
81
- echo ""
82
- echo "→ 6. Phase 3 emits the plugin dispatch progress line"
83
- if grep -qE '→ dispatching create-component' "$PHASE3"; then
84
- pass "Phase 3 documents '→ dispatching create-component <name>' emission"
85
- else
86
- fail "Phase 3 missing dispatch progress line"
87
- fi
88
-
89
- echo ""
90
- echo "→ 7. dispatch has failure + retry semantics"
91
- if grep -Fq "retryCount" "$DISPATCH"; then
92
- pass "dispatch documents retryCount"
93
- else
94
- fail "dispatch missing retryCount documentation"
95
- fi
96
-
97
- echo ""
98
- echo "→ 8. dispatch covers multi-repo + intentional cross-CLI divergence"
99
- if grep -Fq 'state.projects[]' "$DISPATCH"; then
100
- pass "dispatch documents multi-repo report"
101
- else
102
- fail "dispatch missing multi-repo report paragraph"
103
- fi
104
- if grep -Fiq "Copilot" "$DISPATCH"; then
105
- pass "dispatch documents the Copilot cross-CLI divergence"
106
- else
107
- fail "dispatch missing cross-CLI divergence note"
108
- fi
109
-
110
- echo ""
111
- echo "══ figma-dispatch smoke: $PASS passed, $FAIL failed ══"
112
- [ "$FAIL" -eq 0 ]
@@ -1,74 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-gate-hooks.sh - the recommended Claude Code hooks template must be
3
- # valid JSON, wire the secret scan as a PreToolUse hook on git commit, and point
4
- # at the installed pre-commit-check.sh. This is the one gate that is OS-enforced
5
- # (a non-zero exit blocks the commit); the template is what makes it real for
6
- # end users instead of only the maintainer's local settings.
7
- #
8
- # Exit 0 = all pass, 1 = any failure.
9
-
10
- set -uo pipefail
11
-
12
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
13
- TMPL="$ROOT/install/templates/claude-hooks.json"
14
- PASS=0; FAIL=0
15
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
16
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
17
- command -v node >/dev/null 2>&1 || { echo "error: node required" >&2; exit 127; }
18
-
19
- [ -f "$TMPL" ] || { echo "FAIL: hooks template missing at $TMPL" >&2; exit 1; }
20
-
21
- # 1. valid JSON
22
- if node -e 'JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"))' "$TMPL" 2>/dev/null; then
23
- pass "hooks template is valid JSON"
24
- else
25
- fail "hooks template is not valid JSON"
26
- fi
27
-
28
- # 2. wires a PreToolUse hook on git commit -> pre-commit-check.sh
29
- node -e '
30
- const t = JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"));
31
- const pre = t.hooks && t.hooks.PreToolUse;
32
- if (!Array.isArray(pre) || pre.length === 0) { console.error("no PreToolUse"); process.exit(1); }
33
- const onCommit = pre.find(h => /git commit/.test(h.matcher || ""));
34
- if (!onCommit) { console.error("no git-commit matcher"); process.exit(1); }
35
- const cmds = (onCommit.hooks || []).map(h => h.command || "").join(" ");
36
- if (!/pre-commit-check\.sh/.test(cmds)) { console.error("does not call pre-commit-check.sh"); process.exit(1); }
37
- ' "$TMPL" 2>/dev/null && pass "template wires secret scan as PreToolUse on git commit" || fail "template does not wire the secret-scan hook"
38
-
39
- # 3. the referenced script exists in the source tree
40
- if [ -f "$ROOT/pipeline/scripts/pre-commit-check.sh" ]; then
41
- pass "pre-commit-check.sh exists to back the hook"
42
- else
43
- fail "pre-commit-check.sh missing"
44
- fi
45
-
46
- # 3b. template also wires agent-guard.sh on git commit AND git push
47
- node -e '
48
- const t = JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"));
49
- const pre = (t.hooks && t.hooks.PreToolUse) || [];
50
- const commit = pre.find(h => /git commit/.test(h.matcher || ""));
51
- const push = pre.find(h => /git push/.test(h.matcher || ""));
52
- const cmds = e => (e && e.hooks || []).map(h => h.command || "").join(" ");
53
- if (!/agent-guard\.sh/.test(cmds(commit))) { console.error("guard not on git commit"); process.exit(1); }
54
- if (!/agent-guard\.sh/.test(cmds(push))) { console.error("guard not on git push"); process.exit(1); }
55
- ' "$TMPL" 2>/dev/null && pass "template wires agent-guard on git commit + git push" || fail "template does not wire agent-guard on both matchers"
56
-
57
- # 3c. the guard scripts exist in the source tree
58
- if [ -f "$ROOT/pipeline/scripts/agent-guard.sh" ] && [ -f "$ROOT/pipeline/scripts/agent-guard.py" ]; then
59
- pass "agent-guard.sh + agent-guard.py exist to back the hook"
60
- else
61
- fail "agent-guard scripts missing"
62
- fi
63
-
64
- # 4. picker-contract documents the hook template + the phase-enforced caveat
65
- PC="$ROOT/pipeline/multi-agent-refs/picker-contract.md"
66
- if grep -q "claude-hooks.json" "$PC" && grep -q "phase-enforced" "$PC"; then
67
- pass "picker-contract references the template + the phase-enforced gates caveat"
68
- else
69
- fail "picker-contract does not document the hooks template honestly"
70
- fi
71
-
72
- echo ""
73
- echo "══ gate-hooks smoke: $PASS passed, $FAIL failed ══"
74
- [ "$FAIL" -eq 0 ]
@@ -1,130 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-gc-tmp.sh - gc-tmp.sh sweeps only known scratch prefixes, is dry-run
3
- # by default, never touches unrelated files, refuses unsafe scratch roots,
4
- # never deletes the root itself, and spares fresh scratch by default.
5
- #
6
- # Exit 0 = all pass, 1 = any failure.
7
-
8
- set -uo pipefail
9
-
10
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
11
- GC="$ROOT/pipeline/scripts/gc-tmp.sh"
12
- PASS=0
13
- FAIL=0
14
- pass() {
15
- PASS=$((PASS + 1))
16
- echo " ✓ $1"
17
- }
18
- fail() {
19
- FAIL=$((FAIL + 1))
20
- echo " ✗ $1"
21
- }
22
- [ -f "$GC" ] || {
23
- echo "FAIL: gc-tmp.sh missing" >&2
24
- exit 1
25
- }
26
-
27
- SB="$(mktemp -d)"
28
- trap 'rm -rf "$SB"' EXIT
29
-
30
- seed() {
31
- rm -rf "${SB:?}"/*
32
- mkdir -p "$SB/multi-agent-review-PROJ-1-x" "$SB/analysis-foo-123"
33
- touch "$SB/multi-agent-picker-PROJ-1.json" \
34
- "$SB/issue-progress-PROJ-1-ab.md" \
35
- "$SB/channels-PROJ-1-pr.md" \
36
- "$SB/context-links-PROJ-1.json" \
37
- "$SB/context-by-type-PROJ-1.json" \
38
- "$SB/unrelated-file.txt"
39
- }
40
-
41
- echo "→ 1. dry-run lists matches and deletes nothing"
42
- seed
43
- before=$(find "$SB" -mindepth 1 | wc -l | tr -d ' ')
44
- out=$(GC_TMP_ROOT="$SB" GC_TMP_GRACE_MIN=0 bash "$GC" 2>&1)
45
- after=$(find "$SB" -mindepth 1 | wc -l | tr -d ' ')
46
- echo "$out" | grep -q "DRY-RUN" && pass "dry-run banner shown" || fail "dry-run banner missing"
47
- [ "$before" = "$after" ] && pass "dry-run deleted nothing ($after entries intact)" || fail "dry-run changed the tree ($before -> $after)"
48
- echo "$out" | grep -q "unrelated-file.txt" && fail "dry-run matched an unrelated file" || pass "unrelated file not matched"
49
-
50
- echo ""
51
- echo "→ 2. --yes removes only matched scratch"
52
- seed
53
- GC_TMP_ROOT="$SB" GC_TMP_GRACE_MIN=0 bash "$GC" --yes >/dev/null 2>&1
54
- [ -f "$SB/unrelated-file.txt" ] && pass "unrelated file preserved" || fail "unrelated file was deleted"
55
- [ ! -e "$SB/multi-agent-picker-PROJ-1.json" ] && pass "multi-agent-* file removed" || fail "multi-agent-* file survived"
56
- [ ! -e "$SB/multi-agent-review-PROJ-1-x" ] && pass "scratch dir removed" || fail "scratch dir survived"
57
- [ ! -e "$SB/analysis-foo-123" ] && pass "analysis draft dir removed" || fail "analysis draft survived"
58
- [ ! -e "$SB/channels-PROJ-1-pr.md" ] && pass "channels payload removed" || fail "channels payload survived"
59
- remaining=$(find "$SB" -mindepth 1 | wc -l | tr -d ' ')
60
- [ "$remaining" = "1" ] && pass "exactly the 1 unrelated entry remains" || fail "expected 1 survivor, got $remaining"
61
-
62
- echo ""
63
- echo "→ 3. --older-than excludes fresh scratch"
64
- seed
65
- out=$(GC_TMP_ROOT="$SB" GC_TMP_GRACE_MIN=0 bash "$GC" --older-than=1 2>&1)
66
- echo "$out" | grep -q "nothing to do" && pass "freshly-created scratch excluded by --older-than=1" || fail "--older-than did not exclude fresh files"
67
-
68
- echo ""
69
- echo "→ 4. usage errors exit 2"
70
- GC_TMP_ROOT="$SB" bash "$GC" --bogus >/dev/null 2>&1
71
- [ "$?" = "2" ] && pass "unknown argument exits 2" || fail "unknown argument did not exit 2"
72
- GC_TMP_ROOT="$SB" bash "$GC" --older-than=abc >/dev/null 2>&1
73
- [ "$?" = "2" ] && pass "non-numeric --older-than exits 2" || fail "bad --older-than did not exit 2"
74
-
75
- echo ""
76
- echo "→ 5. empty root is a clean no-op"
77
- EMPTY="$(mktemp -d)"
78
- out=$(GC_TMP_ROOT="$EMPTY" bash "$GC" 2>&1)
79
- rc=$?
80
- rm -rf "$EMPTY"
81
- { [ "$rc" = "0" ] && echo "$out" | grep -q "nothing to do"; } && pass "empty root exits 0 with no-op message" || fail "empty root not a clean no-op"
82
-
83
- echo ""
84
- echo "→ 6. unsafe scratch roots are refused (exit 2)"
85
- GC_TMP_ROOT="$HOME" bash "$GC" >/dev/null 2>&1
86
- [ "$?" = "2" ] && pass "\$HOME as scratch root refused" || fail "\$HOME as scratch root not refused"
87
- GC_TMP_ROOT="/" bash "$GC" >/dev/null 2>&1
88
- [ "$?" = "2" ] && pass "/ as scratch root refused" || fail "/ as scratch root not refused"
89
- GITROOT="$(mktemp -d)"
90
- mkdir -p "$GITROOT/.git"
91
- touch "$GITROOT/multi-agent-bait.json"
92
- GC_TMP_ROOT="$GITROOT" bash "$GC" --yes >/dev/null 2>&1
93
- rc=$?
94
- [ "$rc" = "2" ] && pass "git work tree as scratch root refused" || fail "git work tree as scratch root not refused"
95
- [ -f "$GITROOT/multi-agent-bait.json" ] && pass "bait file inside refused root untouched" || fail "refused root was still swept"
96
- rm -rf "$GITROOT"
97
-
98
- echo ""
99
- echo "→ 7. a root itself named like scratch is never deleted"
100
- SR="$(mktemp -d)"
101
- mkdir -p "$SR/multi-agent-root"
102
- touch "$SR/multi-agent-root/multi-agent-inner.json"
103
- GC_TMP_ROOT="$SR/multi-agent-root" GC_TMP_GRACE_MIN=0 bash "$GC" --yes >/dev/null 2>&1
104
- [ -d "$SR/multi-agent-root" ] && pass "matching-named root survives --yes" || fail "root dir itself was deleted"
105
- [ ! -e "$SR/multi-agent-root/multi-agent-inner.json" ] && pass "inner scratch still removed" || fail "inner scratch survived"
106
- rm -rf "$SR"
107
-
108
- echo ""
109
- echo "→ 8. symlinked scratch is unlinked without following it"
110
- seed
111
- VICTIM="$(mktemp -d)"
112
- echo keep >"$VICTIM/keep.txt"
113
- ln -s "$VICTIM" "$SB/multi-agent-linked"
114
- GC_TMP_ROOT="$SB" GC_TMP_GRACE_MIN=0 bash "$GC" --yes >/dev/null 2>&1
115
- [ ! -e "$SB/multi-agent-linked" ] && pass "symlink itself removed" || fail "symlink survived"
116
- [ -f "$VICTIM/keep.txt" ] && pass "symlink target untouched" || fail "symlink target was deleted"
117
- rm -rf "$VICTIM"
118
-
119
- echo ""
120
- echo "→ 9. default grace spares fresh scratch"
121
- seed
122
- out=$(GC_TMP_ROOT="$SB" bash "$GC" --yes 2>&1)
123
- rc=$?
124
- [ "$rc" = "0" ] && pass "grace run exits 0" || fail "grace run exited $rc"
125
- [ -f "$SB/multi-agent-picker-PROJ-1.json" ] && pass "fresh scratch spared by default grace" || fail "default grace deleted fresh scratch"
126
- echo "$out" | grep -qi "spared" && pass "output mentions spared fresh items" || fail "no spared note in output"
127
-
128
- echo ""
129
- echo "══ gc-tmp smoke: $PASS passed, $FAIL failed ══"
130
- [ "$FAIL" -eq 0 ]
@@ -1,125 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-gc-worktrees.sh - contract of the worktree residue sweeper.
3
- #
4
- # Verifies gc-worktrees.sh: dry-run-by-default, orphan-dir removal only with
5
- # --yes, registered worktrees untouched, gitlink residue unstaged, exclude
6
- # guard added idempotently, --older-than sparing, non-repo no-op, and flag
7
- # validation.
8
-
9
- set -uo pipefail
10
-
11
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
12
- SCRIPT="$SCRIPT_DIR/gc-worktrees.sh"
13
-
14
- PASS=0
15
- FAIL=0
16
- record_pass() { PASS=$((PASS + 1)); printf ' \342\234\223 %s\n' "$1"; }
17
- record_fail() { FAIL=$((FAIL + 1)); printf ' \342\234\227 %s\n' "$1"; }
18
-
19
- printf '\342\206\222 smoke-gc-worktrees: worktree residue sweep contract\n'
20
-
21
- tmpdir=$(mktemp -d)
22
- trap 'rm -rf "$tmpdir"' EXIT
23
-
24
- # Fixture repo: one registered worktree, one orphan dir, one gitlink residue.
25
- REPO="$tmpdir/repo"
26
- mkdir -p "$REPO"
27
- git -C "$REPO" init -q -b main
28
- git -C "$REPO" config user.email smoke@test
29
- git -C "$REPO" config user.name smoke
30
- echo hi > "$REPO/f.txt"
31
- git -C "$REPO" add f.txt
32
- git -C "$REPO" commit -qm init
33
- git -C "$REPO" worktree add -q "$REPO/.worktrees/REG" -b reg-branch
34
- mkdir -p "$REPO/.worktrees/ORPHAN"
35
- echo x > "$REPO/.worktrees/ORPHAN/file"
36
- git -C "$REPO" update-index --add --cacheinfo "160000,$(git -C "$REPO" rev-parse HEAD),.worktrees/GONE"
37
-
38
- # 1. Script parses
39
- if bash -n "$SCRIPT" 2>/dev/null; then
40
- record_pass "gc-worktrees.sh parses (bash -n)"
41
- else
42
- record_fail "gc-worktrees.sh has syntax errors"
43
- fi
44
-
45
- # 2. Dry-run lists all three findings and deletes nothing
46
- out=$(bash "$SCRIPT" --repo "$REPO" 2>&1); rc=$?
47
- if [ "$rc" -eq 0 ] \
48
- && printf '%s' "$out" | grep -q "would remove orphan worktree dir: .worktrees/ORPHAN" \
49
- && printf '%s' "$out" | grep -q "would unstage gitlink residue from the index: .worktrees/GONE" \
50
- && printf '%s' "$out" | grep -q "would add .worktrees/ to .git/info/exclude"; then
51
- record_pass "dry-run lists orphan dir + gitlink + missing guard"
52
- else
53
- record_fail "dry-run should list all three findings (rc=$rc): $out"
54
- fi
55
- if [ -d "$REPO/.worktrees/ORPHAN" ] && git -C "$REPO" ls-files -s -- .worktrees | grep -q 160000; then
56
- record_pass "dry-run changed nothing"
57
- else
58
- record_fail "dry-run must not delete or unstage anything"
59
- fi
60
-
61
- # 3. --older-than spares the freshly-touched orphan
62
- out=$(bash "$SCRIPT" --repo "$REPO" --older-than=60 2>&1)
63
- if printf '%s' "$out" | grep -q "would remove orphan"; then
64
- record_fail "--older-than=60 should spare the fresh orphan dir"
65
- else
66
- record_pass "--older-than spares recently-touched orphan dirs"
67
- fi
68
-
69
- # 4. --yes applies all three
70
- out=$(bash "$SCRIPT" --repo "$REPO" --yes 2>&1); rc=$?
71
- if [ "$rc" -eq 0 ] && [ ! -d "$REPO/.worktrees/ORPHAN" ]; then
72
- record_pass "--yes removes the orphan dir"
73
- else
74
- record_fail "--yes should remove the orphan dir (rc=$rc): $out"
75
- fi
76
- if git -C "$REPO" ls-files -s -- .worktrees | grep -q 160000; then
77
- record_fail "--yes should unstage the gitlink residue"
78
- else
79
- record_pass "--yes unstages the gitlink residue"
80
- fi
81
- if [ "$(grep -cxF '.worktrees/' "$REPO/.git/info/exclude" 2>/dev/null)" = "1" ]; then
82
- record_pass "--yes adds the exclude guard exactly once"
83
- else
84
- record_fail "exclude guard missing or duplicated"
85
- fi
86
-
87
- # 5. Registered worktree untouched
88
- if [ -d "$REPO/.worktrees/REG" ] && git -C "$REPO" worktree list | grep -q "REG"; then
89
- record_pass "registered worktree left untouched"
90
- else
91
- record_fail "registered worktree must never be touched"
92
- fi
93
-
94
- # 6. Re-run -> nothing to do, guard not duplicated
95
- out=$(bash "$SCRIPT" --repo "$REPO" 2>&1); rc=$?
96
- if [ "$rc" -eq 0 ] && printf '%s' "$out" | grep -q "nothing to do"; then
97
- record_pass "clean repo -> nothing to do (exit 0)"
98
- else
99
- record_fail "clean repo should be a no-op (rc=$rc): $out"
100
- fi
101
- bash "$SCRIPT" --repo "$REPO" --yes >/dev/null 2>&1
102
- if [ "$(grep -cxF '.worktrees/' "$REPO/.git/info/exclude")" = "1" ]; then
103
- record_pass "exclude guard is idempotent across --yes reruns"
104
- else
105
- record_fail "exclude guard duplicated on rerun"
106
- fi
107
-
108
- # 7. Non-repo -> silent no-op exit 0
109
- out=$(bash "$SCRIPT" --repo "$tmpdir" 2>&1); rc=$?
110
- if [ "$rc" -eq 0 ] && printf '%s' "$out" | grep -q "not a git work tree"; then
111
- record_pass "non-repo -> exit 0 no-op"
112
- else
113
- record_fail "non-repo should exit 0 with a no-op message (rc=$rc)"
114
- fi
115
-
116
- # 8. Unknown flag -> usage error exit 2
117
- bash "$SCRIPT" --definitely-not-a-flag >/dev/null 2>&1; rc=$?
118
- if [ "$rc" -eq 2 ]; then
119
- record_pass "unknown flag -> exit 2"
120
- else
121
- record_fail "unknown flag should exit 2 (got $rc)"
122
- fi
123
-
124
- printf '\n\342\225\220\342\225\220 smoke-gc-worktrees: %d passed, %d failed \342\225\220\342\225\220\n' "$PASS" "$FAIL"
125
- [ "$FAIL" -eq 0 ]
@@ -1,120 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-generate-issue.sh - contract for /multi-agent:create-jira.
3
- #
4
- # Verifies:
5
- # 1. All 3 files exist (1 command, shared ref, 1 Copilot/plugin SKILL.md).
6
- # 2. Frontmatter keys present on both surfaces.
7
- # 3. Command delegates to refs/generate-issue.md and asks the issue type.
8
- # 4. Approval gate documented and marked unskippable in the ref.
9
- # 5. Convention mining + createmeta + Agile sprint endpoints present.
10
- # 6. UTF-8 verbatim POST path (--rawfile + --data-binary) present.
11
- # 7. Standard template vocab: Task/Story (Scope/Acceptance/Test Scenarios), Bug (Steps/Expected/Actual/Environment), Swagger.
12
- # 8. Registration: dispatcher rows, inventory lists, count derived from the command tree.
13
- # 9. Forbidden strings absent (em-dash, section sign, the M-word, unicode_escape).
14
-
15
- set -euo pipefail
16
-
17
- HERE="$(cd "$(dirname "$0")" && pwd)"
18
- ROOT="$(cd "$HERE/../.." && pwd)"
19
- CMD="$ROOT/pipeline/commands/multi-agent/create-jira/SKILL.md"
20
- REF="$ROOT/pipeline/multi-agent-refs/generate-issue.md"
21
- SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md"
22
- DISPATCHER="$ROOT/pipeline/commands/multi-agent/SKILL.md"
23
- CONTRACT="$ROOT/pipeline/multi-agent-refs/cross-cli-contract.md"
24
- CMD_COUNT=$(find "$ROOT/pipeline/commands/multi-agent" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')
25
- SYNC="$ROOT/pipeline/commands/multi-agent/sync/SKILL.md"
26
- HELP="$ROOT/pipeline/commands/multi-agent/help/SKILL.md"
27
-
28
- PASS=0
29
- FAIL=0
30
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
31
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
32
-
33
- echo "→ 1. files exist"
34
- for f in "$CMD" "$REF" "$SKILL"; do
35
- if [ -f "$f" ]; then pass "exists: ${f#$ROOT/}"; else fail "missing: ${f#$ROOT/}"; fi
36
- done
37
- # old split commands must be gone
38
- for f in "$ROOT/pipeline/commands/multi-agent/generate-task/SKILL.md" "$ROOT/pipeline/commands/multi-agent/generate-bug/SKILL.md"; do
39
- if [ -f "$f" ]; then fail "stale file present: ${f#$ROOT/}"; else pass "removed: ${f##*/}"; fi
40
- done
41
- [ "$FAIL" -eq 0 ] || { echo "══ generate-issue smoke: $PASS passed, $FAIL failed ══"; exit 1; }
42
-
43
- echo ""
44
- echo "→ 2. frontmatter keys"
45
- head -5 "$CMD" | grep -q '^description:' && pass "description: ${CMD##*/}" || fail "description missing: ${CMD##*/}"
46
- head -5 "$CMD" | grep -q '^argument-hint:' && pass "argument-hint: ${CMD##*/}" || fail "argument-hint missing: ${CMD##*/}"
47
- head -8 "$SKILL" | grep -q '^name: multi-agent-create-jira$' && pass "name: multi-agent-create-jira" || fail "name wrong: $SKILL"
48
- head -8 "$SKILL" | grep -q '^language: en' && pass "language en" || fail "language missing: $SKILL"
49
- head -8 "$SKILL" | grep -q '^user-invocable: true' && pass "user-invocable" || fail "user-invocable missing: $SKILL"
50
-
51
- echo ""
52
- echo "→ 3. command delegates to the shared ref and asks the type"
53
- grep -Fq "refs/generate-issue.md" "$CMD" && pass "ref link present" || fail "ref link missing"
54
- for t in "Task" "Bug" "Story"; do
55
- grep -Fq "$t" "$CMD" && pass "type offered: $t" || fail "type missing: $t"
56
- done
57
- grep -Fqi "Pick issue type" "$REF" && pass "type-selection step present" || fail "type-selection step missing"
58
-
59
- echo ""
60
- echo "→ 4. approval gate documented and unskippable"
61
- grep -Fq "Full preview + approval gate (never skipped)" "$REF" && pass "gate section present" || fail "gate section missing"
62
- for marker in "Approve" "Edit" "Cancel" "no bypass" "Nothing was created"; do
63
- grep -Fqi "$marker" "$REF" && pass "gate marker: $marker" || fail "gate marker missing: $marker"
64
- done
65
- grep -Fq "no autopilot variant" "$REF" && pass "no-autopilot rule" || fail "no-autopilot rule missing"
66
-
67
- echo ""
68
- echo "→ 5. mining + createmeta + agile endpoints"
69
- for marker in "rest/api/2/search" "rest/api/2/issue/createmeta" "rest/agile/1.0/board" "sprint?state=active" 'sprint/${SPRINT_ID}/issue' "remotelink" "attachments"; do
70
- grep -Fq "$marker" "$REF" && pass "endpoint marker: $marker" || fail "endpoint marker missing: $marker"
71
- done
72
- grep -Fq "gh-sprint" "$REF" && pass "generic sprint-field detection" || fail "generic sprint-field detection missing"
73
-
74
- echo ""
75
- echo "→ 6. UTF-8 verbatim POST path"
76
- grep -Fq -- "--rawfile" "$REF" && pass "--rawfile present" || fail "--rawfile missing"
77
- grep -Fq -- "--data-binary" "$REF" && pass "--data-binary present" || fail "--data-binary missing"
78
- grep -Fqi "humanizer" "$REF" && pass "humanizer pass referenced" || fail "humanizer missing"
79
-
80
- echo ""
81
- echo "→ 7. standard template vocabulary + auto-sizing + swagger"
82
- for s in "Scope" "Acceptance Criteria" "Test Scenarios"; do
83
- grep -Fq "$s" "$REF" && pass "task/story section: $s" || fail "task/story section missing: $s"
84
- done
85
- for s in "Steps to Reproduce" "Expected Result" "Actual Result" "Environment"; do
86
- grep -Fq "$s" "$REF" && pass "bug section: $s" || fail "bug section missing: $s"
87
- done
88
- grep -Fqi "auto-sizing" "$REF" && pass "auto-sizing rule present" || fail "auto-sizing rule missing"
89
- grep -Fqi "swagger" "$REF" && pass "swagger context present" || fail "swagger context missing"
90
-
91
- echo ""
92
- echo "→ 8. registration + count consistency (derived)"
93
- grep -Fq '| `create-jira ' "$DISPATCHER" && pass "dispatcher routing: create-jira" || fail "dispatcher routing missing: generate"
94
- grep -Fq "create-jira/SKILL.md" "$DISPATCHER" && pass "dispatcher loading row" || fail "dispatcher loading row missing"
95
- grep -Fq "## 1. Command Inventory ($CMD_COUNT commands)" "$CONTRACT" && pass "contract count = $CMD_COUNT (derived)" || fail "contract count wrong"
96
- grep -Eq '(^|[ ,])create-jira([ ,]|$)' "$CONTRACT" && pass "contract list has create-jira" || fail "contract list missing generate"
97
- grep -Fq "**$CMD_COUNT commands are synced**" "$SYNC" && pass "sync count = $CMD_COUNT (derived)" || fail "sync count wrong"
98
- SYNC_SKILL="$ROOT/pipeline/skills/shared/core/multi-agent-sync/SKILL.md"
99
- grep -Fq "**$CMD_COUNT commands are synced**" "$SYNC_SKILL" && pass "sync SKILL count = $CMD_COUNT (derived)" || fail "sync SKILL count wrong (Copilot parity)"
100
- grep -Fq "create-jira" "$ROOT/pipeline/skills/shared/core/multi-agent-help/SKILL.md" && pass "help SKILL lists create-jira" || fail "help SKILL missing create-jira (Copilot parity)"
101
- grep -c "multi-agent:create-jira" "$HELP" | awk '{exit !($1>=2)}' && pass "help.md has EN + TR entries" || fail "help.md entries incomplete"
102
- # no stale split-command references anywhere in the synced surfaces
103
- if grep -rqE "generate-task|generate-bug" "$DISPATCHER" "$CONTRACT" "$SYNC" "$HELP" "$CMD" "$REF" "$SKILL"; then
104
- fail "stale generate-task/generate-bug reference found"
105
- else
106
- pass "no stale split-command references"
107
- fi
108
-
109
- echo ""
110
- echo "→ 9. forbidden strings absent"
111
- MWORD="MAN""DATORY"
112
- for f in "$CMD" "$REF" "$SKILL"; do
113
- if grep -q $'—\|§\|…' "$f"; then fail "forbidden unicode punctuation in ${f##*/}"; else pass "punctuation clean: ${f##*/}"; fi
114
- if grep -q "$MWORD" "$f"; then fail "forbidden word in ${f##*/}"; else pass "vocabulary clean: ${f##*/}"; fi
115
- if grep -q "unicode_escape" "$f" && ! grep -q "Never round-trip" "$f"; then fail "unicode_escape misuse in ${f##*/}"; else pass "encoding rule clean: ${f##*/}"; fi
116
- done
117
-
118
- echo ""
119
- echo "══ generate-issue smoke: $PASS passed, $FAIL failed ══"
120
- [ "$FAIL" -eq 0 ]
@@ -1,92 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-handoff-contract.sh
3
- #
4
- # Verifies the v10.8.0 structured-handoff contract (fresh-context re-entry):
5
- # 1. operations.md documents the Handoff block with all 5 required lines
6
- # 2. operations.md compaction trigger re-reads state AND the latest handoff
7
- # 3. log-format.md documents the Handoff section in the canonical log shape
8
- # 4. resume.md Step 3 reads the latest handoff FIRST with pre-v10.8 fallback
9
- #
10
- # Exit 0 = all pass, 1 = any failure.
11
-
12
- set -euo pipefail
13
-
14
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
15
- OPS="$ROOT/pipeline/multi-agent-refs/phases/operations.md"
16
- LOGFMT="$ROOT/pipeline/multi-agent-refs/phases/log-format.md"
17
- RESUME="$ROOT/pipeline/commands/multi-agent/resume/SKILL.md"
18
-
19
- pass=0
20
- fail=0
21
- failures=()
22
- record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
23
- record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
24
-
25
- printf '→ smoke-handoff-contract: structured handoff (fresh-context re-entry)\n'
26
-
27
- # 1. operations.md documents the Handoff block with the 5 required lines
28
- if [ ! -f "$OPS" ]; then
29
- record_fail "operations.md missing"
30
- else
31
- if grep -qF "Handoff block (v10.8.0)" "$OPS"; then
32
- record_pass "operations.md documents the Handoff block"
33
- else
34
- record_fail "operations.md missing 'Handoff block (v10.8.0)' spec"
35
- fi
36
- for line in "- Done:" "- Remaining:" "- Decisions:" "- Open findings:" "- Next:"; do
37
- if grep -qF -- "$line" "$OPS"; then
38
- record_pass "operations.md handoff spec has '$line'"
39
- else
40
- record_fail "operations.md handoff spec missing '$line'"
41
- fi
42
- done
43
- if grep -qF "no agent dispatch, no extra LLM call" "$OPS"; then
44
- record_pass "operations.md states handoff is orchestrator-written (no LLM call)"
45
- else
46
- record_fail "operations.md must state the handoff costs no LLM call"
47
- fi
48
- fi
49
-
50
- # 2. Compaction trigger re-reads state AND latest handoff
51
- if grep -qE 'agent-state\.json.*AND the latest.*Handoff' "$OPS"; then
52
- record_pass "compaction trigger re-reads state + latest handoff"
53
- else
54
- record_fail "operations.md compaction trigger must re-read agent-state.json AND the latest Handoff block"
55
- fi
56
-
57
- # 3. log-format.md documents the Handoff section
58
- if grep -qF "## Handoff - end of Phase" "$LOGFMT"; then
59
- record_pass "log-format.md documents the Handoff section"
60
- else
61
- record_fail "log-format.md missing the Handoff section"
62
- fi
63
- if grep -qF "LATEST block is authoritative" "$LOGFMT"; then
64
- record_pass "log-format.md states latest-block-wins semantics"
65
- else
66
- record_fail "log-format.md must state the latest handoff block is authoritative"
67
- fi
68
-
69
- # 4. resume.md reads handoff first, with fallback for older logs
70
- if grep -qE 'LATEST .?## Handoff.? block' "$RESUME"; then
71
- record_pass "resume.md Step 3 reads the latest Handoff block first"
72
- else
73
- record_fail "resume.md Step 3 must read the latest Handoff block first"
74
- fi
75
- if grep -qiF "fall back to per-phase findings" "$RESUME"; then
76
- record_pass "resume.md keeps the pre-v10.8 per-phase fallback"
77
- else
78
- record_fail "resume.md must keep the pre-v10.8 per-phase findings fallback"
79
- fi
80
- if grep -qF "trust state on mismatch" "$RESUME"; then
81
- record_pass "resume.md defines state-wins conflict rule"
82
- else
83
- record_fail "resume.md must define the handoff-vs-state conflict rule (state wins)"
84
- fi
85
-
86
- printf '\n══ handoff-contract smoke: %d passed, %d failed ══\n' "$pass" "$fail"
87
- if [ "$fail" -gt 0 ]; then
88
- printf '\nFailures:\n'
89
- for msg in "${failures[@]}"; do printf ' - %s\n' "$msg"; done
90
- exit 1
91
- fi
92
- exit 0