claude-code-workflow 7.2.26 → 7.2.28

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 (408) hide show
  1. package/.ccw/specs/architecture-constraints.md +5 -0
  2. package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
  3. package/.claude/skills/investigate/SKILL.md +110 -0
  4. package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
  5. package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
  6. package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
  7. package/.claude/skills/investigate/phases/04-implementation.md +139 -0
  8. package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
  9. package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
  10. package/.claude/skills/investigate/specs/iron-law.md +101 -0
  11. package/.claude/skills/security-audit/SKILL.md +125 -0
  12. package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
  13. package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
  14. package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
  15. package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
  16. package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
  17. package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
  18. package/.claude/skills/ship/SKILL.md +105 -0
  19. package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
  20. package/.claude/skills/ship/phases/02-code-review.md +137 -0
  21. package/.claude/skills/ship/phases/03-version-bump.md +171 -0
  22. package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
  23. package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
  24. package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
  25. package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
  26. package/.claude/skills/team-arch-opt/SKILL.md +1 -1
  27. package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +3 -1
  28. package/.claude/skills/team-arch-opt/roles/refactorer/role.md +3 -1
  29. package/.claude/skills/team-arch-opt/specs/team-config.json +2 -2
  30. package/.claude/skills/team-coordinate/SKILL.md +4 -3
  31. package/.claude/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +1 -1
  32. package/.claude/skills/team-coordinate/roles/coordinator/commands/dispatch.md +3 -2
  33. package/.claude/skills/team-coordinate/roles/coordinator/commands/monitor.md +3 -2
  34. package/.claude/skills/team-coordinate/roles/coordinator/role.md +16 -15
  35. package/.claude/skills/team-coordinate/specs/pipelines.md +7 -4
  36. package/.claude/skills/team-coordinate/specs/role-spec-template.md +1 -0
  37. package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
  38. package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  39. package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
  40. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  41. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
  42. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
  43. package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
  44. package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  45. package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  46. package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  47. package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
  48. package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
  49. package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  50. package/.claude/skills/team-lifecycle-v4/SKILL.md +1 -1
  51. package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +14 -2
  52. package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +24 -2
  53. package/.claude/skills/team-lifecycle-v4/roles/executor/role.md +3 -1
  54. package/.claude/skills/team-motion-design/SKILL.md +129 -0
  55. package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
  56. package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
  57. package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  58. package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
  59. package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
  60. package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
  61. package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  62. package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  63. package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  64. package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
  65. package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
  66. package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
  67. package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
  68. package/.claude/skills/team-perf-opt/SKILL.md +1 -1
  69. package/.claude/skills/team-perf-opt/roles/optimizer/role.md +3 -1
  70. package/.claude/skills/team-perf-opt/specs/team-config.json +2 -2
  71. package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
  72. package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +4 -2
  73. package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +4 -2
  74. package/.claude/skills/team-quality-assurance/roles/executor/role.md +3 -1
  75. package/.claude/skills/team-testing/SKILL.md +1 -1
  76. package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +5 -2
  77. package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +4 -2
  78. package/.claude/skills/team-testing/roles/executor/role.md +3 -1
  79. package/.claude/skills/team-ui-polish/SKILL.md +127 -0
  80. package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  81. package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
  82. package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
  83. package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
  84. package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
  85. package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
  86. package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
  87. package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
  88. package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  89. package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
  90. package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  91. package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
  92. package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  93. package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
  94. package/.claude/skills/team-uidesign/SKILL.md +6 -1
  95. package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
  96. package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
  97. package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
  98. package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
  99. package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
  100. package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
  101. package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
  102. package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
  103. package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
  104. package/.claude/skills/team-ux-improve/SKILL.md +3 -0
  105. package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
  106. package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
  107. package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
  108. package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
  109. package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
  110. package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
  111. package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
  112. package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
  113. package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
  114. package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
  115. package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
  116. package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  117. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  118. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
  119. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
  120. package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
  121. package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  122. package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  123. package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  124. package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  125. package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  126. package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  127. package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
  128. package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
  129. package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  130. package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  131. package/.codex/skills/investigate/agents/investigator.md +392 -0
  132. package/.codex/skills/investigate/orchestrator.md +362 -0
  133. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  134. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  135. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  136. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  137. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  138. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  139. package/.codex/skills/security-audit/orchestrator.md +384 -0
  140. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  141. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  142. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  143. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  144. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  145. package/.codex/skills/ship/orchestrator.md +426 -0
  146. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  147. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  148. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  149. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  150. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  151. package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
  152. package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  153. package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
  154. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  155. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
  156. package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
  157. package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
  158. package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  159. package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  160. package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  161. package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
  162. package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
  163. package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  164. package/.codex/skills/team-motion-design/SKILL.md +222 -0
  165. package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
  166. package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
  167. package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  168. package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
  169. package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
  170. package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
  171. package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  172. package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  173. package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  174. package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
  175. package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
  176. package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
  177. package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
  178. package/.codex/skills/team-ui-polish/SKILL.md +218 -0
  179. package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  180. package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
  181. package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
  182. package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
  183. package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
  184. package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
  185. package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
  186. package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
  187. package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  188. package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
  189. package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  190. package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
  191. package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  192. package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
  193. package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
  194. package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  195. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  196. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
  197. package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
  198. package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
  199. package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  200. package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  201. package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  202. package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  203. package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  204. package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  205. package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
  206. package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
  207. package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  208. package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  209. package/README.md +8 -0
  210. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  211. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  212. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  213. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  214. package/ccw/dist/core/routes/cli-routes.js +34 -0
  215. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  216. package/ccw/dist/core/routes/system-routes.js +2 -2
  217. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  218. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
  219. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
  220. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
  221. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
  222. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
  223. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
  224. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
  225. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
  226. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
  227. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
  228. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
  229. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
  230. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
  231. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
  232. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
  233. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
  234. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
  235. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
  236. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
  237. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
  238. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
  239. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
  240. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
  241. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
  242. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
  243. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
  244. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
  245. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
  246. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
  247. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
  248. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
  249. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
  250. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
  251. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
  252. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
  253. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
  254. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
  255. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
  256. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
  257. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
  258. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
  259. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
  260. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
  261. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
  262. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
  263. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
  264. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
  265. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
  266. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
  267. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
  268. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
  269. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
  270. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
  271. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
  272. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
  273. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
  274. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
  275. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
  276. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
  277. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
  278. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
  279. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
  280. package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
  281. package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
  282. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
  283. package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
  284. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
  285. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
  286. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
  287. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
  288. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
  289. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
  290. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
  291. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
  292. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
  293. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
  294. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
  295. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
  296. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
  297. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
  298. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
  299. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
  300. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
  301. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
  302. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
  303. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
  304. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
  305. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
  306. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
  307. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
  308. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
  309. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
  310. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
  311. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
  312. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
  313. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
  314. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
  315. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
  316. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
  317. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
  318. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
  319. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
  320. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
  321. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
  322. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
  323. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
  324. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
  325. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
  326. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
  327. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
  328. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
  329. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
  330. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
  331. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
  332. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
  333. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
  334. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
  335. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
  336. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
  337. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
  338. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
  339. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
  340. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
  341. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
  342. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
  343. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
  344. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
  345. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
  346. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
  347. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
  348. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
  349. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
  350. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
  351. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
  352. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
  353. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
  354. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
  355. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
  356. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
  357. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
  358. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
  359. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
  360. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
  361. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
  362. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
  363. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
  364. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
  365. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
  366. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
  367. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
  368. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
  369. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
  370. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
  371. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
  372. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
  373. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
  374. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
  375. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
  376. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
  377. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
  378. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
  379. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
  380. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
  381. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
  382. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
  383. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
  384. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
  385. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
  386. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
  387. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
  388. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
  389. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
  390. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
  391. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
  392. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
  393. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
  394. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
  395. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
  396. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
  397. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
  398. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
  399. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
  400. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
  401. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
  402. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
  403. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
  404. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
  405. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
  406. package/ccw/frontend/dist/index.html +1 -1
  407. package/package.json +105 -105
  408. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
