claudecode-omc 5.6.5 → 5.6.7

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 (434) hide show
  1. package/.local/commands/code-review.md +416 -0
  2. package/.local/commands/pr.md +250 -0
  3. package/.local/commands/prp-pr.md +244 -0
  4. package/.local/guidelines/CLAUDE.md +47 -0
  5. package/.local/skills/h5-to-swiftui/SKILL.md +201 -0
  6. package/.local/skills/h5-to-swiftui/assets/calibration/README.md +176 -0
  7. package/.local/skills/h5-to-swiftui/assets/calibration/h5-twin/index.html +52 -0
  8. package/.local/skills/h5-to-swiftui/assets/calibration/h5-twin/style.css +133 -0
  9. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin/Package.swift +26 -0
  10. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin/Sources/CalibrationScreen/CalibrationScreen.swift +142 -0
  11. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin-divergent/Package.swift +32 -0
  12. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin-divergent/Sources/CalibrationScreenDivergent/CalibrationScreenDivergent.swift +122 -0
  13. package/.local/skills/h5-to-swiftui/assets/calibration/tokens.json +42 -0
  14. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/index.html +14 -0
  15. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/package.json +20 -0
  16. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/public/api/articles/001.json +96 -0
  17. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/public/api/articles/index.json +89 -0
  18. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/App.jsx +22 -0
  19. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/App.module.css +11 -0
  20. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/ArticleCard.jsx +53 -0
  21. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/ArticleCard.module.css +139 -0
  22. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/NavBar.jsx +37 -0
  23. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/NavBar.module.css +72 -0
  24. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TagCloud.jsx +30 -0
  25. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TagCloud.module.css +50 -0
  26. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TrendChart.jsx +159 -0
  27. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TrendChart.module.css +21 -0
  28. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/main.jsx +12 -0
  29. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/ArticleScreen.jsx +182 -0
  30. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/ArticleScreen.module.css +294 -0
  31. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/FeedScreen.jsx +147 -0
  32. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/FeedScreen.module.css +161 -0
  33. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/styles/global.css +50 -0
  34. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/styles/tokens.css +103 -0
  35. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/vite.config.js +6 -0
  36. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/data/tasks.js +67 -0
  37. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/index.html +26 -0
  38. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/router.js +73 -0
  39. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/screens/detail.js +164 -0
  40. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/screens/home.js +53 -0
  41. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/screens/list.js +87 -0
  42. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/styles/app.css +342 -0
  43. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/styles/tokens.css +68 -0
  44. package/.local/skills/h5-to-swiftui/references/css-to-swiftui-map.md +205 -0
  45. package/.local/skills/h5-to-swiftui/references/design-token-extraction.md +209 -0
  46. package/.local/skills/h5-to-swiftui/references/high-risk-triage.md +209 -0
  47. package/.local/skills/h5-to-swiftui/references/render-equivalence-calibration.md +193 -0
  48. package/.local/skills/h5-to-swiftui/references/stack-detection.md +160 -0
  49. package/.local/skills/h5-to-swiftui/references/visual-diff-loop-protocol.md +365 -0
  50. package/.local/skills/h5-to-swiftui/scripts/_calib-consts.mjs +150 -0
  51. package/.local/skills/h5-to-swiftui/scripts/_imglib.mjs +547 -0
  52. package/.local/skills/h5-to-swiftui/scripts/_provenance.mjs +123 -0
  53. package/.local/skills/h5-to-swiftui/scripts/calibrate-render.mjs +625 -0
  54. package/.local/skills/h5-to-swiftui/scripts/capture-reference.mjs +386 -0
  55. package/.local/skills/h5-to-swiftui/scripts/detect-stack.mjs +305 -0
  56. package/.local/skills/h5-to-swiftui/scripts/evaluate-convergence.mjs +1093 -0
  57. package/.local/skills/h5-to-swiftui/scripts/extract-tokens.mjs +600 -0
  58. package/.local/skills/h5-to-swiftui/scripts/mark-overlay.mjs +379 -0
  59. package/.local/skills/h5-to-swiftui/scripts/pixel-diff.mjs +530 -0
  60. package/.local/skills/h5-to-swiftui/scripts/sim-screenshot.sh +544 -0
  61. package/bundled/manifest.json +4 -4
  62. package/bundled/upstream/anthropic-skills/skills/algorithmic-art/LICENSE.txt +1 -1
  63. package/bundled/upstream/anthropic-skills/skills/brand-guidelines/LICENSE.txt +1 -1
  64. package/bundled/upstream/anthropic-skills/skills/canvas-design/LICENSE.txt +1 -1
  65. package/bundled/upstream/anthropic-skills/skills/claude-api/LICENSE.txt +1 -1
  66. package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +120 -58
  67. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +9 -9
  68. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +336 -0
  69. package/bundled/upstream/anthropic-skills/skills/claude-api/go/managed-agents/README.md +561 -0
  70. package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +2 -2
  71. package/bundled/upstream/anthropic-skills/skills/claude-api/java/managed-agents/README.md +442 -0
  72. package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +10 -10
  73. package/bundled/upstream/anthropic-skills/skills/claude-api/php/managed-agents/README.md +435 -0
  74. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +16 -16
  75. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +3 -3
  76. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +3 -3
  77. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +7 -7
  78. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/tool-use.md +19 -19
  79. package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +332 -0
  80. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +4 -4
  81. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/managed-agents/README.md +389 -0
  82. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +101 -0
  83. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +11 -4
  84. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +60 -48
  85. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +372 -0
  86. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
  87. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +220 -0
  88. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +211 -0
  89. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +195 -0
  90. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-memory.md +197 -0
  91. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-multiagent.md +99 -0
  92. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +114 -0
  93. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-outcomes.md +106 -0
  94. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +67 -0
  95. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +315 -0
  96. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-webhooks.md +110 -0
  97. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +779 -0
  98. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +16 -14
  99. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +45 -2
  100. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +28 -6
  101. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +15 -15
  102. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/batches.md +2 -2
  103. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/files-api.md +1 -1
  104. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +5 -5
  105. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/tool-use.md +15 -15
  106. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +359 -0
  107. package/bundled/upstream/anthropic-skills/skills/internal-comms/LICENSE.txt +1 -1
  108. package/bundled/upstream/anthropic-skills/skills/mcp-builder/LICENSE.txt +1 -1
  109. package/bundled/upstream/anthropic-skills/skills/skill-creator/LICENSE.txt +1 -1
  110. package/bundled/upstream/anthropic-skills/skills/slack-gif-creator/LICENSE.txt +1 -1
  111. package/bundled/upstream/anthropic-skills/skills/theme-factory/LICENSE.txt +1 -1
  112. package/bundled/upstream/anthropic-skills/skills/web-artifacts-builder/LICENSE.txt +1 -1
  113. package/bundled/upstream/anthropic-skills/skills/webapp-testing/LICENSE.txt +1 -1
  114. package/bundled/upstream/ecc/.omc-source/bundle.json +2 -3
  115. package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +4 -4
  116. package/bundled/upstream/ecc/agents/a11y-architect.md +10 -2
  117. package/bundled/upstream/ecc/agents/architect.md +9 -0
  118. package/bundled/upstream/ecc/agents/build-error-resolver.md +9 -0
  119. package/bundled/upstream/ecc/agents/chief-of-staff.md +9 -0
  120. package/bundled/upstream/ecc/agents/code-architect.md +9 -0
  121. package/bundled/upstream/ecc/agents/code-explorer.md +10 -1
  122. package/bundled/upstream/ecc/agents/code-reviewer.md +87 -1
  123. package/bundled/upstream/ecc/agents/code-simplifier.md +9 -0
  124. package/bundled/upstream/ecc/agents/comment-analyzer.md +10 -1
  125. package/bundled/upstream/ecc/agents/conversation-analyzer.md +9 -0
  126. package/bundled/upstream/ecc/agents/cpp-build-resolver.md +9 -0
  127. package/bundled/upstream/ecc/agents/cpp-reviewer.md +9 -0
  128. package/bundled/upstream/ecc/agents/csharp-reviewer.md +9 -0
  129. package/bundled/upstream/ecc/agents/dart-build-resolver.md +9 -0
  130. package/bundled/upstream/ecc/agents/database-reviewer.md +9 -0
  131. package/bundled/upstream/ecc/agents/django-build-resolver.md +252 -0
  132. package/bundled/upstream/ecc/agents/django-reviewer.md +169 -0
  133. package/bundled/upstream/ecc/agents/doc-updater.md +9 -0
  134. package/bundled/upstream/ecc/agents/docs-lookup.md +9 -0
  135. package/bundled/upstream/ecc/agents/e2e-runner.md +9 -0
  136. package/bundled/upstream/ecc/agents/fastapi-reviewer.md +79 -0
  137. package/bundled/upstream/ecc/agents/flutter-reviewer.md +9 -0
  138. package/bundled/upstream/ecc/agents/fsharp-reviewer.md +109 -0
  139. package/bundled/upstream/ecc/agents/gan-evaluator.md +9 -0
  140. package/bundled/upstream/ecc/agents/gan-generator.md +9 -0
  141. package/bundled/upstream/ecc/agents/gan-planner.md +9 -0
  142. package/bundled/upstream/ecc/agents/go-build-resolver.md +9 -0
  143. package/bundled/upstream/ecc/agents/go-reviewer.md +9 -0
  144. package/bundled/upstream/ecc/agents/harmonyos-app-resolver.md +182 -0
  145. package/bundled/upstream/ecc/agents/harness-optimizer.md +9 -0
  146. package/bundled/upstream/ecc/agents/healthcare-reviewer.md +9 -0
  147. package/bundled/upstream/ecc/agents/homelab-architect.md +107 -0
  148. package/bundled/upstream/ecc/agents/java-build-resolver.md +133 -11
  149. package/bundled/upstream/ecc/agents/java-reviewer.md +130 -32
  150. package/bundled/upstream/ecc/agents/kotlin-build-resolver.md +9 -0
  151. package/bundled/upstream/ecc/agents/kotlin-reviewer.md +9 -0
  152. package/bundled/upstream/ecc/agents/loop-operator.md +9 -0
  153. package/bundled/upstream/ecc/agents/mle-reviewer.md +162 -0
  154. package/bundled/upstream/ecc/agents/network-architect.md +106 -0
  155. package/bundled/upstream/ecc/agents/network-config-reviewer.md +106 -0
  156. package/bundled/upstream/ecc/agents/network-troubleshooter.md +128 -0
  157. package/bundled/upstream/ecc/agents/opensource-forker.md +9 -0
  158. package/bundled/upstream/ecc/agents/opensource-packager.md +9 -0
  159. package/bundled/upstream/ecc/agents/opensource-sanitizer.md +9 -0
  160. package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -0
  161. package/bundled/upstream/ecc/agents/planner.md +9 -0
  162. package/bundled/upstream/ecc/agents/pr-test-analyzer.md +9 -0
  163. package/bundled/upstream/ecc/agents/python-reviewer.md +9 -0
  164. package/bundled/upstream/ecc/agents/pytorch-build-resolver.md +12 -3
  165. package/bundled/upstream/ecc/agents/refactor-cleaner.md +9 -0
  166. package/bundled/upstream/ecc/agents/rust-build-resolver.md +9 -0
  167. package/bundled/upstream/ecc/agents/rust-reviewer.md +9 -0
  168. package/bundled/upstream/ecc/agents/security-reviewer.md +9 -0
  169. package/bundled/upstream/ecc/agents/seo-specialist.md +10 -1
  170. package/bundled/upstream/ecc/agents/silent-failure-hunter.md +9 -0
  171. package/bundled/upstream/ecc/agents/swift-build-resolver.md +170 -0
  172. package/bundled/upstream/ecc/agents/swift-reviewer.md +116 -0
  173. package/bundled/upstream/ecc/agents/tdd-guide.md +9 -0
  174. package/bundled/upstream/ecc/agents/type-design-analyzer.md +10 -1
  175. package/bundled/upstream/ecc/agents/typescript-reviewer.md +9 -0
  176. package/bundled/upstream/ecc/commands/auto-update.md +28 -0
  177. package/bundled/upstream/ecc/commands/build-fix.md +4 -0
  178. package/bundled/upstream/ecc/commands/checkpoint.md +4 -0
  179. package/bundled/upstream/ecc/commands/code-review.md +3 -3
  180. package/bundled/upstream/ecc/commands/cost-report.md +107 -0
  181. package/bundled/upstream/ecc/commands/cpp-build.md +1 -1
  182. package/bundled/upstream/ecc/commands/cpp-test.md +1 -1
  183. package/bundled/upstream/ecc/commands/ecc-guide.md +93 -0
  184. package/bundled/upstream/ecc/commands/fastapi-review.md +39 -0
  185. package/bundled/upstream/ecc/commands/flutter-build.md +1 -1
  186. package/bundled/upstream/ecc/commands/flutter-test.md +1 -1
  187. package/bundled/upstream/ecc/commands/gan-build.md +4 -0
  188. package/bundled/upstream/ecc/commands/gan-design.md +4 -0
  189. package/bundled/upstream/ecc/commands/go-build.md +1 -1
  190. package/bundled/upstream/ecc/commands/go-test.md +1 -1
  191. package/bundled/upstream/ecc/commands/harness-audit.md +4 -0
  192. package/bundled/upstream/ecc/commands/jira.md +2 -2
  193. package/bundled/upstream/ecc/commands/kotlin-build.md +1 -1
  194. package/bundled/upstream/ecc/commands/kotlin-test.md +1 -1
  195. package/bundled/upstream/ecc/commands/learn.md +4 -0
  196. package/bundled/upstream/ecc/commands/loop-start.md +4 -0
  197. package/bundled/upstream/ecc/commands/loop-status.md +54 -1
  198. package/bundled/upstream/ecc/commands/model-route.md +4 -0
  199. package/bundled/upstream/ecc/commands/multi-backend.md +4 -0
  200. package/bundled/upstream/ecc/commands/multi-execute.md +4 -0
  201. package/bundled/upstream/ecc/commands/multi-frontend.md +4 -0
  202. package/bundled/upstream/ecc/commands/multi-plan.md +4 -0
  203. package/bundled/upstream/ecc/commands/multi-workflow.md +4 -0
  204. package/bundled/upstream/ecc/commands/plan-prd.md +160 -0
  205. package/bundled/upstream/ecc/commands/plan.md +96 -13
  206. package/bundled/upstream/ecc/commands/pm2.md +4 -0
  207. package/bundled/upstream/ecc/commands/pr.md +184 -0
  208. package/bundled/upstream/ecc/commands/project-init.md +86 -0
  209. package/bundled/upstream/ecc/commands/python-review.md +1 -1
  210. package/bundled/upstream/ecc/commands/quality-gate.md +4 -0
  211. package/bundled/upstream/ecc/commands/refactor-clean.md +4 -0
  212. package/bundled/upstream/ecc/commands/rust-build.md +1 -1
  213. package/bundled/upstream/ecc/commands/rust-test.md +1 -1
  214. package/bundled/upstream/ecc/commands/security-scan.md +92 -0
  215. package/bundled/upstream/ecc/commands/sessions.md +6 -6
  216. package/bundled/upstream/ecc/commands/skill-health.md +3 -3
  217. package/bundled/upstream/ecc/commands/test-coverage.md +4 -0
  218. package/bundled/upstream/ecc/commands/update-codemaps.md +4 -0
  219. package/bundled/upstream/ecc/commands/update-docs.md +4 -0
  220. package/bundled/upstream/ecc/skills/accessibility/SKILL.md +1 -1
  221. package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +256 -0
  222. package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +49 -3
  223. package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +387 -0
  224. package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +154 -0
  225. package/bundled/upstream/ecc/skills/angular-developer/references/angular-animations.md +160 -0
  226. package/bundled/upstream/ecc/skills/angular-developer/references/angular-aria.md +410 -0
  227. package/bundled/upstream/ecc/skills/angular-developer/references/cli.md +86 -0
  228. package/bundled/upstream/ecc/skills/angular-developer/references/component-harnesses.md +59 -0
  229. package/bundled/upstream/ecc/skills/angular-developer/references/component-styling.md +91 -0
  230. package/bundled/upstream/ecc/skills/angular-developer/references/components.md +117 -0
  231. package/bundled/upstream/ecc/skills/angular-developer/references/creating-services.md +97 -0
  232. package/bundled/upstream/ecc/skills/angular-developer/references/data-resolvers.md +69 -0
  233. package/bundled/upstream/ecc/skills/angular-developer/references/define-routes.md +67 -0
  234. package/bundled/upstream/ecc/skills/angular-developer/references/defining-providers.md +72 -0
  235. package/bundled/upstream/ecc/skills/angular-developer/references/di-fundamentals.md +120 -0
  236. package/bundled/upstream/ecc/skills/angular-developer/references/e2e-testing.md +56 -0
  237. package/bundled/upstream/ecc/skills/angular-developer/references/effects.md +83 -0
  238. package/bundled/upstream/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  239. package/bundled/upstream/ecc/skills/angular-developer/references/host-elements.md +80 -0
  240. package/bundled/upstream/ecc/skills/angular-developer/references/injection-context.md +63 -0
  241. package/bundled/upstream/ecc/skills/angular-developer/references/inputs.md +101 -0
  242. package/bundled/upstream/ecc/skills/angular-developer/references/linked-signal.md +59 -0
  243. package/bundled/upstream/ecc/skills/angular-developer/references/loading-strategies.md +61 -0
  244. package/bundled/upstream/ecc/skills/angular-developer/references/mcp.md +108 -0
  245. package/bundled/upstream/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -0
  246. package/bundled/upstream/ecc/skills/angular-developer/references/outputs.md +86 -0
  247. package/bundled/upstream/ecc/skills/angular-developer/references/reactive-forms.md +122 -0
  248. package/bundled/upstream/ecc/skills/angular-developer/references/rendering-strategies.md +44 -0
  249. package/bundled/upstream/ecc/skills/angular-developer/references/resource.md +77 -0
  250. package/bundled/upstream/ecc/skills/angular-developer/references/route-animations.md +56 -0
  251. package/bundled/upstream/ecc/skills/angular-developer/references/route-guards.md +52 -0
  252. package/bundled/upstream/ecc/skills/angular-developer/references/router-lifecycle.md +45 -0
  253. package/bundled/upstream/ecc/skills/angular-developer/references/router-testing.md +87 -0
  254. package/bundled/upstream/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  255. package/bundled/upstream/ecc/skills/angular-developer/references/signal-forms.md +795 -0
  256. package/bundled/upstream/ecc/skills/angular-developer/references/signals-overview.md +94 -0
  257. package/bundled/upstream/ecc/skills/angular-developer/references/tailwind-css.md +69 -0
  258. package/bundled/upstream/ecc/skills/angular-developer/references/template-driven-forms.md +114 -0
  259. package/bundled/upstream/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -0
  260. package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +6 -0
  261. package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +8 -45
  262. package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +163 -0
  263. package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +31 -14
  264. package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +10 -2
  265. package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +19 -5
  266. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +44 -4
  267. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer.md +4 -4
  268. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/start-observer.sh +5 -1
  269. package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +21 -5
  270. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +58 -13
  271. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +97 -4
  272. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  273. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  274. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +34 -0
  275. package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +147 -0
  276. package/bundled/upstream/ecc/skills/deep-research/SKILL.md +4 -0
  277. package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +6 -0
  278. package/bundled/upstream/ecc/skills/django-celery/SKILL.md +457 -0
  279. package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +189 -0
  280. package/bundled/upstream/ecc/skills/error-handling/SKILL.md +376 -0
  281. package/bundled/upstream/ecc/skills/exa-search/SKILL.md +4 -0
  282. package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +4 -0
  283. package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +327 -0
  284. package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +496 -0
  285. package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +92 -0
  286. package/bundled/upstream/ecc/skills/frontend-slides/animation-patterns.md +122 -0
  287. package/bundled/upstream/ecc/skills/frontend-slides/html-template.md +419 -0
  288. package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  289. package/bundled/upstream/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  290. package/bundled/upstream/ecc/skills/frontend-slides/viewport-base.css +153 -0
  291. package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +280 -0
  292. package/bundled/upstream/ecc/skills/gateguard/SKILL.md +4 -0
  293. package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +88 -0
  294. package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +169 -0
  295. package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +129 -0
  296. package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +274 -0
  297. package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  298. package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  299. package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +157 -0
  300. package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  301. package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  302. package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +241 -5
  303. package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -0
  304. package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +346 -0
  305. package/bundled/upstream/ecc/skills/motion-advanced/SKILL.md +596 -0
  306. package/bundled/upstream/ecc/skills/motion-foundations/SKILL.md +299 -0
  307. package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +435 -0
  308. package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +575 -0
  309. package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +412 -0
  310. package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -0
  311. package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -0
  312. package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +210 -0
  313. package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +152 -0
  314. package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +1 -9
  315. package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +262 -0
  316. package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +371 -0
  317. package/bundled/upstream/ecc/skills/production-audit/SKILL.md +206 -0
  318. package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +24 -400
  319. package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +722 -0
  320. package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +467 -0
  321. package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +811 -0
  322. package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +479 -0
  323. package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +403 -0
  324. package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  325. package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -0
  326. package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +166 -0
  327. package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  328. package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  329. package/bundled/upstream/ecc/skills/search-first/SKILL.md +23 -2
  330. package/bundled/upstream/ecc/skills/security-review/SKILL.md +10 -2
  331. package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +28 -3
  332. package/bundled/upstream/ecc/skills/skill-comply/tests/test_runner.py +172 -0
  333. package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +140 -0
  334. package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +1 -0
  335. package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +2 -2
  336. package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +203 -0
  337. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/architecture.md +90 -0
  338. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/data-handling.md +60 -0
  339. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/database.md +99 -0
  340. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/routing.md +64 -0
  341. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/system-usage.md +97 -0
  342. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/testing.md +72 -0
  343. package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +134 -0
  344. package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +449 -0
  345. package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +788 -0
  346. package/bundled/upstream/ecc/skills/x-api/SKILL.md +4 -0
  347. package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +20 -0
  348. package/bundled/upstream/oh-my-claudecode/agents/analyst.md +2 -1
  349. package/bundled/upstream/oh-my-claudecode/agents/architect.md +2 -1
  350. package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +26 -7
  351. package/bundled/upstream/oh-my-claudecode/agents/critic.md +2 -1
  352. package/bundled/upstream/oh-my-claudecode/agents/debugger.md +2 -1
  353. package/bundled/upstream/oh-my-claudecode/agents/designer.md +14 -1
  354. package/bundled/upstream/oh-my-claudecode/agents/document-specialist.md +1 -1
  355. package/bundled/upstream/oh-my-claudecode/agents/executor.md +2 -1
  356. package/bundled/upstream/oh-my-claudecode/agents/explore.md +2 -1
  357. package/bundled/upstream/oh-my-claudecode/agents/git-master.md +2 -1
  358. package/bundled/upstream/oh-my-claudecode/agents/planner.md +2 -1
  359. package/bundled/upstream/oh-my-claudecode/agents/qa-tester.md +2 -1
  360. package/bundled/upstream/oh-my-claudecode/agents/scientist.md +2 -1
  361. package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +2 -1
  362. package/bundled/upstream/oh-my-claudecode/agents/test-engineer.md +2 -1
  363. package/bundled/upstream/oh-my-claudecode/agents/tracer.md +2 -1
  364. package/bundled/upstream/oh-my-claudecode/agents/verifier.md +2 -1
  365. package/bundled/upstream/oh-my-claudecode/agents/writer.md +2 -1
  366. package/bundled/upstream/oh-my-claudecode/skills/AGENTS.md +4 -3
  367. package/bundled/upstream/oh-my-claudecode/skills/ai-slop-cleaner/SKILL.md +12 -0
  368. package/bundled/upstream/oh-my-claudecode/skills/deep-dive/SKILL.md +69 -13
  369. package/bundled/upstream/oh-my-claudecode/skills/deep-interview/SKILL.md +176 -63
  370. package/bundled/upstream/oh-my-claudecode/skills/learner/SKILL.md +3 -1
  371. package/bundled/upstream/oh-my-claudecode/skills/omc-doctor/SKILL.md +22 -3
  372. package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +1 -1
  373. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/01-install-claude-md.md +2 -2
  374. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +45 -2
  375. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +46 -5
  376. package/bundled/upstream/oh-my-claudecode/skills/plan/SKILL.md +19 -17
  377. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/config.sh +1 -1
  378. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/parse.sh +1 -1
  379. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/azure-devops.sh +1 -1
  380. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/bitbucket.sh +1 -1
  381. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitea.sh +1 -1
  382. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/github.sh +1 -1
  383. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitlab.sh +1 -1
  384. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/interface.sh +1 -1
  385. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/jira.sh +1 -1
  386. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/session.sh +1 -1
  387. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/tmux.sh +1 -1
  388. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/worktree.sh +1 -1
  389. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/psm.sh +1 -1
  390. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/tests/test-psm-prompt-injection.sh +1 -1
  391. package/bundled/upstream/oh-my-claudecode/skills/ralph/SKILL.md +8 -8
  392. package/bundled/upstream/oh-my-claudecode/skills/ralplan/SKILL.md +9 -5
  393. package/bundled/upstream/oh-my-claudecode/skills/skill/SKILL.md +6 -6
  394. package/bundled/upstream/oh-my-claudecode/skills/skillify/SKILL.md +19 -3
  395. package/bundled/upstream/oh-my-claudecode/skills/trace/SKILL.md +3 -1
  396. package/bundled/upstream/oh-my-claudecode/skills/ultrawork/SKILL.md +20 -7
  397. package/bundled/upstream/superpowers/.omc-source/bundle.json +21 -0
  398. package/bundled/upstream/superpowers/hooks/hooks-cursor.json +1 -1
  399. package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +1 -1
  400. package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +93 -42
  401. package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +7 -9
  402. package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +107 -85
  403. package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +3 -1
  404. package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +2 -3
  405. package/bundled/upstream/superpowers/skills/systematic-debugging/CREATION-LOG.md +1 -1
  406. package/bundled/upstream/superpowers/skills/systematic-debugging/root-cause-tracing.md +1 -1
  407. package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +95 -98
  408. package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +7 -48
  409. package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +1 -11
  410. package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +21 -3
  411. package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +1 -1
  412. package/package.json +1 -1
  413. package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/README.md +0 -355
  414. package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/patterns.md +0 -359
  415. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/README.md +0 -297
  416. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/patterns.md +0 -209
  417. package/bundled/upstream/ecc/commands/agent-sort.md +0 -23
  418. package/bundled/upstream/ecc/commands/claw.md +0 -23
  419. package/bundled/upstream/ecc/commands/context-budget.md +0 -23
  420. package/bundled/upstream/ecc/commands/devfleet.md +0 -23
  421. package/bundled/upstream/ecc/commands/docs.md +0 -23
  422. package/bundled/upstream/ecc/commands/e2e.md +0 -268
  423. package/bundled/upstream/ecc/commands/eval.md +0 -23
  424. package/bundled/upstream/ecc/commands/orchestrate.md +0 -135
  425. package/bundled/upstream/ecc/commands/prompt-optimize.md +0 -23
  426. package/bundled/upstream/ecc/commands/rules-distill.md +0 -20
  427. package/bundled/upstream/ecc/commands/tdd.md +0 -231
  428. package/bundled/upstream/ecc/commands/verify.md +0 -23
  429. package/bundled/upstream/ecc/skills/claude-api/SKILL.md +0 -337
  430. package/bundled/upstream/ecc/skills/frontend-design/SKILL.md +0 -145
  431. package/bundled/upstream/superpowers/agents/code-reviewer.md +0 -48
  432. package/bundled/upstream/superpowers/commands/brainstorm.md +0 -5
  433. package/bundled/upstream/superpowers/commands/execute-plan.md +0 -5
  434. package/bundled/upstream/superpowers/commands/write-plan.md +0 -5
