@mmerterden/multi-agent-pipeline 8.6.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 (817) hide show
  1. package/CHANGELOG.md +2623 -0
  2. package/LICENSE +21 -0
  3. package/README.md +852 -0
  4. package/docs/FIGMA_PIPELINE.md +138 -0
  5. package/docs/GENERICITY-REVIEW.md +277 -0
  6. package/docs/STABILITY-FIX-PLAN.md +168 -0
  7. package/docs/adr/0001-three-model-triage.md +81 -0
  8. package/docs/adr/0002-instruction-driven-flag.md +62 -0
  9. package/docs/adr/0003-unified-shared-skills.md +55 -0
  10. package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
  11. package/docs/adr/0005-lazy-phase-docs.md +68 -0
  12. package/docs/adr/0006-skills-core-external-split.md +52 -0
  13. package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
  14. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
  15. package/docs/adr/README.md +33 -0
  16. package/docs/architecture.md +181 -0
  17. package/docs/best-practices.md +93 -0
  18. package/docs/features.md +274 -0
  19. package/docs/performance.md +116 -0
  20. package/docs/recovery-guide.md +479 -0
  21. package/index.js +76 -0
  22. package/install/_adapters.mjs +69 -0
  23. package/install/_common.mjs +150 -0
  24. package/install/_copilot-instructions.mjs +32 -0
  25. package/install/_dev-only-files.mjs +23 -0
  26. package/install/_platform-filter.mjs +132 -0
  27. package/install/_telemetry.mjs +79 -0
  28. package/install/claude.mjs +332 -0
  29. package/install/copilot.mjs +254 -0
  30. package/install/index.mjs +179 -0
  31. package/install/templates/copilot-instructions.md +319 -0
  32. package/install.js +24 -0
  33. package/package.json +78 -0
  34. package/pipeline/adapters/_base.mjs +288 -0
  35. package/pipeline/adapters/copilot-chat.mjs +158 -0
  36. package/pipeline/adapters/cursor.mjs +187 -0
  37. package/pipeline/agents/android-architect.md +42 -0
  38. package/pipeline/agents/backend-architect.md +43 -0
  39. package/pipeline/agents/code-reviewer.md +57 -0
  40. package/pipeline/agents/dev-critic.md +148 -0
  41. package/pipeline/agents/explorer.md +34 -0
  42. package/pipeline/agents/ios-architect.md +41 -0
  43. package/pipeline/agents/security-auditor.md +98 -0
  44. package/pipeline/agents/task-clarifier.md +113 -0
  45. package/pipeline/claude-md-template.md +55 -0
  46. package/pipeline/commands/archive-guard.md +45 -0
  47. package/pipeline/commands/deploy.md +54 -0
  48. package/pipeline/commands/figma-to-swiftui.md +295 -0
  49. package/pipeline/commands/multi-agent/_account-picker.md +90 -0
  50. package/pipeline/commands/multi-agent/_dev-context.md +111 -0
  51. package/pipeline/commands/multi-agent/_input-parser.md +43 -0
  52. package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
  53. package/pipeline/commands/multi-agent/autopilot.md +116 -0
  54. package/pipeline/commands/multi-agent/channels.md +465 -0
  55. package/pipeline/commands/multi-agent/delete.md +66 -0
  56. package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
  57. package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
  58. package/pipeline/commands/multi-agent/dev-local.md +105 -0
  59. package/pipeline/commands/multi-agent/dev.md +246 -0
  60. package/pipeline/commands/multi-agent/diff-explain.md +68 -0
  61. package/pipeline/commands/multi-agent/help.md +422 -0
  62. package/pipeline/commands/multi-agent/issue.md +79 -0
  63. package/pipeline/commands/multi-agent/jira.md +132 -0
  64. package/pipeline/commands/multi-agent/kill.md +38 -0
  65. package/pipeline/commands/multi-agent/language.md +94 -0
  66. package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
  67. package/pipeline/commands/multi-agent/local.md +117 -0
  68. package/pipeline/commands/multi-agent/log.md +25 -0
  69. package/pipeline/commands/multi-agent/manual-test.md +43 -0
  70. package/pipeline/commands/multi-agent/purge.md +39 -0
  71. package/pipeline/commands/multi-agent/refactor.md +188 -0
  72. package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
  73. package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
  74. package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
  75. package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
  76. package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
  77. package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
  78. package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
  79. package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
  80. package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
  81. package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
  82. package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
  83. package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
  84. package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
  85. package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
  86. package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
  87. package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
  88. package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
  89. package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
  90. package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
  91. package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
  92. package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
  93. package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
  94. package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
  95. package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
  96. package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
  97. package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
  98. package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
  99. package/pipeline/commands/multi-agent/refs/phases.md +187 -0
  100. package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
  101. package/pipeline/commands/multi-agent/refs/rules.md +189 -0
  102. package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
  103. package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
  104. package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
  105. package/pipeline/commands/multi-agent/resume.md +28 -0
  106. package/pipeline/commands/multi-agent/review.md +228 -0
  107. package/pipeline/commands/multi-agent/scan.md +74 -0
  108. package/pipeline/commands/multi-agent/search.md +97 -0
  109. package/pipeline/commands/multi-agent/setup.md +767 -0
  110. package/pipeline/commands/multi-agent/stack.md +48 -0
  111. package/pipeline/commands/multi-agent/status.md +38 -0
  112. package/pipeline/commands/multi-agent/sync.md +319 -0
  113. package/pipeline/commands/multi-agent/test.md +39 -0
  114. package/pipeline/commands/multi-agent/update.md +88 -0
  115. package/pipeline/commands/multi-agent.md +293 -0
  116. package/pipeline/commands/security-review.md +6 -0
  117. package/pipeline/commands/sim-test.md +256 -0
  118. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
  119. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
  120. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
  121. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
  122. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
  123. package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
  124. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
  125. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
  126. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
  127. package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
  128. package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
  129. package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
  130. package/pipeline/eval/golden-tasks/README.md +65 -0
  131. package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
  132. package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
  133. package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
  134. package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
  135. package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
  136. package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
  137. package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
  138. package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
  139. package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
  140. package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
  141. package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
  142. package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
  143. package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
  144. package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
  145. package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
  146. package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
  147. package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
  148. package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
  149. package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
  150. package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
  151. package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
  152. package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
  153. package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
  154. package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
  155. package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
  156. package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
  157. package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
  158. package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
  159. package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
  160. package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
  161. package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
  162. package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
  163. package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
  164. package/pipeline/eval/triage/README.md +54 -0
  165. package/pipeline/lib/account-resolver.sh +204 -0
  166. package/pipeline/lib/channels-multi-repo.sh +218 -0
  167. package/pipeline/lib/context-link-extractor.sh +192 -0
  168. package/pipeline/lib/credential-store-resolver.sh +57 -0
  169. package/pipeline/lib/credential-store.sh +226 -0
  170. package/pipeline/lib/fetch-confluence.sh +358 -0
  171. package/pipeline/lib/fetch-crashlytics.sh +314 -0
  172. package/pipeline/lib/fetch-fortify.sh +321 -0
  173. package/pipeline/lib/fetch-swagger.sh +270 -0
  174. package/pipeline/lib/issue-fetcher.sh +333 -0
  175. package/pipeline/lib/multi-repo-pipeline.sh +252 -0
  176. package/pipeline/lib/plan-todos.sh +284 -0
  177. package/pipeline/lib/post-pr-review.sh +374 -0
  178. package/pipeline/lib/repo-cache.sh +231 -0
  179. package/pipeline/lib/review-watch.sh +244 -0
  180. package/pipeline/lib/shadow-git.sh +222 -0
  181. package/pipeline/lib/submodule-detector.sh +177 -0
  182. package/pipeline/lib/vercel-deploy.sh +170 -0
  183. package/pipeline/preferences-template.json +132 -0
  184. package/pipeline/rules/app-store-guidelines.md +59 -0
  185. package/pipeline/rules/code-review.md +27 -0
  186. package/pipeline/rules/code-style.md +37 -0
  187. package/pipeline/rules/debugging.md +24 -0
  188. package/pipeline/rules/figma-pipeline.md +190 -0
  189. package/pipeline/rules/git-conventions.md +29 -0
  190. package/pipeline/rules/kotlin-android.md +92 -0
  191. package/pipeline/rules/performance.md +23 -0
  192. package/pipeline/rules/security.md +39 -0
  193. package/pipeline/rules/swiftui-qa.md +32 -0
  194. package/pipeline/rules/tdd.md +25 -0
  195. package/pipeline/rules/testing.md +37 -0
  196. package/pipeline/schemas/agent-state.schema.json +273 -0
  197. package/pipeline/schemas/analysis-output.schema.json +59 -0
  198. package/pipeline/schemas/clarify-output.schema.json +74 -0
  199. package/pipeline/schemas/dev-critic-output.schema.json +104 -0
  200. package/pipeline/schemas/diff-risk.schema.json +78 -0
  201. package/pipeline/schemas/figma-project-config.schema.json +372 -0
  202. package/pipeline/schemas/migrations/README.md +73 -0
  203. package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
  204. package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
  205. package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
  206. package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
  207. package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
  208. package/pipeline/schemas/plan-todos.schema.json +62 -0
  209. package/pipeline/schemas/planning-output.schema.json +57 -0
  210. package/pipeline/schemas/prefs.schema.json +1137 -0
  211. package/pipeline/schemas/reviewer-output.schema.json +55 -0
  212. package/pipeline/schemas/test-gap.schema.json +64 -0
  213. package/pipeline/schemas/token-budget.json +17 -0
  214. package/pipeline/schemas/triage-corpus.schema.json +31 -0
  215. package/pipeline/schemas/triage-output.schema.json +115 -0
  216. package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
  217. package/pipeline/scripts/README-figma-smokes.md +34 -0
  218. package/pipeline/scripts/README.md +104 -0
  219. package/pipeline/scripts/aggregate-metrics.mjs +310 -0
  220. package/pipeline/scripts/audit-log-rotate.sh +61 -0
  221. package/pipeline/scripts/audit-log.sh +69 -0
  222. package/pipeline/scripts/benchmark-phase-0.sh +128 -0
  223. package/pipeline/scripts/build-skills-index.mjs +139 -0
  224. package/pipeline/scripts/classify-plan-safety.mjs +177 -0
  225. package/pipeline/scripts/cost-table.json +27 -0
  226. package/pipeline/scripts/diff-explain.mjs +276 -0
  227. package/pipeline/scripts/diff-risk-score.mjs +328 -0
  228. package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
  229. package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
  230. package/pipeline/scripts/eval-triage.mjs +171 -0
  231. package/pipeline/scripts/figma-placeholder-map.json +191 -0
  232. package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
  233. package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
  234. package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
  235. package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
  236. package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
  237. package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
  238. package/pipeline/scripts/gen-skills-index.mjs +90 -0
  239. package/pipeline/scripts/github-ssh-setup.sh +103 -0
  240. package/pipeline/scripts/import-figma-skills.sh +253 -0
  241. package/pipeline/scripts/keychain-save.sh +74 -0
  242. package/pipeline/scripts/keychain.py +294 -0
  243. package/pipeline/scripts/log-metric.sh +98 -0
  244. package/pipeline/scripts/match-skills.mjs +167 -0
  245. package/pipeline/scripts/memory-load.sh +46 -0
  246. package/pipeline/scripts/memory-save.sh +76 -0
  247. package/pipeline/scripts/migrate-prefs.mjs +390 -0
  248. package/pipeline/scripts/migrate-state.mjs +215 -0
  249. package/pipeline/scripts/output-quality-check.sh +125 -0
  250. package/pipeline/scripts/phase-banner.sh +158 -0
  251. package/pipeline/scripts/phase-tracker.sh +548 -0
  252. package/pipeline/scripts/pre-commit-check.sh +69 -0
  253. package/pipeline/scripts/pre-push-check.sh +77 -0
  254. package/pipeline/scripts/render-agent-log-cost.sh +149 -0
  255. package/pipeline/scripts/render-cost-summary.sh +137 -0
  256. package/pipeline/scripts/render-work-summary.sh +195 -0
  257. package/pipeline/scripts/repo-map.mjs +367 -0
  258. package/pipeline/scripts/run-aggregator.mjs +298 -0
  259. package/pipeline/scripts/scan-skills.sh +332 -0
  260. package/pipeline/scripts/search-logs.sh +291 -0
  261. package/pipeline/scripts/sign-skills.sh +67 -0
  262. package/pipeline/scripts/smoke-adapters.sh +207 -0
  263. package/pipeline/scripts/smoke-add-detail.sh +137 -0
  264. package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
  265. package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
  266. package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
  267. package/pipeline/scripts/smoke-channels-flow.sh +130 -0
  268. package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
  269. package/pipeline/scripts/smoke-clarify.sh +148 -0
  270. package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
  271. package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
  272. package/pipeline/scripts/smoke-cost-summary.sh +139 -0
  273. package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
  274. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
  275. package/pipeline/scripts/smoke-delete-flow.sh +151 -0
  276. package/pipeline/scripts/smoke-dev-critic.sh +144 -0
  277. package/pipeline/scripts/smoke-diff-explain.sh +128 -0
  278. package/pipeline/scripts/smoke-diff-risk.sh +161 -0
  279. package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
  280. package/pipeline/scripts/smoke-eval-live.sh +136 -0
  281. package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
  282. package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
  283. package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
  284. package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
  285. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
  286. package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
  287. package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
  288. package/pipeline/scripts/smoke-figma-sync.sh +149 -0
  289. package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
  290. package/pipeline/scripts/smoke-install-layout.sh +241 -0
  291. package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
  292. package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
  293. package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
  294. package/pipeline/scripts/smoke-keychain.sh +158 -0
  295. package/pipeline/scripts/smoke-language-axis.sh +109 -0
  296. package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
  297. package/pipeline/scripts/smoke-migrate-state.sh +102 -0
  298. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
  299. package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
  300. package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
  301. package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
  302. package/pipeline/scripts/smoke-pat-audit.sh +107 -0
  303. package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
  304. package/pipeline/scripts/smoke-personal-data.sh +82 -0
  305. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
  306. package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
  307. package/pipeline/scripts/smoke-phase-banner.sh +101 -0
  308. package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
  309. package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
  310. package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
  311. package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
  312. package/pipeline/scripts/smoke-plan-safety.sh +139 -0
  313. package/pipeline/scripts/smoke-plan-todos.sh +193 -0
  314. package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
  315. package/pipeline/scripts/smoke-pre-commit.sh +138 -0
  316. package/pipeline/scripts/smoke-pref-migration.sh +224 -0
  317. package/pipeline/scripts/smoke-prefs-language.sh +134 -0
  318. package/pipeline/scripts/smoke-progress-contract.sh +118 -0
  319. package/pipeline/scripts/smoke-push-retry.sh +75 -0
  320. package/pipeline/scripts/smoke-readme-counts.sh +120 -0
  321. package/pipeline/scripts/smoke-repo-map.sh +300 -0
  322. package/pipeline/scripts/smoke-review-watch.sh +134 -0
  323. package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
  324. package/pipeline/scripts/smoke-schema-validation.sh +173 -0
  325. package/pipeline/scripts/smoke-search.sh +187 -0
  326. package/pipeline/scripts/smoke-shadow-git.sh +175 -0
  327. package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
  328. package/pipeline/scripts/smoke-skill-language.sh +83 -0
  329. package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
  330. package/pipeline/scripts/smoke-skill-scan.sh +198 -0
  331. package/pipeline/scripts/smoke-stack-swap.sh +132 -0
  332. package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
  333. package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
  334. package/pipeline/scripts/smoke-sync-parity.sh +92 -0
  335. package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
  336. package/pipeline/scripts/smoke-telemetry.sh +147 -0
  337. package/pipeline/scripts/smoke-test-gap.sh +183 -0
  338. package/pipeline/scripts/smoke-token-budget.sh +67 -0
  339. package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
  340. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
  341. package/pipeline/scripts/smoke-triage-memory.sh +174 -0
  342. package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
  343. package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
  344. package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
  345. package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
  346. package/pipeline/scripts/smoke-work-summary.sh +163 -0
  347. package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
  348. package/pipeline/scripts/smoke-write-state.sh +115 -0
  349. package/pipeline/scripts/stack-swap.sh +182 -0
  350. package/pipeline/scripts/sync-figma-source.sh +228 -0
  351. package/pipeline/scripts/sync-parity-check.sh +135 -0
  352. package/pipeline/scripts/test-gap-rules/android.json +25 -0
  353. package/pipeline/scripts/test-gap-rules/ios.json +29 -0
  354. package/pipeline/scripts/test-gap-rules/node.json +17 -0
  355. package/pipeline/scripts/test-gap-rules/python.json +19 -0
  356. package/pipeline/scripts/test-gap-scan.mjs +343 -0
  357. package/pipeline/scripts/token-budget-report.mjs +145 -0
  358. package/pipeline/scripts/triage-memory.mjs +258 -0
  359. package/pipeline/scripts/ui-tree-dumper.swift +122 -0
  360. package/pipeline/scripts/uninstall.mjs +331 -0
  361. package/pipeline/scripts/update-issue-progress.sh +146 -0
  362. package/pipeline/scripts/validate-analysis.mjs +132 -0
  363. package/pipeline/scripts/validate-diff-risk.mjs +117 -0
  364. package/pipeline/scripts/validate-planning.mjs +180 -0
  365. package/pipeline/scripts/validate-reviewer.mjs +131 -0
  366. package/pipeline/scripts/validate-schemas.mjs +88 -0
  367. package/pipeline/scripts/validate-test-gap.mjs +90 -0
  368. package/pipeline/scripts/validate-triage.mjs +175 -0
  369. package/pipeline/scripts/verify-skills.sh +126 -0
  370. package/pipeline/scripts/write-state.mjs +175 -0
  371. package/pipeline/skills/.skill-manifest.json +779 -0
  372. package/pipeline/skills/.skills-index.json +1771 -0
  373. package/pipeline/skills/figma-android/README.md +36 -0
  374. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
  375. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
  376. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
  377. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
  378. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
  379. package/pipeline/skills/figma-common/README.md +57 -0
  380. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
  381. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
  382. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
  383. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
  384. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
  385. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
  386. package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
  387. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
  388. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
  389. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
  390. package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
  391. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
  392. package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
  393. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
  394. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
  395. package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
  396. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
  397. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
  398. package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
  399. package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
  400. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
  401. package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
  402. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
  403. package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
  404. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
  405. package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
  406. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
  407. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
  408. package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
  409. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
  410. package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
  411. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
  412. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
  413. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
  414. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
  415. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
  416. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
  417. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
  418. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
  419. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
  420. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
  421. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
  422. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
  423. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
  424. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
  425. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
  426. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
  427. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
  428. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
  429. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
  430. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
  431. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
  432. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
  433. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
  434. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
  435. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
  436. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
  437. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
  438. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
  439. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
  440. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
  441. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
  442. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
  443. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
  444. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
  445. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
  446. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
  447. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
  448. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
  449. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
  450. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
  451. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
  452. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
  453. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
  454. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
  455. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
  456. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
  457. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
  458. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
  459. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
  460. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
  461. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
  462. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
  463. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
  464. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
  465. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
  466. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
  467. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
  468. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
  469. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
  470. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
  471. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
  472. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
  473. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
  474. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
  475. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
  476. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
  477. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
  478. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
  479. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
  480. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
  481. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
  482. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
  483. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
  484. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
  485. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
  486. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
  487. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
  488. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
  489. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
  490. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
  491. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
  492. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
  493. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
  494. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
  495. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
  496. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
  497. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
  498. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
  499. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
  500. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
  501. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
  502. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
  503. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
  504. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
  505. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
  506. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
  507. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
  508. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
  509. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
  510. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
  511. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
  512. package/pipeline/skills/shared/README.md +212 -0
  513. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
  514. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
  515. package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
  516. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
  517. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
  518. package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
  519. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
  520. package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
  521. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
  522. package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
  523. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
  524. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
  525. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
  526. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
  527. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
  528. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
  529. package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
  530. package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
  531. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
  532. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
  533. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
  534. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
  535. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
  536. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
  537. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
  538. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
  539. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
  540. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
  541. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
  542. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
  543. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
  544. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
  545. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
  546. package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
  547. package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
  548. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
  549. package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
  550. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
  551. package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
  552. package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
  553. package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
  554. package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
  555. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
  556. package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
  557. package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
  558. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
  559. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
  560. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
  561. package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
  562. package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
  563. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
  564. package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
  565. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
  566. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
  567. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
  568. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
  569. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
  570. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
  571. package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
  572. package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
  573. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
  574. package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
  575. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
  576. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
  577. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
  578. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
  579. package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
  580. package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
  581. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
  582. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
  583. package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
  584. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
  585. package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
  586. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
  587. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
  588. package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
  589. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
  590. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
  591. package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
  592. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
  593. package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
  594. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
  595. package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
  596. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
  597. package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
  598. package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
  599. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
  600. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
  601. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
  602. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
  603. package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
  604. package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
  605. package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
  606. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
  607. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
  608. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
  609. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
  610. package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
  611. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
  612. package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
  613. package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
  614. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
  615. package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
  616. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
  617. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
  618. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
  619. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
  620. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
  621. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
  622. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
  623. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
  624. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
  625. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
  626. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
  627. package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
  628. package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
  629. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
  630. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
  631. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
  632. package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
  633. package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
  634. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
  635. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
  636. package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
  637. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
  638. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
  639. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
  640. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
  641. package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
  642. package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
  643. package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
  644. package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
  645. package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
  646. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
  647. package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
  648. package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
  649. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
  650. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
  651. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
  652. package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
  653. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
  654. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
  655. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
  656. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
  657. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
  658. package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
  659. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
  660. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
  661. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
  662. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
  663. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
  664. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
  665. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
  666. package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
  667. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
  668. package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
  669. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
  670. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
  671. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
  672. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
  673. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
  674. package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
  675. package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
  676. package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
  677. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
  678. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
  679. package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
  680. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
  681. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
  682. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
  683. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
  684. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
  685. package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
  686. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
  687. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
  688. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
  689. package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
  690. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
  691. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
  692. package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
  693. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
  694. package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
  695. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
  696. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
  697. package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
  698. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
  699. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
  700. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
  701. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
  702. package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
  703. package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
  704. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
  705. package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
  706. package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
  707. package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
  708. package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
  709. package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
  710. package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
  711. package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
  712. package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
  713. package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
  714. package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
  715. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
  716. package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
  717. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
  718. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
  719. package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
  720. package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
  721. package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
  722. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
  723. package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
  724. package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
  725. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
  726. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
  727. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
  728. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
  729. package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
  730. package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
  731. package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
  732. package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
  733. package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
  734. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
  735. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
  736. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
  737. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
  738. package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
  739. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
  740. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
  741. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
  742. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
  743. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
  744. package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
  745. package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
  746. package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
  747. package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
  748. package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
  749. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
  750. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
  751. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
  752. package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
  753. package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
  754. package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
  755. package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
  756. package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
  757. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
  758. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
  759. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
  760. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
  761. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
  762. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
  763. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
  764. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
  765. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
  766. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
  767. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
  768. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
  769. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
  770. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
  771. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
  772. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
  773. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
  774. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
  775. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
  776. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
  777. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
  778. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
  779. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
  780. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
  781. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
  782. package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
  783. package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
  784. package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
  785. package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
  786. package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
  787. package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
  788. package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
  789. package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
  790. package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
  791. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
  792. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
  793. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
  794. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
  795. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
  796. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
  797. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
  798. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
  799. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
  800. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
  801. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
  802. package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
  803. package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
  804. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
  805. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
  806. package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
  807. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
  808. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
  809. package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
  810. package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
  811. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
  812. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
  813. package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
  814. package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
  815. package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
  816. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
  817. package/pipeline/skills/skills-index.md +205 -0
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # smoke-tracker-tokens-invocation.sh
4
+ #
5
+ # Asserts every LLM-heavy phase doc invokes `phase-tracker.sh tokens <N> <in> <out>`
6
+ # at least once, so the per-phase + cumulative token counter in the tracker's
7
+ # render output stays accurate for every run. Without this gate, phase docs
8
+ # tend to drop the token call as they get edited and the user loses cost
9
+ # visibility — exactly Defect 5 from the GH1241 review.
10
+ #
11
+ # Phase 3 (Dev) and Phase 4 (Review) are the LLM-intensive ones. Phase 1+2
12
+ # also do LLM work. Phase 0/5/6/7 are mostly orchestration.
13
+
14
+ set -euo pipefail
15
+
16
+ SELF_DIR=$(cd "$(dirname "$0")" && pwd)
17
+ PIPELINE_ROOT=$(cd "$SELF_DIR/.." && pwd)
18
+
19
+ cd "$PIPELINE_ROOT"
20
+
21
+ FAIL=0
22
+
23
+ # Every phase doc that runs LLM calls MUST mention `phase-tracker.sh tokens`
24
+ # at least once (either in a code fence or inline).
25
+ declare -a LLM_PHASES=(
26
+ "commands/multi-agent/refs/phases/phase-1-analysis.md:1"
27
+ "commands/multi-agent/refs/phases/phase-2-planning.md:2"
28
+ "commands/multi-agent/refs/phases/phase-3-dev.md:3"
29
+ "commands/multi-agent/refs/phases/phase-4-review.md:4"
30
+ )
31
+
32
+ for entry in "${LLM_PHASES[@]}"; do
33
+ doc="${entry%:*}"
34
+ phase_id="${entry##*:}"
35
+ full="$doc"
36
+ if [ ! -f "$full" ]; then
37
+ echo "FAIL [smoke-tracker-tokens-invocation]: $doc missing"
38
+ FAIL=$((FAIL + 1))
39
+ continue
40
+ fi
41
+ if ! grep -qE "phase-tracker\.sh tokens" "$full"; then
42
+ echo "FAIL [smoke-tracker-tokens-invocation]: $doc must invoke 'phase-tracker.sh tokens $phase_id <in> <out>' after every LLM call"
43
+ FAIL=$((FAIL + 1))
44
+ fi
45
+ done
46
+
47
+ # tracker-contract.md is the canonical location for the tokens API. Make sure
48
+ # it documents the invocation pattern with both args.
49
+ CONTRACT="commands/multi-agent/refs/tracker-contract.md"
50
+ if [ ! -f "$CONTRACT" ]; then
51
+ echo "FAIL [smoke-tracker-tokens-invocation]: $CONTRACT missing"
52
+ FAIL=$((FAIL + 1))
53
+ elif ! grep -qE "phase-tracker\.sh tokens .*<in>.*<out>|phase-tracker\.sh tokens .*<input.*<output" "$CONTRACT"; then
54
+ echo "FAIL [smoke-tracker-tokens-invocation]: $CONTRACT must document the tokens <N> <in> <out> signature"
55
+ FAIL=$((FAIL + 1))
56
+ fi
57
+
58
+ if [ "$FAIL" -gt 0 ]; then
59
+ echo ""
60
+ echo "smoke-tracker-tokens-invocation: $FAIL violation(s)."
61
+ echo "Defect 5: phase docs must invoke 'phase-tracker.sh tokens <N> <in> <out>' after every LLM call so the tracker render shows live cost."
62
+ exit 1
63
+ fi
64
+
65
+ echo "smoke-tracker-tokens-invocation: ok"
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-triage-memory.sh — v8.3.0
3
+ #
4
+ # Verifies the triage-memory persistence layer:
5
+ # 1. ingest writes JSONL rows for accepted/deferred/rejected and tags
6
+ # task_id, classification, severity, file, issue, reason
7
+ # 2. ingest is idempotent — re-running with the same input writes 0 rows
8
+ # 3. stats reports correct row counts grouped by classification
9
+ # 4. query ranks rows by token overlap, returns top-N hits
10
+ # 5. query --file-glob filters by path
11
+ # 6. path subcommand resolves to <slug>/triage-corpus.jsonl under HOME
12
+ # 7. empty corpus query returns total=0 + exit 2
13
+ # 8. validate-schemas accepts triage-corpus.schema.json
14
+ # 9. phase-7-report.md ref doc declares the ingest call
15
+ # 10. phase-4-review.md ref doc declares prior-art lookup
16
+ # 11. prefs.schema.json exposes priorArtEnrichment toggle
17
+ #
18
+ # Uses HOME override so we never touch the user's real ~/.claude/memory.
19
+ #
20
+ # Exit 0 = all pass, 1 = any failure.
21
+
22
+ set -uo pipefail
23
+
24
+ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
25
+ TM="$ROOT/pipeline/scripts/triage-memory.mjs"
26
+ PHASE7="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-7-report.md"
27
+ PHASE4="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-4-review.md"
28
+ PREFS="$ROOT/pipeline/schemas/prefs.schema.json"
29
+ SCHEMA="$ROOT/pipeline/schemas/triage-corpus.schema.json"
30
+
31
+ pass=0
32
+ fail=0
33
+ failures=()
34
+ record_pass() { pass=$((pass + 1)); printf ' \033[0;32mPASS\033[0m %s\n' "$1"; }
35
+ record_fail() { fail=$((fail + 1)); failures+=("$1"); printf ' \033[0;31mFAIL\033[0m %s\n' "$1"; }
36
+
37
+ printf '→ smoke-triage-memory (v8.3.0): semantic memory contract\n'
38
+
39
+ [ -f "$SCHEMA" ] || { record_fail "schema missing: $SCHEMA"; exit 1; }
40
+
41
+ TMP_HOME=$(mktemp -d)
42
+ trap 'rm -rf "$TMP_HOME"' EXIT
43
+ export HOME="$TMP_HOME"
44
+ export MULTI_AGENT_REPO_SLUG="smoke-corpus"
45
+
46
+ # Build a fixture triage JSON
47
+ TRIAGE_FIXTURE="$TMP_HOME/triage.json"
48
+ cat > "$TRIAGE_FIXTURE" <<'JSON'
49
+ {
50
+ "accepted": [
51
+ {"severity":"blocking","file":"Auth/KeychainStore.swift","line":42,"issue":"Force-unwrap on optional token","fix":"Use guard let","reviewer":"opus"},
52
+ {"severity":"important","file":"Networking/ApiClient.swift","line":11,"issue":"Missing timeout configuration","fix":"Set request timeout","reviewer":"sonnet"}
53
+ ],
54
+ "deferred": [
55
+ {"finding":{"severity":"suggestion","file":"Views/SettingsView.swift","line":50,"issue":"Could extract subview","fix":"refactor"},"reason":"out of scope"}
56
+ ],
57
+ "rejected": [
58
+ {"finding":{"severity":"important","file":"Auth/KeychainStore.swift","line":99,"issue":"Use Sendable annotation","fix":"add Sendable"},"reason":"requires Swift 6 migration"}
59
+ ],
60
+ "approved": false
61
+ }
62
+ JSON
63
+
64
+ # --- 1: first ingest writes rows ---
65
+ out1=$(node "$TM" ingest --triage "$TRIAGE_FIXTURE" --task-id PROJ-100 --task-title "Auth refactor" --stack ios 2>/dev/null)
66
+ ingested=$(echo "$out1" | jq -r '.ingested')
67
+ if [ "$ingested" = "4" ]; then
68
+ record_pass "ingest writes 4 rows (2 accepted + 1 deferred + 1 rejected)"
69
+ else
70
+ record_fail "ingest expected 4, got $ingested"
71
+ fi
72
+
73
+ # --- 2: idempotent re-ingest writes 0 rows ---
74
+ out2=$(node "$TM" ingest --triage "$TRIAGE_FIXTURE" --task-id PROJ-100 --task-title "Auth refactor" --stack ios 2>/dev/null; echo "EC=$?")
75
+ ingested2=$(echo "$out2" | grep -v EC= | jq -r '.ingested')
76
+ ec2=$(echo "$out2" | grep "EC=" | sed 's/.*EC=//')
77
+ if [ "$ingested2" = "0" ] && [ "$ec2" = "2" ]; then
78
+ record_pass "re-ingest is idempotent (0 rows + exit 2)"
79
+ else
80
+ record_fail "re-ingest should write 0 rows + exit 2, got rows=$ingested2 ec=$ec2"
81
+ fi
82
+
83
+ # --- 3: stats counts ---
84
+ stats=$(node "$TM" stats 2>/dev/null)
85
+ acc=$(echo "$stats" | jq -r '.counts.accepted')
86
+ def=$(echo "$stats" | jq -r '.counts.deferred')
87
+ rej=$(echo "$stats" | jq -r '.counts.rejected')
88
+ if [ "$acc" = "2" ] && [ "$def" = "1" ] && [ "$rej" = "1" ]; then
89
+ record_pass "stats reports accepted=2 deferred=1 rejected=1"
90
+ else
91
+ record_fail "stats wrong: accepted=$acc deferred=$def rejected=$rej"
92
+ fi
93
+
94
+ # --- 4: query ranks by token overlap ---
95
+ q1=$(node "$TM" query --issue "force unwrap optional" --top 2 2>/dev/null)
96
+ top1=$(echo "$q1" | jq -r '.hits[0].file')
97
+ top1_issue=$(echo "$q1" | jq -r '.hits[0].issue')
98
+ if [[ "$top1" == *"KeychainStore.swift" ]] && [[ "$top1_issue" == *"Force-unwrap"* ]]; then
99
+ record_pass "query: 'force unwrap optional' top hit = KeychainStore force-unwrap finding"
100
+ else
101
+ record_fail "query top hit wrong: $top1 / $top1_issue"
102
+ fi
103
+
104
+ # --- 5: file-glob filter ---
105
+ q2=$(node "$TM" query --issue "timeout" --file-glob "Networking/*" 2>/dev/null)
106
+ n2=$(echo "$q2" | jq -r '.hits | length')
107
+ top2=$(echo "$q2" | jq -r '.hits[0].file' 2>/dev/null || echo "")
108
+ if [ "$n2" = "1" ] && [[ "$top2" == "Networking/ApiClient.swift" ]]; then
109
+ record_pass "query: --file-glob narrows to Networking/* path"
110
+ else
111
+ record_fail "file-glob narrow wrong: hits=$n2 top=$top2"
112
+ fi
113
+
114
+ # --- 6: path subcommand ---
115
+ p=$(node "$TM" path 2>/dev/null)
116
+ expected="$TMP_HOME/.claude/memory/multi-agent/smoke-corpus/triage-corpus.jsonl"
117
+ if [ "$p" = "$expected" ]; then
118
+ record_pass "path resolves to <HOME>/.claude/memory/multi-agent/<slug>/triage-corpus.jsonl"
119
+ else
120
+ record_fail "path wrong: $p (expected $expected)"
121
+ fi
122
+
123
+ # --- 7: empty-corpus query exits 2 with empty hits ---
124
+ export MULTI_AGENT_REPO_SLUG="empty-corpus"
125
+ set +e
126
+ empty_out=$(node "$TM" query --issue "anything" 2>/dev/null)
127
+ ec=$?
128
+ set -e
129
+ hits=$(echo "$empty_out" | jq -r '.hits | length')
130
+ total=$(echo "$empty_out" | jq -r '.total')
131
+ if [ "$ec" = "2" ] && [ "$hits" = "0" ] && [ "$total" = "0" ]; then
132
+ record_pass "empty-corpus query: exit 2, hits=[], total=0"
133
+ else
134
+ record_fail "empty-corpus wrong: ec=$ec hits=$hits total=$total"
135
+ fi
136
+ export MULTI_AGENT_REPO_SLUG="smoke-corpus"
137
+
138
+ # --- 8: schema present + valid JSON ---
139
+ if jq -e '.title and .properties.classification' "$SCHEMA" >/dev/null 2>&1; then
140
+ record_pass "triage-corpus schema present and well-formed"
141
+ else
142
+ record_fail "triage-corpus schema malformed"
143
+ fi
144
+
145
+ # --- 9: phase-7-report.md declares ingest ---
146
+ if grep -q 'triage-memory.mjs' "$PHASE7"; then
147
+ record_pass "phase-7-report.md references triage-memory.mjs"
148
+ else
149
+ record_fail "phase-7-report.md missing triage-memory.mjs reference"
150
+ fi
151
+
152
+ # --- 10: phase-4-review.md declares prior-art lookup ---
153
+ if grep -qE 'prior.art|triage-memory' "$PHASE4"; then
154
+ record_pass "phase-4-review.md declares prior-art lookup"
155
+ else
156
+ record_fail "phase-4-review.md missing prior-art lookup"
157
+ fi
158
+
159
+ # --- 11: prefs schema exposes priorArtEnrichment ---
160
+ if jq -e '.properties.global.properties.priorArtEnrichment' "$PREFS" >/dev/null 2>&1; then
161
+ record_pass "prefs schema exposes priorArtEnrichment toggle"
162
+ else
163
+ record_fail "prefs.schema.json missing global.priorArtEnrichment"
164
+ fi
165
+
166
+ # --- Summary ---
167
+ total=$((pass + fail))
168
+ printf '\n→ smoke-triage-memory: %d/%d passed\n' "$pass" "$total"
169
+ if [ "$fail" -ne 0 ]; then
170
+ printf '\nFailures:\n'
171
+ for f in "${failures[@]}"; do printf ' - %s\n' "$f"; done
172
+ exit 1
173
+ fi
174
+ exit 0
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ # Smoke: Phase 0 Step 1b URL enrichment — Crashlytics + Fortify
3
+ # Verifies that:
4
+ # 1. phase-0-init.md documents Step 1b with both URL patterns
5
+ # 2. state.crashContext and state.fortifyFinding shapes are specified
6
+ # 3. prefs.schema.json has hosts.fortify
7
+ # 4. setup.md Step 3.5 prompts for fortify host (and skips firebase)
8
+ # 5. Token Save Flow routing includes fortify
9
+
10
+ set -u
11
+ ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
12
+ PASS=0
13
+ FAIL=0
14
+
15
+ check() {
16
+ local label="$1" cmd="$2"
17
+ if eval "$cmd" > /dev/null 2>&1; then
18
+ printf " ✓ %s\n" "$label"
19
+ PASS=$((PASS+1))
20
+ else
21
+ printf " ✗ %s\n" "$label"
22
+ FAIL=$((FAIL+1))
23
+ fi
24
+ }
25
+
26
+ PHASE0="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-0-init.md"
27
+ SETUP="$ROOT/pipeline/commands/multi-agent/setup.md"
28
+ SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
29
+
30
+ echo "→ 1. phase-0-init.md documents Step 1b URL Enrichment"
31
+ check "Step 1b section present" "grep -Fq 'Step 1b — URL Enrichment' '$PHASE0'"
32
+ check "Crashlytics pattern block present" "grep -Fq 'console.firebase.google.com' '$PHASE0'"
33
+ check "Fortify pattern block present" "grep -Eq 'hosts\.fortify.*ssc/html|ssc/html.*version' '$PHASE0'"
34
+
35
+ echo
36
+ echo "→ 2. state enrichment shapes specified"
37
+ check "state.crashContext documented" "grep -Fq 'state.crashContext' '$PHASE0'"
38
+ check "state.fortifyFinding documented" "grep -Fq 'state.fortifyFinding' '$PHASE0'"
39
+ check "Phase 1 prepend mention for crash" "grep -Fq 'Known Crash Context' '$PHASE0'"
40
+ check "Phase 2 inject mention for fortify" "grep -Fq 'Known Security Finding' '$PHASE0'"
41
+
42
+ echo
43
+ echo "→ 3. Progress contract line documented"
44
+ check "URL context log line shape" "grep -Fq 'URL context: crashlytics=' '$PHASE0'"
45
+
46
+ echo
47
+ echo "→ 4. prefs.schema.json has hosts.fortify"
48
+ check "hosts.fortify field exists" "grep -Fq '\"fortify\":' '$SCHEMA' && grep -Fq 'Fortify SSC host' '$SCHEMA'"
49
+ check "FORTIFY_HOST placeholder referenced" "grep -Fq '{FORTIFY_HOST}' '$SCHEMA'"
50
+
51
+ echo
52
+ echo "→ 5. Firebase description = 'Firebase JSON' (not 'SA JSON')"
53
+ check "schema firebase (servicePatMap) renamed" "! grep -F 'Firebase Service Account JSON' '$SCHEMA'"
54
+ check "schema firebase (keychainMapping) renamed" "grep -c '\"Firebase JSON' '$SCHEMA' | grep -q '[2-9]'"
55
+
56
+ echo
57
+ echo "→ 6. setup.md Step 3.5 routes fortify (not firebase)"
58
+ check "Step 3.5 lists fortify" "grep -Eq 'jira.*confluence.*bitbucket.*fortify|fortify.*host' '$SETUP'"
59
+ check "firebase skip note in Step 3.5" "grep -Fiq 'firebase is skipped' '$SETUP' || grep -Fiq 'Firebase tokens skip' '$SETUP'"
60
+ check "Resulting shape has fortify host" "grep -Fq '\"fortify\":' '$SETUP'"
61
+ check "FORTIFY_HOST placeholder listed" "grep -Fq '{FORTIFY_HOST}' '$SETUP'"
62
+
63
+ echo
64
+ echo "→ 7. Token Source Mapping shows 'Firebase JSON' label"
65
+ check "setup.md Token Source Mapping renamed" "grep -Fq 'Firebase JSON (base64)' '$SETUP'"
66
+ check "multi-agent-setup SKILL.md renamed" "grep -Fq 'Firebase JSON (base64)' '$ROOT/pipeline/skills/shared/core/multi-agent-setup/SKILL.md'"
67
+
68
+ echo
69
+ echo "══ url-enrichment smoke: $PASS passed, $FAIL failed ══"
70
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,67 @@
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 ]
@@ -0,0 +1,129 @@
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
@@ -0,0 +1,146 @@
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.md"
23
+ WIKI_REF="$ROOT/pipeline/commands/multi-agent/refs/wiki-capture.md"
24
+ PHASE7="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-7-report.md"
25
+ MODES="$ROOT/pipeline/commands/multi-agent/refs/phases/modes.md"
26
+ WIKI_SKILL="$ROOT/pipeline/skills/figma-ios/figma-component-wiki/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
+ 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" "$WIKI_SKILL"; 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
+ echo ""
117
+ echo "→ 9. figma-component-wiki SKILL.md has dispatch contract + 4 adapters"
118
+ if grep -Fq "Dispatch contract (Phase 7 Report Step 2)" "$WIKI_SKILL" \
119
+ || grep -Fq "Dispatch contract" "$WIKI_SKILL"; then
120
+ pass "SKILL.md documents dispatch contract"
121
+ else
122
+ fail "SKILL.md missing dispatch contract"
123
+ fi
124
+ if grep -Fq "Adapter selection" "$WIKI_SKILL"; then
125
+ pass "SKILL.md has 'Adapter selection' table"
126
+ else
127
+ fail "SKILL.md missing 'Adapter selection' table"
128
+ fi
129
+
130
+ ADAPTERS=0
131
+ for mode in submodule in-repo github-wiki separate-repo; do
132
+ grep -Fq "\`$mode\`" "$WIKI_SKILL" && ADAPTERS=$((ADAPTERS+1)) || true
133
+ done
134
+ [ "$ADAPTERS" -eq 4 ] && pass "all 4 adapters named in SKILL.md" || fail "SKILL.md names $ADAPTERS/4 adapters"
135
+
136
+ echo ""
137
+ echo "→ 10. SKILL.md has frontmatter"
138
+ if head -n 1 "$WIKI_SKILL" | grep -Fxq -- "---"; then
139
+ pass "SKILL.md has frontmatter"
140
+ else
141
+ fail "SKILL.md missing frontmatter"
142
+ fi
143
+
144
+ echo ""
145
+ echo "══ wiki-integration smoke: $PASS passed, $FAIL failed ══"
146
+ [ "$FAIL" -eq 0 ]