@@ -0,0 +1,225 @@
1
+ ---
2
+ role: optimizer
3
+ prefix: OPT
4
+ inner_loop: true
5
+ message_types: [opt_complete, opt_progress, error]
6
+ ---
7
+
8
+ # UI Optimizer -- Targeted Fix Application
9
+
10
+ Apply targeted fixes following Impeccable design standards. Consumes diagnosis report and applies fixes in dependency order. Acts as Generator in the optimizer<->verifier Generator-Critic loop.
11
+
12
+ ## Phase 2: Context & Artifact Loading
13
+
14
+ | Input | Source | Required |
15
+ |-------|--------|----------|
16
+ | Scan report | <session>/scan/scan-report.md | Yes |
17
+ | Diagnosis report | <session>/diagnosis/diagnosis-report.md | Yes |
18
+ | .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
19
+ | Fix strategies | specs/fix-strategies.md | Yes |
20
+ | Design standards | specs/design-standards.md | Yes |
21
+ | Verification feedback | <session>/verification/verify-report.md | Only for GC fix tasks |
22
+
23
+ 1. Extract session path from task description
24
+ 2. Read diagnosis report: parse root cause groups, fix dependency graph, recommended fix order
25
+ 3. Read scan report: parse positive findings (things to preserve)
26
+ 4. Read specs/fix-strategies.md and specs/design-standards.md for fix reference
27
+ 5. Detect task type from subject: "OPT-001" -> initial optimization, "OPT-fix-*" -> GC fix round
28
+ 6. If GC fix task: read verification feedback for specific regressions to fix
29
+
30
+ ## Phase 3: Apply Fixes
31
+
32
+ Follow the fix dependency graph from diagnosis report. Apply fixes in order, one category at a time. After each category, self-validate before proceeding.
33
+
34
+ **CRITICAL**: Preserve positive findings from scan report. Do not break what already works.
35
+
36
+ ---
37
+
38
+ ### Fix Category 1: Anti-AI-Slop Fixes
39
+
40
+ Target: Root cause groups tagged with anti-patterns dimension.
41
+
42
+ | Issue | Fix |
43
+ |-------|-----|
44
+ | Generic fonts (Inter, Roboto, Open Sans) | Replace with distinctive alternatives: Instrument Sans, Plus Jakarta Sans, Fraunces, DM Sans, Manrope, Space Grotesk, Geist |
45
+ | Gradient text | Convert to solid accent color. Remove `background-clip: text` + gradient |
46
+ | Identical card grids | Vary card sizes, add featured/hero card, break symmetry. Not everything needs to be a card |
47
+ | Glassmorphism decoration | Remove `backdrop-filter: blur()` unless serving real purpose (e.g., overlays). Replace glow borders with subtle shadows |
48
+ | Hero metric template | Redesign with intentional layout. Vary metric sizes by importance. Remove gradient accents |
49
+ | Nested cards | Flatten: remove inner card borders, use spacing + subtle dividers instead |
50
+ | Everything centered | Add left-alignment for body text. Use asymmetric layouts. Vary alignment per section |
51
+ | All buttons primary | Create button hierarchy: 1 primary, ghost/outline for secondary, text links for tertiary |
52
+ | Same spacing everywhere | Introduce spacing rhythm: tighter within groups, generous between sections |
53
+ | Bounce/elastic easing | Replace with exponential curves: `cubic-bezier(0.25, 1, 0.5, 1)` (ease-out-quart) |
54
+
55
+ ---
56
+
57
+ ### Fix Category 2: Color Fixes
58
+
59
+ Target: Root cause groups tagged with color dimension.
60
+
61
+ | Issue | Fix |
62
+ |-------|-----|
63
+ | Pure black (#000) | Replace with tinted near-black: `oklch(0.15 0.01 <brand-hue>)` or `#0a0a0a`-range tinted |
64
+ | Pure white (#fff) | Replace with tinted near-white: `oklch(0.98 0.005 <brand-hue>)` or `#fafaf8`-range tinted |
65
+ | Untinted grays | Add brand hue tint: `oklch(L 0.005-0.01 <brand-hue>)` for each gray step |
66
+ | Gray on colored bg | Replace with shade of background color or use `color-mix()` / transparency |
67
+ | Contrast failures | Increase lightness difference until WCAG AA met (4.5:1 text, 3:1 large text, 3:1 UI) |
68
+ | No OKLCH | Convert key palette colors to `oklch()`. Especially for generating tints/shades |
69
+ | Accent overuse | Reduce accent to ~10% of page. Convert excess accent to neutral or secondary |
70
+ | No semantic roles | Create token structure: `--color-primary`, `--color-neutral-*`, `--color-success/warning/error`, `--color-surface-*` |
71
+ | Hard-coded colors | Extract to CSS custom properties. Create design token file if none exists |
72
+
73
+ ---
74
+
75
+ ### Fix Category 3: Typography Fixes
76
+
77
+ Target: Root cause groups tagged with typography dimension.
78
+
79
+ | Issue | Fix |
80
+ |-------|-----|
81
+ | Overused fonts | Replace with distinctive alternatives. Body: Plus Jakarta Sans, Instrument Sans, DM Sans. Display: Fraunces, Space Grotesk, Manrope |
82
+ | Muddy hierarchy | Establish clear modular scale. Remove intermediate sizes. Target: 5-7 distinct sizes |
83
+ | No modular scale | Define scale with ratio (1.25 major third, 1.333 perfect fourth, 1.5 perfect fifth). Base: 16px |
84
+ | Small body text | Set minimum `font-size: 1rem` (16px) for body. 14px only for captions/metadata |
85
+ | Bad line length | Add `max-width: 65ch` to prose containers. Min 45ch, max 75ch |
86
+ | Inconsistent line-height | Establish system: 1.5 for body, 1.2-1.3 for headings, 1.6-1.7 for small text |
87
+ | No fluid sizing | Add `clamp()` for h1-h3: e.g., `font-size: clamp(1.75rem, 1.2rem + 2vw, 3rem)` |
88
+ | Missing font-display | Add `font-display: swap` to all @font-face declarations |
89
+
90
+ ---
91
+
92
+ ### Fix Category 4: Spacing & Layout Fixes
93
+
94
+ Target: Root cause groups tagged with spacing dimension.
95
+
96
+ | Issue | Fix |
97
+ |-------|-----|
98
+ | Arbitrary spacing | Replace with nearest value on 4pt scale: 4, 8, 12, 16, 24, 32, 48, 64, 96px |
99
+ | No spacing scale | Create CSS custom properties: `--space-1: 0.25rem` through `--space-12: 6rem` |
100
+ | Monotonous spacing | Vary spacing: tighter within component groups (8-12px), generous between sections (48-96px) |
101
+ | Card overuse | Remove card wrapper from items that do not need distinct containment. Use spacing + dividers |
102
+ | Nested cards | Flatten inner cards. Remove inner borders. Use spacing or subtle background tint |
103
+ | Fixed widths | Replace `width: Npx` with `max-width` + `width: 100%` or grid/flex |
104
+ | Small touch targets | Set `min-height: 44px; min-width: 44px` on all interactive elements |
105
+ | Margin for siblings | Replace `margin-top/bottom` between siblings with `gap` on flex/grid parent |
106
+
107
+ ---
108
+
109
+ ### Fix Category 5: Motion Fixes
110
+
111
+ Target: Root cause groups tagged with motion dimension.
112
+
113
+ | Issue | Fix |
114
+ |-------|-----|
115
+ | Layout property animation | Replace `width/height/top/left/margin/padding` transitions with `transform` + `opacity` |
116
+ | Bad easing | Replace `ease`, `linear`, `ease-in-out` with `cubic-bezier(0.25, 1, 0.5, 1)` (ease-out-quart) |
117
+ | Bounce/elastic | Replace with exponential: `cubic-bezier(0.25, 1, 0.5, 1)` for enter, `cubic-bezier(0.5, 0, 0.75, 0)` for exit |
118
+ | No reduced-motion | Add: `@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }` |
119
+ | No motion tokens | Create: `--duration-instant: 100ms`, `--duration-fast: 150ms`, `--duration-normal: 250ms`, `--duration-slow: 400ms`, `--duration-entrance: 500ms` |
120
+ | Uncapped stagger | Cap at 10 items visible, total stagger <= 500ms. Use `animation-delay: min(calc(var(--i) * 50ms), 500ms)` |
121
+ | Premature will-change | Remove from CSS. Add via JS on `pointerenter`/`focusin`, remove on `animationend`/`transitionend` |
122
+
123
+ ---
124
+
125
+ ### Fix Category 6: Interaction State Fixes
126
+
127
+ Target: Root cause groups tagged with interaction dimension.
128
+
129
+ | Issue | Fix |
130
+ |-------|-----|
131
+ | Missing hover | Add `:hover` with subtle background change or opacity shift. Use `@media (hover: hover)` to scope |
132
+ | Missing focus | Add `:focus-visible` with focus ring: `outline: 2px solid var(--color-primary); outline-offset: 2px` |
133
+ | outline: none | Replace with `:focus-visible` pattern. Only `:focus:not(:focus-visible) { outline: none }` |
134
+ | No focus-visible | Replace `:focus` styles with `:focus-visible`. Add polyfill if browser support needed |
135
+ | Missing active | Add `:active` with `transform: scale(0.97)` or darker background |
136
+ | Missing disabled | Add `[disabled], [aria-disabled="true"]` with `opacity: 0.5; cursor: not-allowed; pointer-events: none` |
137
+ | Missing loading | Add loading state: spinner/skeleton + `aria-busy="true"` + disable submit button |
138
+ | Missing error/success | Add form validation styles: red border + error message for error, green check for success |
139
+ | Placeholder as label | Add visible `<label>` element. Keep placeholder as hint only. Use `aria-labelledby` if needed |
140
+ | Focus ring quality | Ensure: 2px solid accent, offset 2px, 3:1 contrast ratio against background |
141
+
142
+ ---
143
+
144
+ ### Fix Category 7: Visual Hierarchy Fixes
145
+
146
+ Target: Root cause groups tagged with hierarchy dimension.
147
+
148
+ | Issue | Fix |
149
+ |-------|-----|
150
+ | Fails squint test | Increase size/weight/color contrast of primary element. Reduce visual weight of secondary elements |
151
+ | Primary action unclear | Make primary CTA largest, highest contrast, most saturated. Only 1 primary per viewport |
152
+ | Size-only hierarchy | Add weight (bold vs regular) + color (saturated vs muted) + space (more surrounding space = more important) |
153
+ | No information grouping | Use proximity principle: tighter spacing within groups, larger gaps between groups |
154
+ | Visual competition | Reduce visual weight of competing elements. Mute colors, reduce size, decrease contrast |
155
+ | No 3:1 ratio | Ensure h1 is at least 3x body size. Each heading level should be 1.25-1.5x the next |
156
+ | Decoration over content | Reduce or remove decorative elements. Mute icon colors. Remove background decorations |
157
+
158
+ ---
159
+
160
+ ### Fix Category 8: Responsive Fixes
161
+
162
+ Target: Root cause groups tagged with responsive dimension.
163
+
164
+ | Issue | Fix |
165
+ |-------|-----|
166
+ | Fixed widths | Replace with `max-width` + `width: 100%`, or `min()`, or grid `fr` units |
167
+ | Horizontal scroll | Find overflow source. Add `overflow-x: hidden` on body only as last resort. Fix root cause |
168
+ | Hidden content | Restructure for mobile instead of hiding. Use accordion, tabs, or progressive disclosure |
169
+ | No container queries | Add `container-type: inline-size` on component wrappers. Use `@container` for component-level responsive |
170
+ | Small mobile text | Set minimum 14px (0.875rem) for all text on mobile. Prefer 16px for body |
171
+ | Tiny mobile targets | Set `min-height: 44px` on all interactive elements. Add padding if needed |
172
+ | No breakpoints | Add: `@media (min-width: 640px)`, `(min-width: 768px)`, `(min-width: 1024px)`, `(min-width: 1280px)` |
173
+ | Broken images | Add `img { max-width: 100%; height: auto }`. Use `object-fit` for fixed aspect ratios |
174
+
175
+ ---
176
+
177
+ ## Phase 4: Self-Validation & Output
178
+
179
+ 1. After all fixes applied, validate:
180
+
181
+ | Check | Pass Criteria |
182
+ |-------|---------------|
183
+ | Code compiles | No syntax errors in modified files |
184
+ | Lint passes | No new lint errors introduced |
185
+ | No positive findings broken | Items from scan report "Positive Findings" section still intact |
186
+ | Fix log complete | Every applied fix documented |
187
+
188
+ 2. Write fix log: `<session>/optimization/fix-log.md`
189
+
190
+ ```markdown
191
+ # Optimization Fix Log
192
+
193
+ ## Summary
194
+ - Fixes applied: N
195
+ - Files modified: N
196
+ - Categories addressed: <list>
197
+ - GC round: <1 | fix-N>
198
+
199
+ ## Fixes Applied
200
+
201
+ ### Category: <category name>
202
+ | # | File | Line | Before | After | Issue Ref |
203
+ |---|------|------|--------|-------|-----------|
204
+ | 1 | path/to/file.css | 42 | `color: #000` | `color: oklch(0.15 0.01 250)` | P1-Color-3 |
205
+
206
+ ### Category: <next category>
207
+ ...
208
+
209
+ ## Files Modified
210
+ - `path/to/file.css`: <summary of changes>
211
+ - `path/to/file.tsx`: <summary of changes>
212
+
213
+ ## Preserved (not modified)
214
+ - <positive findings that were intentionally kept>
215
+
216
+ ## Metadata
217
+ - Source diagnosis: <session>/diagnosis/diagnosis-report.md
218
+ - Timestamp: <ISO timestamp>
219
+ ```
220
+
221
+ 3. Send completion message:
222
+ ```
223
+ mcp__ccw-tools__team_msg(session_id, role="optimizer", type="opt_complete", content="Optimization complete. Fixes applied: N. Files modified: N. Categories: <list>.")
224
+ SendMessage(participant="coordinator", message="[optimizer] OPT-001 complete. Applied N fixes across N files. Categories: <list>. Log: <session>/optimization/fix-log.md")
225
+ ```
@@ -0,0 +1,356 @@
1
+ ---
2
+ role: scanner
3
+ prefix: SCAN
4
+ inner_loop: false
5
+ message_types: [scan_complete, scan_progress, error]
6
+ ---
7
+
8
+ # UI Scanner -- 8-Dimension Design Audit
9
+
10
+ Scan existing UI against Impeccable's 8 audit dimensions to discover all design problems. This is the team's core diagnostic engine. Every issue found here drives the entire downstream pipeline.
11
+
12
+ ## Phase 2: Context & Artifact Loading
13
+
14
+ | Input | Source | Required |
15
+ |-------|--------|----------|
16
+ | Target files or URL | From task description | Yes |
17
+ | .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
18
+ | Anti-patterns catalog | specs/anti-patterns.md | Yes |
19
+ | Design standards | specs/design-standards.md | Yes |
20
+
21
+ 1. Extract session path and target from task description
22
+ 2. Read specs/anti-patterns.md and specs/design-standards.md for reference criteria
23
+ 3. Load target files based on target type:
24
+ - **URL target**: Use Chrome DevTools to navigate, take screenshots at 3 viewports:
25
+ - Mobile: `mcp__chrome-devtools__resize_page(width=375, height=812)` + screenshot
26
+ - Tablet: `mcp__chrome-devtools__resize_page(width=768, height=1024)` + screenshot
27
+ - Desktop: `mcp__chrome-devtools__resize_page(width=1440, height=900)` + screenshot
28
+ - Save to `<session>/evidence/before-mobile.png`, `before-tablet.png`, `before-desktop.png`
29
+ - **Component target**: Read CSS/SCSS, HTML, JS/TS/JSX/TSX files
30
+ - **Full site target**: Glob for all frontend source files (*.css, *.scss, *.tsx, *.jsx, *.html, *.vue, *.svelte)
31
+ 4. Extract raw data for analysis:
32
+ - All color values (hex, rgb, hsl, oklch, named colors, CSS custom properties)
33
+ - All font declarations (font-family, font-size, font-weight, line-height)
34
+ - All spacing values (margin, padding, gap, inset)
35
+ - All animation/transition declarations
36
+ - All interactive pseudo-classes and state handling
37
+ 5. If Chrome DevTools available: extract computed styles via `mcp__chrome-devtools__evaluate_script`
38
+
39
+ ## Phase 3: 8-Dimension Scan
40
+
41
+ For each dimension, check every item in the checklist. Record each finding with:
42
+ - Location: file:line (or "screenshot: viewport" for visual-only issues)
43
+ - Severity: P0 (blocking) / P1 (major) / P2 (minor) / P3 (polish)
44
+ - Description: what is wrong and why it matters
45
+ - Evidence: the specific code or visual that triggers the finding
46
+
47
+ ---
48
+
49
+ ### Dimension 1: Anti-AI-Slop Detection (CRITICAL -- scan first)
50
+
51
+ **The AI Slop Test**: "If you showed this to someone and said 'AI made this,' would they believe you immediately? If yes, that is the problem."
52
+
53
+ Check for these AI-generated UI fingerprints:
54
+
55
+ | # | Pattern | What to Look For | Severity |
56
+ |---|---------|-------------------|----------|
57
+ | 1 | AI color palette | cyan-on-dark (#00d4ff, #06b6d4), purple-to-blue gradients, neon accents on dark backgrounds | P1 |
58
+ | 2 | Gradient text | `background-clip: text` + gradient on metrics, headings, or hero text for "impact" | P1 |
59
+ | 3 | Default dark mode | Dark background with glowing/neon accents as the default theme; avoids real design decisions | P2 |
60
+ | 4 | Glassmorphism everywhere | `backdrop-filter: blur()`, glass cards, glow borders (`box-shadow: 0 0 Xpx color`), used decoratively not functionally | P1 |
61
+ | 5 | Hero metric layout | Big number + small label + supporting stats in a row + gradient accent. The "AI dashboard" template | P2 |
62
+ | 6 | Identical card grids | Same-sized cards with icon + heading + body text repeated 3-6 times in a grid | P2 |
63
+ | 7 | Nested cards | Cards inside cards (`.card .card`, multiple layers of bordered containers) | P2 |
64
+ | 8 | Generic fonts | Inter, Roboto, Arial, Open Sans, Lato, Montserrat, system-ui used without intentional choice | P2 |
65
+ | 9 | Rounded rect + shadow | `border-radius: 8-16px` + `box-shadow: 0 1-4px 6-24px rgba(0,0,0,0.1)` on everything | P3 |
66
+ | 10 | Icon-above-heading | Large icons (24-48px) with rounded corners/background placed above every heading or card | P2 |
67
+ | 11 | One-side border accent | `border-left: 3-4px solid <accent>` or `border-top` as lazy accent on cards | P3 |
68
+ | 12 | Decorative sparklines | Tiny charts/graphs that look sophisticated but convey no actionable data | P2 |
69
+ | 13 | Bounce/elastic easing | `cubic-bezier(0.68, -0.55, 0.265, 1.55)` or spring animations. Dated, 2015 aesthetic | P2 |
70
+ | 14 | Redundant copy | Intro paragraphs that restate the heading. "Welcome to Dashboard. This dashboard shows..." | P3 |
71
+ | 15 | All buttons primary | Every button is filled/primary. No ghost buttons, text links, or secondary variants | P1 |
72
+ | 16 | Everything centered | `text-align: center` or `justify-content: center` on everything. No asymmetry | P2 |
73
+ | 17 | Same spacing everywhere | Identical margin/padding on all elements. No spacing rhythm or variation | P2 |
74
+ | 18 | Monospace as tech | Monospace fonts used for non-code content to appear "techy" | P3 |
75
+ | 19 | Modal overuse | Modals for confirmations, settings, forms -- when inline or drawer would work | P3 |
76
+ | 20 | Pure black/white | `#000000` or `#ffffff` without any tint toward brand hue | P1 |
77
+
78
+ **Scoring**:
79
+ - 0: AI slop gallery (5+ tells present)
80
+ - 1: Heavy AI influence (3-4 tells)
81
+ - 2: Some AI tells (1-2 noticeable)
82
+ - 3: Mostly clean (subtle traces only)
83
+ - 4: Distinctive (genuinely intentional design, zero AI tells)
84
+
85
+ ---
86
+
87
+ ### Dimension 2: Color Quality
88
+
89
+ | # | Check | What to Look For | Severity |
90
+ |---|-------|-------------------|----------|
91
+ | 1 | Pure black usage | `#000`, `#000000`, `rgb(0,0,0)` anywhere except borders/outlines | P1 |
92
+ | 2 | Pure white usage | `#fff`, `#ffffff`, `rgb(255,255,255)` for backgrounds without brand tint | P1 |
93
+ | 3 | Untinted grays | Gray values with chroma exactly 0 (pure gray). Should have chroma 0.005-0.01 toward brand hue | P2 |
94
+ | 4 | Gray on colored bg | Gray text (#666, #999, etc.) on colored backgrounds. Looks washed out. Use shade of background or transparency | P1 |
95
+ | 5 | WCAG AA contrast | Text contrast below 4.5:1 (normal text) or 3:1 (large text >= 18px/24px bold) | P0 |
96
+ | 6 | UI component contrast | Interactive component boundaries below 3:1 contrast against adjacent colors | P1 |
97
+ | 7 | No OKLCH | All colors in hex/rgb/hsl without oklch() for perceptual uniformity | P2 |
98
+ | 8 | Accent overuse | Accent color exceeds 10% of visual weight. Violates 60-30-10 rule (60% neutral, 30% secondary, 10% accent) | P2 |
99
+ | 9 | No semantic roles | Colors not organized into primary/neutral/semantic(success,warning,error)/surface layers | P2 |
100
+ | 10 | Hard-coded colors | Color values inline in components instead of CSS custom properties or design tokens | P2 |
101
+ | 11 | No dark/light tokens | Single-theme colors without alternate theme support | P3 |
102
+
103
+ **Scoring**:
104
+ - 0: Multiple contrast failures, pure black/white everywhere, no system
105
+ - 1: Contrast issues, hard-coded colors, no tokens
106
+ - 2: Basic contrast OK but no OKLCH, some hard-coded values
107
+ - 3: Good system with minor gaps (some untinted grays or missing tokens)
108
+ - 4: OKLCH-based, fully tokenized, WCAG AA+ compliant, proper 60-30-10
109
+
110
+ ---
111
+
112
+ ### Dimension 3: Typography Quality
113
+
114
+ | # | Check | What to Look For | Severity |
115
+ |---|-------|-------------------|----------|
116
+ | 1 | Overused fonts | Inter, Roboto, Open Sans, Lato, Montserrat, Arial without intentional justification | P2 |
117
+ | 2 | Muddy hierarchy | Too many close font sizes (e.g., 13/14/15/16/18). Should have clear steps | P1 |
118
+ | 3 | No modular scale | Font sizes without mathematical ratio (1.125, 1.2, 1.25, 1.333, 1.5, 1.618) | P2 |
119
+ | 4 | Small body text | Body/paragraph text below 16px (1rem) | P1 |
120
+ | 5 | Line length | Body text wider than 75ch or narrower than 45ch. Optimal: 65ch | P2 |
121
+ | 6 | Inconsistent line-height | Different line-heights without system. Should follow vertical rhythm | P2 |
122
+ | 7 | No fluid sizing | Headings without `clamp()` for responsive scaling. Fixed px that are too big on mobile or too small on desktop | P2 |
123
+ | 8 | Monospace misuse | Monospace fonts for non-code body content used as "tech" aesthetic | P3 |
124
+ | 9 | Missing font-display | No `font-display: swap` causing FOIT (flash of invisible text) | P2 |
125
+ | 10 | Too many font families | More than 2-3 font families in use (excluding monospace for code) | P2 |
126
+ | 11 | No fallback metrics | Custom fonts without `size-adjust`, `ascent-override` for CLS prevention | P3 |
127
+
128
+ **Scoring**:
129
+ - 0: Generic font, no scale, tiny text, no hierarchy
130
+ - 1: Overused font, muddy sizes, missing fluid sizing
131
+ - 2: Decent font choice but inconsistent scale or line-height
132
+ - 3: Good typography with minor gaps (missing clamp, slight inconsistencies)
133
+ - 4: Distinctive font, clear modular scale, fluid sizing, proper rhythm
134
+
135
+ ---
136
+
137
+ ### Dimension 4: Spacing & Layout Quality
138
+
139
+ | # | Check | What to Look For | Severity |
140
+ |---|-------|-------------------|----------|
141
+ | 1 | Arbitrary spacing | Spacing values outside a consistent scale (e.g., 7px, 13px, 22px, 37px) | P2 |
142
+ | 2 | No spacing scale | No evidence of 4pt base (4, 8, 12, 16, 24, 32, 48, 64, 96px) or similar system | P2 |
143
+ | 3 | Monotonous spacing | Same padding/margin value everywhere. No rhythm (tight groups + generous separations) | P2 |
144
+ | 4 | Card overuse | Everything wrapped in cards. Cards for single text items, cards for navigation, cards for everything | P2 |
145
+ | 5 | Nested cards | Cards inside cards. Multiple bordered containers creating visual noise | P1 |
146
+ | 6 | Fixed widths | Hard-coded pixel widths that break on different viewports | P1 |
147
+ | 7 | Small touch targets | Interactive elements below 44x44px (buttons, links, inputs on mobile) | P1 |
148
+ | 8 | Margin for siblings | Using `margin` between sibling elements instead of `gap` on parent | P3 |
149
+ | 9 | No optical adjustment | Purely mathematical centering without optical corrections (e.g., play button in circle) | P3 |
150
+ | 10 | No max-width on prose | Text containers without max-width causing ultra-wide line lengths | P2 |
151
+
152
+ **Scoring**:
153
+ - 0: Random spacing, nested cards, fixed widths, tiny touch targets
154
+ - 1: Some system but many arbitrary values, cards overused
155
+ - 2: Decent spacing but monotonous or missing rhythm
156
+ - 3: Good system with minor gaps (occasional arbitrary value)
157
+ - 4: Consistent scale, varied rhythm, gap usage, proper touch targets
158
+
159
+ ---
160
+
161
+ ### Dimension 5: Motion & Animation Quality
162
+
163
+ | # | Check | What to Look For | Severity |
164
+ |---|-------|-------------------|----------|
165
+ | 1 | Layout property animation | Animating `width`, `height`, `top`, `left`, `margin`, `padding` (causes layout thrashing) | P1 |
166
+ | 2 | Bad easing | Using `ease` (default), `linear`, or `ease-in-out` for UI transitions. Should use exponential curves | P2 |
167
+ | 3 | Bounce/elastic | `cubic-bezier(0.68, -0.55, 0.265, 1.55)` or similar bounce curves. Dated aesthetic | P2 |
168
+ | 4 | No reduced-motion | Missing `@media (prefers-reduced-motion: reduce)` query. Affects ~35% of adults over 40 | P0 |
169
+ | 5 | No motion tokens | No consistent duration/easing system. Random 200ms/300ms/0.5s values | P2 |
170
+ | 6 | Uncapped stagger | Stagger animation over 10 items or total duration > 500ms | P2 |
171
+ | 7 | Premature will-change | `will-change` set in CSS instead of activated on interaction (wastes GPU memory) | P3 |
172
+ | 8 | No exit animation | Elements appear with animation but disappear instantly | P3 |
173
+ | 9 | Slow feedback | Hover/focus/active feedback slower than 150ms | P2 |
174
+ | 10 | Animation on load | Heavy entrance animations on page load that delay content access | P2 |
175
+
176
+ **Scoring**:
177
+ - 0: Layout animations, no reduced-motion, bounce easing, no system
178
+ - 1: Some transform-based but bad easing, missing reduced-motion
179
+ - 2: Decent animations but no token system or missing reduced-motion
180
+ - 3: Good system with minor gaps (occasional bad easing, missing exit animation)
181
+ - 4: Transform+opacity only, exponential easing, reduced-motion, token system, proper stagger
182
+
183
+ ---
184
+
185
+ ### Dimension 6: Interaction States
186
+
187
+ | # | Check | What to Look For | Severity |
188
+ |---|-------|-------------------|----------|
189
+ | 1 | Missing hover | Interactive elements without `:hover` state (no pointer feedback) | P1 |
190
+ | 2 | Missing focus | Interactive elements without `:focus` state (keyboard users invisible) | P0 |
191
+ | 3 | outline: none | `outline: none` or `outline: 0` without replacement focus indicator | P0 |
192
+ | 4 | No focus-visible | Using `:focus` instead of `:focus-visible` (showing focus ring on mouse click) | P2 |
193
+ | 5 | Missing active | No `:active` / pressed state on buttons/links | P2 |
194
+ | 6 | Missing disabled | No visual distinction for disabled state, or `disabled` without opacity/cursor change | P2 |
195
+ | 7 | Missing loading | Async actions (form submit, API calls) without loading feedback | P1 |
196
+ | 8 | Missing error/success | Forms without error/success state indication | P1 |
197
+ | 9 | Placeholder as label | `placeholder` used as the only label for form inputs (disappears on focus) | P1 |
198
+ | 10 | No empty state | Lists/tables without empty state design (blank space when no data) | P2 |
199
+ | 11 | Focus ring quality | Focus ring not meeting 2px solid accent, offset 2px, 3:1 contrast spec | P2 |
200
+
201
+ **Scoring**:
202
+ - 0: No hover, no focus, outline:none everywhere, no loading states
203
+ - 1: Basic hover but missing focus/active, no loading states
204
+ - 2: Hover + focus exist but no focus-visible, missing some states
205
+ - 3: Most states present with minor gaps (missing empty state, imperfect focus ring)
206
+ - 4: All 8 states implemented, focus-visible, proper focus ring, loading/error/success/empty
207
+
208
+ ---
209
+
210
+ ### Dimension 7: Visual Hierarchy
211
+
212
+ | # | Check | What to Look For | Severity |
213
+ |---|-------|-------------------|----------|
214
+ | 1 | Fails squint test | When page is blurred/squinted, cannot identify 1st and 2nd most important elements | P1 |
215
+ | 2 | Primary action unclear | Cannot identify the primary action within 2 seconds of viewing | P1 |
216
+ | 3 | Size-only hierarchy | Hierarchy established only through font size, not combining size + weight + color + space | P2 |
217
+ | 4 | No information grouping | Related content not grouped by proximity. Equal spacing between related and unrelated items | P2 |
218
+ | 5 | Visual competition | Multiple elements competing for attention at the same visual weight | P1 |
219
+ | 6 | No 3:1 ratio | Less than 3:1 size ratio between major hierarchy levels (e.g., h1 vs body) | P2 |
220
+ | 7 | Decoration over content | Visual decorations (icons, borders, backgrounds) draw more attention than content | P2 |
221
+ | 8 | No progressive disclosure | All information shown at once. No layering of detail (summary -> detail on demand) | P3 |
222
+
223
+ **Scoring**:
224
+ - 0: Everything same visual weight, no clear action, fails squint test
225
+ - 1: Some size differences but no clear hierarchy system
226
+ - 2: Basic hierarchy via size but missing weight/color/space dimensions
227
+ - 3: Good hierarchy with minor issues (occasional visual competition)
228
+ - 4: Clear squint test pass, obvious primary action, multi-dimension hierarchy, progressive disclosure
229
+
230
+ ---
231
+
232
+ ### Dimension 8: Responsive Design
233
+
234
+ | # | Check | What to Look For | Severity |
235
+ |---|-------|-------------------|----------|
236
+ | 1 | Fixed widths | Hard-coded pixel widths that break below certain viewport sizes | P1 |
237
+ | 2 | Horizontal scroll | Content causing horizontal scrollbar on viewports >= 320px | P0 |
238
+ | 3 | Hidden content | Content hidden on mobile via `display:none` instead of being adapted/restructured | P2 |
239
+ | 4 | No container queries | Components that should adapt to container size still using viewport media queries only | P3 |
240
+ | 5 | Small mobile text | Text below 14px on mobile viewports (illegible without zoom) | P1 |
241
+ | 6 | Tiny mobile targets | Touch targets below 44x44px on mobile (frustrating to tap) | P1 |
242
+ | 7 | No breakpoints | Single layout for all viewports. No media queries or responsive grid | P1 |
243
+ | 8 | Broken images | Images that overflow or distort on narrow viewports (missing max-width:100%) | P1 |
244
+ | 9 | No viewport meta | Missing `<meta name="viewport" content="width=device-width, initial-scale=1">` | P0 |
245
+ | 10 | Desktop-first only | Only desktop layout works properly. Mobile is broken or unusable | P1 |
246
+
247
+ **Scoring**:
248
+ - 0: No responsive design, horizontal scroll, broken on mobile
249
+ - 1: Basic media queries but many breakage points
250
+ - 2: Decent mobile but some fixed widths or small targets
251
+ - 3: Good responsive with minor issues (missing container queries, occasional small target)
252
+ - 4: Fluid design, proper breakpoints, container queries, 44px targets, no overflow
253
+
254
+ ---
255
+
256
+ ### Dimension 9: Cognitive Load
257
+
258
+ Evaluate information processing burden per Impeccable's cognitive load principles.
259
+
260
+ | Check | Detection | Score Impact |
261
+ |-------|-----------|-------------|
262
+ | Information overload | >7 distinct data groups visible simultaneously without progressive disclosure | -1 per violation |
263
+ | Choice overload | >5 equally-weighted CTAs in one viewport | -1 |
264
+ | No progressive disclosure | All details shown at once, no expand/collapse or summary→detail | -1 |
265
+ | Redundant copy | Heading text repeated in body paragraph (>50% overlap) | -0.5 |
266
+ | Generic labels | "OK/Submit/Cancel" buttons without verb+object | -0.5 |
267
+ | Error without guidance | Error messages missing what+why+fix formula | -1 |
268
+ | Empty state without action | Data list shows "No data" without create/import guidance | -0.5 |
269
+ | No visual grouping | Related items not proximity-grouped or separated from unrelated | -1 |
270
+
271
+ ### Dimension 10: Dark Mode Quality
272
+
273
+ Only score if dark mode exists. Skip and note "N/A — no dark mode" if not present.
274
+
275
+ | Check | Detection | Score Impact |
276
+ |-------|-----------|-------------|
277
+ | Pure black background | #000 or rgb(0,0,0) as base background | -2 |
278
+ | Same font weights as light | No weight reduction in dark theme | -1 |
279
+ | Saturated accents on dark | Same chroma values as light theme (vibrating colors) | -1 |
280
+ | No surface hierarchy | All dark surfaces same lightness (flat, no depth) | -1 |
281
+ | Dangerous combinations | Gray text on colored bg, saturated red-green adjacent | -1 |
282
+
283
+ ---
284
+
285
+ ## Phase 4: Generate Scan Report
286
+
287
+ Output: `<session>/scan/scan-report.md`
288
+
289
+ Report structure:
290
+
291
+ ```markdown
292
+ # UI Polish Scan Report
293
+
294
+ ## Overall Score: X/36 (<rating-band>)
295
+
296
+ ## Anti-Patterns Verdict (Dimension 1)
297
+ Score: X/4
298
+ <verdict summary -- this section comes FIRST as it is most important>
299
+ <list of detected AI slop tells>
300
+
301
+ ## Per-Dimension Scores
302
+
303
+ | Dimension | Score | Key Finding |
304
+ |-----------|-------|-------------|
305
+ | 1. Anti-Patterns | X/4 | <one-line summary> |
306
+ | 2. Color Quality | X/4 | <one-line summary> |
307
+ | 3. Typography | X/4 | <one-line summary> |
308
+ | 4. Spacing/Layout | X/4 | <one-line summary> |
309
+ | 5. Motion | X/4 | <one-line summary> |
310
+ | 6. Interaction States | X/4 | <one-line summary> |
311
+ | 7. Visual Hierarchy | X/4 | <one-line summary> |
312
+ | 8. Responsive | X/4 | <one-line summary> |
313
+ | 9. Cognitive Load | X/4 | <one-line summary> |
314
+ | 10. Dark Mode | X/4 or N/A | <one-line summary> |
315
+
316
+ ## Issue Inventory
317
+
318
+ ### P0 -- Blocking
319
+ | # | Dimension | Location | Description |
320
+ |---|-----------|----------|-------------|
321
+ | 1 | ... | file:line | ... |
322
+
323
+ ### P1 -- Major
324
+ ...
325
+
326
+ ### P2 -- Minor
327
+ ...
328
+
329
+ ### P3 -- Polish
330
+ ...
331
+
332
+ ## Patterns & Systemic Issues
333
+ <recurring problems that affect multiple locations>
334
+
335
+ ## Positive Findings
336
+ <what works well -- important for optimizer to not break>
337
+
338
+ ## Scan Metadata
339
+ - Target: <target>
340
+ - Files scanned: <count>
341
+ - Screenshots: <yes/no, viewports>
342
+ - Timestamp: <ISO timestamp>
343
+ ```
344
+
345
+ **Rating Bands** (total out of 36, or 40 with dark mode):
346
+ - 32-36: Excellent (36-40 with dark mode)
347
+ - 25-31: Good (29-35 with dark mode)
348
+ - 18-24: Acceptable (22-28 with dark mode)
349
+ - 11-17: Poor (15-21 with dark mode)
350
+ - 0-10: Critical (0-14 with dark mode)
351
+
352
+ After writing the report, send completion message:
353
+ ```
354
+ mcp__ccw-tools__team_msg(session_id, role="scanner", type="scan_complete", content="Scan complete. Score: X/36. P0: N, P1: N, P2: N, P3: N issues found.")
355
+ SendMessage(participant="coordinator", message="[scanner] SCAN-001 complete. Score: X/36 (<rating-band>). Issues: P0=N P1=N P2=N P3=N. Report: <session>/scan/scan-report.md")
356
+ ```