claude-code-workflow 7.2.27 → 7.2.29

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 (416) 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-interactive-craft/SKILL.md +127 -0
  27. package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
  28. package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
  29. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
  30. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
  31. package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
  32. package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
  33. package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
  34. package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
  35. package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
  36. package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
  37. package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
  38. package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
  39. package/.claude/skills/team-motion-design/SKILL.md +129 -0
  40. package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
  41. package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
  42. package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
  43. package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
  44. package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
  45. package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
  46. package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
  47. package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
  48. package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
  49. package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
  50. package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
  51. package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
  52. package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
  53. package/.claude/skills/team-ui-polish/SKILL.md +127 -0
  54. package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
  55. package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
  56. package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
  57. package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
  58. package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
  59. package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
  60. package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
  61. package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
  62. package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
  63. package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
  64. package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
  65. package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
  66. package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
  67. package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
  68. package/.claude/skills/team-uidesign/SKILL.md +6 -1
  69. package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
  70. package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
  71. package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
  72. package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
  73. package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
  74. package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
  75. package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
  76. package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
  77. package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
  78. package/.claude/skills/team-ux-improve/SKILL.md +3 -0
  79. package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
  80. package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
  81. package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
  82. package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
  83. package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
  84. package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
  85. package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
  86. package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
  87. package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
  88. package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
  89. package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
  90. package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
  91. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
  92. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
  93. package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
  94. package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
  95. package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
  96. package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
  97. package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
  98. package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
  99. package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
  100. package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
  101. package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
  102. package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
  103. package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
  104. package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
  105. package/.codex/skills/brainstorm/SKILL.md +3 -3
  106. package/.codex/skills/clean/SKILL.md +3 -3
  107. package/.codex/skills/investigate/agents/investigator.md +392 -0
  108. package/.codex/skills/investigate/orchestrator.md +362 -0
  109. package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
  110. package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
  111. package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
  112. package/.codex/skills/investigate/phases/04-implementation.md +195 -0
  113. package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
  114. package/.codex/skills/issue-discover/SKILL.md +13 -13
  115. package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
  116. package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
  117. package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
  118. package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
  119. package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
  120. package/.codex/skills/review-cycle/SKILL.md +10 -10
  121. package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
  122. package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
  123. package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
  124. package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
  125. package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
  126. package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
  127. package/.codex/skills/security-audit/orchestrator.md +384 -0
  128. package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
  129. package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
  130. package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
  131. package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
  132. package/.codex/skills/ship/agents/ship-operator.md +318 -0
  133. package/.codex/skills/ship/orchestrator.md +426 -0
  134. package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
  135. package/.codex/skills/ship/phases/02-code-review.md +228 -0
  136. package/.codex/skills/ship/phases/03-version-bump.md +259 -0
  137. package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
  138. package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
  139. package/.codex/skills/spec-generator/README.md +1 -1
  140. package/.codex/skills/spec-generator/SKILL.md +184 -88
  141. package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
  142. package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
  143. package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
  144. package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
  145. package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
  146. package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
  147. package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
  148. package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
  149. package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
  150. package/.codex/skills/spec-setup/SKILL.md +4 -4
  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/.codex/skills/workflow-plan/SKILL.md +6 -6
  210. package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
  211. package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
  212. package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
  213. package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
  214. package/README.md +8 -0
  215. package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
  216. package/ccw/dist/core/hooks/hook-templates.js +114 -1
  217. package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
  218. package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
  219. package/ccw/dist/core/routes/cli-routes.js +34 -0
  220. package/ccw/dist/core/routes/cli-routes.js.map +1 -1
  221. package/ccw/dist/core/routes/system-routes.js +2 -2
  222. package/ccw/dist/core/routes/system-routes.js.map +1 -1
  223. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-exlTDW81.js} +3 -3
  224. package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-exlTDW81.js.map} +1 -1
  225. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-cgV9LfAI.js} +2 -2
  226. package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
  227. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
  228. package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
  229. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-Be9xsPiv.js} +2 -2
  230. package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
  231. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
  232. package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
  233. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BrE-oyEq.js} +2 -2
  234. package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
  235. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cd3nrC93.js} +2 -2
  236. package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
  237. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DXFl3VKF.js} +2 -2
  238. package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
  239. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
  240. package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
  241. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-CpDxtmRX.js} +2 -2
  242. package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
  243. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-BchjWe7s.js} +2 -2
  244. package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
  245. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-CbWvaJ0y.js} +2 -2
  246. package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
  247. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-YMjVRiCk.js} +2 -2
  248. package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
  249. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
  250. package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
  251. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BtqzqDVq.js} +2 -2
  252. package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
  253. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
  254. package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
  255. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-BuWpQ7k5.js} +2 -2
  256. package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
  257. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-D0BtMIWy.js} +2 -2
  258. package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
  259. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-C7dwsAKG.js} +2 -2
  260. package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
  261. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-D0nCNaeB.js} +2 -2
  262. package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
  263. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
  264. package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
  265. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-C-S5CehM.js} +2 -2
  266. package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
  267. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-P_B0JVUQ.js} +2 -2
  268. package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
  269. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-S4Jn9LUE.js} +2 -2
  270. package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
  271. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
  272. package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
  273. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
  274. package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
  275. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-YEMjFARX.js} +3 -3
  276. package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
  277. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-DnTm55nG.js} +2 -2
  278. package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
  279. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CUwebtO2.js} +2 -2
  280. package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
  281. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
  282. package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
  283. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-BpgP4087.js} +2 -2
  284. package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-BpgP4087.js.map} +1 -1
  285. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
  286. package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
  287. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
  288. package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
  289. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
  290. package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
  291. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-CYSPdqWk.js} +2 -2
  292. package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-CYSPdqWk.js.map} +1 -1
  293. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-CPh6Zor1.js} +2 -2
  294. package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
  295. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-Ds-8830B.js} +2 -2
  296. package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
  297. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-CJODUxBk.js} +2 -2
  298. package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-CJODUxBk.js.map} +1 -1
  299. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
  300. package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
  301. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-CjwVpw6k.js} +2 -2
  302. package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-CjwVpw6k.js.map} +1 -1
  303. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-2vZa9Ic3.js} +2 -2
  304. package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
  305. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-CUU5XDgT.js} +2 -2
  306. package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
  307. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
  308. package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
  309. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-BwpSRDUa.js} +2 -2
  310. package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-BwpSRDUa.js.map} +1 -1
  311. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-DBzUW1XC.js} +2 -2
  312. package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-DBzUW1XC.js.map} +1 -1
  313. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CGNNsjvE.js} +2 -2
  314. package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
  315. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-D27G86Ul.js} +2 -2
  316. package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-D27G86Ul.js.map} +1 -1
  317. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
  318. package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
  319. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-C6MOB7Au.js} +2 -2
  320. package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-C6MOB7Au.js.map} +1 -1
  321. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-BxfBlZ26.js} +2 -2
  322. package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-BxfBlZ26.js.map} +1 -1
  323. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-NI237wA-.js} +2 -2
  324. package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-NI237wA-.js.map} +1 -1
  325. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-Byn2_2v6.js} +2 -2
  326. package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-Byn2_2v6.js.map} +1 -1
  327. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-D-7PhZjx.js} +2 -2
  328. package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-D-7PhZjx.js.map} +1 -1
  329. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-BoAsK_FL.js} +2 -2
  330. package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-BoAsK_FL.js.map} +1 -1
  331. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-DCSxJIS4.js} +2 -2
  332. package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-DCSxJIS4.js.map} +1 -1
  333. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-CHS3prza.js} +2 -2
  334. package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-CHS3prza.js.map} +1 -1
  335. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-D7K35U7S.js} +2 -2
  336. package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
  337. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-eq9xE07G.js} +2 -2
  338. package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-eq9xE07G.js.map} +1 -1
  339. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-C1DMpBua.js} +2 -2
  340. package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-C1DMpBua.js.map} +1 -1
  341. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-Di5SBCY-.js} +2 -2
  342. package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-Di5SBCY-.js.map} +1 -1
  343. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index--_R7COnA.js} +2 -2
  344. package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index--_R7COnA.js.map} +1 -1
  345. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-BUol9HDD.js} +3 -3
  346. package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-BUol9HDD.js.map} +1 -1
  347. package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-CT9oykfw.js} +2 -2
  348. package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-CT9oykfw.js.map} +1 -1
  349. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-Ddwvf87H.js} +2 -2
  350. package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-Ddwvf87H.js.map} +1 -1
  351. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-LiX0qZbN.js} +2 -2
  352. package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
  353. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-CL3DVEwb.js} +2 -2
  354. package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
  355. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CC5cFeq6.js} +2 -2
  356. package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CC5cFeq6.js.map} +1 -1
  357. package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-ngFQ9bs0.js} +2 -2
  358. package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-ngFQ9bs0.js.map} +1 -1
  359. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-BEU6I0KK.js} +2 -2
  360. package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-BEU6I0KK.js.map} +1 -1
  361. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BWZdLA6y.js} +2 -2
  362. package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BWZdLA6y.js.map} +1 -1
  363. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-K6_Chm7n.js} +2 -2
  364. package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-K6_Chm7n.js.map} +1 -1
  365. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CWkphauf.js} +2 -2
  366. package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CWkphauf.js.map} +1 -1
  367. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-DrNgkamn.js} +2 -2
  368. package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-DrNgkamn.js.map} +1 -1
  369. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CMo3sw5_.js} +2 -2
  370. package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CMo3sw5_.js.map} +1 -1
  371. package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-DppNTW5e.js} +2 -2
  372. package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-DppNTW5e.js.map} +1 -1
  373. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-CD8aPMbZ.js} +2 -2
  374. package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-CD8aPMbZ.js.map} +1 -1
  375. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-B4z90fQD.js} +2 -2
  376. package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-B4z90fQD.js.map} +1 -1
  377. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2-CAKRU_QC.js} +2 -2
  378. package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2-CAKRU_QC.js.map} +1 -1
  379. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-KhI3HrzX.js} +2 -2
  380. package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
  381. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-BtdGIpuq.js} +2 -2
  382. package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-BtdGIpuq.js.map} +1 -1
  383. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-ZoBUkXoD.js} +2 -2
  384. package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-ZoBUkXoD.js.map} +1 -1
  385. package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CltxQP-P.js} +2 -2
  386. package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CltxQP-P.js.map} +1 -1
  387. package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-C32OUSGf.js} +2 -2
  388. package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-C32OUSGf.js.map} +1 -1
  389. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-0IxoyAVZ.js} +2 -2
  390. package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
  391. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-4eKCkyBn.js} +2 -2
  392. package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-4eKCkyBn.js.map} +1 -1
  393. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-zLTUWqhi.js} +2 -2
  394. package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
  395. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-BtN2vpOX.js} +2 -2
  396. package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-BtN2vpOX.js.map} +1 -1
  397. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-_spj49qL.js} +2 -2
  398. package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-_spj49qL.js.map} +1 -1
  399. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-Bm9KFZvd.js} +2 -2
  400. package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
  401. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-DOmpm6v9.js} +2 -2
  402. package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
  403. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-D2rj4rea.js} +2 -2
  404. package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-D2rj4rea.js.map} +1 -1
  405. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-OskEpomF.js} +3 -3
  406. package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-OskEpomF.js.map} +1 -1
  407. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-BjMgsNSF.js} +2 -2
  408. package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
  409. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-CLhyYWa7.js} +2 -2
  410. package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-CLhyYWa7.js.map} +1 -1
  411. package/ccw/frontend/dist/index.html +1 -1
  412. package/package.json +105 -105
  413. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js +0 -150
  414. package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
  415. package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js +0 -7
  416. package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js.map +0 -1
