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,96 @@
1
+ {
2
+ "id": "001",
3
+ "title": "SwiftUI Custom Layouts: A Complete Guide",
4
+ "subtitle": "How the Layout protocol changes everything you thought you knew about view composition",
5
+ "tag": "SwiftUI",
6
+ "author": {
7
+ "name": "Elena Vasquez",
8
+ "role": "Senior iOS Engineer",
9
+ "bio": "Elena writes about Swift, SwiftUI, and the craft of building beautiful iOS apps. Previously at Apple UIKit team."
10
+ },
11
+ "publishedAt": "2026-05-12T08:00:00Z",
12
+ "readingTime": 9,
13
+ "body": [
14
+ {
15
+ "type": "paragraph",
16
+ "text": "Before iOS 16, building a tag cloud in SwiftUI required creative workarounds: measuring text with a hidden Text view, storing widths in a preference key, and recomputing rows in a second pass. The result was fragile, verbose, and broke Dynamic Type. The Layout protocol changes all of that."
17
+ },
18
+ {
19
+ "type": "heading",
20
+ "text": "What the Layout Protocol Actually Does"
21
+ },
22
+ {
23
+ "type": "paragraph",
24
+ "text": "The Layout protocol exposes two methods: sizeThatFits and placeSubviews. Together they replicate the two-pass layout model that UIKit's layoutSubviews always had, but in a pure-Swift, declarative API that composes naturally with other SwiftUI views."
25
+ },
26
+ {
27
+ "type": "paragraph",
28
+ "text": "The key insight is that a Layout conformer does not manage a view hierarchy — it manages geometry. Your subviews remain ordinary SwiftUI views with all their modifiers and state intact. The Layout only decides where they go and how much space they claim."
29
+ },
30
+ {
31
+ "type": "pullquote",
32
+ "text": "A Layout conformer does not manage a view hierarchy. It manages geometry. The distinction matters more than it seems.",
33
+ "attribution": "Apple WWDC22-10056, Compose custom layouts with SwiftUI"
34
+ },
35
+ {
36
+ "type": "heading",
37
+ "text": "The FlowLayout Pattern"
38
+ },
39
+ {
40
+ "type": "paragraph",
41
+ "text": "The most common use case is a flow layout — the direct equivalent of CSS flex-wrap: wrap. Items line up horizontally until they would overflow, then wrap to the next row. Each row height is determined by the tallest item in that row."
42
+ },
43
+ {
44
+ "type": "subheading",
45
+ "text": "sizeThatFits: Measure First"
46
+ },
47
+ {
48
+ "type": "paragraph",
49
+ "text": "The sizeThatFits pass walks through subviews, asking each one for its ideal size via sizeThatFits(.unspecified). It tracks the current x offset and wraps to a new row whenever adding the next item would exceed the proposed width. The total height is the sum of all row heights plus spacing between rows."
50
+ },
51
+ {
52
+ "type": "code",
53
+ "caption": "FlowLayout.swift — sizeThatFits",
54
+ "text": "func sizeThatFits(\n proposal: ProposedViewSize,\n subviews: Subviews,\n cache: inout ()\n) -> CGSize {\n let maxWidth = proposal.width ?? .infinity\n var x: CGFloat = 0\n var y: CGFloat = 0\n var rowHeight: CGFloat = 0\n\n for view in subviews {\n let size = view.sizeThatFits(.unspecified)\n if x + size.width > maxWidth, x > 0 {\n y += rowHeight + spacing\n x = 0\n rowHeight = 0\n }\n x += size.width + spacing\n rowHeight = max(rowHeight, size.height)\n }\n return CGSize(width: maxWidth, height: y + rowHeight)\n}"
55
+ },
56
+ {
57
+ "type": "subheading",
58
+ "text": "placeSubviews: Commit the Geometry"
59
+ },
60
+ {
61
+ "type": "paragraph",
62
+ "text": "The placeSubviews pass repeats the same walk — you cannot cache positions between the two passes in the void-cache form — and calls place(at:proposal:) on each subview. The coordinates are in the container's local coordinate space, with origin at the top-left of the bounds rect."
63
+ },
64
+ {
65
+ "type": "caption",
66
+ "text": "Note: add a struct Cache type to avoid measuring subviews twice when measurement is expensive."
67
+ },
68
+ {
69
+ "type": "divider"
70
+ },
71
+ {
72
+ "type": "heading",
73
+ "text": "When to Reach for Custom Layout"
74
+ },
75
+ {
76
+ "type": "paragraph",
77
+ "text": "Not every complex layout needs a custom Layout conformer. LazyVGrid with GridItem(.adaptive(minimum:)) handles the vast majority of responsive card grids. HStack and VStack with Spacer handle nearly all flex-direction use cases. Reserve custom Layout for four specific patterns: flex-wrap, non-uniform flex-grow ratios, non-uniform fr ratios, and radial placement."
78
+ },
79
+ {
80
+ "type": "paragraph",
81
+ "text": "The cost of a custom Layout is measured in code, not performance. The layout engine is highly optimized — a properly implemented FlowLayout is not measurably slower than LazyVGrid. The cost is the additional code surface to maintain and test. Write it once, test it, package it, and reuse it."
82
+ },
83
+ {
84
+ "type": "heading",
85
+ "text": "Dynamic Type and the Layout Protocol"
86
+ },
87
+ {
88
+ "type": "paragraph",
89
+ "text": "One of the best properties of a Layout-based flow is that it handles Dynamic Type correctly with zero extra work. Because each subview measures itself at its natural size — including any text scaling from the environment — the flow layout automatically reflows items when the user changes their preferred text size. Compare this to a hardcoded UICollectionViewFlowLayout with itemSize: there is no equivalent automatic reflow."
90
+ },
91
+ {
92
+ "type": "paragraph",
93
+ "text": "This composability — layout logic fully decoupled from content — is the deepest benefit of the Layout protocol. Build the geometry algorithm once. Apply it to any content. The content takes care of itself."
94
+ }
95
+ ]
96
+ }
@@ -0,0 +1,89 @@
1
+ {
2
+ "articles": [
3
+ {
4
+ "id": "001",
5
+ "title": "SwiftUI Custom Layouts: A Complete Guide",
6
+ "subtitle": "How the Layout protocol changes everything you thought you knew about view composition",
7
+ "summary": "Apple's Layout protocol, introduced in iOS 16, fills the last major gap between CSS Flexbox and SwiftUI. Here is how to use it without rewriting your entire view hierarchy.",
8
+ "tag": "SwiftUI",
9
+ "author": {
10
+ "name": "Elena Vasquez",
11
+ "role": "Senior iOS Engineer",
12
+ "bio": "Elena writes about Swift, SwiftUI, and the craft of building beautiful iOS apps. Previously at Apple UIKit team."
13
+ },
14
+ "publishedAt": "2026-05-12T08:00:00Z",
15
+ "readingTime": 9,
16
+ "imageAlt": "Diagram showing SwiftUI layout protocol flow"
17
+ },
18
+ {
19
+ "id": "002",
20
+ "title": "CSS-to-SwiftUI: The Mapping Table You Actually Need",
21
+ "subtitle": "Every flex and grid property mapped — with the caveats that break your layout",
22
+ "summary": "Mechanical transpilation from CSS to SwiftUI fails at six structural boundaries. This guide documents every mapping that matters for pixel-level parity and the exact divergences you need to handle manually.",
23
+ "tag": "Design",
24
+ "author": {
25
+ "name": "Marcus Liu",
26
+ "role": "Design Engineer"
27
+ },
28
+ "publishedAt": "2026-05-08T10:30:00Z",
29
+ "readingTime": 12,
30
+ "imageAlt": "Side-by-side CSS and SwiftUI code comparison"
31
+ },
32
+ {
33
+ "id": "003",
34
+ "title": "WebGL on iOS: When to Keep It and When to Rewrite",
35
+ "subtitle": "A practical triage guide for GPU-heavy web content in a native app migration",
36
+ "summary": "Not every canvas element should become a Metal view. Understanding the performance ceiling and fidelity trade-offs helps you make the right call on each surface — and avoid shipping a half-native app.",
37
+ "tag": "Engineering",
38
+ "author": {
39
+ "name": "Priya Nair",
40
+ "role": "Platform Engineer"
41
+ },
42
+ "publishedAt": "2026-05-01T09:15:00Z",
43
+ "readingTime": 7,
44
+ "imageAlt": "GPU pipeline diagram"
45
+ },
46
+ {
47
+ "id": "004",
48
+ "title": "Typography at the iOS Scale: CoreText vs WebKit",
49
+ "subtitle": "Why identical font declarations produce different layouts — and how to fix them",
50
+ "summary": "line-height: 1.5 means something different in every rendering engine. This deep-dive explains WebKit's half-leading, CoreText's font metrics, and the exact formula to convert between them without visual drift.",
51
+ "tag": "Design",
52
+ "author": {
53
+ "name": "Sofia Andersson",
54
+ "role": "Type Systems Lead"
55
+ },
56
+ "publishedAt": "2026-04-28T07:45:00Z",
57
+ "readingTime": 11,
58
+ "imageAlt": "Typography baseline grid comparison"
59
+ },
60
+ {
61
+ "id": "005",
62
+ "title": "Accessibility Tokens: Building a Design System for Both Web and iOS",
63
+ "subtitle": "One token source of truth, two rendering targets, zero compromises",
64
+ "summary": "Design tokens are the bridge between your CSS custom properties and SwiftUI's Color and Font extensions. When you get the extraction pipeline right, dark mode and Dynamic Type come for free on both platforms.",
65
+ "tag": "Accessibility",
66
+ "author": {
67
+ "name": "Elena Vasquez",
68
+ "role": "Senior iOS Engineer"
69
+ },
70
+ "publishedAt": "2026-04-20T11:00:00Z",
71
+ "readingTime": 8,
72
+ "imageAlt": "Design token pipeline diagram"
73
+ },
74
+ {
75
+ "id": "006",
76
+ "title": "Machine Learning at the Edge: Core ML vs WebAssembly",
77
+ "subtitle": "How on-device inference differs between iOS and modern browsers",
78
+ "summary": "WebAssembly SIMD can achieve near-native throughput for small models, but Core ML's neural engine offers a 10x power efficiency advantage. Here is when each approach wins.",
79
+ "tag": "Machine Learning",
80
+ "author": {
81
+ "name": "James Park",
82
+ "role": "ML Platform Lead"
83
+ },
84
+ "publishedAt": "2026-04-15T14:00:00Z",
85
+ "readingTime": 14,
86
+ "imageAlt": "Core ML vs WASM inference benchmark chart"
87
+ }
88
+ ]
89
+ }
@@ -0,0 +1,22 @@
1
+ import React, { useState } from 'react';
2
+ import { Routes, Route, useNavigate } from 'react-router-dom';
3
+ import FeedScreen from './screens/FeedScreen.jsx';
4
+ import ArticleScreen from './screens/ArticleScreen.jsx';
5
+ import NavBar from './components/NavBar.jsx';
6
+ import styles from './App.module.css';
7
+
8
+ export default function App() {
9
+ const [activeTab, setActiveTab] = useState('feed');
10
+
11
+ return (
12
+ <div className={styles.appRoot}>
13
+ <NavBar activeTab={activeTab} onTabChange={setActiveTab} />
14
+ <main className={styles.main}>
15
+ <Routes>
16
+ <Route path="/" element={<FeedScreen />} />
17
+ <Route path="/article/:id" element={<ArticleScreen />} />
18
+ </Routes>
19
+ </main>
20
+ </div>
21
+ );
22
+ }
@@ -0,0 +1,11 @@
1
+ .appRoot {
2
+ display: flex;
3
+ flex-direction: column;
4
+ min-height: 100dvh;
5
+ }
6
+
7
+ .main {
8
+ flex: 1;
9
+ overflow-y: auto;
10
+ background-color: var(--color-bg-secondary);
11
+ }
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import styles from './ArticleCard.module.css';
4
+
5
+ export default function ArticleCard({ article }) {
6
+ const navigate = useNavigate();
7
+ const { id, title, summary, author, publishedAt, readingTime, tag, imageAlt } = article;
8
+
9
+ const formattedDate = new Date(publishedAt).toLocaleDateString('en-US', {
10
+ month: 'short',
11
+ day: 'numeric',
12
+ year: 'numeric',
13
+ });
14
+
15
+ return (
16
+ <article
17
+ className={styles.card}
18
+ onClick={() => navigate(`/article/${id}`)}
19
+ role="button"
20
+ tabIndex={0}
21
+ onKeyDown={e => e.key === 'Enter' && navigate(`/article/${id}`)}
22
+ >
23
+ <div className={styles.imagePlaceholder} aria-label={imageAlt}>
24
+ <span className={styles.imagePlaceholderText}>{imageAlt}</span>
25
+ </div>
26
+
27
+ <div className={styles.body}>
28
+ <div className={styles.meta}>
29
+ <span className={styles.tag}>{tag}</span>
30
+ <span className={styles.readingTime}>{readingTime} min read</span>
31
+ </div>
32
+
33
+ <h2 className={styles.title}>{title}</h2>
34
+ <p className={styles.summary}>{summary}</p>
35
+
36
+ <div className={styles.footer}>
37
+ <div className={styles.authorArea}>
38
+ <div className={styles.avatar} aria-hidden="true">
39
+ {author.name.slice(0, 1)}
40
+ </div>
41
+ <div className={styles.authorInfo}>
42
+ <span className={styles.authorName}>{author.name}</span>
43
+ <span className={styles.authorRole}>{author.role}</span>
44
+ </div>
45
+ </div>
46
+ <time className={styles.date} dateTime={publishedAt}>
47
+ {formattedDate}
48
+ </time>
49
+ </div>
50
+ </div>
51
+ </article>
52
+ );
53
+ }
@@ -0,0 +1,139 @@
1
+ .card {
2
+ background-color: var(--color-bg-card);
3
+ border-radius: var(--radius-lg);
4
+ box-shadow: var(--shadow-card);
5
+ overflow: hidden;
6
+ cursor: pointer;
7
+ transition: box-shadow var(--duration-normal) var(--easing-default),
8
+ transform var(--duration-normal) var(--easing-default);
9
+ display: flex;
10
+ flex-direction: column;
11
+ }
12
+
13
+ .card:hover {
14
+ box-shadow: var(--shadow-elevated);
15
+ transform: translateY(-2px);
16
+ }
17
+
18
+ .card:focus-visible {
19
+ outline: 2px solid var(--color-accent);
20
+ outline-offset: 2px;
21
+ }
22
+
23
+ .imagePlaceholder {
24
+ width: 100%;
25
+ aspect-ratio: 16 / 9;
26
+ background-color: var(--color-bg-secondary);
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ overflow: hidden;
31
+ border-bottom: 1px solid var(--color-divider);
32
+ }
33
+
34
+ .imagePlaceholderText {
35
+ font-size: var(--font-size-xs);
36
+ color: var(--color-text-caption);
37
+ text-align: center;
38
+ padding: var(--space-2);
39
+ }
40
+
41
+ .body {
42
+ padding: var(--space-5);
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: var(--space-3);
46
+ flex-grow: 1;
47
+ }
48
+
49
+ .meta {
50
+ display: flex;
51
+ flex-direction: row;
52
+ align-items: center;
53
+ justify-content: space-between;
54
+ }
55
+
56
+ .tag {
57
+ font-size: var(--font-size-xs);
58
+ font-weight: var(--font-weight-semibold);
59
+ color: var(--color-text-accent);
60
+ text-transform: uppercase;
61
+ letter-spacing: 0.6px;
62
+ }
63
+
64
+ .readingTime {
65
+ font-size: var(--font-size-xs);
66
+ color: var(--color-text-caption);
67
+ }
68
+
69
+ .title {
70
+ font-family: var(--font-family-display);
71
+ font-size: var(--font-size-subhead);
72
+ font-weight: var(--font-weight-bold);
73
+ color: var(--color-text-primary);
74
+ line-height: var(--line-height-tight);
75
+ letter-spacing: -0.3px;
76
+ }
77
+
78
+ .summary {
79
+ font-size: var(--font-size-body);
80
+ color: var(--color-text-secondary);
81
+ line-height: var(--line-height-normal);
82
+ display: -webkit-box;
83
+ -webkit-line-clamp: 3;
84
+ -webkit-box-orient: vertical;
85
+ overflow: hidden;
86
+ }
87
+
88
+ .footer {
89
+ display: flex;
90
+ flex-direction: row;
91
+ align-items: center;
92
+ justify-content: space-between;
93
+ margin-top: auto;
94
+ padding-top: var(--space-3);
95
+ border-top: 1px solid var(--color-divider);
96
+ }
97
+
98
+ .authorArea {
99
+ display: flex;
100
+ flex-direction: row;
101
+ align-items: center;
102
+ gap: var(--space-2);
103
+ }
104
+
105
+ .avatar {
106
+ width: 32px;
107
+ height: 32px;
108
+ border-radius: var(--radius-full);
109
+ background-color: var(--color-accent);
110
+ color: var(--color-text-on-accent);
111
+ font-size: var(--font-size-sm);
112
+ font-weight: var(--font-weight-bold);
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ flex-shrink: 0;
117
+ }
118
+
119
+ .authorInfo {
120
+ display: flex;
121
+ flex-direction: column;
122
+ gap: 1px;
123
+ }
124
+
125
+ .authorName {
126
+ font-size: var(--font-size-sm);
127
+ font-weight: var(--font-weight-semibold);
128
+ color: var(--color-text-primary);
129
+ }
130
+
131
+ .authorRole {
132
+ font-size: var(--font-size-xs);
133
+ color: var(--color-text-caption);
134
+ }
135
+
136
+ .date {
137
+ font-size: var(--font-size-xs);
138
+ color: var(--color-text-caption);
139
+ }
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import { useNavigate, useLocation } from 'react-router-dom';
3
+ import styles from './NavBar.module.css';
4
+
5
+ const TABS = [
6
+ { id: 'feed', label: 'Feed', path: '/' },
7
+ ];
8
+
9
+ export default function NavBar({ activeTab, onTabChange }) {
10
+ const navigate = useNavigate();
11
+ const location = useLocation();
12
+
13
+ function handleTab(tab) {
14
+ onTabChange(tab.id);
15
+ navigate(tab.path);
16
+ }
17
+
18
+ return (
19
+ <header className={styles.navbar}>
20
+ <div className={styles.logoArea}>
21
+ <span className={styles.logoMark}>C</span>
22
+ <span className={styles.logoText}>Chronicle</span>
23
+ </div>
24
+ <nav className={styles.tabs}>
25
+ {TABS.map(tab => (
26
+ <button
27
+ key={tab.id}
28
+ className={`${styles.tab} ${location.pathname === tab.path ? styles.tabActive : ''}`}
29
+ onClick={() => handleTab(tab)}
30
+ >
31
+ {tab.label}
32
+ </button>
33
+ ))}
34
+ </nav>
35
+ </header>
36
+ );
37
+ }
@@ -0,0 +1,72 @@
1
+ .navbar {
2
+ display: flex;
3
+ flex-direction: row;
4
+ align-items: center;
5
+ justify-content: space-between;
6
+ padding: var(--space-3) var(--space-6);
7
+ background-color: var(--color-bg-primary);
8
+ border-bottom: 1px solid var(--color-border);
9
+ position: sticky;
10
+ top: 0;
11
+ z-index: 100;
12
+ }
13
+
14
+ .logoArea {
15
+ display: flex;
16
+ flex-direction: row;
17
+ align-items: center;
18
+ gap: var(--space-2);
19
+ }
20
+
21
+ .logoMark {
22
+ width: 28px;
23
+ height: 28px;
24
+ border-radius: var(--radius-sm);
25
+ background-color: var(--color-accent);
26
+ color: var(--color-text-on-accent);
27
+ font-family: var(--font-family-display);
28
+ font-size: var(--font-size-sm);
29
+ font-weight: var(--font-weight-bold);
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ }
34
+
35
+ .logoText {
36
+ font-family: var(--font-family-display);
37
+ font-size: var(--font-size-headline);
38
+ font-weight: var(--font-weight-semibold);
39
+ color: var(--color-text-primary);
40
+ letter-spacing: -0.5px;
41
+ }
42
+
43
+ .tabs {
44
+ display: flex;
45
+ flex-direction: row;
46
+ gap: var(--space-1);
47
+ }
48
+
49
+ .tab {
50
+ padding: var(--space-2) var(--space-4);
51
+ border-radius: var(--radius-full);
52
+ font-size: var(--font-size-sm);
53
+ font-weight: var(--font-weight-medium);
54
+ color: var(--color-text-secondary);
55
+ transition: background-color var(--duration-fast) var(--easing-default),
56
+ color var(--duration-fast) var(--easing-default);
57
+ }
58
+
59
+ .tab:hover {
60
+ background-color: var(--color-bg-secondary);
61
+ color: var(--color-text-primary);
62
+ }
63
+
64
+ .tabActive {
65
+ background-color: var(--color-accent);
66
+ color: var(--color-text-on-accent);
67
+ }
68
+
69
+ .tabActive:hover {
70
+ background-color: var(--color-accent-hover);
71
+ color: var(--color-text-on-accent);
72
+ }
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import styles from './TagCloud.module.css';
3
+
4
+ /**
5
+ * TagCloud — a flex-wrap tag gallery with non-uniform item widths.
6
+ *
7
+ * CSS uses `flex-wrap: wrap` with variable-length tag labels.
8
+ * This pattern has NO stock SwiftUI equivalent:
9
+ * "flex-wrap: wrap → HStack never wraps; LazyHGrid/LazyVGrid are scroll
10
+ * containers, not inline wrapping layouts" (css-to-swiftui-map.md)
11
+ *
12
+ * CUSTOM-LAYOUT: flex-wrap:wrap — the variable-width tags must reflow onto
13
+ * multiple rows at arbitrary breakpoints determined by available width, which
14
+ * HStack cannot do. SwiftUI port requires the FlowLayout custom Layout protocol.
15
+ */
16
+ export default function TagCloud({ tags, onTagClick, selectedTag }) {
17
+ return (
18
+ <div className={styles.cloud}>
19
+ {tags.map(tag => (
20
+ <button
21
+ key={tag}
22
+ className={`${styles.tag} ${selectedTag === tag ? styles.tagSelected : ''}`}
23
+ onClick={() => onTagClick(tag === selectedTag ? null : tag)}
24
+ >
25
+ {tag}
26
+ </button>
27
+ ))}
28
+ </div>
29
+ );
30
+ }
@@ -0,0 +1,50 @@
1
+ /* CUSTOM-LAYOUT: flex-wrap:wrap
2
+ *
3
+ * flex-wrap: wrap causes tags with non-uniform widths to reflow onto multiple
4
+ * rows. The break points are data-driven (label length) and width-driven
5
+ * (viewport). HStack in SwiftUI never wraps — this MUST use a custom Layout
6
+ * (FlowLayout) implementing the Layout protocol (iOS 16+).
7
+ *
8
+ * Trigger quote from css-to-swiftui-map.md:
9
+ * "flex-wrap: wrap → Custom Layout protocol (iOS 16+) — FlowLayout
10
+ * No LazyHGrid/LazyVGrid equivalent for true wrapping"
11
+ */
12
+ .cloud {
13
+ display: flex;
14
+ flex-direction: row;
15
+ flex-wrap: wrap; /* CUSTOM-LAYOUT: flex-wrap:wrap */
16
+ gap: var(--space-2) var(--space-2);
17
+ padding: var(--space-4) 0;
18
+ }
19
+
20
+ .tag {
21
+ display: inline-flex;
22
+ align-items: center;
23
+ padding: var(--space-1) var(--space-3);
24
+ border-radius: var(--radius-full);
25
+ background-color: var(--color-bg-tag);
26
+ color: var(--color-text-accent);
27
+ font-size: var(--font-size-sm);
28
+ font-weight: var(--font-weight-medium);
29
+ white-space: nowrap;
30
+ border: 1px solid transparent;
31
+ transition: background-color var(--duration-fast) var(--easing-default),
32
+ border-color var(--duration-fast) var(--easing-default);
33
+ cursor: pointer;
34
+ }
35
+
36
+ .tag:hover {
37
+ background-color: var(--color-bg-secondary);
38
+ border-color: var(--color-border);
39
+ }
40
+
41
+ .tagSelected {
42
+ background-color: var(--color-accent);
43
+ color: var(--color-text-on-accent);
44
+ border-color: var(--color-accent);
45
+ }
46
+
47
+ .tagSelected:hover {
48
+ background-color: var(--color-accent-hover);
49
+ border-color: var(--color-accent-hover);
50
+ }