@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,170 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-phase-0-multi-repo.sh — asserts the v2.1.0+ multi-repo + identity-routing
3
+ # + fetch-fail contract is fully documented in phase-0-init.md.
4
+ #
5
+ # This is a doc-shape smoke (Phase 0 is spec-driven; the executable behavior
6
+ # lives in the orchestrator, not a single .sh). Failures here mean the spec
7
+ # diverged from the schema or feedback memory.
8
+
9
+ set -uo pipefail
10
+
11
+ # Source-tree read (authoritative). Installed tree may lag behind.
12
+ HERE="$(cd "$(dirname "$0")" && pwd)"
13
+ ROOT="$(cd "$HERE/../.." && pwd)"
14
+ PHASE0="$ROOT/pipeline/commands/multi-agent/refs/phases/phase-0-init.md"
15
+ PREFS_SCHEMA="$ROOT/pipeline/schemas/prefs.schema.json"
16
+ STATE_SCHEMA="$ROOT/pipeline/schemas/agent-state.schema.json"
17
+
18
+ PASS=0
19
+ FAIL=0
20
+ pass() { PASS=$((PASS + 1)); echo " ✓ $1"; }
21
+ fail() { FAIL=$((FAIL + 1)); echo " ✗ $1"; }
22
+
23
+ if [ ! -f "$PHASE0" ]; then
24
+ fail "phase-0-init.md missing at $PHASE0"
25
+ echo "══ phase-0-multi-repo smoke: aborted ══"
26
+ exit 2
27
+ fi
28
+
29
+ # ──────────────────────────────────────────────────────────────────────────
30
+ echo "→ 1. Multi-repo project-selection contract"
31
+ grep -q "v2.1.0+ Multi-Repo Mode" "$PHASE0" \
32
+ && pass "Step 2 has 'v2.1.0+ Multi-Repo Mode' subsection" \
33
+ || fail "Step 2 missing v2.1.0+ multi-repo subsection"
34
+ grep -q "state.projects\[\]" "$PHASE0" \
35
+ && pass "Step 2 references state.projects[] population" \
36
+ || fail "Step 2 missing state.projects[] reference"
37
+ grep -q "recentGroups" "$PHASE0" \
38
+ && pass "Step 2 mentions recentGroups (LRU bump)" \
39
+ || fail "Step 2 missing recentGroups reference"
40
+ grep -q "settings.multiRepoEnabled" "$PHASE0" \
41
+ && pass "Step 2 multi-repo gated by settings.multiRepoEnabled flag" \
42
+ || fail "Step 2 missing settings.multiRepoEnabled gate"
43
+
44
+ # ──────────────────────────────────────────────────────────────────────────
45
+ echo ""
46
+ echo "→ 2. Branch TTL + collision detection"
47
+ grep -q "branchTtlDays" "$PHASE0" \
48
+ && pass "TTL filter references settings.branchTtlDays" \
49
+ || fail "TTL filter not anchored to settings.branchTtlDays"
50
+ grep -q "default 15" "$PHASE0" \
51
+ && pass "TTL default 15d documented" \
52
+ || fail "TTL default 15d not documented"
53
+ grep -qE "Collision handling|Branch-collision" "$PHASE0" \
54
+ && pass "Collision handling section present" \
55
+ || fail "Collision handling section missing"
56
+ # Post-10caff1: collision handling is automatic (`-v2`, `-v3` suffix), no prompt.
57
+ grep -qE "append \`-v2\`|append -v2" "$PHASE0" \
58
+ && pass "Collision handling appends -v2/-v3 suffix automatically" \
59
+ || fail "Collision automatic-suffix rule missing"
60
+ grep -qE "ls-remote --exit-code --heads" "$PHASE0" \
61
+ && pass "Remote collision probe uses ls-remote --exit-code" \
62
+ || fail "Remote collision probe missing ls-remote --exit-code"
63
+
64
+ # ──────────────────────────────────────────────────────────────────────────
65
+ echo ""
66
+ echo "→ 3. Fetch-fail flow (4 options per feedback memory)"
67
+ grep -q "Fetch-fail handling" "$PHASE0" \
68
+ && pass "Fetch-fail handling subsection present" \
69
+ || fail "Fetch-fail handling subsection missing"
70
+ for opt in "Connect VPN" "Use cached origin" "Use local branch" "Abort"; do
71
+ grep -q "$opt" "$PHASE0" \
72
+ && pass "Fetch-fail option present: $opt" \
73
+ || fail "Fetch-fail option missing: $opt"
74
+ done
75
+ grep -q '"baseFetchStatus"' "$PHASE0" \
76
+ && pass "baseFetchStatus state field documented" \
77
+ || fail "baseFetchStatus state field missing"
78
+ for v in "fresh" "cached-stale" "local-branch" "aborted"; do
79
+ grep -qE "\"$v\"" "$PHASE0" \
80
+ && pass "baseFetchStatus enum value: $v" \
81
+ || fail "baseFetchStatus enum value missing: $v"
82
+ done
83
+
84
+ # ──────────────────────────────────────────────────────────────────────────
85
+ echo ""
86
+ echo "→ 4. Branch-naming kebab rules + multi-repo shared name"
87
+ grep -q "Kebab rules" "$PHASE0" \
88
+ && pass "Kebab rules block present" \
89
+ || fail "Kebab rules block missing"
90
+ grep -q "shared across all repos" "$PHASE0" \
91
+ && pass "Multi-repo shared-name rule documented" \
92
+ || fail "Multi-repo shared-name rule missing"
93
+
94
+ # ──────────────────────────────────────────────────────────────────────────
95
+ echo ""
96
+ echo "→ 5. Identity routing (Step 6 v2.1.0+)"
97
+ grep -q "platformIdentityRouting" "$PHASE0" \
98
+ && pass "Step 6 references platformIdentityRouting" \
99
+ || fail "Step 6 missing platformIdentityRouting reference"
100
+ # Post-10caff1: identity routing is ALWAYS on (no gate); previous
101
+ # settings.identityRoutingEnabled is obsolete. Verify no stale gate remains.
102
+ if grep -q "settings.identityRoutingEnabled" "$PHASE0"; then
103
+ fail "legacy settings.identityRoutingEnabled gate still present (should be removed)"
104
+ else
105
+ pass "no legacy settings.identityRoutingEnabled gate"
106
+ fi
107
+ grep -q "longest-prefix wins\|Most-specific" "$PHASE0" \
108
+ && pass "Glob match semantics: longest-prefix / most-specific wins" \
109
+ || fail "Glob match semantics not documented"
110
+ # Schema renamed gitIdentities → identities in v2.1.0. Step 6 must not use
111
+ # the legacy name.
112
+ if grep -q "gitIdentities" "$PHASE0"; then
113
+ fail "Step 6 still reading legacy gitIdentities path"
114
+ else
115
+ pass "no legacy gitIdentities reference"
116
+ fi
117
+ grep -qE "per repo( independently)?" "$PHASE0" \
118
+ && pass "Multi-repo: identity routed per-repo" \
119
+ || fail "Multi-repo per-repo routing not stated"
120
+
121
+ # ──────────────────────────────────────────────────────────────────────────
122
+ echo ""
123
+ echo "→ 6. Step 8 multi-repo worktree setup"
124
+ grep -q "v2.1.0+ Multi-Repo Worktree Setup" "$PHASE0" \
125
+ && pass "Step 8 has multi-repo worktree subsection" \
126
+ || fail "Step 8 missing multi-repo worktree subsection"
127
+ grep -q "serially per repo" "$PHASE0" \
128
+ && pass "Multi-repo worktrees created serially (not parallel)" \
129
+ || fail "Serial worktree creation rule missing"
130
+ grep -q "roll back already-created worktrees" "$PHASE0" \
131
+ && pass "Atomicity: rollback on partial failure documented" \
132
+ || fail "Atomicity rollback rule missing"
133
+ grep -q "worktree remove --force" "$PHASE0" \
134
+ && pass "Rollback uses git worktree remove --force" \
135
+ || fail "Rollback command not specified"
136
+
137
+ # ──────────────────────────────────────────────────────────────────────────
138
+ echo ""
139
+ echo "→ 7. Recents update map (Step 0 v2.1.0+)"
140
+ grep -q "v2.1.0+ Recents update map" "$PHASE0" \
141
+ && pass "Recents update map table present" \
142
+ || fail "Recents update map table missing"
143
+ for path in recentProjects recentGroups recentBranches serviceStatus; do
144
+ grep -q "\`global\.$path" "$PHASE0" \
145
+ && pass "Recents map covers global.$path" \
146
+ || fail "Recents map missing global.$path"
147
+ done
148
+
149
+ # ──────────────────────────────────────────────────────────────────────────
150
+ echo ""
151
+ echo "→ 8. Schema cross-reference sanity"
152
+ if [ -f "$STATE_SCHEMA" ]; then
153
+ if grep -q "projects" "$STATE_SCHEMA"; then
154
+ pass "agent-state.schema.json has projects field"
155
+ else
156
+ fail "agent-state.schema.json missing projects field"
157
+ fi
158
+ fi
159
+ if [ -f "$PREFS_SCHEMA" ]; then
160
+ for f in platformIdentityRouting recentGroups recentBranches serviceStatus settings; do
161
+ grep -q "\"$f\":" "$PREFS_SCHEMA" \
162
+ && pass "prefs schema declares $f" \
163
+ || fail "prefs schema missing $f"
164
+ done
165
+ fi
166
+
167
+ # ──────────────────────────────────────────────────────────────────────────
168
+ echo ""
169
+ echo "══ phase-0-multi-repo smoke: $PASS passed, $FAIL failed ══"
170
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-phase-6-multi.sh — asserts Phase 6 multi-repo commit + per-repo PR
3
+ # + cross-link contract is documented.
4
+
5
+ set -uo pipefail
6
+
7
+ PHASE6="$HOME/.claude/commands/multi-agent/refs/phases/phase-6-commit.md"
8
+
9
+ PASS=0; FAIL=0
10
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
11
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
12
+
13
+ if [ ! -f "$PHASE6" ]; then
14
+ fail "phase-6-commit.md missing"; echo "══ aborted ══"; exit 2
15
+ fi
16
+
17
+ echo "→ 1. v2.1.0+ Multi-Repo Mode subsection present"
18
+ grep -q "v2.1.0+ Multi-Repo Mode" "$PHASE6" \
19
+ && pass "Phase 6 has v2.1.0+ Multi-Repo Mode subsection" \
20
+ || fail "Phase 6 missing v2.1.0+ Multi-Repo Mode subsection"
21
+
22
+ echo "→ 2. Per-repo commit (shared subject + per-repo scope)"
23
+ grep -q "shared subject" "$PHASE6" \
24
+ && pass "Shared subject across repos documented" \
25
+ || fail "Shared subject rule missing"
26
+ grep -q "per-repo scope" "$PHASE6" \
27
+ && pass "Per-repo scope rule documented" \
28
+ || fail "Per-repo scope rule missing"
29
+ grep -q "Part of multi-repo change" "$PHASE6" \
30
+ && pass "Body mentions sibling repos in commit message" \
31
+ || fail "Sibling repo mention missing from commit body"
32
+ grep -q "state.projects\[i\].commit" "$PHASE6" \
33
+ && pass "Per-repo commit sha persisted to state" \
34
+ || fail "Per-repo commit sha persistence missing"
35
+
36
+ echo "→ 3. Per-repo PR with sibling cross-links"
37
+ grep -q "Sibling PRs (multi-repo task)" "$PHASE6" \
38
+ && pass "PR body has Sibling PRs section" \
39
+ || fail "PR body Sibling PRs section missing"
40
+ grep -q "update_sibling_links" "$PHASE6" \
41
+ && pass "Idempotent sibling-link update documented" \
42
+ || fail "Sibling-link update missing"
43
+ grep -q "version+1\|version +1" "$PHASE6" \
44
+ && pass "Bitbucket version-bump for PR update mentioned" \
45
+ || fail "Bitbucket PUT version-bump missing"
46
+ grep -q "gh pr edit --body-file" "$PHASE6" \
47
+ && pass "GitHub gh pr edit for sibling-link update" \
48
+ || fail "GitHub PR update command missing"
49
+
50
+ echo "→ 4. GitHub issue body — multi-repo PR list"
51
+ grep -q "one row per repo" "$PHASE6" \
52
+ && pass "Issue body lists one row per repo" \
53
+ || fail "Issue body multi-repo expansion missing"
54
+ grep -q '\*\*common:\*\*\|\*\*uicomponents:\*\*' "$PHASE6" \
55
+ && pass "Per-repo row format example present" \
56
+ || fail "Per-repo row example missing"
57
+
58
+ echo "→ 5. recentGroups update on success"
59
+ grep -q "recentGroups\` update on success" "$PHASE6" \
60
+ && pass "recentGroups update section present" \
61
+ || fail "recentGroups update section missing"
62
+ grep -q "order-independent compare" "$PHASE6" \
63
+ && pass "Group dedup by order-independent compare" \
64
+ || fail "Order-independent compare rule missing"
65
+ grep -q '"skipped"' "$PHASE6" \
66
+ && pass "Skipped repos excluded from LRU bump" \
67
+ || fail "LRU bump exclusion for skipped repos missing"
68
+
69
+ echo "→ 6. Telemetry per-repo"
70
+ grep -q "commit.created.*repo=\|push.attempted.*repo=" "$PHASE6" \
71
+ && pass "Per-repo commit/push telemetry documented" \
72
+ || fail "Per-repo telemetry missing"
73
+ grep -q "multi_repo.completed" "$PHASE6" \
74
+ && pass "Aggregate multi_repo.completed metric present" \
75
+ || fail "multi_repo.completed metric missing"
76
+
77
+ echo ""
78
+ echo "══ phase-6-multi smoke: $PASS passed, $FAIL failed ══"
79
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-phase-banner.sh — contract check for phase-banner.sh.
3
+ #
4
+ # Verifies:
5
+ # 1. start/end/sub render with phase + name
6
+ # 2. status enum on `end` is enforced (done|failed|skipped only)
7
+ # 3. plain-text mode (no TTY, TERM=dumb) strips ANSI codes
8
+ # 4. bad action / bad status → non-zero exit
9
+ # 5. minimal args allowed (no name, no detail)
10
+
11
+ set -uo pipefail
12
+
13
+ HERE="$(cd "$(dirname "$0")" && pwd)"
14
+ ROOT="$(cd "$HERE/../.." && pwd)"
15
+ SCRIPT="$ROOT/pipeline/scripts/phase-banner.sh"
16
+
17
+ PASS=0
18
+ FAIL=0
19
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
20
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
21
+
22
+ # Capture in plain-text mode (no TTY, TERM=dumb so colors are off).
23
+ run_plain() {
24
+ TERM=dumb "$SCRIPT" "$@" 2>/tmp/banner-err
25
+ }
26
+ run_plain_status() {
27
+ local rc=0
28
+ TERM=dumb "$SCRIPT" "$@" >/dev/null 2>/tmp/banner-err || rc=$?
29
+ echo "$rc"
30
+ }
31
+
32
+ echo "→ 1. start renders phase + name"
33
+ OUT=$(run_plain start 4 "Review" "demo")
34
+ echo "$OUT" | grep -q "Phase 4: Review" && pass "start banner contains phase + name" || fail "start banner missing phase or name"
35
+ echo "$OUT" | grep -q "demo" && pass "start banner contains detail" || fail "missing detail"
36
+
37
+ echo ""
38
+ echo "→ 2. end renders phase + status glyph"
39
+ OUT_DONE=$(run_plain end 4 done "Review")
40
+ echo "$OUT_DONE" | grep -q "✓ done" && pass "end done shows ✓" || fail "missing ✓ on done"
41
+ OUT_FAIL=$(run_plain end 3 failed "Dev")
42
+ echo "$OUT_FAIL" | grep -q "✗ failed" && pass "end failed shows ✗" || fail "missing ✗ on failed"
43
+ OUT_SKIP=$(run_plain end 5 skipped "Test")
44
+ echo "$OUT_SKIP" | grep -q "↷ skipped" && pass "end skipped shows ↷" || fail "missing ↷ on skipped"
45
+
46
+ echo ""
47
+ echo "→ 3. sub renders Sub <phase>.<sub>"
48
+ OUT_SUB=$(run_plain sub 4 2 "Triage" "validating")
49
+ echo "$OUT_SUB" | grep -q "Sub 4.2 Triage" && pass "sub line correct" || fail "sub line wrong: $OUT_SUB"
50
+
51
+ echo ""
52
+ echo "→ 4. plain-text mode strips ANSI"
53
+ if echo "$OUT" | grep -q $'\033\['; then
54
+ fail "ANSI escape codes leaked into TERM=dumb output"
55
+ else
56
+ pass "no ANSI escapes when TERM=dumb"
57
+ fi
58
+
59
+ echo ""
60
+ echo "→ 5. bad status → exit 64"
61
+ RC=$(run_plain_status end 4 unknownstatus "name")
62
+ [ "$RC" = "64" ] && pass "bad status rejected (exit 64)" || fail "bad status didn't fail (rc=$RC)"
63
+
64
+ echo ""
65
+ echo "→ 6. bad action → exit 64"
66
+ RC=$(run_plain_status flapdoodle 4)
67
+ [ "$RC" = "64" ] && pass "bad action rejected (exit 64)" || fail "bad action didn't fail (rc=$RC)"
68
+
69
+ echo ""
70
+ echo "→ 7. missing args → exit 64"
71
+ RC=$(run_plain_status start)
72
+ [ "$RC" = "64" ] && pass "missing args rejected (exit 64)" || fail "missing args didn't fail (rc=$RC)"
73
+
74
+ echo ""
75
+ echo "→ 8. minimal args (no name, no detail) work"
76
+ RC=$(run_plain_status start 0)
77
+ [ "$RC" = "0" ] && pass "minimal start works (just phase)" || fail "minimal start failed (rc=$RC)"
78
+
79
+ echo ""
80
+ echo "→ 9. label action prints canonical EN name"
81
+ OUT_LBL=$(TERM=dumb "$SCRIPT" label 4)
82
+ [ "$OUT_LBL" = "Review" ] && pass "label 4 en → Review" || fail "label 4 en unexpected: '$OUT_LBL'"
83
+
84
+ echo ""
85
+ echo "→ 10. PHASE_LANG=tr resolves TR label"
86
+ OUT_TR=$(TERM=dumb PHASE_LANG=tr "$SCRIPT" label 4)
87
+ [ "$OUT_TR" = "İnceleme" ] && pass "label 4 tr → İnceleme" || fail "label 4 tr unexpected: '$OUT_TR'"
88
+
89
+ echo ""
90
+ echo "→ 11. auto sentinel resolves from table (en)"
91
+ OUT_AUTO=$(run_plain start 3 auto)
92
+ echo "$OUT_AUTO" | grep -q "Phase 3: Dev" && pass "auto en → Phase 3: Dev" || fail "auto en unexpected: $OUT_AUTO"
93
+
94
+ echo ""
95
+ echo "→ 12. auto sentinel + PHASE_LANG=tr → Faz N: <tr-label>"
96
+ OUT_AUTO_TR=$(TERM=dumb PHASE_LANG=tr "$SCRIPT" start 3 auto)
97
+ echo "$OUT_AUTO_TR" | grep -q "Faz 3: Geliştirme" && pass "auto tr → Faz 3: Geliştirme" || fail "auto tr unexpected: $OUT_AUTO_TR"
98
+
99
+ echo ""
100
+ echo "══ phase-banner smoke: $PASS passed, $FAIL failed ══"
101
+ [ "$FAIL" -eq 0 ]
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env bash
2
+ # smoke-phase-tracker.sh — contract check for phase-tracker.sh.
3
+ #
4
+ # Verifies state file shape, status transitions, sub-phase add/update,
5
+ # enum enforcement, render output structure, and that the .tracker-current
6
+ # pointer redirects subsequent invocations.
7
+
8
+ set -uo pipefail
9
+
10
+ HERE="$(cd "$(dirname "$0")" && pwd)"
11
+ ROOT="$(cd "$HERE/../.." && pwd)"
12
+ SCRIPT="$ROOT/pipeline/scripts/phase-tracker.sh"
13
+
14
+ # Use a sandbox HOME so init writes into a temp tree, not the real one.
15
+ SANDBOX_HOME="$(mktemp -d -t multi-agent-tracker-XXXX)"
16
+ trap 'rm -rf "$SANDBOX_HOME"' EXIT
17
+ export HOME="$SANDBOX_HOME"
18
+
19
+ PASS=0
20
+ FAIL=0
21
+ pass() { PASS=$((PASS+1)); echo " ✓ $1"; }
22
+ fail() { FAIL=$((FAIL+1)); echo " ✗ $1"; }
23
+
24
+ need() { command -v "$1" >/dev/null 2>&1 || { echo "error: $1 is required" >&2; exit 127; }; }
25
+ need jq
26
+
27
+ run_plain() {
28
+ TERM=dumb "$SCRIPT" "$@" 2>/tmp/tracker-err
29
+ }
30
+ run_plain_status() {
31
+ local rc=0
32
+ TERM=dumb "$SCRIPT" "$@" >/dev/null 2>/tmp/tracker-err || rc=$?
33
+ echo "$rc"
34
+ }
35
+
36
+ STATE_FILE="$SANDBOX_HOME/.claude/logs/multi-agent/TASK-1/tracker-state.json"
37
+
38
+ echo "→ 1. init creates state file with empty phases"
39
+ run_plain init TASK-1 >/dev/null
40
+ [ -f "$STATE_FILE" ] && pass "state file created at expected path" || fail "state file not at $STATE_FILE"
41
+ PHASES=$(jq '.phases | length' "$STATE_FILE")
42
+ [ "$PHASES" = "0" ] && pass "starts with empty phases array" || fail "expected 0 phases, got $PHASES"
43
+ TASK_ID=$(jq -r '.task_id' "$STATE_FILE")
44
+ [ "$TASK_ID" = "TASK-1" ] && pass "task_id persisted" || fail "task_id wrong: $TASK_ID"
45
+
46
+ echo ""
47
+ echo "→ 2. .tracker-current pointer is written"
48
+ POINTER="$SANDBOX_HOME/.claude/logs/multi-agent/.tracker-current"
49
+ [ -f "$POINTER" ] && pass "pointer file exists" || fail "pointer not created"
50
+ [ "$(cat "$POINTER")" = "$STATE_FILE" ] && pass "pointer points at correct state file" || fail "pointer wrong"
51
+
52
+ echo ""
53
+ echo "→ 3. add appends pending phases"
54
+ run_plain add 0 "Init" >/dev/null
55
+ run_plain add 1 "Analysis" >/dev/null
56
+ run_plain add 2 "Planning" >/dev/null
57
+ PHASES=$(jq '.phases | length' "$STATE_FILE")
58
+ [ "$PHASES" = "3" ] && pass "3 phases registered" || fail "expected 3, got $PHASES"
59
+ P0_STATUS=$(jq -r '.phases[0].status' "$STATE_FILE")
60
+ [ "$P0_STATUS" = "pending" ] && pass "new phase defaults to pending" || fail "expected pending, got $P0_STATUS"
61
+
62
+ echo ""
63
+ echo "→ 4. update transitions status"
64
+ run_plain update 0 in_progress >/dev/null
65
+ [ "$(jq -r '.phases[0].status' "$STATE_FILE")" = "in_progress" ] && pass "pending → in_progress" || fail "transition failed"
66
+ run_plain update 0 completed >/dev/null
67
+ [ "$(jq -r '.phases[0].status' "$STATE_FILE")" = "completed" ] && pass "in_progress → completed" || fail "transition failed"
68
+
69
+ echo ""
70
+ echo "→ 5. status enum enforcement"
71
+ RC=$(run_plain_status update 0 nonsense)
72
+ [ "$RC" = "64" ] && pass "bogus status rejected (exit 64)" || fail "bogus status accepted (rc=$RC)"
73
+
74
+ echo ""
75
+ echo "→ 6. sub adds and updates a sub-phase"
76
+ run_plain sub 1 1 "Stack detection" completed >/dev/null
77
+ run_plain sub 1 2 "Codebase scan" in_progress >/dev/null
78
+ SUBS=$(jq '.phases[1].subs | length' "$STATE_FILE")
79
+ [ "$SUBS" = "2" ] && pass "two subs added under phase 1" || fail "expected 2 subs, got $SUBS"
80
+ S2_STATUS=$(jq -r '.phases[1].subs[1].status' "$STATE_FILE")
81
+ [ "$S2_STATUS" = "in_progress" ] && pass "sub 1.2 is in_progress" || fail "wrong status: $S2_STATUS"
82
+ # Update existing sub (same id, change status)
83
+ run_plain sub 1 2 "Codebase scan" completed >/dev/null
84
+ S2_STATUS=$(jq -r '.phases[1].subs[1].status' "$STATE_FILE")
85
+ [ "$S2_STATUS" = "completed" ] && pass "existing sub updated in place (no duplicate)" || fail "in-place update failed"
86
+ SUBS=$(jq '.phases[1].subs | length' "$STATE_FILE")
87
+ [ "$SUBS" = "2" ] && pass "still 2 subs (no duplication)" || fail "duplicate created (got $SUBS)"
88
+
89
+ echo ""
90
+ echo "→ 7. render output contains the title and box borders"
91
+ OUT=$(run_plain render)
92
+ echo "$OUT" | grep -q "Pipeline: TASK-1" && pass "render shows task title" || fail "title missing"
93
+ echo "$OUT" | grep -q '╭─' && pass "top border present" || fail "top border missing"
94
+ echo "$OUT" | grep -q '╰──' && pass "bottom border present" || fail "bottom border missing"
95
+
96
+ echo ""
97
+ echo "→ 8. plain mode strips ANSI"
98
+ if echo "$OUT" | grep -q $'\033\['; then
99
+ fail "ANSI escapes leaked into TERM=dumb output"
100
+ else
101
+ pass "no ANSI under TERM=dumb"
102
+ fi
103
+
104
+ echo ""
105
+ echo "→ 9. unknown action → exit 64"
106
+ RC=$(run_plain_status flarfle)
107
+ [ "$RC" = "64" ] && pass "unknown action rejected" || fail "unknown action got rc=$RC"
108
+
109
+ echo ""
110
+ echo "→ 10. update stamps started_at on first in_progress (v5.4.0)"
111
+ run_plain init BAR-1 >/dev/null
112
+ run_plain add 0 "Init" >/dev/null
113
+ run_plain update 0 in_progress >/dev/null
114
+ STATE_B1="$HOME/.claude/logs/multi-agent/BAR-1/tracker-state.json"
115
+ STARTED=$(jq -r '.phases[0].started_at // ""' "$STATE_B1")
116
+ [ -n "$STARTED" ] && pass "started_at stamped: $STARTED" || fail "started_at not stamped"
117
+
118
+ echo ""
119
+ echo "→ 11. update stamps completed_at on terminal status (completed/failed/skipped)"
120
+ run_plain update 0 completed >/dev/null
121
+ COMPLETED=$(jq -r '.phases[0].completed_at // ""' "$STATE_B1")
122
+ [ -n "$COMPLETED" ] && pass "completed status stamps completed_at" || fail "completed did not stamp"
123
+
124
+ run_plain add 1 "FailPhase" >/dev/null
125
+ run_plain update 1 in_progress >/dev/null
126
+ run_plain update 1 failed >/dev/null
127
+ [ "$(jq -r '.phases[1].completed_at // ""' "$STATE_B1")" != "" ] && pass "failed stamps completed_at" || fail "failed did not stamp"
128
+
129
+ run_plain add 2 "SkipPhase" >/dev/null
130
+ run_plain update 2 skipped >/dev/null
131
+ [ "$(jq -r '.phases[2].completed_at // ""' "$STATE_B1")" != "" ] && pass "skipped stamps completed_at" || fail "skipped did not stamp"
132
+
133
+ echo ""
134
+ echo "→ 12. started_at idempotent on repeat in_progress (v5.4.0)"
135
+ run_plain init BAR-2 >/dev/null
136
+ run_plain add 0 "X" >/dev/null
137
+ run_plain update 0 in_progress >/dev/null
138
+ STATE_B2="$HOME/.claude/logs/multi-agent/BAR-2/tracker-state.json"
139
+ FIRST_TS=$(jq -r '.phases[0].started_at' "$STATE_B2")
140
+ sleep 1
141
+ run_plain update 0 in_progress >/dev/null
142
+ SECOND_TS=$(jq -r '.phases[0].started_at' "$STATE_B2")
143
+ [ "$FIRST_TS" = "$SECOND_TS" ] && pass "started_at preserved on repeat update" || fail "started_at changed: $FIRST_TS → $SECOND_TS"
144
+
145
+ echo ""
146
+ echo "→ 13. render draws 16-char progress bar + elapsed labels (v5.4.0)"
147
+ run_plain init BAR-3 >/dev/null
148
+ for p in 0:Init 1:Dev 2:Commit; do
149
+ run_plain add "${p%%:*}" "${p#*:}" >/dev/null
150
+ done
151
+ STATE_B3="$HOME/.claude/logs/multi-agent/BAR-3/tracker-state.json"
152
+ NOW_S=$(date +%s)
153
+ mk_ts() { date -u -r "$1" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -d "@$1" +"%Y-%m-%dT%H:%M:%SZ"; }
154
+ jq \
155
+ --arg s0 "$(mk_ts $((NOW_S - 300)))" --arg e0 "$(mk_ts $((NOW_S - 295)))" \
156
+ --arg s1 "$(mk_ts $((NOW_S - 280)))" --arg e1 "$(mk_ts $((NOW_S - 120)))" \
157
+ --arg s2 "$(mk_ts $((NOW_S - 60)))" --arg e2 "$(mk_ts $((NOW_S - 58)))" \
158
+ '.phases |= map(
159
+ if .id=="0" then .status="completed"|.started_at=$s0|.completed_at=$e0
160
+ elif .id=="1" then .status="completed"|.started_at=$s1|.completed_at=$e1
161
+ elif .id=="2" then .status="completed"|.started_at=$s2|.completed_at=$e2
162
+ else . end)' "$STATE_B3" > "$STATE_B3.new" && mv "$STATE_B3.new" "$STATE_B3"
163
+ OUT_BAR=$(run_plain render)
164
+ echo "$OUT_BAR" | grep -q "5s" && pass "elapsed formatted as '5s'" || fail "'5s' missing in render"
165
+ echo "$OUT_BAR" | grep -qE "2m 40s|160s" && pass "elapsed formatted as '2m 40s' (160s)" || fail "2m-range elapsed missing"
166
+ # v8.1.0: progress bar removed; elapsed label is the only timing visualization.
167
+
168
+ echo ""
169
+ echo "→ 14. graceful fallback on old state without timestamps (v5.4.0)"
170
+ mkdir -p "$HOME/.claude/logs/multi-agent/OLD-SCHEMA"
171
+ cat > "$HOME/.claude/logs/multi-agent/OLD-SCHEMA/tracker-state.json" <<'JSON'
172
+ {"task_id":"OLD-SCHEMA","started_at":"","phases":[
173
+ {"id":"0","name":"Init","status":"completed","subs":[]},
174
+ {"id":"1","name":"Dev","status":"in_progress","subs":[]}
175
+ ]}
176
+ JSON
177
+ echo "$HOME/.claude/logs/multi-agent/OLD-SCHEMA/tracker-state.json" > "$HOME/.claude/logs/multi-agent/.tracker-current"
178
+ OUT_OLD=$(TERM=dumb "$SCRIPT" render 2>&1)
179
+ OLD_RC=$?
180
+ [ "$OLD_RC" -eq 0 ] && pass "render exits 0 on old-schema state" || fail "render exit=$OLD_RC on old state"
181
+ echo "$OUT_OLD" | grep -q "Phase 0" && pass "renders Phase 0 from old state" || fail "Phase 0 missing"
182
+ # v8.1.0: progress bar removed entirely; old-schema state should still render text.
183
+
184
+ echo ""
185
+ echo "→ 15. tokens action accumulates per phase (v5.5.0)"
186
+ run_plain init TOK-1 >/dev/null
187
+ run_plain add 0 "Init" >/dev/null
188
+ run_plain tokens 0 100 50 >/dev/null
189
+ run_plain tokens 0 200 75 >/dev/null
190
+ STATE_T1="$HOME/.claude/logs/multi-agent/TOK-1/tracker-state.json"
191
+ TIN=$(jq -r '.phases[0].tokens_in // 0' "$STATE_T1")
192
+ TOUT=$(jq -r '.phases[0].tokens_out // 0' "$STATE_T1")
193
+ [ "$TIN" = "300" ] && pass "tokens_in accumulated (100+200=300)" || fail "tokens_in=$TIN expected 300"
194
+ [ "$TOUT" = "125" ] && pass "tokens_out accumulated (50+75=125)" || fail "tokens_out=$TOUT expected 125"
195
+
196
+ echo ""
197
+ echo "→ 16. tokens validates non-negative integers (v5.5.0)"
198
+ RC=$(run_plain_status tokens 0 foo 10)
199
+ [ "$RC" = "64" ] && pass "non-integer rejected (exit 64)" || fail "non-integer got rc=$RC"
200
+ RC=$(run_plain_status tokens 0 -5 10)
201
+ [ "$RC" = "64" ] && pass "negative rejected (exit 64)" || fail "negative got rc=$RC"
202
+
203
+ echo ""
204
+ echo "→ 17. render shows token label per phase + total footer (v5.5.0)"
205
+ run_plain init TOK-2 >/dev/null
206
+ run_plain add 0 "Init" >/dev/null
207
+ run_plain add 1 "Dev" >/dev/null
208
+ run_plain tokens 0 180 50 >/dev/null # 230 → "230"
209
+ run_plain tokens 1 14500 4200 >/dev/null # 18700 → "18.7k"
210
+ OUT_TOK=$(run_plain render)
211
+ echo "$OUT_TOK" | grep -qE "230 tok" && pass "raw count '230 tok' rendered" || fail "'230 tok' missing"
212
+ echo "$OUT_TOK" | grep -qE "18\.7k tok" && pass "k-formatted '18.7k tok' rendered" || fail "'18.7k tok' missing"
213
+ echo "$OUT_TOK" | grep -qE "Total.*18\.9k tok" && pass "Total footer '18.9k tok' rendered" || fail "Total footer missing (expected 18.9k)"
214
+
215
+ echo ""
216
+ echo "→ 18. pending phases without tokens render no label (v5.5.0)"
217
+ run_plain init TOK-3 >/dev/null
218
+ run_plain add 0 "Empty" >/dev/null
219
+ OUT_NOP=$(run_plain render)
220
+ # Should NOT contain " tok" string since no tokens recorded
221
+ if echo "$OUT_NOP" | grep -qE "tok"; then
222
+ fail "phase without tokens should not show 'tok' label"
223
+ else
224
+ pass "phase without tokens: no 'tok' label"
225
+ fi
226
+ # No "Total" footer when total is 0
227
+ if echo "$OUT_NOP" | grep -q "Total"; then
228
+ fail "no-token tracker should not show Total footer"
229
+ else
230
+ pass "no-token tracker: no Total footer"
231
+ fi
232
+
233
+ echo ""
234
+ echo "→ 19. tokens action re-renders live (v5.6.0)"
235
+ run_plain init TOK-LIVE >/dev/null
236
+ run_plain add 0 "Init" >/dev/null
237
+ run_plain update 0 in_progress >/dev/null
238
+ # Without TRACKER_QUIET the tokens call MUST emit a render to stdout
239
+ LIVE_OUT=$(run_plain tokens 0 500 250)
240
+ echo "$LIVE_OUT" | grep -qE "750 tok" && pass "tokens action re-renders with new total (750 tok)" || fail "tokens did not re-render (out: $LIVE_OUT)"
241
+ # With TRACKER_QUIET=1 the tokens call must NOT emit a render
242
+ QUIET_OUT=$(TRACKER_QUIET=1 run_plain tokens 0 100 50)
243
+ if [ -n "$QUIET_OUT" ]; then
244
+ fail "TRACKER_QUIET=1 should suppress render (got: $QUIET_OUT)"
245
+ else
246
+ pass "TRACKER_QUIET=1 suppresses re-render"
247
+ fi
248
+ # State still updated under TRACKER_QUIET (accumulation must still happen)
249
+ STATE_LIVE="$HOME/.claude/logs/multi-agent/TOK-LIVE/tracker-state.json"
250
+ TIN_LIVE=$(jq -r '.phases[0].tokens_in // 0' "$STATE_LIVE")
251
+ [ "$TIN_LIVE" = "600" ] && pass "TRACKER_QUIET still accumulates state (500+100=600)" || fail "quiet mode broke accumulation (got $TIN_LIVE)"
252
+
253
+ echo ""
254
+ echo "══ phase-tracker smoke: $PASS passed, $FAIL failed ══"
255
+ [ "$FAIL" -eq 0 ]