@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,67 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-validator-contradiction.sh - verify bidirectional approved↔blocking auto-correction.
3
- # Tests both directions of the triage validator's contradiction detection.
4
-
5
- set -uo pipefail
6
-
7
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8
- VALIDATOR="$SCRIPT_DIR/validate-triage.mjs"
9
-
10
- PASS=0
11
- FAIL=0
12
-
13
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
14
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
15
-
16
- echo "→ 1. approved=false but no blocking items → auto-correct to true (exit 3)"
17
- RESULT=$(echo '{"accepted":[{"severity":"suggestion","file":"x.ts","line":1,"issue":"naming convention","fix":"rename to camelCase","reviewer":"opus"}],"deferred":[],"rejected":[],"approved":false}' | node "$VALIDATOR" -)
18
- CODE=$?
19
- if [ "$CODE" -eq 3 ]; then pass "exit code 3 (contradiction corrected)"; else fail "expected exit 3, got $CODE"; fi
20
- CORRECTED=$(echo "$RESULT" | jq -r '.corrected.approved')
21
- if [ "$CORRECTED" = "true" ]; then pass "corrected.approved == true"; else fail "corrected.approved = $CORRECTED, expected true"; fi
22
-
23
- echo ""
24
- echo "→ 2. approved=true but has blocking item → auto-correct to false (exit 3)"
25
- RESULT=$(echo '{"accepted":[{"severity":"blocking","file":"auth.ts","line":42,"issue":"SQL injection vulnerability","fix":"use parameterized query","reviewer":"opus"}],"deferred":[],"rejected":[],"approved":true}' | node "$VALIDATOR" -)
26
- CODE=$?
27
- if [ "$CODE" -eq 3 ]; then pass "exit code 3 (contradiction corrected)"; else fail "expected exit 3, got $CODE"; fi
28
- CORRECTED=$(echo "$RESULT" | jq -r '.corrected.approved')
29
- if [ "$CORRECTED" = "false" ]; then pass "corrected.approved == false"; else fail "corrected.approved = $CORRECTED, expected false"; fi
30
-
31
- echo ""
32
- echo "→ 3. approved=true with no blocking → valid (exit 0)"
33
- RESULT=$(echo '{"accepted":[{"severity":"important","file":"x.ts","line":1,"issue":"missing null check","fix":"add guard clause","reviewer":"sonnet"}],"deferred":[],"rejected":[],"approved":true}' | node "$VALIDATOR" -)
34
- CODE=$?
35
- if [ "$CODE" -eq 0 ]; then pass "exit code 0 (valid, no contradiction)"; else fail "expected exit 0, got $CODE"; fi
36
- OK=$(echo "$RESULT" | jq -r '.ok')
37
- if [ "$OK" = "true" ]; then pass "ok == true"; else fail "ok = $OK, expected true"; fi
38
-
39
- echo ""
40
- echo "→ 4. approved=false with blocking → valid (exit 0)"
41
- RESULT=$(echo '{"accepted":[{"severity":"blocking","file":"x.ts","line":1,"issue":"memory leak in closure","fix":"add [weak self]","reviewer":"opus"}],"deferred":[],"rejected":[],"approved":false}' | node "$VALIDATOR" -)
42
- CODE=$?
43
- if [ "$CODE" -eq 0 ]; then pass "exit code 0 (valid, correct state)"; else fail "expected exit 0, got $CODE"; fi
44
- OK=$(echo "$RESULT" | jq -r '.ok')
45
- if [ "$OK" = "true" ]; then pass "ok == true"; else fail "ok = $OK, expected true"; fi
46
-
47
- echo ""
48
- echo "→ 5. empty accepted + approved=true → valid (exit 0)"
49
- RESULT=$(echo '{"accepted":[],"deferred":[],"rejected":[],"approved":true}' | node "$VALIDATOR" -)
50
- CODE=$?
51
- if [ "$CODE" -eq 0 ]; then pass "exit code 0 (empty, approved=true is correct)"; else fail "expected exit 0, got $CODE"; fi
52
-
53
- echo ""
54
- echo "→ 6. all suggestions + approved=false → auto-correct (exit 3)"
55
- RESULT=$(echo '{"accepted":[{"severity":"suggestion","file":"a.ts","line":1,"issue":"test name convention","fix":"rename test","reviewer":"sonnet"},{"severity":"suggestion","file":"b.ts","line":2,"issue":"unused import","fix":"remove import","reviewer":"opus"}],"deferred":[],"rejected":[],"approved":false}' | node "$VALIDATOR" -)
56
- CODE=$?
57
- if [ "$CODE" -eq 3 ]; then pass "exit code 3 (no blockers, corrected to true)"; else fail "expected exit 3, got $CODE"; fi
58
-
59
- echo ""
60
- echo "→ 7. mixed blocking+suggestion + approved=true → auto-correct to false (exit 3)"
61
- RESULT=$(echo '{"accepted":[{"severity":"blocking","file":"a.ts","line":1,"issue":"auth bypass","fix":"add auth check","reviewer":"opus"},{"severity":"suggestion","file":"b.ts","line":2,"issue":"naming","fix":"rename","reviewer":"sonnet"}],"deferred":[],"rejected":[],"approved":true}' | node "$VALIDATOR" -)
62
- CODE=$?
63
- if [ "$CODE" -eq 3 ]; then pass "exit code 3 (has blocker, corrected to false)"; else fail "expected exit 3, got $CODE"; fi
64
-
65
- echo ""
66
- echo "══ validator-contradiction smoke: $PASS passed, $FAIL failed ══"
67
- [ "$FAIL" -eq 0 ]
@@ -1,164 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-validator-gates.sh - v9.11.0
3
- #
4
- # Validates that the orchestrator phase docs wire the structured-output
5
- # validators (validate-analysis / validate-planning / validate-reviewer /
6
- # validate-triage) as deterministic gates, not just npm-test fixtures.
7
- #
8
- # Without this, a malformed analysis spec, plan, reviewer verdict, or triage
9
- # verdict flows downstream unchecked - the validators existed but only ran
10
- # in `npm test`, never in the live pipeline.
11
- #
12
- # What this enforces:
13
- # 1. Each validator accepts a FILE argument (the gate invocation form) and
14
- # exits 0 on a valid artifact / 1 on a malformed one.
15
- # 2. phase-1-analysis.md gates the analysis object via validate-analysis.mjs.
16
- # 3. phase-2-planning.md gates the plan object via validate-planning.mjs.
17
- # 4. phase-4-review.md gates reviewer outputs via validate-reviewer.mjs AND
18
- # the triage verdict via validate-triage.mjs.
19
- # 5. Every gate block documents the failure protocol: emit stderr, ONE
20
- # self-correction rework, re-run, then HALT with a recovery hint.
21
- #
22
- # What this does NOT enforce:
23
- # - Runtime - that the agent actually invokes the gate. This smoke catches
24
- # the prompt-side gap, same as smoke-tracker-contract.sh.
25
-
26
- set -euo pipefail
27
-
28
- REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
29
- SCRIPTS_DIR="$REPO_ROOT/pipeline/scripts"
30
- PHASES_DIR="$REPO_ROOT/pipeline/multi-agent-refs/phases"
31
-
32
- PASS=0
33
- FAIL=0
34
- pass() { PASS=$((PASS + 1)); echo " ✓ $1"; }
35
- fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
36
-
37
- command -v node >/dev/null 2>&1 || { echo "error: node required" >&2; exit 127; }
38
-
39
- TMP="$(mktemp -d)"
40
- trap 'rm -rf "$TMP"' EXIT
41
-
42
- # ──────────────────────────────────────────────────────────────────────────
43
- echo "→ 1. Validators exist and accept a file argument (gate invocation form)"
44
-
45
- printf '%s' '{"stack":{"primary":"ios"},"touchedAreas":[{"path":"Sources/App/Login.swift","why":"target of the change"}],"risks":[],"summary":"Valid analysis fixture used by the validator-gates smoke."}' > "$TMP/analysis.json"
46
- printf '%s' '{"approved":true,"tasks":[{"id":"T1","title":"Add validator gate","type":"code","files":["Sources/App/Login.swift"]}]}' > "$TMP/plan.json"
47
- printf '%s' '{"findings":[],"approved":true}' > "$TMP/reviewer.json"
48
- printf '%s' '{"accepted":[],"deferred":[],"rejected":[],"approved":true}' > "$TMP/triage.json"
49
-
50
- declare -a CHECKS=(
51
- "validate-analysis.mjs|$TMP/analysis.json"
52
- "validate-planning.mjs|$TMP/plan.json"
53
- "validate-reviewer.mjs|$TMP/reviewer.json"
54
- "validate-triage.mjs|$TMP/triage.json"
55
- )
56
- for entry in "${CHECKS[@]}"; do
57
- validator="${entry%%|*}"
58
- fixture="${entry##*|}"
59
- if [ ! -f "$SCRIPTS_DIR/$validator" ]; then
60
- fail "$validator missing under pipeline/scripts/"
61
- continue
62
- fi
63
- if node "$SCRIPTS_DIR/$validator" "$fixture" >/dev/null 2>&1; then
64
- pass "$validator accepts a file argument (exit 0 on valid fixture)"
65
- else
66
- fail "$validator rejected a valid fixture via file argument"
67
- fi
68
- done
69
-
70
- rc=0
71
- printf '%s' '{}' > "$TMP/malformed.json"
72
- node "$SCRIPTS_DIR/validate-analysis.mjs" "$TMP/malformed.json" >/dev/null 2>&1 || rc=$?
73
- if [ "$rc" -eq 1 ]; then
74
- pass "validate-analysis.mjs fails CLOSED on a malformed file (exit 1)"
75
- else
76
- fail "validate-analysis.mjs malformed-file exit wrong (got $rc, expected 1)"
77
- fi
78
-
79
- # ──────────────────────────────────────────────────────────────────────────
80
- echo "→ 2. Phase docs carry the file-based gate invocation marker"
81
-
82
- declare -a GATES=(
83
- "phase-1-analysis.md|validate-analysis.mjs \"\$ANALYSIS_FILE\""
84
- "phase-2-planning.md|validate-planning.mjs \"\$PLAN_FILE\""
85
- "phase-4-review.md|validate-reviewer.mjs \"\$REVIEWER_FILE\""
86
- "phase-4-review.md|validate-triage.mjs \"\$TRIAGE_FILE\""
87
- )
88
- for entry in "${GATES[@]}"; do
89
- doc="${entry%%|*}"
90
- marker="${entry##*|}"
91
- if [ ! -f "$PHASES_DIR/$doc" ]; then
92
- fail "$doc missing"
93
- continue
94
- fi
95
- if grep -qF "$marker" "$PHASES_DIR/$doc"; then
96
- pass "$doc invokes $marker"
97
- else
98
- fail "$doc missing gate invocation marker: $marker"
99
- fi
100
- done
101
-
102
- # ──────────────────────────────────────────────────────────────────────────
103
- echo "→ 3. Gate invocations use the installed-scripts path (\$HOME/.claude/scripts)"
104
-
105
- declare -a INSTALLED=(
106
- "phase-1-analysis.md|validate-analysis.mjs"
107
- "phase-2-planning.md|validate-planning.mjs"
108
- "phase-4-review.md|validate-reviewer.mjs"
109
- "phase-4-review.md|validate-triage.mjs"
110
- )
111
- for entry in "${INSTALLED[@]}"; do
112
- doc="${entry%%|*}"
113
- validator="${entry##*|}"
114
- if grep -qF "\$HOME/.claude/scripts/$validator" "$PHASES_DIR/$doc" 2>/dev/null; then
115
- pass "$doc invokes \$HOME/.claude/scripts/$validator"
116
- else
117
- fail "$doc missing \$HOME/.claude/scripts/$validator invocation"
118
- fi
119
- done
120
-
121
- # ──────────────────────────────────────────────────────────────────────────
122
- echo "→ 4. Every gate block documents the failure protocol (rework once, then halt)"
123
-
124
- declare -a PROTOCOL_DOCS=(
125
- "phase-1-analysis.md"
126
- "phase-2-planning.md"
127
- "phase-4-review.md"
128
- )
129
- for doc in "${PROTOCOL_DOCS[@]}"; do
130
- full="$PHASES_DIR/$doc"
131
- [ -f "$full" ] || { fail "$doc missing"; continue; }
132
- if grep -qi "ONE self-correction rework" "$full"; then
133
- pass "$doc documents the single self-correction rework"
134
- else
135
- fail "$doc missing the self-correction rework step"
136
- fi
137
- if grep -q "HALT the phase" "$full"; then
138
- pass "$doc halts the phase on second validator failure"
139
- else
140
- fail "$doc missing the halt-on-second-failure rule"
141
- fi
142
- done
143
-
144
- # Recovery hints name the validator and the schema to inspect.
145
- declare -a HINTS=(
146
- "phase-1-analysis.md|failed validate-analysis.mjs twice"
147
- "phase-2-planning.md|failed validate-planning.mjs twice"
148
- "phase-4-review.md|failed validate-reviewer.mjs twice"
149
- "phase-4-review.md|failed validate-triage.mjs twice"
150
- )
151
- for entry in "${HINTS[@]}"; do
152
- doc="${entry%%|*}"
153
- hint="${entry##*|}"
154
- if grep -qF "$hint" "$PHASES_DIR/$doc" 2>/dev/null; then
155
- pass "$doc carries recovery hint: $hint"
156
- else
157
- fail "$doc missing recovery hint: $hint"
158
- fi
159
- done
160
-
161
- # ──────────────────────────────────────────────────────────────────────────
162
- echo ""
163
- echo "══ validator-gates smoke: $PASS passed, $FAIL failed ══"
164
- [ "$FAIL" -eq 0 ]
@@ -1,129 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # smoke-vercel-deploy-redact.sh - verify pipeline/lib/vercel-deploy.sh
4
- # scrubs every known token-leak shape from CLI output.
5
- #
6
- # Background: v7.9.1 production deploy failed with the Vercel CLI
7
- # printing `vercel deploy --token=vcp_...` in the retry hint. The token leaked
8
- # into the conversation transcript and required rotation. v8.0.0 added
9
- # vercel-deploy.sh as the safe wrapper. This smoke is the regression gate -
10
- # any future change to the redact filter must keep these patterns covered.
11
- #
12
- # Patterns under test:
13
- # - --token=vcp_<hex> (the original 7.9.1 leak shape)
14
- # - --token vcp_<hex> (space-separated argv)
15
- # - vcp_<bare> (token-only mention)
16
- # - Bearer <jwt-ish> (HTTP auth header)
17
- # - "token":"<val>" (JSON body)
18
- # - "VERCEL_TOKEN":"<val>" (env-dump JSON)
19
- #
20
- # Exit codes: 0=pass, 1=at least one pattern survived redaction
21
- set -euo pipefail
22
-
23
- REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
24
- WRAPPER="$REPO_ROOT/pipeline/lib/vercel-deploy.sh"
25
-
26
- [ -x "$WRAPPER" ] || chmod +x "$WRAPPER" 2>/dev/null || true
27
- [ -f "$WRAPPER" ] || { echo "FAIL: vercel-deploy.sh missing"; exit 2; }
28
-
29
- PASS=0
30
- FAIL=0
31
- pass() { echo " ✓ $*"; PASS=$((PASS + 1)); }
32
- fail() { echo " ✗ $*"; FAIL=$((FAIL + 1)); }
33
-
34
- assert_redacts() {
35
- local label="$1"
36
- local input="$2"
37
- local must_not_contain="$3"
38
- local out
39
- out=$(printf '%s' "$input" | bash "$WRAPPER" redact)
40
- if echo "$out" | grep -qE "$must_not_contain"; then
41
- fail "$label - leak survived: $(echo "$out" | grep -oE "$must_not_contain" | head -1)"
42
- else
43
- pass "$label"
44
- fi
45
- }
46
-
47
- # --- Pattern 1: --token=vcp_... (original v7.9.1 leak) ---
48
- assert_redacts "--token=vcp_... argv form scrubbed" \
49
- 'Run `vercel deploy --token=vcp_AbCdEf123456789abcdef --prod` to retry' \
50
- 'vcp_AbCdEf123456789abcdef'
51
-
52
- # --- Pattern 2: --token <space> vcp_... ---
53
- assert_redacts "--token <space> argv form scrubbed" \
54
- 'next.command: vercel deploy --token vcp_QwertyUiopASDFghj1234' \
55
- 'vcp_QwertyUiopASDFghj1234'
56
-
57
- # --- Pattern 3: bare vcp_... token mention ---
58
- assert_redacts "bare vcp_... token mention scrubbed" \
59
- 'Authentication failed for token vcp_BareLeak987654321xyz on retry.' \
60
- 'vcp_BareLeak987654321xyz'
61
-
62
- # --- Pattern 4: Bearer <jwt-ish> auth header ---
63
- assert_redacts "Bearer <jwt> auth header scrubbed" \
64
- 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0In0.signature' \
65
- 'eyJhbGciOiJIUzI1NiJ9'
66
-
67
- # --- Pattern 5: "token":"<val>" JSON body ---
68
- assert_redacts '"token":"<val>" JSON body scrubbed' \
69
- '{"token":"vcp_JsonBodyLeak555","scope":"deploy"}' \
70
- 'vcp_JsonBodyLeak555'
71
-
72
- # --- Pattern 6: "VERCEL_TOKEN":"<val>" env-dump JSON ---
73
- assert_redacts '"VERCEL_TOKEN":"<val>" env-dump scrubbed' \
74
- 'env: { "VERCEL_TOKEN":"vcp_EnvDumpLeak777", "NODE_ENV":"production" }' \
75
- 'vcp_EnvDumpLeak777'
76
-
77
- # --- Pattern 7: multi-line CLI failure dump (real-world shape from v7.9.1) ---
78
- multiline=$'Error: failed to deploy\n next.command: vercel deploy --token=vcp_RealDumpLeak888 --prod\n retry: yes'
79
- assert_redacts "multi-line CLI failure dump scrubbed" \
80
- "$multiline" \
81
- 'vcp_RealDumpLeak888'
82
-
83
- # --- Negative: non-token text passes through unchanged ---
84
- echo ""
85
- echo "→ Negative cases - non-token text MUST pass through verbatim"
86
- sample='Deployment URL: https://example.vercel.app/page (200 OK)'
87
- roundtrip=$(printf '%s' "$sample" | bash "$WRAPPER" redact)
88
- if [ "$roundtrip" = "$sample" ]; then
89
- pass "innocuous output unchanged"
90
- else
91
- fail "redactor mangled innocuous output: '$roundtrip' != '$sample'"
92
- fi
93
-
94
- # --- Wrapper guard: refuses --token argv ---
95
- echo ""
96
- echo "→ Wrapper guard - refuses to deploy with --token argv"
97
- guard_out=$(VERCEL_TOKEN=vcp_GuardCheck111 bash "$WRAPPER" deploy --token=vcp_BadArg 2>&1 || true)
98
- if echo "$guard_out" | grep -q "refused to deploy with --token argv"; then
99
- pass "wrapper rejects --token argv with explicit error"
100
- else
101
- fail "wrapper did not reject --token argv (output: $guard_out)"
102
- fi
103
- # Verify the refusal message itself doesn't leak the bad token
104
- if echo "$guard_out" | grep -q "vcp_BadArg"; then
105
- fail "refusal message leaked the bad token (vcp_BadArg)"
106
- else
107
- pass "refusal message does not echo the offending token"
108
- fi
109
-
110
- # --- Doctor mode runs without VERCEL_TOKEN crashing ---
111
- echo ""
112
- echo "→ doctor subcommand"
113
- doctor_out=$(VERCEL_TOKEN= bash "$WRAPPER" doctor 2>&1 || true)
114
- if echo "$doctor_out" | grep -q "VERCEL_TOKEN: unset"; then
115
- pass "doctor reports unset token clearly"
116
- else
117
- fail "doctor did not handle unset VERCEL_TOKEN gracefully"
118
- fi
119
-
120
- doctor_set_out=$(VERCEL_TOKEN=vcp_DoctorTokenABCDEF12345 bash "$WRAPPER" doctor 2>&1 || true)
121
- if echo "$doctor_set_out" | grep -q "vcp_DoctorTokenABCDEF12345"; then
122
- fail "doctor leaked the token in set-mode output"
123
- else
124
- pass "doctor masks the token in set-mode output"
125
- fi
126
-
127
- echo ""
128
- echo "══ smoke-vercel-deploy-redact: $PASS passed, $FAIL failed ══"
129
- [ "$FAIL" -gt 0 ] && exit 1 || exit 0
@@ -1,148 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-verify-by-test.sh
3
- #
4
- # Verifies the Phase 4 Step 3.7 verify-by-test contract:
5
- # 1. phase-4-review.md documents Step 3.7 with evidence-gate invocation + feature-doc pointer
6
- # 2. refs/features/verify-by-test.md exists and covers the verdict table + red-test handoff
7
- # 3. prefs.schema.json exposes global.verifyByTest.{enabled,maxFindings,model,stepTimeoutSec}
8
- # 4. verifyByTest.enabled defaults to false (opt-in, no surprise cost)
9
- # 5. triage-output.schema.json is v3.2.0 with the $defs.verification result enum
10
- # 6. validate-triage.mjs accepts a valid `confirmed` verification and rejects bad ones
11
- # 7. phase-3-dev.md documents the redTests rework re-entry
12
- #
13
- # Exit 0 = all pass, 1 = any failure.
14
-
15
- set -euo pipefail
16
-
17
- ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
18
- PHASE4_DOC="$ROOT/pipeline/multi-agent-refs/phases/phase-4-review.md"
19
- PHASE3_DOC="$ROOT/pipeline/multi-agent-refs/phases/phase-3-dev.md"
20
- FEATURE_DOC="$ROOT/pipeline/multi-agent-refs/features/verify-by-test.md"
21
- PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
22
- TRIAGE_SCHEMA="$ROOT/pipeline/schemas/triage-output.schema.json"
23
- VALIDATOR="$ROOT/pipeline/scripts/validate-triage.mjs"
24
-
25
- pass=0
26
- fail=0
27
- failures=()
28
- record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
29
- record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
30
-
31
- printf '→ smoke-verify-by-test: Phase 4 Step 3.7 contract\n'
32
-
33
- # 1. Phase 4 doc documents Step 3.7
34
- if [ ! -f "$PHASE4_DOC" ]; then
35
- record_fail "phase-4-review.md missing"
36
- else
37
- if grep -qF "3.7 Verify-by-test" "$PHASE4_DOC"; then
38
- record_pass "phase-4-review.md documents Step 3.7"
39
- else
40
- record_fail "phase-4-review.md missing Step 3.7 section"
41
- fi
42
- if grep -qF "evidence-gate.mjs --claim test --status passed" "$PHASE4_DOC"; then
43
- record_pass "Step 3.7 downgrade is evidence-gated"
44
- else
45
- record_fail "Step 3.7 must gate downgrades via evidence-gate.mjs --claim test --status passed"
46
- fi
47
- if grep -qF "refs/features/verify-by-test.md" "$PHASE4_DOC"; then
48
- record_pass "phase-4-review.md points to the feature doc"
49
- else
50
- record_fail "phase-4-review.md must reference refs/features/verify-by-test.md"
51
- fi
52
- if grep -qF "review.verify_by_test" "$PHASE4_DOC"; then
53
- record_pass "Step 3.7 emits review.verify_by_test telemetry"
54
- else
55
- record_fail "Step 3.7 must document the review.verify_by_test metric"
56
- fi
57
- fi
58
-
59
- # 2. Feature doc exists with verdict + handoff coverage
60
- if [ ! -f "$FEATURE_DOC" ]; then
61
- record_fail "refs/features/verify-by-test.md missing"
62
- else
63
- for token in "not-reproduced" "inconclusive" "redTests" "Off by default"; do
64
- if grep -qF "$token" "$FEATURE_DOC"; then
65
- record_pass "feature doc covers '$token'"
66
- else
67
- record_fail "feature doc missing '$token'"
68
- fi
69
- done
70
- fi
71
-
72
- # 3. Prefs schema exposes verifyByTest knobs
73
- for prop in enabled maxFindings model stepTimeoutSec; do
74
- if jq -e ".properties.global.properties.verifyByTest.properties.${prop}" "$PREFS_SCHEMA" >/dev/null 2>&1; then
75
- record_pass "prefs schema exposes verifyByTest.${prop}"
76
- else
77
- record_fail "prefs schema missing verifyByTest.${prop}"
78
- fi
79
- done
80
-
81
- # 4. Off by default - preserves existing-user baseline
82
- if jq -e '.properties.global.properties.verifyByTest.properties.enabled
83
- | has("default") and .default == false' "$PREFS_SCHEMA" >/dev/null 2>&1; then
84
- record_pass "verifyByTest.enabled defaults to false (opt-in)"
85
- else
86
- record_fail "verifyByTest.enabled must default to false"
87
- fi
88
-
89
- # 5. Triage schema version + verification enum
90
- schema_version=$(jq -r '.version // empty' "$TRIAGE_SCHEMA")
91
- if [ "$schema_version" = "3.2.0" ]; then
92
- record_pass "triage-output schema version is 3.2.0"
93
- else
94
- record_fail "triage-output schema version should be 3.2.0 (was: ${schema_version:-missing})"
95
- fi
96
- if jq -e '.["$defs"].verification.properties.result.enum
97
- | (index("confirmed") != null
98
- and index("not-reproduced") != null
99
- and index("inconclusive") != null)' "$TRIAGE_SCHEMA" >/dev/null 2>&1; then
100
- record_pass "schema verification.result enum complete"
101
- else
102
- record_fail "schema \$defs.verification.result enum must be confirmed/not-reproduced/inconclusive"
103
- fi
104
-
105
- # 6. Behavioral validator round-trips
106
- valid_fixture='{"accepted":[{"severity":"blocking","file":"Sources/Auth/Login.swift","line":42,"issue":"expired token accepted as valid","fix":"reject tokens past expiry in validateToken()","reviewer":"fable","verification":{"result":"confirmed","testRef":"AuthTests/LoginTests/testExpiredTokenRejected","evidencePath":".pipeline/verify-1.test.log"}}],"deferred":[],"rejected":[],"approved":false}'
107
- if printf '%s' "$valid_fixture" | node "$VALIDATOR" - >/dev/null 2>&1; then
108
- record_pass "validator accepts confirmed verification with testRef+evidencePath"
109
- else
110
- record_fail "validator rejected a valid confirmed verification"
111
- fi
112
-
113
- bad_result_fixture='{"accepted":[{"severity":"blocking","file":"a.swift","line":1,"issue":"some issue here","fix":"do the fix","reviewer":"fable","verification":{"result":"maybe"}}],"deferred":[],"rejected":[],"approved":false}'
114
- if printf '%s' "$bad_result_fixture" | node "$VALIDATOR" - >/dev/null 2>&1; then
115
- record_fail "validator must reject verification.result 'maybe'"
116
- else
117
- record_pass "validator rejects bad verification.result"
118
- fi
119
-
120
- missing_ref_fixture='{"accepted":[{"severity":"blocking","file":"a.swift","line":1,"issue":"some issue here","fix":"do the fix","reviewer":"fable","verification":{"result":"confirmed"}}],"deferred":[],"rejected":[],"approved":false}'
121
- if printf '%s' "$missing_ref_fixture" | node "$VALIDATOR" - >/dev/null 2>&1; then
122
- record_fail "validator must reject confirmed verification without testRef/evidencePath"
123
- else
124
- record_pass "validator rejects confirmed verification lacking testRef/evidencePath"
125
- fi
126
-
127
- # Reviewer enum parity: fable (Claude Code default) and gpt (Copilot CLI) accepted
128
- fable_fixture='{"accepted":[{"severity":"important","file":"a.swift","line":1,"issue":"some issue here","fix":"do the fix","reviewer":"gpt"}],"deferred":[],"rejected":[],"approved":true}'
129
- if printf '%s' "$fable_fixture" | node "$VALIDATOR" - >/dev/null 2>&1; then
130
- record_pass "validator accepts schema-allowed reviewers (fable/gpt)"
131
- else
132
- record_fail "validator must accept reviewer values fable and gpt (schema v3.1.0 parity)"
133
- fi
134
-
135
- # 7. Phase 3 doc documents the red-test rework re-entry
136
- if grep -qF "verifyByTest.redTests" "$PHASE3_DOC"; then
137
- record_pass "phase-3-dev.md documents redTests rework re-entry"
138
- else
139
- record_fail "phase-3-dev.md must document verifyByTest.redTests re-entry"
140
- fi
141
-
142
- printf '\n══ verify-by-test smoke: %d passed, %d failed ══\n' "$pass" "$fail"
143
- if [ "$fail" -gt 0 ]; then
144
- printf '\nFailures:\n'
145
- for msg in "${failures[@]}"; do printf ' - %s\n' "$msg"; done
146
- exit 1
147
- fi
148
- exit 0
@@ -1,122 +0,0 @@
1
- #!/usr/bin/env bash
2
- # smoke-wiki-integration.sh - v5.7+ wiki channel adapter contract.
3
- #
4
- # Verifies:
5
- # 1. prefs.schema.json declares global.wikiScope (array of enum) + reportChannels.wiki (boolean).
6
- # 2. figma-project-config schema declares wiki.mode enum with 4 adapters.
7
- # 3. Wiki adapter surface (channels.md + wiki-capture.md) documents:
8
- # - Case A (preconditions met) scope multi-select
9
- # - Case B (preconditions missing) actionable menu
10
- # - taskType === "component" gate
11
- # - wiki.enabled gate
12
- # - 4 adapter modes (submodule / in-repo / github-wiki / separate-repo)
13
- # - Writing wiki progress line
14
- # 4. figma-component-wiki SKILL.md has dispatch contract + 4 adapters.
15
-
16
- set -euo pipefail
17
-
18
- HERE="$(cd "$(dirname "$0")" && pwd)"
19
- ROOT="$(cd "$HERE/../.." && pwd)"
20
- PREFS="$ROOT/pipeline/schemas/prefs.schema.json"
21
- FIGMA_SCHEMA="$ROOT/pipeline/schemas/figma-project-config.schema.json"
22
- CHANNELS="$ROOT/pipeline/commands/multi-agent/channels/SKILL.md"
23
- WIKI_REF="$ROOT/pipeline/multi-agent-refs/wiki-capture.md"
24
- PHASE7="$ROOT/pipeline/multi-agent-refs/phases/phase-7-report.md"
25
- MODES="$ROOT/pipeline/multi-agent-refs/phases/modes.md"
26
- # (figma-component-wiki skill now lives in the ai-ios-engineering-toolkit plugin, not this repo)
27
-
28
- PASS=0
29
- FAIL=0
30
- pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
31
- fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
32
-
33
- need() { command -v "$1" >/dev/null 2>&1 || { echo "error: $1 required" >&2; exit 127; }; }
34
- need jq
35
-
36
- for f in "$PREFS" "$FIGMA_SCHEMA" "$CHANNELS" "$WIKI_REF" "$PHASE7" "$MODES"; do
37
- [ -f "$f" ] || { echo "error: missing $f" >&2; exit 1; }
38
- done
39
-
40
- # Combined surface - channels.md + wiki-capture.md + phase-7-report.md + modes.md. Any may carry assertion.
41
- WIKI_SURFACE="$(mktemp)"
42
- trap 'rm -f "$WIKI_SURFACE"' EXIT
43
- cat "$CHANNELS" "$WIKI_REF" "$PHASE7" "$MODES" > "$WIKI_SURFACE"
44
-
45
- echo "→ 1. prefs schema declares wikiScope (array) + reportChannels.wiki (boolean)"
46
- SCOPE_TYPE=$(jq -r '.properties.global.properties.wikiScope.type // "missing"' "$PREFS")
47
- [ "$SCOPE_TYPE" = "array" ] && pass "wikiScope is array" || fail "wikiScope type = '$SCOPE_TYPE' (want array)"
48
- SCOPE_ENUM=$(jq -c '.properties.global.properties.wikiScope.items.enum // []' "$PREFS")
49
- EXPECTED_ENUM='["main","ios","screenshots","index"]'
50
- [ "$SCOPE_ENUM" = "$EXPECTED_ENUM" ] && pass "wikiScope enum = [main,ios,screenshots,index]" || fail "wikiScope enum mismatch: $SCOPE_ENUM"
51
-
52
- CHAN_WIKI_TYPE=$(jq -r '.properties.global.properties.reportChannels.properties.wiki.type // "missing"' "$PREFS")
53
- [ "$CHAN_WIKI_TYPE" = "boolean" ] && pass "reportChannels.wiki is boolean" || fail "reportChannels.wiki type = '$CHAN_WIKI_TYPE'"
54
-
55
- echo ""
56
- echo "→ 2. figma-project-config schema declares wiki.mode with 4 adapters"
57
- MODE_ENUM=$(jq -c '.properties.wiki.properties.mode.enum' "$FIGMA_SCHEMA")
58
- EXPECTED='["submodule","in-repo","github-wiki","separate-repo"]'
59
- [ "$MODE_ENUM" = "$EXPECTED" ] && pass "wiki.mode enum = 4 adapters" || fail "wiki.mode enum mismatch: $MODE_ENUM"
60
-
61
- echo ""
62
- echo "→ 3. Wiki adapter (channels.md + wiki-capture.md) has Case A + Case B"
63
- if grep -Fq "Case A" "$WIKI_REF" || grep -Fq "preconditions met" "$WIKI_REF"; then
64
- pass "Case A (preconditions met) documented"
65
- else
66
- fail "Case A not documented"
67
- fi
68
- if grep -Fq "Case B" "$WIKI_REF" || grep -Fq "preconditions missing" "$WIKI_REF"; then
69
- pass "Case B (preconditions missing) documented"
70
- else
71
- fail "Case B not documented"
72
- fi
73
-
74
- echo ""
75
- echo "→ 4. Wiki surface gates on taskType === component"
76
- if grep -Fq 'state.taskType === "component"' "$WIKI_SURFACE" || grep -Fq 'taskType=component' "$WIKI_SURFACE"; then
77
- pass "taskType gate documented"
78
- else
79
- fail "taskType gate missing"
80
- fi
81
-
82
- echo ""
83
- echo "→ 5. Wiki surface references wiki.enabled"
84
- if grep -Fq "wiki.enabled" "$WIKI_SURFACE"; then
85
- pass "wiki.enabled gate documented"
86
- else
87
- fail "wiki.enabled gate missing"
88
- fi
89
-
90
- echo ""
91
- echo "→ 6. Wiki surface lists all 4 adapter modes"
92
- MODES_HIT=0
93
- for mode in submodule in-repo github-wiki separate-repo; do
94
- if grep -Fq "\`$mode\`" "$WIKI_SURFACE"; then
95
- MODES_HIT=$((MODES_HIT+1))
96
- fi
97
- done
98
- [ "$MODES_HIT" -eq 4 ] && pass "all 4 modes listed" || fail "wiki surface lists $MODES_HIT/4 modes"
99
-
100
- echo ""
101
- echo "→ 7. Wiki surface emits wiki progress line"
102
- if grep -qE '→ writing wiki' "$WIKI_SURFACE"; then
103
- pass "progress line shape documented"
104
- else
105
- fail "missing progress line"
106
- fi
107
-
108
- echo ""
109
- echo "→ 8. Wiki surface documents autopilot always-pause behaviour"
110
- if grep -qiE 'autopilot.*pause|ALWAYS pauses|Phase 7 autopilot exception' "$WIKI_SURFACE"; then
111
- pass "autopilot always-pause documented"
112
- else
113
- fail "autopilot always-pause not documented"
114
- fi
115
-
116
- # (The figma-component-wiki SKILL.md and its dispatch-contract / 4-adapter / frontmatter
117
- # assertions moved with the skill into the ai-ios-engineering-toolkit marketplace plugin;
118
- # this pipeline smoke now only covers the wiki CHANNEL wiring on the pipeline side.)
119
-
120
- echo ""
121
- echo "══ wiki-integration smoke: $PASS passed, $FAIL failed ══"
122
- [ "$FAIL" -eq 0 ]