@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,711 @@
1
+ # /performance-iteration-commit-all — Batch Validate & Push All Tour Components
2
+
3
+ > Reads `_tour_tracker.json`, validates all reviewed components in a single build+test
4
+ > cycle, pushes all local commits in a single push per submodule, then handles issue
5
+ > housekeeping for each component individually.
6
+
7
+ ## Guardrails
8
+
9
+ > **NEVER create branches on the main repo (REPO_ROOT).** Same guardrail as `figma-iteration-commit`.
10
+
11
+ > **NEVER use `json.dumps()` default formatting on JSON files.** Preserve existing format.
12
+ > `ui-testing-identifiers.json` uses `" : "` (space-colon-space).
13
+
14
+ > **NEVER manually edit `ui-testing-identifiers.json` during rebase conflict resolution.**
15
+ > Follow the conflict resolution protocol from `figma-iteration-commit`.
16
+
17
+ ## Parameters
18
+
19
+ No arguments — reads `_tour_tracker.json`.
20
+
21
+ ```
22
+ /performance-iteration-commit-all
23
+ ```
24
+
25
+ ---
26
+
27
+ ## Constants
28
+
29
+ ```
30
+ REPO_ROOT = git repo root (auto-detect)
31
+ GH_REPO = {github.componentsRepo}
32
+ COMMON = ${REPO_ROOT}/{repos.common.path}
33
+ UICOMPONENTS = ${REPO_ROOT}/{repos.components.path}
34
+ WIKI = ${REPO_ROOT}/{repos.wiki.path}
35
+ TRACKER_FILE = ${REPO_ROOT}/_tour_tracker.json
36
+ ```
37
+
38
+ ---
39
+
40
+ ## STEP 0 — Read Tracker & Verify State
41
+
42
+ Read `_tour_tracker.json`.
43
+
44
+ Verify:
45
+ - `current_step` is `"STEP_3"` — if not, HALT: "Review not complete. Run /performance-review-next first."
46
+ - `reviewed_components` has at least 1 entry
47
+ - All reviewed components have local commits (check with `git log`)
48
+
49
+ Collect reviewed component data:
50
+
51
+ ```python
52
+ reviewed = [tracker["components"][str(issue)] for issue in tracker["reviewed_components"]]
53
+ lean_mode = tracker.get("lean_mode", False)
54
+ ```
55
+
56
+ Print:
57
+
58
+ ```
59
+ ╔══════════════════════════════════════════════════════════════╗
60
+ ║ BATCH COMMIT — PRE-FLIGHT ║
61
+ ╠══════════════════════════════════════════════════════════════╣
62
+ ║ ║
63
+ ║ Components to commit: ║
64
+ ║ 1. ComponentA (#1000) — reviewed ✅ ║
65
+ ║ 2. ComponentC (#1002) — reviewed ✅ ║
66
+ ║ ║
67
+ ║ Dropped (will NOT be committed): ║
68
+ ║ ❌ ComponentB (#1001) — halted, dropped ║
69
+ ║ ║
70
+ ╚══════════════════════════════════════════════════════════════╝
71
+
72
+ Proceed with validation and push? (yes/no)
73
+ ```
74
+
75
+ Wait for user confirmation.
76
+
77
+ ---
78
+
79
+ ## STEP 1 — Validate (SINGLE PASS)
80
+
81
+ ### 1a. Build
82
+
83
+ ```bash
84
+ xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
85
+ -scheme {build.scheme} -destination 'generic/platform=iOS' \
86
+ CODE_SIGNING_ALLOWED=NO -quiet
87
+ ```
88
+
89
+ If build fails → HALT. Fix before committing.
90
+
91
+ ### 1b. Tests (Combined)
92
+
93
+ > **LEAN MODE:** If `lean_mode` is `true` in the tracker, **SKIP this entire substep.**
94
+ > Tests were not generated during production. Print `Tests: ⏭️ skipped (lean mode)` and proceed to 1c.
95
+
96
+ Run tests for ALL reviewed components in a single xcodebuild invocation:
97
+
98
+ ```bash
99
+ xcodebuild test -project "${REPO_ROOT}/{build.xcodeproj}" \
100
+ -scheme {build.scheme} \
101
+ -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
102
+ -only-testing:"UIComponentsTests/ComponentAViewInspectorTests" \
103
+ -only-testing:"UIComponentsTests/ComponentASnapshotTests" \
104
+ -only-testing:"UIComponentsTests/ComponentCViewInspectorTests" \
105
+ -only-testing:"UIComponentsTests/ComponentCSnapshotTests" \
106
+ CODE_SIGNING_ALLOWED=NO -quiet
107
+ ```
108
+
109
+ Build the `-only-testing` flags dynamically from the reviewed components list.
110
+
111
+ If tests fail → HALT. Identify failing component and fix.
112
+
113
+ ### 1c. Key Sync Validation
114
+
115
+ For each reviewed component:
116
+
117
+ ```bash
118
+ cd ${COMMON}
119
+ python3 .instructions/figma/figma-to-swiftui/scripts/validate-localization-sync.py \
120
+ --component "${COMPONENT_NAME}"
121
+ ```
122
+
123
+ If out of sync → regenerate:
124
+ ```bash
125
+ swift package plugin --allow-writing-to-package-directory update-localizations-dev
126
+ swift package plugin --allow-writing-to-package-directory update-accessibility-dev
127
+ swift run UITestingIdentifierTool generate
128
+ ```
129
+
130
+ If regeneration creates new changes → commit them:
131
+ ```bash
132
+ cd ${COMMON}
133
+ git add -A
134
+ git commit -m "fix(common): sync keys after tour validation
135
+
136
+ Tour: performance-tour $(date +%Y%m%d)"
137
+ ```
138
+
139
+ ### 1d. Code Review (Lightweight)
140
+
141
+ Read `.instructions/figma/figma-commit/REVIEW.md` and run the 13-point checklist
142
+ across ALL reviewed components.
143
+
144
+ - Auto-fix any fixable violations
145
+ - If auto-fixes applied, commit:
146
+ ```bash
147
+ cd ${UICOMPONENTS}
148
+ git add -A
149
+ git commit -m "fix(uicomponents): auto-fix review violations
150
+
151
+ Tour: performance-tour review fixes"
152
+ ```
153
+ - Re-run build (STEP 1a) to verify auto-fixes didn't break anything
154
+ - If unfixable violations remain → print them, ask user to proceed or abort
155
+
156
+ Print validation result:
157
+
158
+ ```
159
+ Validation Summary:
160
+ Build: ✅
161
+ Tests: ✅ (ComponentA: 12 passed, ComponentC: 8 passed) # or: ⏭️ skipped (lean mode)
162
+ Key Sync: ✅
163
+ Review: ✅ / ⚠️ (N warnings, M auto-fixed)
164
+ ```
165
+
166
+ ---
167
+
168
+ ## STEP 2 — Push (SINGLE PUSH per submodule)
169
+
170
+ ### 2a. Push with Rebase-Retry Loop
171
+
172
+ For each submodule that has commits (common, uicomponents, wiki):
173
+
174
+ ```bash
175
+ cd ${SUBMODULE}
176
+ PUSH_BRANCH="iteration/develop" # or "master" for wiki
177
+
178
+ MAX_RETRIES=3
179
+ for i in $(seq 1 $MAX_RETRIES); do
180
+ git push origin ${PUSH_BRANCH} && break
181
+
182
+ echo "Push rejected — remote updated. Rebasing (attempt $i)..."
183
+ git fetch origin ${PUSH_BRANCH}
184
+ git rebase origin/${PUSH_BRANCH}
185
+
186
+ if [ $? -ne 0 ]; then
187
+ # Rebase conflict — attempt auto-resolution for generated files
188
+ # See "Generated File Conflict Resolution" below
189
+ # If auto-resolution fails → HALT
190
+ fi
191
+
192
+ # Re-validate build after rebase
193
+ xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
194
+ -scheme {build.scheme} -destination 'generic/platform=iOS' \
195
+ CODE_SIGNING_ALLOWED=NO -quiet
196
+
197
+ if [ $? -ne 0 ]; then
198
+ echo "HALT: Build failed after rebase. Fix before pushing."
199
+ exit 1
200
+ fi
201
+ done
202
+ ```
203
+
204
+ **Push order matters:** common → uicomponents → wiki (dependencies flow this direction).
205
+ In **lean mode**, wiki submodule has no commits — skip the wiki push entirely.
206
+
207
+ #### Generated File Conflict Resolution (common submodule)
208
+
209
+ During rebase, conflicts in generated files are **expected** when others have pushed to
210
+ `iteration/develop` concurrently. **NEVER resolve these by picking a side — always
211
+ accept remote then regenerate.**
212
+
213
+ **Conflict resolution table:**
214
+
215
+ | File | Resolution |
216
+ |------|-----------|
217
+ | `ui-testing-identifiers.json` | 1. `git checkout --ours` (upstream=remote during rebase) 2. Re-add our keys from `Shared/Figma/Components/{nodeId}.json` using Python with `" : "` format 3. `git add` |
218
+ | `LocalizationStringKeys.swift` | 1. `git checkout --ours` 2. Run `swift package plugin --allow-writing-to-package-directory update-localizations-dev` 3. `git add` |
219
+ | `UIAssetsGeneratedTokens.swift` | 1. `git checkout --ours` (timestamp-only conflict) 2. `git add` |
220
+ | `UITestingIdentifierKeys.swift` | 1. `git checkout --ours` 2. Run `swift run UITestingIdentifierTool generate` 3. `git add` |
221
+ | `Localizable.xcstrings` | 1. `git checkout --ours` 2. Already regenerated by `update-localizations-dev` above 3. `git add` |
222
+
223
+ **Procedure per conflicted commit during rebase:**
224
+
225
+ ```
226
+ 1. List conflicted files: git diff --name-only --diff-filter=U
227
+ 2. For each conflicted file:
228
+ a. If in table above → apply resolution (accept remote + regenerate)
229
+ b. If NOT in table → HALT, ask user to resolve manually
230
+ 3. git add <resolved files>
231
+ 4. git rebase --continue
232
+ 5. If next commit also conflicts → repeat from step 1
233
+ ```
234
+
235
+ **Post-rebase verification:** After all conflicts resolved and rebase completes,
236
+ verify our keys survived:
237
+ ```bash
238
+ grep -c "ComponentName" iOS/Sources/LocalizationStringKeys/Generated/LocalizationStringKeys.swift
239
+ grep -c "ComponentName" Shared/UITestingIdentifiers/ui-testing-identifiers.json
240
+ ```
241
+ If count is 0 for any component → regenerate again before pushing.
242
+
243
+ #### Wiki Conflict Resolution
244
+
245
+ Wiki status pages (`ComponentImplementationStatus*.md`) are auto-generated dashboards.
246
+ When conflicts occur:
247
+ 1. `git checkout --ours` (accept remote counts)
248
+ 2. `git add` + `git rebase --continue`
249
+ 3. Status dashboard will be regenerated in STEP 3e
250
+
251
+ ### 2b. Record Push SHAs
252
+
253
+ After successful push:
254
+
255
+ ```bash
256
+ COMMON_SHA=$(git -C ${COMMON} rev-parse --short HEAD)
257
+ UICOMP_SHA=$(git -C ${UICOMPONENTS} rev-parse --short HEAD)
258
+ WIKI_SHA=$(git -C ${WIKI} rev-parse --short HEAD) # only if not lean_mode
259
+ ```
260
+
261
+ Update tracker: record SHAs for each component.
262
+
263
+ ### 2c. Fetch All Remotes
264
+
265
+ ```bash
266
+ cd ${COMMON} && git fetch origin iteration/develop
267
+ cd ${UICOMPONENTS} && git fetch origin iteration/develop
268
+ # Wiki fetch — skip in lean mode
269
+ if [ "$LEAN_MODE" != "true" ]; then
270
+ cd ${WIKI} && git fetch origin master
271
+ fi
272
+ ```
273
+
274
+ ### 2d. Post-Push Build Verification
275
+
276
+ After all submodules are pushed, verify that the **remote dependency chain** builds
277
+ correctly. This catches issues where generated files lost entries during rebase
278
+ conflict resolution (e.g., `LocalizationStringKeys.swift` missing component keys).
279
+
280
+ 1. Ensure `Package.swift` in uicomponents points to **remote** common (not local path):
281
+ ```
282
+ .package(url: "...{project.slug}-common.git", branch: "iteration/develop")
283
+ ```
284
+ If it has a local `path:` override, revert it first.
285
+
286
+ 2. Resolve packages to pick up the freshly pushed common:
287
+ ```bash
288
+ cd ${UICOMPONENTS}
289
+ swift package resolve
290
+ ```
291
+
292
+ 3. Run a quick build:
293
+ ```bash
294
+ xcodebuild build -project "${REPO_ROOT}/{build.xcodeproj}" \
295
+ -scheme {build.scheme} -destination 'generic/platform=iOS' \
296
+ CODE_SIGNING_ALLOWED=NO -skipMacroValidation -quiet
297
+ ```
298
+
299
+ 4. If build fails:
300
+ - Check for `has no member` errors → indicates generated file lost keys during rebase
301
+ - For `LocalizationStringKeys`: `cd ${COMMON} && swift package plugin --allow-writing-to-package-directory update-localizations-dev`
302
+ - For `UITestingIdentifierKeys`: `cd ${COMMON} && swift run UITestingIdentifierTool generate`
303
+ - Commit fix: `git add -A && git commit -m "fix(common): regenerate keys after rebase"`
304
+ - Push: `git push origin iteration/develop`
305
+ - Re-run this step to confirm
306
+
307
+ 5. If build succeeds → print `Post-Push Build: ✅`
308
+
309
+ ---
310
+
311
+ ## STEP 3 — Issue Housekeeping (Per Component)
312
+
313
+ > **(strict) NONE of these substeps may be skipped.** Each substep prints a
314
+ > status line (`✅` or `❌`). The Completion Gate at the end (3g) verifies ALL
315
+ > substeps executed. If any critical substep is missing → HALT.
316
+
317
+ Initialise a per-component result tracker:
318
+
319
+ ```python
320
+ housekeeping = {} # { issue_number: { "3a": bool, "3b": bool, "3c": bool, "3d": bool, "3e": bool, "3f": bool } }
321
+ for comp in reviewed:
322
+ housekeeping[comp["issue"]] = {k: False for k in ["3a","3b","3c","3d","3e","3f"]}
323
+ ```
324
+
325
+ For EACH reviewed component:
326
+
327
+ ### 3a. Comment on Issue
328
+
329
+ ```bash
330
+ gh issue comment <N> --repo ${GH_REPO} --body "$(cat <<EOF
331
+ Committed to iteration/develop (submodules) via performance-tour:
332
+ - common: ${COMMON_SHA}
333
+ - uicomponents: ${UICOMP_SHA}
334
+ $(if [ "$LEAN_MODE" != "true" ]; then echo "- wiki: ${WIKI_SHA}"; fi)
335
+ $(if [ "$LEAN_MODE" = "true" ]; then echo "\nMode: lean (tests & wiki skipped)"; fi)
336
+
337
+ Tour batch: $(date +%Y-%m-%d)
338
+ Ready for review.
339
+ EOF
340
+ )"
341
+ ```
342
+
343
+ Verify: `gh issue view <N> --repo ${GH_REPO} --json comments --jq '.comments[-1].body' | grep -q 'performance-tour'`
344
+
345
+ Print: ` #<N> 3a Comment: ✅` or `❌`
346
+
347
+ ### 3b. Update Issue Phase + Labels
348
+
349
+ Determine completed phases from committed files:
350
+ - Has Swift view file → phase:implementation done
351
+ - Has test files → phase:testing done (**skip check in lean mode — always false**)
352
+ - Has .figma.swift → phase:code-connect done
353
+ - Has wiki markdown → phase:documentation done (**skip check in lean mode — always false**)
354
+
355
+ **Add phase labels to issue (adjust for lean mode):**
356
+
357
+ ```bash
358
+ # Full mode: add all completed phase labels
359
+ # Lean mode: only add phase:code-connect (no testing or documentation labels)
360
+ if [ "$LEAN_MODE" = "true" ]; then
361
+ gh issue edit <N> --repo ${GH_REPO} \
362
+ --add-label "phase:code-connect"
363
+ else
364
+ gh issue edit <N> --repo ${GH_REPO} \
365
+ --add-label "phase:testing" \
366
+ --add-label "phase:code-connect" \
367
+ --add-label "phase:documentation"
368
+ fi
369
+ ```
370
+
371
+ **Update Phase field on Projects V2 board** to the LAST completed phase
372
+ (same GraphQL mutations as `figma-iteration-commit` STEP 4b):
373
+
374
+ ```bash
375
+ # Phase option IDs:
376
+ # Implementation = 0577dcda
377
+ # Testing = 106b64ce
378
+ # Code Connect = 5384b1e1
379
+ # Documentation = 7307fb8f
380
+ #
381
+ # In lean mode, last phase = Code Connect (5384b1e1)
382
+ # In full mode, last phase = Documentation (7307fb8f)
383
+
384
+ ISSUE_NODE_ID=$(gh api graphql -f query='{ repository(owner: "{github.org}", name: "{project.slug}-components") { issue(number: <N>) { id } } }' --jq '.data.repository.issue.id')
385
+
386
+ ITEM_ID=$(gh api graphql -f query='mutation { addProjectV2ItemById(input: { projectId: "{github.projectV2Id}", contentId: "'"$ISSUE_NODE_ID"'" }) { item { id } } }' --jq '.data.addProjectV2ItemById.item.id')
387
+
388
+ # Set Phase = Documentation (last completed) — or Code Connect in lean mode
389
+ LAST_PHASE_ID="7307fb8f" # Documentation
390
+ if [ "$LEAN_MODE" = "true" ]; then
391
+ LAST_PHASE_ID="5384b1e1" # Code Connect
392
+ fi
393
+ gh api graphql -f query='mutation { updateProjectV2ItemFieldValue(input: { projectId: "{github.projectV2Id}", itemId: "'"$ITEM_ID"'", fieldId: "{github.projectV2Fields.phase}", value: { singleSelectOptionId: "'"$LAST_PHASE_ID"'" } }) { projectV2Item { id } } }'
394
+ ```
395
+
396
+ Verify: `gh api graphql` query confirms Phase field updated.
397
+
398
+ Print: ` #<N> 3b Phase: ✅ → Documentation` or ` #<N> 3b Phase: ✅ → Code Connect (lean)` or `❌`
399
+
400
+ ### 3c. Link Wiki to Issue
401
+
402
+ > **LEAN MODE:** If `lean_mode` is `true`, **SKIP this substep.** Wiki was not generated.
403
+ > Print ` #<N> 3c Wiki Link: ⏭ (lean mode)` and proceed.
404
+
405
+ If wiki was committed, add/update `### Wiki` section in issue body
406
+ (same logic as `figma-iteration-commit` STEP 4c).
407
+
408
+ ```bash
409
+ # Get current body
410
+ BODY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body')
411
+
412
+ # Construct wiki URL
413
+ WIKI_URL="https://github.com/${GH_REPO}/wiki/<WIKI_RELATIVE_PATH>/<COMPONENT_NAME>"
414
+
415
+ # Append wiki section if not already present
416
+ if ! echo "$BODY" | grep -q '### Wiki'; then
417
+ NEW_BODY="${BODY}
418
+
419
+ ### Wiki
420
+
421
+ [${COMPONENT_NAME}](${WIKI_URL})"
422
+ gh issue edit <N> --repo ${GH_REPO} --body "$NEW_BODY"
423
+ fi
424
+ ```
425
+
426
+ Verify: `gh issue view <N> --repo ${GH_REPO} --json body --jq '.body' | grep -q 'Wiki'`
427
+
428
+ Print: ` #<N> 3c Wiki Link: ✅` or `⏭ (no wiki)` or `❌`
429
+
430
+ ### 3d. Auto-Unblock Dependents
431
+
432
+ After ALL components are pushed, scan blocked issues:
433
+
434
+ ```bash
435
+ gh issue list --repo ${GH_REPO} --state open --label blocked --json number,title,body
436
+ ```
437
+
438
+ For each blocked issue, check if all blocking dependencies now have implementations.
439
+ If yes → remove `blocked` label + comment.
440
+
441
+ Print: ` 3d Unblock: ✅ (N unblocked)` or `⏭ (none blocked)`
442
+
443
+ ### 3e. Regenerate Status Dashboard
444
+
445
+ > **LEAN MODE:** If `lean_mode` is `true`, **SKIP this substep.** No wiki changes were made.
446
+ > Print ` 3e Dashboard: ⏭ (lean mode)` and proceed.
447
+
448
+ Wiki status pages (`ComponentImplementationStatus.md`, `-DSC.md`, `-MAC.md`) contain
449
+ component counts that may have been lost during rebase conflict resolution. Regenerate
450
+ them after all pushes are complete.
451
+
452
+ ```bash
453
+ # Run the status update skill logic:
454
+ cd ${WIKI}
455
+
456
+ # Option A: If figma-to-swift-ui-status-update is available as a command
457
+ # /figma-to-swift-ui-status-update
458
+
459
+ # Option B: Manual regeneration using the registry
460
+ cd ${COMMON}
461
+ python3 ${REPO_ROOT}/.instructions/figma/figma-to-swiftui/scripts/update-status-dashboard.py \
462
+ --wiki-path "${WIKI}" \
463
+ --common-path "${COMMON}" \
464
+ --uicomponents-path "${UICOMPONENTS}"
465
+ ```
466
+
467
+ If the script is not available, skip with a warning:
468
+ ```
469
+ ⚠️ Status dashboard regeneration skipped — script not found.
470
+ Run /figma-to-swift-ui-status-update manually to update counts.
471
+ ```
472
+
473
+ If regeneration produces changes:
474
+ ```bash
475
+ cd ${WIKI}
476
+ git add ComponentImplementationStatus*.md
477
+ git commit -m "docs(wiki): regenerate status dashboard after tour batch
478
+
479
+ Tour: performance-tour $(date +%Y-%m-%d)"
480
+ git push origin master
481
+ ```
482
+
483
+ Print: ` 3e Dashboard: ✅ regenerated` or `⏭ (no script)`
484
+
485
+ ### 3f. Jira Assignment & Content Update
486
+
487
+ > This step is a **safety net** for `performance-start` STEP 4. In tour mode,
488
+ > `performance-start` should assign Jira issues, but subagents may skip it.
489
+ > This step verifies and fixes any gaps.
490
+
491
+ For EACH reviewed component that has a Jira key (from issue body, field `### Jira Issue`):
492
+
493
+ ```bash
494
+ # Extract Jira key from issue body
495
+ JIRA_KEY=$(gh issue view <N> --repo ${GH_REPO} --json body --jq '.body' | grep -oE '{jira.projectKey}-[0-9]+')
496
+ ```
497
+
498
+ If `JIRA_KEY` is empty or `_No response_` → skip with `⏭ (no Jira)`.
499
+
500
+ Otherwise, run the Jira update via **Python urllib** (same approach as `performance-start` STEP 4):
501
+
502
+ ```python
503
+ # /tmp/jira_housekeeping_<JIRA_KEY>.py
504
+ import subprocess, urllib.request, json
505
+
506
+ token = subprocess.check_output(
507
+ ["security", "find-generic-password", "-a",
508
+ subprocess.check_output(["whoami"]).decode().strip(),
509
+ "-s", "JIRA_TOKEN", "-w"],
510
+ stderr=subprocess.DEVNULL
511
+ ).decode().strip()
512
+
513
+ JIRA_KEY = "<JIRA_KEY>"
514
+
515
+ # 1. Get current user
516
+ req = urllib.request.Request(
517
+ "{jira.baseUrl}/rest/api/2/myself",
518
+ headers={"Authorization": f"Bearer {token}"}
519
+ )
520
+ resp = urllib.request.urlopen(req, timeout=15)
521
+ username = json.loads(resp.read().decode())["name"]
522
+
523
+ # 2. Check if already assigned
524
+ req2 = urllib.request.Request(
525
+ f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}?fields=assignee",
526
+ headers={"Authorization": f"Bearer {token}"}
527
+ )
528
+ resp2 = urllib.request.urlopen(req2, timeout=15)
529
+ assignee = json.loads(resp2.read().decode()).get("fields",{}).get("assignee")
530
+
531
+ if assignee and assignee.get("name") == username:
532
+ print(f"ALREADY_ASSIGNED {JIRA_KEY}")
533
+ else:
534
+ # 3. Assign
535
+ data = json.dumps({"name": username}).encode()
536
+ req3 = urllib.request.Request(
537
+ f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}/assignee",
538
+ data=data,
539
+ headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
540
+ method="PUT"
541
+ )
542
+ try:
543
+ urllib.request.urlopen(req3, timeout=15)
544
+ print(f"ASSIGNED {JIRA_KEY}")
545
+ except urllib.error.HTTPError as e:
546
+ print(f"ASSIGN_FAILED {JIRA_KEY} {e.code}")
547
+
548
+ # 4. Update Jira content (summary, description, labels)
549
+ description = (
550
+ "h3. Figma\n"
551
+ "[<COMPONENT>|<FIGMA_URL>]\n\n"
552
+ "h3. GitHub Issue\n"
553
+ "[#<N>|https://github.com/<GH_REPO>/issues/<N>]\n\n"
554
+ "h3. Component\n"
555
+ "* *Registry Name:* <REGISTRY>\n"
556
+ "* *Component Name:* <COMPONENT>\n"
557
+ "* *Page:* <PAGE>\n\n"
558
+ "h3. Status\n"
559
+ "* (/) Implementation\n"
560
+ "* (/) Testing\n"
561
+ "* (/) Code Connect\n"
562
+ "* (/) Documentation"
563
+ )
564
+ summary = "Implement <COMPONENT> iOS UI Component"
565
+ update_data = json.dumps({
566
+ "fields": {
567
+ "summary": summary,
568
+ "description": description,
569
+ "labels": ["redesign_ios_ui_component", "MobRedesign"],
570
+ "components": [{"name": "TKMOB IOS"}],
571
+ "fixVersions": [{"name": "no-version"}],
572
+ "customfield_22025": {"value": "YOK"},
573
+ "customfield_21400": ["no-version"]
574
+ }
575
+ }).encode()
576
+ req4 = urllib.request.Request(
577
+ f"{jira.baseUrl}/rest/api/2/issue/{JIRA_KEY}",
578
+ data=update_data,
579
+ headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
580
+ method="PUT"
581
+ )
582
+ try:
583
+ urllib.request.urlopen(req4, timeout=15)
584
+ print(f"UPDATED {JIRA_KEY}")
585
+ except urllib.error.HTTPError as e:
586
+ print(f"UPDATE_FAILED {JIRA_KEY} {e.code}")
587
+ ```
588
+
589
+ Print: ` #<N> 3f Jira (<JIRA_KEY>): ✅ assigned + updated` or `⏭ (no Jira)` or `⚠️ (VPN/token issue)`
590
+
591
+ ### 3g. Required Completion Gate
592
+
593
+ > **This gate is NON-NEGOTIABLE. Do NOT proceed to STEP 4 without passing it.**
594
+
595
+ Print the housekeeping checklist for ALL components:
596
+
597
+ ```
598
+ ╔══════════════════════════════════════════════════════════════╗
599
+ ║ HOUSEKEEPING COMPLETION GATE ║
600
+ ╠══════════════════════════════════════════════════════════════╣
601
+ ║ ║
602
+ ║ #308 MilesSmilesInviteInviteList ║
603
+ ║ 3a Comment: ✅ ║
604
+ ║ 3b Phase: ✅ → Documentation ║
605
+ ║ 3c Wiki Link: ✅ ║
606
+ ║ 3d Unblock: ⏭ (none blocked) ║
607
+ ║ 3e Dashboard: ✅ regenerated ║
608
+ ║ 3f Jira: ✅ {jira.projectKey}-132507 ║
609
+ ║ ║
610
+ ║ #309 MilesSmilesMenuVoucherRightsGroup ║
611
+ ║ 3a Comment: ✅ ║
612
+ ║ 3b Phase: ✅ → Documentation ║
613
+ ║ 3c Wiki Link: ✅ ║
614
+ ║ 3d Unblock: ⏭ (none blocked) ║
615
+ ║ 3e Dashboard: ⏭ (covered above) ║
616
+ ║ 3f Jira: ✅ {jira.projectKey}-132508 ║
617
+ ║ ║
618
+ ║ CRITICAL CHECK: ║
619
+ ║ 3a (Comment): ALL ✅ ║
620
+ ║ 3b (Phase): ALL ✅ ← MUST pass ║
621
+ ║ 3c (Wiki): ALL ✅ ← MUST pass (if wiki exists) ║
622
+ ║ (or ⏭ lean for all in lean mode) ║
623
+ ║ 3f (Jira): ALL ✅ ← MUST pass (if Jira exists) ║
624
+ ║ ║
625
+ ║ GATE: ✅ PASSED ║
626
+ ╚══════════════════════════════════════════════════════════════╝
627
+ ```
628
+
629
+ **Critical substeps** (MUST pass or have valid skip reason):
630
+ - **3a** — Comment on issue
631
+ - **3b** — Phase + labels updated
632
+ - **3c** — Wiki linked (if wiki committed)
633
+ - **3f** — Jira assigned (if Jira key exists)
634
+
635
+ **Non-critical substeps** (warn but continue):
636
+ - **3d** — Auto-unblock (best effort)
637
+ - **3e** — Status dashboard (best effort)
638
+
639
+ If ANY critical substep shows `❌`:
640
+ 1. Print which substeps failed and for which components
641
+ 2. **Retry the failed substep** (1 retry per substep)
642
+ 3. If retry also fails → HALT with: `"Housekeeping incomplete. Fix manually before marking tour done."`
643
+
644
+ If gate passes → proceed to STEP 4.
645
+
646
+ ---
647
+
648
+ ## STEP 4 — Final Report
649
+
650
+ ```
651
+ ╔══════════════════════════════════════════════════════════════╗
652
+ ║ TOUR COMPLETE — FINAL REPORT ║
653
+ ╠══════════════════════════════════════════════════════════════╣
654
+ ║ ║
655
+ ║ ┌───┬────────┬──────────────┬──────────┬────────────────┐ ║
656
+ ║ │ # │ Issue │ Component │ Status │ SHA │ ║
657
+ ║ ├───┼────────┼──────────────┼──────────┼────────────────┤ ║
658
+ ║ │ 1 │ #1000 │ ComponentA │ ✅ Pushed │ abc1234 │ ║
659
+ ║ │ 2 │ #1002 │ ComponentC │ ✅ Pushed │ def5678 │ ║
660
+ ║ │ 3 │ #1001 │ ComponentB │ ❌ Dropped│ — │ ║
661
+ ║ └───┴────────┴──────────────┴──────────┴────────────────┘ ║
662
+ ║ ║
663
+ ║ Validation: ║
664
+ ║ Build: ✅ ║
665
+ ║ Tests: ✅ (20 passed) ║
666
+ ║ Review: ✅ ║
667
+ ║ Post-Push: ✅ (remote dep build verified) ║
668
+ ║ ║
669
+ ║ Push: ║
670
+ ║ common: ✅ pushed (2 commits) ║
671
+ ║ uicomponents: ✅ pushed (2 commits) ║
672
+ ║ wiki: ✅ pushed (2 commits) / ⏭ lean ║
673
+ ║ ║
674
+ ║ Issues Updated: #1000, #1002 ║
675
+ ║ Jira Updated: {jira.projectKey}-132507, {jira.projectKey}-132508 ║
676
+ ║ Unblocked: #1050 (was blocked by ComponentA) ║
677
+ ║ Dashboard: ✅ regenerated ║
678
+ ║ Housekeeping: ✅ gate passed (all 6 substeps) ║
679
+ ║ ║
680
+ ║ Tour Duration: 1h 23m ║
681
+ ║ Components: 2 committed, 1 dropped ║
682
+ ╚══════════════════════════════════════════════════════════════╝
683
+ ```
684
+
685
+ ### Cleanup
686
+
687
+ ```bash
688
+ # Remove tour tracker (tour is complete)
689
+ rm -f ${TRACKER_FILE}
690
+ ```
691
+
692
+ ---
693
+
694
+ ## Error Handling
695
+
696
+ | Error | Action |
697
+ |-------|--------|
698
+ | Tracker not found | HALT: "No tour in progress" |
699
+ | current_step not STEP_3 | HALT: "Review not complete" |
700
+ | No reviewed components | HALT: "Nothing to commit" |
701
+ | Build fails | HALT — fix, then re-run |
702
+ | Tests fail | HALT — fix failing component, then re-run |
703
+ | Push rejected (after 3 retries) | HALT — manual conflict resolution needed |
704
+ | Rebase conflict (generated file) | Auto-resolve: accept remote + regenerate (see 2a table) |
705
+ | Rebase conflict (non-generated) | HALT — print conflict file, ask user to resolve |
706
+ | Post-push build fails | Regenerate generated files in common, commit + push fix |
707
+ | Status dashboard script missing | Warn + skip — not blocking |
708
+ | Issue housekeeping fails (critical: 3a/3b/3c/3f) | Retry once → if still fails, HALT |
709
+ | Issue housekeeping fails (non-critical: 3d/3e) | Warn but continue |
710
+ | Jira unreachable | ⚠️ warn — mark 3f as skipped with reason, pass gate |
711
+ | Completion gate fails | HALT: print failed substeps, retry once, then abort |