@@ -0,0 +1,244 @@
1
+ ---
2
+ description: "Create a PR/MR from current branch with unpushed commits (PRP-aware) — auto-detects GitHub vs GitLab (github.com / code.iflytek.com / generic GitLab)"
3
+ argument-hint: "[base-branch] (default: main)"
4
+ ---
5
+
6
+ # Create Pull Request / Merge Request (PRP variant)
7
+
8
+ > Local override of upstream `ecc/commands/prp-pr.md`. Adds GitLab (incl. self-hosted
9
+ > `code.iflytek.com`) support. Do not edit the upstream file — keep changes here.
10
+ > Difference vs `/pr`: this variant references PRP artifacts (`.claude/PRPs/...`) and
11
+ > suggests `/prp-commit` for staging.
12
+
13
+ **Input**: `$ARGUMENTS` — optional, may contain a base branch name and/or flags (e.g., `--draft`).
14
+
15
+ **Parse `$ARGUMENTS`**:
16
+ - Extract any recognized flags (`--draft`)
17
+ - Treat remaining non-flag text as the base branch name
18
+ - Default base branch to `main` if none specified
19
+
20
+ ---
21
+
22
+ ## Phase 0 — DETECT PLATFORM
23
+
24
+ ```bash
25
+ remote_url=$(git remote get-url origin 2>/dev/null)
26
+
27
+ case "$remote_url" in
28
+ *github.com*)
29
+ platform=github; cli=gh ;;
30
+ *code.iflytek.com*)
31
+ platform=gitlab; cli=glab; gitlab_host=code.iflytek.com ;;
32
+ *gitlab*)
33
+ platform=gitlab; cli=glab
34
+ gitlab_host=$(echo "$remote_url" | sed -E 's#.*[@/]([^:/]+)[:/].*#\1#') ;;
35
+ *)
36
+ platform=unknown ;;
37
+ esac
38
+ ```
39
+
40
+ If `platform=unknown`: ask the user to confirm platform or fix `origin`.
41
+
42
+ Auth check:
43
+ - `github` → `gh auth status`
44
+ - `gitlab` → `glab auth status --hostname "$gitlab_host"`
45
+
46
+ For `code.iflytek.com` one-time login:
47
+ ```bash
48
+ glab auth login --hostname code.iflytek.com
49
+ # HTTPS + Personal Access Token (scope: api, read_repository, write_repository)
50
+ # Token: https://code.iflytek.com/-/user_settings/personal_access_tokens
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Phase 1 — VALIDATE
56
+
57
+ ```bash
58
+ git branch --show-current
59
+ git status --short
60
+ git log origin/<base>..HEAD --oneline
61
+ ```
62
+
63
+ | Check | Condition | Action if Failed |
64
+ |---|---|---|
65
+ | Not on base branch | Current branch ≠ base | Stop: "Switch to a feature branch first." |
66
+ | Clean working directory | No uncommitted changes | Warn: "You have uncommitted changes. Commit or stash first. Use `/prp-commit` to commit." |
67
+ | Has commits ahead | `git log origin/<base>..HEAD` not empty | Stop: "No commits ahead of `<base>`. Nothing to PR." |
68
+ | No existing PR/MR | See platform-specific check below | Stop: "PR/MR already exists: #<number>." |
69
+
70
+ **Existing PR/MR check:**
71
+
72
+ | Platform | Command |
73
+ |---|---|
74
+ | GitHub | `gh pr list --head <branch> --json number,url --jq '.[0]'` |
75
+ | GitLab | `glab mr list --source-branch <branch> --output json --per-page 1 \| jq '.[0]'` |
76
+
77
+ If all checks pass, proceed.
78
+
79
+ ---
80
+
81
+ ## Phase 2 — DISCOVER
82
+
83
+ ### PR/MR Template
84
+
85
+ **GitHub** (PR templates):
86
+ 1. `.github/PULL_REQUEST_TEMPLATE/` directory — list and let user choose
87
+ 2. `.github/PULL_REQUEST_TEMPLATE.md`
88
+ 3. `.github/pull_request_template.md`
89
+ 4. `docs/pull_request_template.md`
90
+
91
+ **GitLab** (MR templates):
92
+ 1. `.gitlab/merge_request_templates/` directory — list and let user choose
93
+ 2. `.gitlab/merge_request_template.md`
94
+
95
+ If found, use its structure.
96
+
97
+ ### Commit Analysis
98
+
99
+ ```bash
100
+ git log origin/<base>..HEAD --format="%h %s" --reverse
101
+ ```
102
+
103
+ - **Title**: Conventional commit format. Multiple types → dominant one. Single commit → use as-is.
104
+ - **Summary**: Group commits by type/area.
105
+
106
+ ### File Analysis
107
+
108
+ ```bash
109
+ git diff origin/<base>..HEAD --stat
110
+ git diff origin/<base>..HEAD --name-only
111
+ ```
112
+
113
+ Categorize: source, tests, docs, config, migrations.
114
+
115
+ ### PRP Artifacts
116
+
117
+ Check for related PRP artifacts:
118
+ - `.claude/PRPs/reports/` — Implementation reports
119
+ - `.claude/PRPs/plans/` — Plans that were executed
120
+ - `.claude/PRPs/prds/` — Related PRDs
121
+
122
+ Reference these in the body if they exist.
123
+
124
+ ---
125
+
126
+ ## Phase 3 — PUSH
127
+
128
+ ```bash
129
+ git push -u origin HEAD
130
+ ```
131
+
132
+ If push fails due to divergence:
133
+ ```bash
134
+ git fetch origin
135
+ git rebase origin/<base>
136
+ git push -u origin HEAD # use --force-with-lease only after rebase
137
+ ```
138
+
139
+ If rebase conflicts, stop and inform the user.
140
+
141
+ ---
142
+
143
+ ## Phase 4 — CREATE
144
+
145
+ ### With Template
146
+
147
+ Fill each section using commit and file analysis. Preserve all sections — leave as "N/A" if not applicable.
148
+
149
+ ### Without Template
150
+
151
+ ```markdown
152
+ ## Summary
153
+ <1-2 sentence description>
154
+
155
+ ## Changes
156
+ <bulleted list grouped by area>
157
+
158
+ ## Files Changed
159
+ <list with change type: Added/Modified/Deleted>
160
+
161
+ ## Testing
162
+ <how changes were tested, or "Needs testing">
163
+
164
+ ## Related Issues
165
+ <linked issues with Closes/Fixes/Relates to #N, or "None">
166
+ ```
167
+
168
+ ### Create the PR/MR
169
+
170
+ **GitHub:**
171
+ ```bash
172
+ gh pr create \
173
+ --title "<title>" \
174
+ --base <base-branch> \
175
+ --body "<body>"
176
+ # Add --draft if --draft was parsed
177
+ ```
178
+
179
+ **GitLab:**
180
+ ```bash
181
+ glab mr create \
182
+ --title "<title>" \
183
+ --target-branch <base-branch> \
184
+ --description "<body>" \
185
+ --source-branch "$(git branch --show-current)" \
186
+ --yes
187
+ # Add --draft if --draft was parsed
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Phase 5 — VERIFY
193
+
194
+ **GitHub:**
195
+ ```bash
196
+ gh pr view --json number,url,title,state,baseRefName,headRefName,additions,deletions,changedFiles
197
+ gh pr checks --json name,status,conclusion 2>/dev/null || true
198
+ ```
199
+
200
+ **GitLab:**
201
+ ```bash
202
+ glab mr view --output json
203
+ glab ci status 2>/dev/null || true
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Phase 6 — OUTPUT
209
+
210
+ ```
211
+ <PR|MR> #<number>: <title>
212
+ Platform: <github|gitlab(host)>
213
+ URL: <url>
214
+ Branch: <head> → <base>
215
+ Changes: +<additions> -<deletions> across <changedFiles> files
216
+
217
+ CI Checks: <status summary or "pending" or "none configured">
218
+
219
+ Artifacts referenced:
220
+ - <any PRP reports/plans linked in body>
221
+
222
+ Next steps:
223
+ GitHub:
224
+ - gh pr view <N> --web → open in browser
225
+ - /code-review <N> → review the PR
226
+ - gh pr merge <N> → merge when ready
227
+ GitLab:
228
+ - glab mr view <N> --web → open in browser
229
+ - /code-review <N> → review the MR
230
+ - glab mr merge <N> → merge when ready
231
+ ```
232
+
233
+ (Print only the section matching the detected platform.)
234
+
235
+ ---
236
+
237
+ ## Edge Cases
238
+
239
+ - **No `gh`/`glab`**: Stop with install + auth instructions for the detected platform.
240
+ - **Not authenticated**: Stop with `gh auth login` or `glab auth login --hostname <host>`.
241
+ - **Force push needed**: After rebase, use `git push --force-with-lease` (never `--force`).
242
+ - **Multiple templates**: List and ask user to choose.
243
+ - **Large PR/MR (>20 files)**: Warn about scope. Suggest splitting if logically separable.
244
+ - **Unknown platform**: Ask user to confirm or fix `origin`.
@@ -29,3 +29,50 @@ These are always-on guardrails for non-trivial coding work.
29
29
  - Verify behavior with tests or explicit checks whenever practical.
30
30
  - Tie multi-step work to validation at each step.
31
31
  - Do not claim completion without fresh evidence from the workspace.
32
+
33
+ ## Platform Routing (GitHub vs GitLab)
34
+
35
+ Before running any remote-collaboration command (PR/MR view/diff/create/comment/approve/merge), **first detect the platform from the active repo's `origin` remote**, then pick the matching CLI. Never hardcode `gh` or `glab`.
36
+
37
+ ```bash
38
+ remote=$(git remote get-url origin 2>/dev/null)
39
+ case "$remote" in
40
+ *github.com*) platform=github; cli=gh ;;
41
+ *code.iflytek.com*) platform=gitlab; cli=glab; host=code.iflytek.com ;;
42
+ *gitlab*) platform=gitlab; cli=glab
43
+ host=$(echo "$remote" | sed -E 's#.*[@/]([^:/]+)[:/].*#\1#') ;;
44
+ *) platform=unknown ;;
45
+ esac
46
+ ```
47
+
48
+ If `platform=unknown`: ask the user to confirm before continuing.
49
+
50
+ **Authoritative `gh ↔ glab` mapping** (apply this translation whenever an instruction or upstream skill uses `gh` but the active repo is GitLab):
51
+
52
+ | Action | GitHub (`gh`) | GitLab (`glab`) |
53
+ |---|---|---|
54
+ | View PR/MR | `gh pr view <N>` | `glab mr view <N>` |
55
+ | Diff | `gh pr diff <N>` | `glab mr diff <N>` |
56
+ | List by branch | `gh pr list --head <b>` | `glab mr list --source-branch <b>` |
57
+ | Create | `gh pr create --title ... --body ...` | `glab mr create --title ... --description ... --source-branch ... --target-branch ... --yes` |
58
+ | Approve | `gh pr review <N> --approve` | `glab mr approve <N>` |
59
+ | Request changes | `gh pr review <N> --request-changes` | `glab mr revoke <N>` + `glab mr note <N> --message "..."` |
60
+ | Comment | `gh pr review <N> --comment` | `glab mr note <N> --message "..."` |
61
+ | Merge | `gh pr merge <N>` | `glab mr merge <N>` |
62
+ | CI status | `gh pr checks` | `glab ci status` |
63
+ | Raw API | `gh api ...` | `glab api ... --hostname <host>` |
64
+ | Auth check | `gh auth status` | `glab auth status --hostname <host>` |
65
+ | PR template path | `.github/PULL_REQUEST_TEMPLATE*` | `.gitlab/merge_request_template*` |
66
+ | File link path | `/blob/<ref>/<path>` | `/-/blob/<ref>/<path>` |
67
+
68
+ For inline review comments on GitLab, use the GitLab discussions API with `diff_refs.base_sha/start_sha/head_sha` and `position[position_type]=text` (see `.local/commands/code-review.md` Phase 7 for the full call).
69
+
70
+ When the upstream skill or command names a fixed CLI command, treat that as a *template*: substitute the matching command from the table above based on the detected platform. The hard-overridden commands in `.local/commands/` (`code-review.md`, `pr.md`, `prp-pr.md`) already route correctly; this rule covers everything else.
71
+
72
+ **Self-hosted iflytek GitLab one-time setup** (only needed once per machine):
73
+
74
+ ```bash
75
+ glab auth login --hostname code.iflytek.com
76
+ # HTTPS + Personal Access Token (scope: api, read_repository, write_repository)
77
+ # Token: https://code.iflytek.com/-/user_settings/personal_access_tokens
78
+ ```
@@ -0,0 +1,201 @@
1
+ ---
2
+ name: h5-to-swiftui
3
+ version: 1.0.0
4
+ description: >-
5
+ Convert an H5 / web app's source into a native SwiftUI iOS app by native
6
+ rewrite (NOT a WebView shell, NOT a transpiler). Use when the user wants to
7
+ port, re-implement, or migrate a web/H5 frontend to native SwiftUI with
8
+ high visual fidelity, asks to "turn this web app into a real iOS app", or
9
+ wants a measured render-diff convergence loop against a browser baseline.
10
+ Auto-detects the web stack (v1: vanilla + React; other stacks are detected
11
+ then gated, not guessed), extracts design tokens, calibrates a
12
+ cross-renderer fidelity floor, rewrites per component, and drives a bounded
13
+ render→diff→correct loop that reports a quantified visual residual plus an
14
+ independent judge verdict. It does NOT promise literal pixel-identity:
15
+ cross-renderer differences impose a measured floor it reports honestly.
16
+ Triages canvas/WebGL/complex-animation/3rd-party-SDK/backend surfaces
17
+ instead of silently emitting wrong code.
18
+ argument-hint: "<path-to-h5-source> [--ios-floor 17] [--device 'iPhone 15 Pro'] [--max-iter 3]"
19
+ disable-model-invocation: false
20
+ user-invocable: true
21
+ allowed-tools:
22
+ - Read
23
+ - Grep
24
+ - Glob
25
+ - Bash
26
+ - Write
27
+ - Edit
28
+ - Agent
29
+ model: sonnet
30
+ ---
31
+
32
+ # H5 → Native SwiftUI (perceptually-convergent, residual-quantified)
33
+
34
+ Convert a web/H5 app to a **native SwiftUI** iOS app by reading the source and
35
+ **re-implementing** UI + logic in idiomatic SwiftUI. This is a native rewrite,
36
+ **not** a WebView wrapper and **not** a mechanical transpiler — those cannot
37
+ reach native fidelity (see `references/stack-detection.md` for why).
38
+
39
+ ## Honest promise (read this first)
40
+
41
+ Literal pixel-identity is **physically unreachable** for any text-bearing
42
+ screen: H5 renders in WebKit/Skia, SwiftUI in CoreText/Core Animation;
43
+ per-glyph subpixel/hinting and sRGB-vs-Display-P3 differences impose a
44
+ **non-zero residual** even when the SwiftUI is perfectly correct. This skill
45
+ therefore does **not** claim "pixel-perfect". It:
46
+
47
+ 1. **measures** the achievable cross-renderer floor for the current toolchain
48
+ (Stage 2.5 calibration),
49
+ 2. drives a render→diff→correct loop that **strictly reduces** visual delta
50
+ toward that measured floor,
51
+ 3. stops with a **quantified residual**, an **independent adversarial judge**
52
+ verdict, and a tiered outcome: `converged` / `close` / `needs-human`,
53
+ 4. **triages** anything it cannot safely convert — never silently emits
54
+ plausible-wrong code.
55
+
56
+ Never describe output as "pixel-accurate/perfect" in any report.
57
+
58
+ ## When to use / not use
59
+
60
+ Use for: porting a web/H5 frontend to native SwiftUI; "make this a real iOS
61
+ app (not a webview)"; measured visual migration. Not for: building a webview
62
+ wrapper (decline — out of scope); generic SwiftUI feature work (use normal
63
+ dev flow); design-mock→code with no source app (different problem).
64
+
65
+ ## Inputs
66
+
67
+ - `<path-to-h5-source>` (required)
68
+ - `--ios-floor` (default `17`; changes API availability + risk tiers)
69
+ - `--device` (default `iPhone 15 Pro`; sets logical viewport + safe-area)
70
+ - `--max-iter` (default `3`; Stage 5 per-component iteration cap)
71
+ - `--thresholds` (optional override; default = **calibrated**, not asserted)
72
+
73
+ ## Environment reality (hard gate)
74
+
75
+ Stage 5 needs macOS + Xcode + iOS Simulator. If absent OR the generated
76
+ project fails to build, the affected component is `needs-human`/`blocked`
77
+ and is **never counted converged**. The skill must not fabricate
78
+ convergence. Stages 0–4 + triage still run and produce value.
79
+
80
+ ## Pipeline (Stage 0–7) — product contracts
81
+
82
+ All stage products go under the *target project*'s `.h5-to-swiftui/` work
83
+ dir (inspectable, resumable). Every convergence artifact header pins
84
+ `sim_runtime`, `browser_version`, `model_id`, `temperature:0` — re-runs must
85
+ reproduce the same **verdict** (not the same pixels).
86
+
87
+ | Stage | Does | Key output |
88
+ |---|---|---|
89
+ | 0 Intake + detect + **v1 gate** | `scripts/detect-stack.mjs`; framework ∉ {vanilla,React} ⇒ write report & **STOP** (no guess) | `stack-report.json` |
90
+ | 1 Static analysis + facts + risk | inventory; `scripts/extract-tokens.mjs` (static∪runtime DTCG); risk triage pass *before* any generation; token-miss ⇒ `token-gaps.json` (never inline) | `pages/components/state-model/api/tokens/token-gaps/risk-triage.json` |
91
+ | 2 Reference capture | `scripts/capture-reference.mjs` (Playwright, iOS viewport, animations frozen, webfont/async settle, masks, browser pinned) | `reference/**`, `reference/manifest.json` |
92
+ | 2.5 **Render-equivalence calibration** | `scripts/calibrate-render.mjs` on bundled known-correct pair → normalization + **measured floor**; unmeasurable ⇒ `blocked.json` | `calibration.json` → see `references/render-equivalence-calibration.md` |
93
+ | 3 Scaffold | Xcode skeleton; `DesignTokens` (DTCG→Color/Font/spacing/radius + `.colorset` dark); router→`NavigationStack`; state skeleton | compiling skeleton |
94
+ | 4 Per-component rewrite | LLM rewrites each component using **only** token vocab + `references/css-to-swiftui-map.md`; **each component MUST emit a snapshot host** (isolated render entry); idiomatic-lint rejects `.position/.offset`-pinned layouts; Tier-3 ⇒ non-compiling `fatalError` stub | per-component `.swift` + host |
95
+ | 5 **Convergence loop** ★ | per component: host-render→normalize(calibration)→cascade diff (`pixel-diff.mjs`)→feedback payload→structured patch→recompile→re-measure; cap `--max-iter`. **The verdict is emitted ONLY by `scripts/evaluate-convergence.mjs`** — it mechanically enforces every anti-gaming guard and exits non-zero on any violation; the LLM never hand-writes `convergence/<component>.json` | `convergence/<component>.json` (written by `evaluate-convergence.mjs`) → see `references/visual-diff-loop-protocol.md` |
96
+ | 6 Behavioral parity | port `URLSession` async / Keychain tokens / ATS-flag `http://` / state / models; equivalence checks | `parity-report.json` |
97
+ | 7 Assemble + honest report | build; aggregate; summary leads with `needs-human` if it dominates | Xcode project + `conversion-report.json` + `convergence-summary.json` |
98
+
99
+ ## Hard rules (non-negotiable)
100
+
101
+ - **No silent failure.** Tier-3 surfaces (WebGL/WebGPU, RAF physics, WebRTC,
102
+ payments/secrets, analytics/ATT) ⇒ non-compiling `fatalError` stub +
103
+ machine-readable entry in `conversion-report.json`. See
104
+ `references/high-risk-triage.md`.
105
+ - **Anti-gaming (Stage 5) — ENFORCED IN CODE by
106
+ `scripts/evaluate-convergence.mjs`** (the sole thing that may emit the
107
+ verdict; it exits non-zero on any violation so a pipeline cannot ignore a
108
+ failed gate): the calibration gate is **recomputed from `calib.floor`** and
109
+ a hand-loosened gate is rejected (`gate-floor-mismatch`, exit 1 — this binds
110
+ the *gate to the floor*, not the floor's value); the **identity of the
111
+ bundled twin source files** (excluding build output/dotfiles) is bound via
112
+ `calibration_source` source-tree hashes recomputed from
113
+ `assets/calibration/{h5-twin,swiftui-twin}` (`calibration-twin-mismatch`,
114
+ exit 1 — binds the twin *source identity*, not the measured floor value);
115
+ the `floor` *value* is asserted to satisfy `calibrate-render.mjs`'s own
116
+ sanity envelope via the shared `scripts/_calib-consts.mjs`
117
+ (`floor-implausible`, exit 1 — a floor calibrate-render could not have
118
+ emitted is rejected, killing the absurd-floor attack; a floor *within* that
119
+ envelope but looser than the true measured one is a disclosed residual, see
120
+ below); the judge **negative control is bound** to the shipped, hash-pinned
121
+ `assets/calibration/swiftui-twin-divergent` source files (structured
122
+ `{stimulus_source_hash,rejected,differences}` under **forced-difference-3**;
123
+ the legacy bare string is rejected and an unbound control VOIDs any `YES`);
124
+ mask budget ≤10% with a non-empty reason per mask; the structured gate is
125
+ evaluated per iteration (a text-region `iou` of `null` is a FAIL; pHash is
126
+ necessary-not-sufficient and never short-circuits); best-of-N retains
127
+ **only built + gate-passing iterations** chosen by the script
128
+ (monotone-or-fail; caller's pick ignored); a present `blocked.json` or no
129
+ built+passing iteration ⇒ never converged. **Named irreducible residuals
130
+ (honest, §1.1) — BOTH disclosed:** (1) the grader cannot re-run the
131
+ simulator, so it trusts the per-iteration `pixel-diff.mjs` JSONs were
132
+ produced by the real `pixel-diff.mjs` on real `sim-screenshot.sh` renders
133
+ (bounded by that script's no-fake spine); (2) the grader cannot re-measure
134
+ the calibration floor — it asserts the supplied `floor` is within
135
+ `calibrate-render.mjs`'s own sanity envelope and recomputes the gate from
136
+ it, but a floor *within* that envelope yet looser than the true measured
137
+ floor is trusted, mitigated by the orchestrator's obligation to run the
138
+ real, sanity-spined `calibrate-render.mjs` and the recorded
139
+ `calibration_provenance`. Maximally provenance-bound, not zero-trust. The
140
+ **whole-assembled-screen SSIM-trend check is NOT an automated Stage-5
141
+ guard** — see the known limitation below; it is a documented **Stage-7
142
+ manual** cross-check.
143
+ - **Calibrated, not asserted.** Stage 5 gates against the **measured** floor
144
+ from `calibration.json`, never a hardcoded SSIM constant.
145
+ - **v1 scope.** Mapping authored for vanilla + React only; other detected
146
+ stacks stop at Stage 0 with an explicit report.
147
+ - **Compile-failure branch.** Non-building patch ⇒ revert to best
148
+ gate-passing iteration, consume an iteration; terminal ⇒ `needs-human`.
149
+
150
+ ## References (read on demand — progressive disclosure)
151
+
152
+ - `references/stack-detection.md` — detection heuristics, why rewrite > webview/transpile, v1 gate
153
+ - `references/design-token-extraction.md` — static∪runtime DTCG pipeline, token-gap rule
154
+ - `references/css-to-swiftui-map.md` — flex/grid/positioning/box-model tables, custom-`Layout` triggers
155
+ - `references/render-equivalence-calibration.md` — Stage 2.5 normalization + floor measurement + `calibration.json` schema
156
+ - `references/visual-diff-loop-protocol.md` — Stage 5 mechanism, payload + artifact schemas, tiered verdict, anti-gaming
157
+ - `references/high-risk-triage.md` — Tier 1/2/3 catalog, stub format, `conversion-report.json` schema
158
+
159
+ ## Scripts
160
+
161
+ `detect-stack.mjs` `extract-tokens.mjs` `capture-reference.mjs`
162
+ `calibrate-render.mjs` `pixel-diff.mjs` `mark-overlay.mjs`
163
+ `evaluate-convergence.mjs` `sim-screenshot.sh` — each supports `--help`;
164
+ capability/build probes degrade to an explicit block, never a fake success.
165
+
166
+ `scripts/evaluate-convergence.mjs` is the **sole executable convergence
167
+ authority**: it consumes the per-iteration `pixel-diff.mjs` JSON, the
168
+ structured `calibration.json` gate, the masks, and the judge result, then
169
+ mechanically decides the tier and **exits non-zero** (3 = needs-human/guard
170
+ violation, 4 = blocked) so the verdict cannot be faked or ignored. The
171
+ orchestrator MUST call it and MUST NOT hand-write `convergence/<component>.json`.
172
+
173
+ ### Known limitation (honest)
174
+
175
+ The **whole-assembled-screen SSIM-trend check** described in `spec.md` is
176
+ **not** an automated Stage-5 guard — there is no executable component that
177
+ diffs the assembled screen during the loop, so advertising it as active
178
+ would be a prose-only claim. It is instead a **Stage-7 manual cross-check**:
179
+ after assembly, a human (or a separate verification pass) compares the
180
+ assembled-screen capture against the reference so per-component `converged`
181
+ results cannot mask a broken composition. Treat per-component verdicts as
182
+ authoritative only at component granularity until that Stage-7 check is done.
183
+
184
+ ## Assets
185
+
186
+ `assets/calibration/` — known-correct SwiftUI screen (`swiftui-twin/`) + H5
187
+ twin (`h5-twin/`) for Stage 2.5, plus a deliberately-wrong
188
+ `swiftui-twin-divergent/` used as the Stage-5 judge **negative control**.
189
+ Calibration content is **textured** (text + a 4-stripe multi-color region),
190
+ never flat solids, so SSIM is meaningful (`calibrate-render.mjs` blocks a
191
+ flat pair). `assets/sample-h5-vanilla/` + `assets/sample-h5-react/` are the
192
+ dry-run fixtures (the React one is the text-heavy / custom-`Layout` / Tier-3
193
+ hard path).
194
+
195
+ ## Done = evidence
196
+
197
+ A run is complete only with: `stack-report.json`, `calibration.json` (finite
198
+ floor), per-component `convergence/*.json` (pinned-version header, iteration
199
+ history, masks, negative-control result, tiered verdict),
200
+ `conversion-report.json`, and an honest `convergence-summary.json`. No
201
+ success claim without these.
@@ -0,0 +1,176 @@
1
+ # Stage 2.5 Calibration Pair
2
+
3
+ This directory contains a **hand-built, known-correct calibration pair** for
4
+ the `h5-to-swiftui` skill's render-equivalence calibration stage. The two
5
+ sides (`h5-twin/` and `swiftui-twin/`) render the **same intended design** on
6
+ an iPhone 15 Pro logical viewport (393×852 pt).
7
+
8
+ > **Key principle:** any measured rendering difference between these two sides
9
+ > is the **irreducible cross-renderer floor** — not a defect. The pair is
10
+ > equivalent by construction, so the floor reflects only the unavoidable
11
+ > divergence between WebKit/Skia glyph rasterization and CoreText/Metal
12
+ > rendering, color-space pipeline differences (sRGB vs Display-P3), and
13
+ > sub-pixel sampling. Never grade real conversion screens against a tighter
14
+ > bound than this measured floor.
15
+
16
+ ---
17
+
18
+ ## Contents
19
+
20
+ | Path | Description |
21
+ |---|---|
22
+ | `h5-twin/index.html` | Static H5 page — open directly, no build step |
23
+ | `h5-twin/style.css` | All design tokens as CSS custom properties (`--*`) |
24
+ | `swiftui-twin/Package.swift` | Swift Package manifest (Swift 5.9+, iOS 17+) |
25
+ | `swiftui-twin/Sources/CalibrationScreen/CalibrationScreen.swift` | `CalibrationScreenView` + `#Preview` — the **known-correct** SwiftUI side |
26
+ | `swiftui-twin-divergent/Package.swift` | Swift Package manifest for the negative control |
27
+ | `swiftui-twin-divergent/Sources/CalibrationScreenDivergent/CalibrationScreenDivergent.swift` | **Deliberately WRONG** SwiftUI screen — the Stage 5 judge **negative control** |
28
+ | `tokens.json` | Ground-truth DTCG-style token map — the single source of truth |
29
+ | `.gitignore` | Ignores Swift Package `.build/` (never commit build output) |
30
+ | `README.md` | This file |
31
+
32
+ ### The divergent twin (negative control)
33
+
34
+ `swiftui-twin-divergent/` is **intentionally wrong** versus the H5 twin:
35
+ wrong colors (green background, blue circle, recolored stripes, inverted text
36
+ colors), shifted layout (much larger top inset, doubled section gap, circle
37
+ moved to the trailing edge, near-square taller card), and different copy.
38
+
39
+ Its role: the Stage 5 **independent judge must REJECT** the pair
40
+ (`h5-twin` vs `swiftui-twin-divergent`) under the adversarial
41
+ forced-difference-3 framing. If the judge instead calls them equivalent, the
42
+ run's `judge.negative_control` is recorded as **`failed`** and any `YES`
43
+ verdict is **VOID** for that run. This is enforced mechanically — not by
44
+ prose — in `scripts/evaluate-convergence.mjs` (guard 4).
45
+
46
+ ### Textured-content requirement (NOT flat solids)
47
+
48
+ The bundled calibration content **must be textured** — text plus a
49
+ multi-color structured region. Flat solid blocks make SSIM **insensitive to a
50
+ uniform mean shift**: a clearly-divergent solid pair can still score ~0.95,
51
+ yielding a falsely-high floor. The card is therefore a **4-stripe multi-color
52
+ region** (blue/purple/teal/amber), not a single solid block, on every side
53
+ (`h5-twin`, `swiftui-twin`, `swiftui-twin-divergent`).
54
+ `scripts/calibrate-render.mjs` additionally **blocks** (writes `blocked.json`,
55
+ exits 1) if BOTH normalized images are effectively flat (near-zero luma
56
+ variance) — so a flat calibration pair can never produce a trusted floor.
57
+
58
+ ---
59
+
60
+ ## Design Tokens
61
+
62
+ All values are shared across both sides. `tokens.json` is the authoritative
63
+ source; `style.css` and `CalibrationScreen.swift` must match it exactly.
64
+
65
+ ### Colors
66
+
67
+ | Token | Hex | CSS var | Swift `Color(red:green:blue:)` |
68
+ |---|---|---|---|
69
+ | `color.background` | `#F2F2F7` | `--color-background` | `r=0.9490 g=0.9490 b=0.9686` |
70
+ | `color.card` | `#4A90D9` | `--color-card` | `r=0.2902 g=0.5647 b=0.8510` |
71
+ | `color.circle` | `#E8744F` | `--color-circle` | `r=0.9098 g=0.4549 b=0.3098` |
72
+ | `color.textHeading` | `#1C1C1E` | `--color-text-heading` | `r=0.1098 g=0.1098 b=0.1176` |
73
+ | `color.textBody` | `#636366` | `--color-text-body` | `r=0.3882 g=0.3882 b=0.4000` |
74
+ | `color.stripeA` | `#4A90D9` | `--color-stripe-a` | `r=0.2902 g=0.5647 b=0.8510` |
75
+ | `color.stripeB` | `#7E57C2` | `--color-stripe-b` | `r=0.4941 g=0.3412 b=0.7608` |
76
+ | `color.stripeC` | `#26A69A` | `--color-stripe-c` | `r=0.1490 g=0.6510 b=0.6039` |
77
+ | `color.stripeD` | `#F4B400` | `--color-stripe-d` | `r=0.9569 g=0.7059 b=0.0000` |
78
+
79
+ The card is a **4 equal-width vertical stripe** region (A→D, left to right),
80
+ not a flat solid — see the textured-content requirement above.
81
+
82
+ ### Spacing (CSS px = Swift pt at 1× logical scale)
83
+
84
+ | Token | Value | CSS var | Swift constant |
85
+ |---|---|---|---|
86
+ | `space.safeTop` | 59 px/pt | `--space-safe-top` | `spaceSafeTop = 59` |
87
+ | `space.pageH` | 20 px/pt | `--space-page-h` | `spacePageH = 20` |
88
+ | `space.sectionGap` | 24 px/pt | `--space-section-gap` | `spaceSectionGap = 24` |
89
+ | `space.cardPadding` | 20 px/pt | `--space-card-padding`| `spaceCardPadding = 20` |
90
+ | `space.cardGap` | 16 px/pt | `--space-card-gap` | `spaceCardGap = 16` |
91
+
92
+ ### Radii
93
+
94
+ | Token | Value | CSS var | Swift constant |
95
+ |---|---|---|---|
96
+ | `radius.card` | 16 px/pt | `--radius-card` | `radiusCard = 16` |
97
+
98
+ ### Typography
99
+
100
+ | Token | Value | CSS | Swift |
101
+ |---|---|---|---|
102
+ | `font.family` | `-apple-system` | `font-family: -apple-system, system-ui` | `.system(size:weight:)` |
103
+ | `font.sizeHeading` | 22 px/pt | `font-size: 22px` | `.system(size: 22, weight: .semibold)` |
104
+ | `font.weightHeading` | 600 / semibold | `font-weight: 600` | `.semibold` |
105
+ | `font.lineHeightHeading` | 1.27× | `line-height: 1.27` | `lineSpacing: 22 × 0.27 ≈ 5.9 pt` |
106
+ | `font.sizeBody` | 15 px/pt | `font-size: 15px` | `.system(size: 15, weight: .regular)` |
107
+ | `font.weightBody` | 400 / regular | `font-weight: 400` | `.regular` |
108
+ | `font.lineHeightBody` | 1.47× | `line-height: 1.47` | `lineSpacing: 15 × 0.47 ≈ 7.1 pt` |
109
+
110
+ ### Shape
111
+
112
+ | Token | Value | CSS var | Swift constant |
113
+ |---|---|---|---|
114
+ | `shape.circleSize` | 64 px/pt | `--size-circle` | `sizeCircle = 64` |
115
+
116
+ ---
117
+
118
+ ## Screen layout (both sides)
119
+
120
+ ```
121
+ ┌─────────────── 393 pt ───────────────┐
122
+ │ │
123
+ │ ← 59 pt top safe-area inset → │
124
+ │ │
125
+ │ ┌─ 20pt padding ──────────────────┐ │
126
+ │ │ Calibration Screen │ │ ← heading 22pt semibold #1C1C1E
127
+ │ │ This screen is the known-… │ │ ← body 15pt regular #636366
128
+ │ └─────────────────────────────────┘ │
129
+ │ │ ← 24pt gap
130
+ │ ┌─ 20pt padding ──────────────────┐ │
131
+ │ │ ┃A┃B┃C┃D┃ 4-stripe card r=16pt │ │ ← stripes #4A90D9 #7E57C2
132
+ │ │ ┗━┻━┻━┻━┛ (textured, 40pt h) │ │ #26A69A #F4B400
133
+ │ │ ● ← #E8744F circle 64×64pt │ │ ← 16pt gap below card
134
+ │ └─────────────────────────────────┘ │
135
+ │ │
136
+ └───────────────────────────────────────┘
137
+ total height: 852 pt
138
+ ```
139
+
140
+ ---
141
+
142
+ ## How to run
143
+
144
+ **H5 twin** — open `h5-twin/index.html` directly in a browser. No build step.
145
+ Set browser viewport to 393×852. (Playwright capture uses `--viewport 393x852`.)
146
+
147
+ **SwiftUI twin** (known-correct) — requires Xcode 15+ or Swift 5.9+ with iOS SDK:
148
+
149
+ ```bash
150
+ cd swiftui-twin && swift build
151
+ ```
152
+
153
+ **Divergent twin** (negative control) — same toolchain:
154
+
155
+ ```bash
156
+ cd swiftui-twin-divergent && swift build
157
+ ```
158
+
159
+ Preview in Xcode: open either package; the `#Preview` renders the screen in
160
+ an iPhone 15 Pro simulator. `.build/` is gitignored — never commit it.
161
+
162
+ ---
163
+
164
+ ## Updating this pair
165
+
166
+ If any token value is changed:
167
+ 1. Update `tokens.json`.
168
+ 2. Update the matching `--*` custom property in `h5-twin/style.css`.
169
+ 3. Update the matching constant in `swiftui-twin/.../CalibrationScreen.swift`.
170
+ 4. Re-run Stage 2.5 calibration to re-measure the floor.
171
+
172
+ The known-correct trio (`tokens.json`, `h5-twin/style.css`,
173
+ `swiftui-twin/.../CalibrationScreen.swift`) must stay in sync; `tokens.json`
174
+ is the single source of truth. The **divergent twin is intentionally NOT in
175
+ sync** — its job is to differ; only keep it textured (text + stripes) and
176
+ buildable.