@@ -0,0 +1,246 @@
1
+ ---
2
+ role: fix-implementer
3
+ prefix: FIX
4
+ inner_loop: true
5
+ message_types: [state_update]
6
+ ---
7
+
8
+ # Accessibility Fix Implementer
9
+
10
+ Implement accessibility fixes from the remediation plan. OKLCH color corrections, focus styles, ARIA attributes, reduced-motion queries, typography adjustments. Apply fixes in priority order (critical first) and self-validate results.
11
+
12
+ ## Phase 2: Context & Artifact Loading
13
+
14
+ | Input | Source | Required |
15
+ |-------|--------|----------|
16
+ | Task description | From task subject/description | Yes |
17
+ | Session path | Extracted from task description | Yes |
18
+ | Remediation plan | <session>/remediation/remediation-plan.md | Yes |
19
+ | Color audit report | <session>/audits/color/color-audit-001.md | Yes |
20
+ | Focus audit report | <session>/audits/focus/focus-audit-001.md | Yes |
21
+ | Typography audit report | <session>/audits/typography/typo-audit-001.md | Yes |
22
+ | .msg/meta.json | <session>/.msg/meta.json | Yes |
23
+ | Re-audit reports (GC loop) | <session>/re-audit/*.md | Only for FIX-002+ |
24
+
25
+ 1. Extract session path from task description
26
+ 2. Read remediation plan -- this is the primary work instruction
27
+ 3. Parse priority matrix for ordered fix list
28
+ 4. Read audit reports for detailed context on each issue
29
+ 5. For FIX-002+ (GC loop): read re-audit reports for remaining issues
30
+
31
+ ## Phase 3: Fix Implementation
32
+
33
+ Apply fixes in priority order: Critical -> High -> Medium -> Low.
34
+
35
+ ### Category 1: OKLCH Color Corrections
36
+
37
+ **Goal**: Adjust OKLCH lightness/chroma to meet contrast requirements.
38
+
39
+ **Process**:
40
+ 1. Read remediation plan for specific color changes needed
41
+ 2. Locate CSS custom properties or color definitions in source files
42
+ 3. Apply lightness adjustments:
43
+ - Text too light -> decrease L% (e.g., L 55% -> L 35%)
44
+ - Background too dark -> increase L% (e.g., L 80% -> L 92%)
45
+ - Maintain hue (H) and adjust chroma (C) minimally
46
+ 4. Verify new contrast ratios meet WCAG target
47
+ 5. If dark mode exists, apply corresponding adjustments
48
+
49
+ **Example**:
50
+ ```css
51
+ /* Before: contrast 3.2:1 */
52
+ --color-text: oklch(55% 0 0);
53
+ --color-bg: oklch(98% 0 0);
54
+
55
+ /* After: contrast 7.2:1 (AAA) */
56
+ --color-text: oklch(25% 0 0);
57
+ --color-bg: oklch(98% 0 0);
58
+ ```
59
+
60
+ ### Category 2: Focus Styles
61
+
62
+ **Goal**: Add visible, high-contrast focus indicators for keyboard users.
63
+
64
+ **Process**:
65
+ 1. Add `:focus-visible` rules per specs/focus-patterns.md:
66
+ ```css
67
+ :focus-visible {
68
+ outline: 2px solid var(--color-accent);
69
+ outline-offset: 2px;
70
+ }
71
+ :focus:not(:focus-visible) {
72
+ outline: none;
73
+ }
74
+ ```
75
+ 2. Remove bare `outline: none` or `outline: 0` that suppress focus without alternative
76
+ 3. Verify focus indicator contrast >= 3:1 against adjacent colors
77
+ 4. Add consistent focus style across all interactive elements
78
+
79
+ ### Category 3: ARIA Attributes
80
+
81
+ **Goal**: Add missing ARIA roles, states, and properties.
82
+
83
+ **Process**:
84
+ 1. Add `role` attributes where semantic HTML is not used:
85
+ - `<div onclick>` -> add `role="button"` and `tabindex="0"`
86
+ - Custom widgets -> appropriate ARIA role
87
+ 2. Add state attributes:
88
+ - Toggle buttons: `aria-pressed="true|false"`
89
+ - Expandable: `aria-expanded="true|false"`, `aria-controls="panel-id"`
90
+ - Dialogs: `role="dialog"`, `aria-modal="true"`, `aria-labelledby="title-id"`
91
+ 3. Add labels:
92
+ - `aria-label` for icon-only buttons
93
+ - `aria-labelledby` for dialogs and sections
94
+ - `aria-describedby` for form error messages
95
+ 4. Add live regions:
96
+ - Status messages: `aria-live="polite"`
97
+ - Error messages: `aria-live="assertive"`
98
+
99
+ ### Category 4: Reduced-Motion Queries
100
+
101
+ **Goal**: Respect user's motion preferences.
102
+
103
+ **Process**:
104
+ 1. Wrap animations and transitions in media query:
105
+ ```css
106
+ @media (prefers-reduced-motion: reduce) {
107
+ *,
108
+ *::before,
109
+ *::after {
110
+ animation-duration: 0.01ms !important;
111
+ animation-iteration-count: 1 !important;
112
+ transition-duration: 0.01ms !important;
113
+ scroll-behavior: auto !important;
114
+ }
115
+ }
116
+ ```
117
+ 2. Or per-element: disable specific animations while keeping layout
118
+ 3. Ensure no content is lost when motion is reduced
119
+
120
+ ### Category 5: Typography Adjustments
121
+
122
+ **Goal**: Fix font sizes, line heights, and reading widths.
123
+
124
+ **Process**:
125
+ 1. Replace fixed font sizes with responsive clamp():
126
+ ```css
127
+ body { font-size: clamp(1rem, 1vw + 0.875rem, 1.25rem); }
128
+ ```
129
+ 2. Fix line-height to acceptable ranges:
130
+ ```css
131
+ body { line-height: 1.625; }
132
+ h1, h2, h3 { line-height: 1.2; }
133
+ ```
134
+ 3. Add max-width for reading containers:
135
+ ```css
136
+ .content { max-width: 70ch; }
137
+ ```
138
+
139
+ ### Category 6: Skip Link
140
+
141
+ **Goal**: Add skip-to-main-content link if missing.
142
+
143
+ **Process** (per specs/focus-patterns.md):
144
+ 1. Add as first child of `<body>`:
145
+ ```html
146
+ <a href="#main" class="skip-link">Skip to main content</a>
147
+ ```
148
+ 2. Add CSS:
149
+ ```css
150
+ .skip-link {
151
+ position: absolute;
152
+ left: -9999px;
153
+ top: auto;
154
+ }
155
+ .skip-link:focus {
156
+ position: fixed;
157
+ left: 16px;
158
+ top: 16px;
159
+ z-index: 9999;
160
+ background: var(--color-paper, #fff);
161
+ color: var(--color-ink, #000);
162
+ padding: 8px 16px;
163
+ border-radius: 4px;
164
+ text-decoration: underline;
165
+ }
166
+ ```
167
+ 3. Ensure main content has `id="main"` (or equivalent target)
168
+
169
+ ### Category 7: Focus Trap for Modals
170
+
171
+ **Goal**: Implement proper focus management in dialogs.
172
+
173
+ **Process** (per specs/focus-patterns.md):
174
+ 1. On dialog open:
175
+ - Store `document.activeElement` as return target
176
+ - Move focus to first focusable element within dialog
177
+ 2. Trap Tab/Shift+Tab within dialog:
178
+ - Collect all focusable elements within dialog
179
+ - On Tab at last element -> focus first element
180
+ - On Shift+Tab at first element -> focus last element
181
+ 3. On Escape -> close dialog, restore focus to stored element
182
+ 4. Set `aria-modal="true"` on dialog container
183
+ 5. Optional: set `inert` on background content
184
+
185
+ ## Phase 4: Self-Validation & Output
186
+
187
+ 1. Validate each fix category:
188
+
189
+ | Category | Validation Method |
190
+ |----------|------------------|
191
+ | Color | Recalculate contrast ratios for changed colors, verify >= target |
192
+ | Focus | Search for :focus-visible rules, verify no bare outline:none |
193
+ | ARIA | Check all dialogs have role+aria-modal, all buttons have labels |
194
+ | Motion | Verify prefers-reduced-motion media query exists |
195
+ | Typography | Check clamp() minimum >= 1rem, line-height in range |
196
+ | Skip link | Verify skip link element exists, CSS hides then shows on focus |
197
+ | Focus trap | Verify dialog has focus management code |
198
+
199
+ 2. Write fix summary to `<session>/fixes/fix-summary-{NNN}.md`:
200
+
201
+ ```markdown
202
+ # Fix Summary - {NNN}
203
+ [fix-implementer]
204
+
205
+ ## Overview
206
+ - **Total fixes applied**: {count}
207
+ - **Critical fixed**: {count}
208
+ - **High fixed**: {count}
209
+ - **Medium fixed**: {count}
210
+ - **Files modified**: {count}
211
+
212
+ ## Fixes Applied
213
+
214
+ ### Fix 1: Color contrast (Critical, WCAG 1.4.3)
215
+ - **File**: `src/styles/globals.css:12`
216
+ - **Before**: `--color-text: oklch(55% 0 0)` (contrast 3.2:1)
217
+ - **After**: `--color-text: oklch(25% 0 0)` (contrast 7.2:1)
218
+ - **Validated**: PASS
219
+
220
+ ### Fix 2: Focus indicators (High, WCAG 2.4.7)
221
+ - **File**: `src/styles/globals.css:45`
222
+ - **Before**: No :focus-visible rules
223
+ - **After**: Added :focus-visible with 2px outline
224
+ - **Validated**: PASS
225
+
226
+ ...
227
+
228
+ ## Files Modified
229
+ | File | Changes |
230
+ |------|---------|
231
+ | src/styles/globals.css | Color adjustments, focus styles, reduced-motion |
232
+ | src/components/Modal.tsx | Focus trap, ARIA attributes |
233
+ | src/app/layout.tsx | Skip link |
234
+
235
+ ## Remaining Issues
236
+ - {Any medium/low issues not addressed in this round}
237
+
238
+ ## Verification Status
239
+ - [ ] Color contrast: {n}/{total} passing
240
+ - [ ] Focus indicators: {n}/{total} visible
241
+ - [ ] ARIA coverage: {n}/{total} complete
242
+ - [ ] Typography: {n}/{total} compliant
243
+ ```
244
+
245
+ 3. Update `<session>/.msg/meta.json` under `fix-implementer` namespace:
246
+ - Read existing -> merge `{ "fix-implementer": { fix_id, total_fixes, critical_fixed, high_fixed, medium_fixed, files_modified, timestamp } }` -> write back
@@ -0,0 +1,222 @@
1
+ ---
2
+ role: focus-auditor
3
+ prefix: FOCUS
4
+ inner_loop: false
5
+ message_types: [state_update]
6
+ ---
7
+
8
+ # Focus & Keyboard Accessibility Auditor
9
+
10
+ Focus-visible completeness audit. Tab order, focus indicator visibility (3:1 contrast), skip link, focus traps, ARIA live regions, keyboard operability. Produce detailed focus audit report with element-by-element analysis.
11
+
12
+ ## Phase 2: Context & Environment Detection
13
+
14
+ | Input | Source | Required |
15
+ |-------|--------|----------|
16
+ | Task description | From task subject/description | Yes |
17
+ | Session path | Extracted from task description | Yes |
18
+ | Target (URL or file paths) | From task description CONTEXT | Yes |
19
+ | WCAG level (AA/AAA) | From task description CONTEXT | Yes |
20
+ | .msg/meta.json | <session>/.msg/meta.json | No |
21
+ | Previous audit (re-audit) | <session>/audits/focus/focus-audit-*.md | Only for FOCUS-002+ |
22
+
23
+ 1. Extract session path, target, and WCAG level from task description
24
+ 2. Determine audit type from subject: FOCUS-001 -> initial audit, FOCUS-002+ -> re-audit (verification)
25
+ 3. Identify target:
26
+ - URL -> use Chrome DevTools for interactive focus testing
27
+ - File paths -> read HTML/JSX/Vue/Svelte files for interactive elements
28
+ - Full site -> enumerate pages from navigation/routes
29
+ 4. For re-audit: read previous audit report and fix summary for comparison baseline
30
+ 5. Read focus patterns from specs/focus-patterns.md for reference
31
+
32
+ ## Phase 3: Focus Audit Execution
33
+
34
+ ### Step 1: Interactive Element Inventory
35
+
36
+ **Static analysis** (always):
37
+ - Glob for HTML/JSX/TSX/Vue/Svelte files
38
+ - Extract all interactive elements:
39
+ - Native focusable: `<a href>`, `<button>`, `<input>`, `<select>`, `<textarea>`, `<details>`
40
+ - Custom focusable: elements with `tabindex`, `role="button"`, `role="link"`, `role="tab"`, etc.
41
+ - Modals/dialogs: `role="dialog"`, `role="alertdialog"`, `<dialog>`
42
+ - Dynamic content areas: `aria-live`, `role="status"`, `role="alert"`
43
+ - Record source location (file:line) and context for each element
44
+
45
+ **Runtime analysis** (if Chrome DevTools available):
46
+ - `mcp__chrome-devtools__navigate_page({ url: "<target-url>" })`
47
+ - `mcp__chrome-devtools__evaluate_script({ expression: "..." })` to:
48
+ - Enumerate all focusable elements in DOM order
49
+ - Check `tabindex` values (0, -1, positive)
50
+ - Detect focus traps (elements that prevent Tab from escaping)
51
+
52
+ ### Step 2: Tab Order Audit
53
+
54
+ | Check | Criterion | Standard |
55
+ |-------|-----------|----------|
56
+ | Logical sequence | Tab order follows visual/reading order | WCAG 2.4.3 |
57
+ | No positive tabindex | `tabindex > 0` is an anti-pattern | Best practice |
58
+ | No tab traps | Tab can escape all containers (except modals) | WCAG 2.1.2 |
59
+ | Skip link first | First focusable element is skip-to-content link | WCAG 2.4.1 |
60
+ | All interactive reachable | Every interactive element reachable via Tab | WCAG 2.1.1 |
61
+
62
+ Flag:
63
+ - `tabindex > 0` (disrupts natural tab order)
64
+ - `tabindex="-1"` on elements that should be focusable
65
+ - Missing `tabindex="0"` on custom interactive elements
66
+ - `outline: none` or `outline: 0` without alternative focus indicator
67
+
68
+ ### Step 3: Focus Indicator Visibility
69
+
70
+ Per specs/focus-patterns.md:
71
+
72
+ | Check | Requirement | Standard |
73
+ |-------|-------------|----------|
74
+ | Outline present | At least 2px outline on :focus-visible | WCAG 2.4.7 |
75
+ | Outline contrast | >= 3:1 against adjacent colors | WCAG 2.4.11 |
76
+ | :focus-visible used | Keyboard focus distinct from mouse click | Best practice |
77
+ | Not obscured | Focus indicator not hidden by overlays, sticky headers | WCAG 2.4.11 |
78
+ | Consistent style | Same focus style across similar elements | Best practice |
79
+
80
+ **CSS analysis**:
81
+ - Search for `:focus`, `:focus-visible`, `:focus-within` rules
82
+ - Check for `outline: none` / `outline: 0` without alternative (box-shadow, border)
83
+ - Verify `:focus:not(:focus-visible) { outline: none; }` pattern (mouse click suppression)
84
+ - Calculate focus indicator contrast against adjacent background
85
+
86
+ ### Step 4: Skip Link Audit
87
+
88
+ | Check | Requirement |
89
+ |-------|-------------|
90
+ | Exists | `<a href="#main">` or similar as first focusable element |
91
+ | Visually hidden until focus | `position: absolute; left: -9999px` pattern |
92
+ | Visible on focus | Repositions on `:focus` to visible area |
93
+ | Target exists | `#main` or target ID exists in DOM |
94
+ | Functional | Focus moves to main content on activation |
95
+
96
+ ### Step 5: Focus Trap Audit (Modals/Dialogs)
97
+
98
+ Per specs/focus-patterns.md:
99
+
100
+ | Check | Requirement | Standard |
101
+ |-------|-------------|----------|
102
+ | Focus moves to dialog | On open, focus moves to first focusable or dialog itself | ARIA Practices |
103
+ | Tab cycles within | Tab/Shift+Tab stay within dialog focusable elements | ARIA Practices |
104
+ | Escape closes | Escape key closes dialog | ARIA Practices |
105
+ | Focus restores | On close, focus returns to trigger element | ARIA Practices |
106
+ | Background inert | Background content not focusable while dialog open | Best practice |
107
+ | Scroll lock | Background scroll locked while dialog open | Best practice |
108
+
109
+ ### Step 6: ARIA Audit
110
+
111
+ | Element Type | Required ARIA | Standard |
112
+ |-------------|--------------|----------|
113
+ | Buttons | `role="button"` (if not `<button>`), `aria-pressed` (toggle), `aria-expanded` (disclosure) | WCAG 4.1.2 |
114
+ | Dialogs | `role="dialog"`, `aria-modal="true"`, `aria-labelledby` | ARIA Practices |
115
+ | Navigation | `role="navigation"` (if not `<nav>`), `aria-label` for multiple nav regions | WCAG 4.1.2 |
116
+ | Live regions | `aria-live="polite"` (status), `aria-live="assertive"` (errors) | WCAG 4.1.3 |
117
+ | Forms | `aria-required`, `aria-invalid`, `aria-describedby` for errors | WCAG 4.1.2 |
118
+ | Tabs | `role="tablist"`, `role="tab"`, `role="tabpanel"`, `aria-selected` | ARIA Practices |
119
+ | Accordions | `aria-expanded`, `aria-controls` | ARIA Practices |
120
+
121
+ ### Step 7: Keyboard Operability
122
+
123
+ | Element | Expected Keys | Standard |
124
+ |---------|--------------|----------|
125
+ | Links/buttons | Enter activates | WCAG 2.1.1 |
126
+ | Buttons | Space activates | WCAG 2.1.1 |
127
+ | Checkboxes | Space toggles | WCAG 2.1.1 |
128
+ | Radio groups | Arrow keys navigate within group | ARIA Practices |
129
+ | Tabs | Arrow keys switch tabs, Tab moves to panel | ARIA Practices |
130
+ | Menus | Arrow keys navigate, Enter selects, Escape closes | ARIA Practices |
131
+ | Sliders | Arrow keys adjust value | ARIA Practices |
132
+
133
+ ### Input Method Awareness
134
+
135
+ | Check | Requirement |
136
+ |-------|-------------|
137
+ | Hover guard | `:hover` styles wrapped in `@media(hover:hover)` — touch devices don't hover |
138
+ | Pointer detection | `@media(pointer:coarse)` used for larger touch targets (48px+) |
139
+ | Focus-visible distinction | `:focus-visible` for keyboard only, not mouse clicks |
140
+ | Touch target sizing | All interactive elements >= 44x44px on `pointer:coarse` devices |
141
+
142
+ ### Step 8: Target Size (WCAG 2.5.8)
143
+
144
+ | Check | Requirement | Standard |
145
+ |-------|-------------|----------|
146
+ | Interactive elements | Minimum 24x24px CSS pixels | WCAG 2.5.8 AA |
147
+ | Inline links | Exempt if within text paragraph | Exception |
148
+ | Spacing | At least 24px between targets OR targets themselves >= 24px | WCAG 2.5.8 |
149
+
150
+ ## Phase 4: Report Generation & Output
151
+
152
+ 1. Write audit report to `<session>/audits/focus/focus-audit-{NNN}.md` (or `<session>/re-audit/focus-audit-{NNN}.md` for re-audits):
153
+
154
+ ```markdown
155
+ # Focus & Keyboard Accessibility Audit - {NNN}
156
+ [focus-auditor]
157
+
158
+ ## Summary
159
+ - **Total interactive elements**: {count}
160
+ - **Pass**: {pass_count} | **Fail**: {fail_count}
161
+ - **WCAG Level**: {AA|AAA}
162
+ - **Critical issues**: {count}
163
+ - **High issues**: {count}
164
+
165
+ ## Tab Order
166
+ | # | Element | Type | tabindex | Logical | Status |
167
+ |---|---------|------|----------|---------|--------|
168
+ | 1 | Skip link | <a> | 0 | Yes | PASS |
169
+ | 2 | Logo link | <a> | 0 | Yes | PASS |
170
+ | ... | ... | ... | ... | ... | ... |
171
+
172
+ ## Focus Indicators
173
+ | Element | :focus-visible | Outline | Contrast | Obscured | Status |
174
+ |---------|---------------|---------|----------|----------|--------|
175
+ | ... | yes/no | Xpx solid | X:1 | no | PASS/FAIL |
176
+
177
+ ## Skip Link
178
+ | Check | Status | Details |
179
+ |-------|--------|---------|
180
+ | Exists | PASS/FAIL | ... |
181
+ | Hidden until focus | PASS/FAIL | ... |
182
+ | Target exists | PASS/FAIL | ... |
183
+
184
+ ## Focus Traps (Modals/Dialogs)
185
+ | Dialog | Focus on open | Tab cycles | Escape closes | Focus restores | Status |
186
+ |--------|-------------|-----------|--------------|---------------|--------|
187
+ | ... | yes/no | yes/no | yes/no | yes/no | PASS/FAIL |
188
+
189
+ ## ARIA Coverage
190
+ | Element | Role | Label | States | Status |
191
+ |---------|------|-------|--------|--------|
192
+ | ... | ... | ... | ... | PASS/FAIL |
193
+
194
+ ## Keyboard Operability
195
+ | Element | Enter | Space | Arrows | Escape | Status |
196
+ |---------|-------|-------|--------|--------|--------|
197
+ | ... | yes/no | yes/no | n/a | n/a | PASS/FAIL |
198
+
199
+ ## Target Size
200
+ | Element | Size | Min 24x24 | Status |
201
+ |---------|------|----------|--------|
202
+ | ... | WxH | yes/no | PASS/FAIL |
203
+
204
+ ## Issues (by severity)
205
+ ### Critical
206
+ - ...
207
+ ### High
208
+ - ...
209
+ ### Medium
210
+ - ...
211
+ ```
212
+
213
+ 2. For re-audit (FOCUS-002+), add before/after comparison section:
214
+ ```markdown
215
+ ## Before/After Comparison
216
+ | Element | Before | After | Status |
217
+ |---------|--------|-------|--------|
218
+ | ... | FAIL (no outline) | PASS (2px solid) | FIXED |
219
+ ```
220
+
221
+ 3. Update `<session>/.msg/meta.json` under `focus-auditor` namespace:
222
+ - Read existing -> merge `{ "focus-auditor": { audit_id, total_elements, pass_count, fail_count, critical_count, high_count, skip_link_present, focus_traps_valid, timestamp } }` -> write back
@@ -0,0 +1,206 @@
1
+ ---
2
+ role: remediation-planner
3
+ prefix: REMED
4
+ inner_loop: false
5
+ message_types: [state_update]
6
+ ---
7
+
8
+ # Remediation Planner
9
+
10
+ Synthesize findings from all 3 audit reports (color, typography, focus) into a prioritized remediation plan with code-level fix guidance. Map each issue to WCAG success criterion, estimate effort, and group by file/component for efficient fixing.
11
+
12
+ ## Phase 2: Context & Artifact Loading
13
+
14
+ | Input | Source | Required |
15
+ |-------|--------|----------|
16
+ | Task description | From task subject/description | Yes |
17
+ | Session path | Extracted from task description | Yes |
18
+ | Color audit report | <session>/audits/color/color-audit-001.md | Yes |
19
+ | Typography audit report | <session>/audits/typography/typo-audit-001.md | Yes |
20
+ | Focus audit report | <session>/audits/focus/focus-audit-001.md | Yes |
21
+ | WCAG level (AA/AAA) | From task description CONTEXT | Yes |
22
+ | .msg/meta.json | <session>/.msg/meta.json | Yes |
23
+
24
+ 1. Extract session path and WCAG level from task description
25
+ 2. Read ALL 3 audit reports -- all must exist (REMED-001 is blocked by all 3 auditors)
26
+ 3. Parse each report for:
27
+ - Issues by severity (Critical/High/Medium)
28
+ - Specific elements and file:line locations
29
+ - Current values vs required values
30
+ 4. Read meta.json for auditor summary stats
31
+
32
+ ## Phase 3: Remediation Plan Synthesis
33
+
34
+ ### Step 1: Issue Collection & Deduplication
35
+
36
+ Collect all issues from 3 audit reports:
37
+
38
+ | Source | Issue Types |
39
+ |--------|------------|
40
+ | Color audit | Contrast failures, OKLCH range violations, color blindness risks, dark mode gaps |
41
+ | Typography audit | Size violations, line-height issues, reading width, clamp() failures, font loading |
42
+ | Focus audit | Missing focus indicators, tab order issues, missing ARIA, keyboard gaps, skip link, target size |
43
+
44
+ Deduplicate:
45
+ - Same element flagged by multiple auditors -> merge into single issue with multiple aspects
46
+ - Same CSS rule causing multiple failures -> group under single fix
47
+
48
+ ### Step 2: Severity Classification
49
+
50
+ | Severity | Criteria | Examples |
51
+ |----------|----------|---------|
52
+ | Critical | Blocks usage for impaired users, WCAG A violation | No keyboard access, contrast < 2:1, focus trap with no escape |
53
+ | High | Degrades experience significantly, WCAG AA violation | Contrast 3:1-4.5:1 on body text, missing skip link, no focus indicator |
54
+ | Medium | Non-compliance but usable, WCAG AAA-only violation | Contrast between AA and AAA thresholds, suboptimal reading width |
55
+ | Low | Enhancement, best practice | Font loading optimization, letter-spacing refinement |
56
+
57
+ ### Step 3: Prioritization & Grouping
58
+
59
+ Group by file/component for efficient fixing:
60
+
61
+ ```
62
+ File: src/styles/globals.css
63
+ [CRITICAL] Color: --text-primary contrast 3.2:1 (need 4.5:1) -> WCAG 1.4.3
64
+ [HIGH] Focus: No :focus-visible on buttons -> WCAG 2.4.7
65
+ [MEDIUM] Typography: line-height 1.4 on body (need 1.5) -> WCAG 1.4.12
66
+
67
+ File: src/components/Modal.tsx
68
+ [CRITICAL] Focus: No focus trap in modal -> WCAG 2.1.2
69
+ [HIGH] ARIA: Missing aria-modal="true" -> WCAG 4.1.2
70
+ ```
71
+
72
+ Priority order within each file: Critical -> High -> Medium -> Low.
73
+
74
+ ### Step 4: Code-Level Fix Guidance
75
+
76
+ For each issue, provide specific fix:
77
+
78
+ **Color fixes**:
79
+ ```css
80
+ /* Before: contrast 3.2:1 */
81
+ --text-primary: oklch(55% 0 0);
82
+ /* After: contrast 5.1:1 -- adjust lightness down */
83
+ --text-primary: oklch(35% 0 0);
84
+ ```
85
+
86
+ **Focus fixes**:
87
+ ```css
88
+ /* Add :focus-visible to interactive elements */
89
+ button:focus-visible,
90
+ a:focus-visible {
91
+ outline: 2px solid var(--color-accent);
92
+ outline-offset: 2px;
93
+ }
94
+ button:focus:not(:focus-visible) {
95
+ outline: none;
96
+ }
97
+ ```
98
+
99
+ **ARIA fixes**:
100
+ ```html
101
+ <!-- Before -->
102
+ <div class="modal">
103
+ <!-- After -->
104
+ <div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
105
+ ```
106
+
107
+ **Typography fixes**:
108
+ ```css
109
+ /* Before: fixed font-size */
110
+ body { font-size: 14px; }
111
+ /* After: responsive with floor */
112
+ body { font-size: clamp(1rem, 1vw + 0.875rem, 1.25rem); line-height: 1.625; }
113
+ ```
114
+
115
+ ### Step 5: Effort Estimation
116
+
117
+ | Effort | Criteria |
118
+ |--------|----------|
119
+ | Trivial (< 5 min) | Single CSS property change (contrast, outline) |
120
+ | Small (5-15 min) | Multiple CSS changes in one file, add ARIA attributes |
121
+ | Medium (15-60 min) | Focus trap implementation, skip link, keyboard navigation |
122
+ | Large (1-4 hours) | Responsive typography overhaul, dark mode color parity |
123
+
124
+ ### Step 6: WCAG Criterion Mapping
125
+
126
+ Map every issue to specific WCAG success criterion:
127
+
128
+ | Issue Domain | Common Criteria |
129
+ |-------------|----------------|
130
+ | Color contrast | 1.4.3 (AA), 1.4.6 (AAA), 1.4.11 (non-text) |
131
+ | Typography | 1.4.4 (resize), 1.4.12 (text spacing) |
132
+ | Focus indicators | 2.4.7 (visible), 2.4.11 (not obscured) |
133
+ | Keyboard | 2.1.1 (keyboard), 2.1.2 (no trap) |
134
+ | Tab order | 2.4.3 (focus order) |
135
+ | Skip link | 2.4.1 (bypass blocks) |
136
+ | ARIA | 4.1.2 (name/role/value) |
137
+ | Target size | 2.5.8 (target size) |
138
+ | Live regions | 4.1.3 (status messages) |
139
+
140
+ ## Phase 4: Validation & Output
141
+
142
+ 1. Validate plan completeness:
143
+
144
+ | Check | Requirement |
145
+ |-------|-------------|
146
+ | All critical issues addressed | Every critical issue has a fix |
147
+ | All high issues addressed | Every high issue has a fix |
148
+ | File grouping complete | Every fix maps to specific file:line |
149
+ | WCAG mapping complete | Every fix maps to WCAG criterion |
150
+ | No orphan issues | Every audit issue appears in plan |
151
+
152
+ 2. Write remediation plan to `<session>/remediation/remediation-plan.md`:
153
+
154
+ ```markdown
155
+ # Remediation Plan
156
+ [remediation-planner]
157
+
158
+ ## Executive Summary
159
+ - **Total issues**: {count} (Critical: {n}, High: {n}, Medium: {n}, Low: {n})
160
+ - **Files affected**: {count}
161
+ - **Estimated total effort**: {hours}
162
+ - **WCAG target**: {AA|AAA}
163
+
164
+ ## Priority Matrix
165
+ | # | Severity | Domain | WCAG | File | Issue | Fix | Effort |
166
+ |---|----------|--------|------|------|-------|-----|--------|
167
+ | 1 | Critical | Color | 1.4.3 | globals.css:12 | Contrast 3.2:1 | L 55% -> 35% | Trivial |
168
+ | 2 | Critical | Focus | 2.1.2 | Modal.tsx:45 | No focus trap | Add trap logic | Medium |
169
+ | ... | ... | ... | ... | ... | ... | ... | ... |
170
+
171
+ ## Fixes by File
172
+
173
+ ### `src/styles/globals.css`
174
+ #### Fix 1: Color contrast (Critical, WCAG 1.4.3)
175
+ - **Current**: `--text-primary: oklch(55% 0 0);` (contrast 3.2:1)
176
+ - **Target**: `--text-primary: oklch(35% 0 0);` (contrast 5.1:1)
177
+ - **Effort**: Trivial
178
+
179
+ #### Fix 2: Focus indicators (High, WCAG 2.4.7)
180
+ - **Current**: No :focus-visible rules
181
+ - **Target**: Add :focus-visible with 2px outline
182
+ - **Effort**: Small
183
+
184
+ ### `src/components/Modal.tsx`
185
+ #### Fix 3: Focus trap (Critical, WCAG 2.1.2)
186
+ - **Current**: No focus management
187
+ - **Target**: Implement focus trap (store activeElement, cycle Tab, Escape to close)
188
+ - **Effort**: Medium
189
+
190
+ ## Implementation Order
191
+ 1. All Critical fixes (blocks usage)
192
+ 2. All High fixes (degrades experience)
193
+ 3. Medium fixes (non-compliance)
194
+ 4. Low fixes (enhancements)
195
+
196
+ ## Verification Checklist
197
+ - [ ] All color combinations pass WCAG {level} contrast
198
+ - [ ] All interactive elements have visible focus indicators
199
+ - [ ] Tab order is logical with no traps (except modals)
200
+ - [ ] Skip link present and functional
201
+ - [ ] All ARIA roles and states correct
202
+ - [ ] Typography meets minimum sizes at all breakpoints
203
+ ```
204
+
205
+ 3. Update `<session>/.msg/meta.json` under `remediation-planner` namespace:
206
+ - Read existing -> merge `{ "remediation-planner": { total_issues, critical, high, medium, low, files_affected, estimated_effort, timestamp } }` -> write back