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.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-arch-opt/SKILL.md +1 -1
- package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +3 -1
- package/.claude/skills/team-arch-opt/roles/refactorer/role.md +3 -1
- package/.claude/skills/team-arch-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-coordinate/SKILL.md +4 -3
- package/.claude/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +1 -1
- package/.claude/skills/team-coordinate/roles/coordinator/commands/dispatch.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/commands/monitor.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/role.md +16 -15
- package/.claude/skills/team-coordinate/specs/pipelines.md +7 -4
- package/.claude/skills/team-coordinate/specs/role-spec-template.md +1 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-lifecycle-v4/SKILL.md +1 -1
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +14 -2
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +24 -2
- package/.claude/skills/team-lifecycle-v4/roles/executor/role.md +3 -1
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-perf-opt/SKILL.md +1 -1
- package/.claude/skills/team-perf-opt/roles/optimizer/role.md +3 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/executor/role.md +3 -1
- package/.claude/skills/team-testing/SKILL.md +1 -1
- package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +5 -2
- package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-testing/roles/executor/role.md +3 -1
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# AI Slop Detection Catalog
|
|
2
|
+
|
|
3
|
+
20 visual anti-patterns commonly produced by AI code generation. Use during scanning to flag design quality issues.
|
|
4
|
+
|
|
5
|
+
### 1. AI Color Palette
|
|
6
|
+
- **Pattern**: Cyan (#00d4ff, #06b6d4), purple-blue gradients on dark backgrounds as default aesthetic
|
|
7
|
+
- **Detection**: Search for cyan/teal hex values, linear-gradient with blue-purple stops on dark bg
|
|
8
|
+
- **Severity**: P1
|
|
9
|
+
|
|
10
|
+
### 2. Gradient Text
|
|
11
|
+
- **Pattern**: `background-clip: text` + `-webkit-text-fill-color: transparent` on headings or metric values
|
|
12
|
+
- **Detection**: Grep for `background-clip:\s*text` or `-webkit-background-clip:\s*text`
|
|
13
|
+
- **Severity**: P1
|
|
14
|
+
|
|
15
|
+
### 3. Default Dark Mode + Glow
|
|
16
|
+
- **Pattern**: Dark background (#0a0a0a, #111) with neon accent colors and box-shadow glow effects
|
|
17
|
+
- **Detection**: Dark bg colors + box-shadow with colored spread on interactive elements
|
|
18
|
+
- **Severity**: P2
|
|
19
|
+
|
|
20
|
+
### 4. Glassmorphism Everywhere
|
|
21
|
+
- **Pattern**: `backdrop-filter: blur()` applied to more than 2 components
|
|
22
|
+
- **Detection**: Count occurrences of `backdrop-filter:\s*blur` across components
|
|
23
|
+
- **Severity**: P1
|
|
24
|
+
|
|
25
|
+
### 5. Hero Metric Layout
|
|
26
|
+
- **Pattern**: Large number + small label arranged in card grid, dashboard-style metrics as default layout
|
|
27
|
+
- **Detection**: Pattern of large font-size number + small text label repeated 3+ times in grid
|
|
28
|
+
- **Severity**: P2
|
|
29
|
+
|
|
30
|
+
### 6. Identical Card Grids
|
|
31
|
+
- **Pattern**: 3+ cards with identical size, structure, and visual weight
|
|
32
|
+
- **Detection**: Repeated card components with same dimensions and no visual differentiation
|
|
33
|
+
- **Severity**: P2
|
|
34
|
+
|
|
35
|
+
### 7. Nested Cards
|
|
36
|
+
- **Pattern**: Border/shadow container inside another border/shadow container
|
|
37
|
+
- **Detection**: Card component rendered inside another card component, nested border-radius + box-shadow
|
|
38
|
+
- **Severity**: P2
|
|
39
|
+
|
|
40
|
+
### 8. Generic Fonts
|
|
41
|
+
- **Pattern**: Inter, Roboto, Open Sans, Lato, Montserrat, Arial as primary font-family
|
|
42
|
+
- **Detection**: Grep font-family declarations for generic font names
|
|
43
|
+
- **Severity**: P2
|
|
44
|
+
|
|
45
|
+
### 9. Rounded Rect + Generic Shadow
|
|
46
|
+
- **Pattern**: `border-radius: 8-16px` + `box-shadow: 0 1-4px ...` on more than 5 elements
|
|
47
|
+
- **Detection**: Count elements with both border-radius and box-shadow, flag if >5
|
|
48
|
+
- **Severity**: P3
|
|
49
|
+
|
|
50
|
+
### 10. Large Icons Above Every Heading
|
|
51
|
+
- **Pattern**: Decorative icon/emoji placed above section headings, repeated 3+ times
|
|
52
|
+
- **Detection**: Icon component or SVG immediately preceding heading elements, 3+ occurrences
|
|
53
|
+
- **Severity**: P2
|
|
54
|
+
|
|
55
|
+
### 11. One-Side Border Accent
|
|
56
|
+
- **Pattern**: `border-left: 3-4px solid <accent>` as visual accent on cards/sections
|
|
57
|
+
- **Detection**: Grep for `border-left:\s*\d+px\s+solid` repeated across components
|
|
58
|
+
- **Severity**: P3
|
|
59
|
+
|
|
60
|
+
### 12. Decorative Sparklines
|
|
61
|
+
- **Pattern**: Tiny inline charts without axis labels, data values, or interactive tooltips
|
|
62
|
+
- **Detection**: Small chart components (<100px height) without label/tooltip props
|
|
63
|
+
- **Severity**: P2
|
|
64
|
+
|
|
65
|
+
### 13. Bounce/Elastic Easing
|
|
66
|
+
- **Pattern**: `cubic-bezier` with negative control point values, spring/bounce animation keywords
|
|
67
|
+
- **Detection**: Grep for `cubic-bezier\([^)]*-` or animation names containing bounce/spring/elastic
|
|
68
|
+
- **Severity**: P2
|
|
69
|
+
|
|
70
|
+
### 14. Redundant Copy
|
|
71
|
+
- **Pattern**: Heading text restated in immediately following body paragraph with >50% word overlap
|
|
72
|
+
- **Detection**: Compare heading text with first paragraph text for word overlap
|
|
73
|
+
- **Severity**: P3
|
|
74
|
+
|
|
75
|
+
### 15. All Buttons Primary
|
|
76
|
+
- **Pattern**: Every button uses same filled/accent treatment, no visual hierarchy
|
|
77
|
+
- **Detection**: All button variants resolve to same background-color, no secondary/tertiary variants
|
|
78
|
+
- **Severity**: P1
|
|
79
|
+
|
|
80
|
+
### 16. Everything Centered
|
|
81
|
+
- **Pattern**: Body text centered (`text-align: center`), more than 60% of sections centered
|
|
82
|
+
- **Detection**: Count `text-align: center` on non-heading, non-hero elements
|
|
83
|
+
- **Severity**: P2
|
|
84
|
+
|
|
85
|
+
### 17. Same Spacing Everywhere
|
|
86
|
+
- **Pattern**: >70% of padding/margin values are identical (e.g., all `p-4` or `p-6`)
|
|
87
|
+
- **Detection**: Extract padding/margin values, check distribution uniformity
|
|
88
|
+
- **Severity**: P2
|
|
89
|
+
|
|
90
|
+
### 18. Monospace as Tech Aesthetic
|
|
91
|
+
- **Pattern**: Monospace font applied to non-code elements (headings, labels, navigation)
|
|
92
|
+
- **Detection**: `font-family: monospace` or code font on non-`<code>`/`<pre>` elements
|
|
93
|
+
- **Severity**: P3
|
|
94
|
+
|
|
95
|
+
### 19. Modal Overuse
|
|
96
|
+
- **Pattern**: More than 3 modal dialogs for non-critical interactions (settings, confirmations, info)
|
|
97
|
+
- **Detection**: Count modal/dialog component usages, check trigger context
|
|
98
|
+
- **Severity**: P3
|
|
99
|
+
|
|
100
|
+
### 20. Pure Black/White
|
|
101
|
+
- **Pattern**: #000, #fff, rgb(0,0,0), rgb(255,255,255) as primary background or text colors
|
|
102
|
+
- **Detection**: Grep for exact #000, #fff, rgb(0,0,0), rgb(255,255,255) in color/background properties
|
|
103
|
+
- **Severity**: P1
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Visual Design Standards
|
|
2
|
+
|
|
3
|
+
Reference for visual design quality detection. Scanner and diagnoser use these standards to identify design issues.
|
|
4
|
+
|
|
5
|
+
## Color Standards
|
|
6
|
+
|
|
7
|
+
- **OKLCH** for perceptually uniform palettes
|
|
8
|
+
- **Tinted neutrals**: chroma 0.005-0.01, never pure gray (#808080) or pure black/white (#000, #fff)
|
|
9
|
+
- **60-30-10 rule**: 60% neutral, 30% secondary, 10% accent
|
|
10
|
+
- **WCAG AA contrast**: normal text 4.5:1, large text 3:1, UI components 3:1
|
|
11
|
+
- **Text on colored backgrounds**: use `color-mix(in oklch, ...)` not gray text
|
|
12
|
+
|
|
13
|
+
## Typography Standards
|
|
14
|
+
|
|
15
|
+
- **Avoid generic fonts**: Inter, Roboto, Open Sans, Lato, Montserrat, Arial
|
|
16
|
+
- **Modular scale** (choose one ratio consistently): 1.125, 1.200, 1.250, 1.333
|
|
17
|
+
- **Fluid sizing**: `clamp()` for display text (xl and above)
|
|
18
|
+
- **Line height**: body 1.5, headings 1.2, small text 1.6
|
|
19
|
+
- **Reading width**: `max-width: 65ch`
|
|
20
|
+
- **Font loading**: `font-display: swap`
|
|
21
|
+
|
|
22
|
+
## Spacing Standards
|
|
23
|
+
|
|
24
|
+
- **4pt base scale**: 0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 96 px
|
|
25
|
+
- **Rhythm variation**: tight (4-8px), comfortable (16-24px), generous (48-96px)
|
|
26
|
+
- **Sibling spacing**: `gap` over `margin`
|
|
27
|
+
- **No nested cards**. Touch targets: 44x44px min
|
|
28
|
+
|
|
29
|
+
## Motion Standards
|
|
30
|
+
|
|
31
|
+
- **Animate ONLY**: transform, opacity, clip-path, background-color, color, box-shadow, filter
|
|
32
|
+
- **NEVER animate**: width, height, top, left, margin, padding
|
|
33
|
+
- **Easing**: ease-out-quart `cubic-bezier(0.25, 1, 0.5, 1)` default. No bounce/elastic/linear
|
|
34
|
+
- **Duration**: instant 100ms, fast 150ms, normal 250ms, slow 400ms
|
|
35
|
+
- **Reduced motion**: `@media (prefers-reduced-motion: reduce)` REQUIRED
|
|
36
|
+
|
|
37
|
+
## 8 Interaction States
|
|
38
|
+
|
|
39
|
+
| State | CSS | Requirement |
|
|
40
|
+
|-------|-----|-------------|
|
|
41
|
+
| Default | -- | Base appearance |
|
|
42
|
+
| Hover | `:hover` in `@media(hover:hover)` | Subtle change |
|
|
43
|
+
| Focus | `:focus-visible` | 2px solid accent, offset 2px, 3:1 contrast |
|
|
44
|
+
| Active | `:active` | Scale(0.97) or darker |
|
|
45
|
+
| Disabled | `[disabled]` | Opacity 0.5 |
|
|
46
|
+
| Loading | `[aria-busy]` | Spinner/skeleton |
|
|
47
|
+
| Error | `[aria-invalid]` | Red border + message |
|
|
48
|
+
| Success | custom | Green check |
|
|
49
|
+
|
|
50
|
+
## Visual Hierarchy
|
|
51
|
+
|
|
52
|
+
- **Squint test**: blur page, identify top 2 elements + groupings
|
|
53
|
+
- **1 primary CTA** per viewport
|
|
54
|
+
- **Progressive disclosure**: reveal complexity on demand
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Nielsen's 10 Usability Heuristics
|
|
2
|
+
|
|
3
|
+
Structured evaluation framework for UX scanning. Score each 0-4.
|
|
4
|
+
|
|
5
|
+
## 1. Visibility of System Status
|
|
6
|
+
The system should always keep users informed about what is going on.
|
|
7
|
+
- Loading indicators for async operations (> 200ms)
|
|
8
|
+
- Progress bars for multi-step processes
|
|
9
|
+
- State feedback (saved, syncing, error)
|
|
10
|
+
- Timestamps on data ("Updated 5 minutes ago")
|
|
11
|
+
- Active state indicators (selected tab, current page)
|
|
12
|
+
|
|
13
|
+
## 2. Match Between System and Real World
|
|
14
|
+
Speak the user's language, not technical jargon.
|
|
15
|
+
- Labels use familiar words (not internal terms)
|
|
16
|
+
- Icons match real-world metaphors
|
|
17
|
+
- Information appears in natural/logical order
|
|
18
|
+
- Dates, numbers, currencies in locale format
|
|
19
|
+
|
|
20
|
+
## 3. User Control and Freedom
|
|
21
|
+
Users need a clearly marked "emergency exit."
|
|
22
|
+
- Undo/redo for destructive or complex actions
|
|
23
|
+
- Back/cancel navigation always available
|
|
24
|
+
- Escape key closes modals/popovers
|
|
25
|
+
- Clear way to deselect, clear filters, reset
|
|
26
|
+
|
|
27
|
+
## 4. Consistency and Standards
|
|
28
|
+
Same words and actions should mean the same thing.
|
|
29
|
+
- One term per concept (delete/remove/trash → pick one)
|
|
30
|
+
- Same icon for same action across pages
|
|
31
|
+
- Follow platform conventions (links underlined, × means close)
|
|
32
|
+
- Consistent placement of actions (save always top-right, etc.)
|
|
33
|
+
|
|
34
|
+
## 5. Error Prevention
|
|
35
|
+
Better to prevent errors than show good error messages.
|
|
36
|
+
- Confirmation for destructive actions (with undo preferred)
|
|
37
|
+
- Input validation on blur (not just submit)
|
|
38
|
+
- Disable invalid options (gray out, not hide)
|
|
39
|
+
- Type-ahead/autocomplete for known-value fields
|
|
40
|
+
- Character counts for limited fields
|
|
41
|
+
|
|
42
|
+
## 6. Recognition Rather Than Recall
|
|
43
|
+
Minimize user memory load.
|
|
44
|
+
- Show options visibly (don't require memorization)
|
|
45
|
+
- Recent items, favorites, search suggestions
|
|
46
|
+
- Breadcrumbs for navigation context
|
|
47
|
+
- Inline help/tooltips for non-obvious fields
|
|
48
|
+
- Persistent important info (don't hide behind clicks)
|
|
49
|
+
|
|
50
|
+
## 7. Flexibility and Efficiency of Use
|
|
51
|
+
Accelerators for power users without confusing beginners.
|
|
52
|
+
- Keyboard shortcuts for frequent actions
|
|
53
|
+
- Bulk actions (select all, batch edit)
|
|
54
|
+
- Customizable views/layouts
|
|
55
|
+
- Search/filter as primary navigation for large datasets
|
|
56
|
+
|
|
57
|
+
## 8. Aesthetic and Minimalist Design
|
|
58
|
+
Every extra unit of information competes with relevant units.
|
|
59
|
+
- Remove decorative elements that don't aid comprehension
|
|
60
|
+
- Progressive disclosure (summary → detail on demand)
|
|
61
|
+
- Visual hierarchy: clear primary, secondary, tertiary
|
|
62
|
+
- Information density appropriate for use case
|
|
63
|
+
|
|
64
|
+
## 9. Help Users Recognize, Diagnose, and Recover from Errors
|
|
65
|
+
Error messages should be expressed in plain language.
|
|
66
|
+
- Formula: what happened + why + how to fix
|
|
67
|
+
- No error codes without explanation
|
|
68
|
+
- Suggest specific corrective action
|
|
69
|
+
- Preserve user input on error (don't clear forms)
|
|
70
|
+
- Retry option for network/server errors
|
|
71
|
+
|
|
72
|
+
## 10. Help and Documentation
|
|
73
|
+
Easy to search, focused on user's task.
|
|
74
|
+
- Contextual help (tooltips, info icons)
|
|
75
|
+
- Onboarding for first-time users
|
|
76
|
+
- Empty states with guidance and action
|
|
77
|
+
- Keyboard shortcut reference
|
|
78
|
+
- FAQ/search for complex features
|
|
79
|
+
|
|
80
|
+
## Severity Scale
|
|
81
|
+
|
|
82
|
+
| Rating | Description |
|
|
83
|
+
|--------|-------------|
|
|
84
|
+
| 0 | Not a usability problem |
|
|
85
|
+
| 1 | Cosmetic — fix if time permits |
|
|
86
|
+
| 2 | Minor — low priority fix |
|
|
87
|
+
| 3 | Major — important to fix, high priority |
|
|
88
|
+
| 4 | Catastrophe — must fix before release |
|
|
@@ -4,14 +4,46 @@
|
|
|
4
4
|
- Buttons without loading states during async operations
|
|
5
5
|
- Missing error handling with user feedback
|
|
6
6
|
- State changes without visual updates
|
|
7
|
-
- Double-click vulnerabilities
|
|
8
|
-
|
|
9
|
-
## State Issues
|
|
10
|
-
- Stale data after mutations
|
|
11
|
-
- Race conditions in async operations
|
|
12
|
-
- Missing rollback for failed optimistic updates
|
|
13
|
-
|
|
14
|
-
## Feedback Issues
|
|
7
|
+
- Double-click vulnerabilities (missing debounce)
|
|
8
|
+
- No disabled state during processing
|
|
15
9
|
- Silent failures without user notification
|
|
16
10
|
- Generic error messages without actionable guidance
|
|
17
11
|
- Missing confirmation for destructive actions
|
|
12
|
+
- No empty state placeholder for data lists
|
|
13
|
+
- Input without validation rules or inline feedback
|
|
14
|
+
|
|
15
|
+
## State Management Issues
|
|
16
|
+
- Stale data after mutations (direct array/object mutation)
|
|
17
|
+
- Race conditions in async operations (no cancellation)
|
|
18
|
+
- Missing rollback for failed optimistic updates
|
|
19
|
+
- Stale closure capturing old state value
|
|
20
|
+
- Missing loading/error/success state tracking
|
|
21
|
+
|
|
22
|
+
## Visual Design Anti-Patterns (AI Slop)
|
|
23
|
+
- AI Color Palette: cyan-on-dark, purple gradients (zero design intent)
|
|
24
|
+
- Gradient text: background-clip: text as emphasis crutch
|
|
25
|
+
- Glassmorphism everywhere: backdrop-filter as default aesthetic
|
|
26
|
+
- All Buttons Primary: no visual hierarchy, every button filled
|
|
27
|
+
- Pure Black/White: #000/#fff without tint (harsh, sterile)
|
|
28
|
+
- Generic fonts: Inter, Roboto as defaults (forgettable)
|
|
29
|
+
- Identical card grids: all items same visual weight
|
|
30
|
+
- Nested cards: cards inside cards creating noise
|
|
31
|
+
- Same spacing everywhere: no rhythm variation
|
|
32
|
+
- Bounce/elastic easing: dated animation feel
|
|
33
|
+
- Everything centered: including body text
|
|
34
|
+
|
|
35
|
+
## Motion Issues
|
|
36
|
+
- Layout animations (width/height/margin/padding triggers)
|
|
37
|
+
- No reduced-motion query (@media prefers-reduced-motion)
|
|
38
|
+
- CSS will-change set permanently (GPU waste)
|
|
39
|
+
- ease/linear as default easing (unnatural)
|
|
40
|
+
- Stagger exceeding 500ms total
|
|
41
|
+
|
|
42
|
+
## Accessibility Issues
|
|
43
|
+
- outline: none without :focus-visible replacement
|
|
44
|
+
- Missing :focus-visible (using bare :focus)
|
|
45
|
+
- Color-only state indication
|
|
46
|
+
- Touch targets < 44px
|
|
47
|
+
- No skip links
|
|
48
|
+
- Placeholder used as label
|
|
49
|
+
- Missing aria-describedby for error messages
|
|
@@ -1,14 +1,34 @@
|
|
|
1
1
|
# State Management Patterns
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
3
|
+
## Reactive Update Rules
|
|
4
|
+
- NEVER mutate arrays/objects directly
|
|
5
|
+
- React: use spread operator, filter/map for new references
|
|
6
|
+
- Vue: use ref() for primitives, reactive() for objects, computed() for derived
|
|
7
|
+
- Always trigger re-render through proper state API
|
|
8
|
+
|
|
9
|
+
## Async State Pattern
|
|
10
|
+
```
|
|
11
|
+
const [data, setData] = useState(null);
|
|
12
|
+
const [loading, setLoading] = useState(false);
|
|
13
|
+
const [error, setError] = useState(null);
|
|
14
|
+
|
|
15
|
+
// Always: loading -> success/error -> cleanup
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Race Condition Prevention
|
|
19
|
+
- AbortController for fetch cancellation
|
|
20
|
+
- Debounce for search/filter inputs (250-500ms)
|
|
21
|
+
- Latest-wins pattern for concurrent requests
|
|
22
|
+
- Disable trigger during processing
|
|
23
|
+
|
|
24
|
+
## Optimistic Updates
|
|
25
|
+
- Update UI immediately
|
|
26
|
+
- Track pending state
|
|
27
|
+
- Rollback on failure with error notification
|
|
28
|
+
- Never lose user data silently
|
|
29
|
+
|
|
30
|
+
## Form State
|
|
31
|
+
- Controlled inputs (React) / v-model (Vue)
|
|
32
|
+
- Validation on blur + on submit
|
|
33
|
+
- Error clearing on re-input
|
|
34
|
+
- Dirty tracking for unsaved changes warning
|
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
# UI Feedback Patterns
|
|
2
2
|
|
|
3
3
|
## Loading States
|
|
4
|
-
-
|
|
5
|
-
-
|
|
6
|
-
-
|
|
4
|
+
- Button: set disabled + aria-busy="true", show spinner, restore on complete
|
|
5
|
+
- Page: skeleton screens (prefer over spinners for content areas)
|
|
6
|
+
- Inline: progress indicator for multi-step operations
|
|
7
|
+
- Duration: show loading after 200ms delay (avoid flash for fast operations)
|
|
7
8
|
|
|
8
|
-
## Error
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
9
|
+
## Error States
|
|
10
|
+
- Form: inline validation with aria-invalid + aria-describedby
|
|
11
|
+
- API: toast/snackbar for non-blocking, inline for blocking errors
|
|
12
|
+
- Error message: specific, actionable (not "Something went wrong")
|
|
13
|
+
- Visual: red border on input, error icon, error text below
|
|
12
14
|
|
|
13
|
-
## Success
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
15
|
+
## Success States
|
|
16
|
+
- Form submit: success message + next action guidance
|
|
17
|
+
- CRUD: optimistic update with subtle confirmation
|
|
18
|
+
- Duration: success message visible 3-5 seconds
|
|
19
|
+
|
|
20
|
+
## Empty States
|
|
21
|
+
- Data list: illustration + message + primary action
|
|
22
|
+
- Search: "No results" + suggestions
|
|
23
|
+
- First use: onboarding guidance
|
|
24
|
+
|
|
25
|
+
## Focus Feedback
|
|
26
|
+
- :focus-visible only (not bare :focus)
|
|
27
|
+
- Ring: 2px solid accent, offset 2px
|
|
28
|
+
- Contrast: 3:1 against adjacent colors
|
|
29
|
+
- Custom for dark backgrounds: lighter ring color
|
|
30
|
+
|
|
31
|
+
## Hover Feedback
|
|
32
|
+
- Wrap in @media(hover:hover) for touch safety
|
|
33
|
+
- Subtle: background opacity change or slight color shift
|
|
34
|
+
- Duration: 100-150ms transition
|
|
35
|
+
- Cursor: pointer for clickable, not-allowed for disabled
|
|
36
|
+
|
|
37
|
+
## Active Feedback
|
|
38
|
+
- Scale: transform: scale(0.97) for physical feel
|
|
39
|
+
- Or: darker background shade
|
|
40
|
+
- Duration: instant (< 50ms feel)
|
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
# General UX Principles
|
|
2
2
|
|
|
3
3
|
## Feedback & Responsiveness
|
|
4
|
-
- Every user action
|
|
5
|
-
- Loading states
|
|
6
|
-
- Success/error states
|
|
4
|
+
- Every user action must have immediate visual feedback (< 100ms perceived)
|
|
5
|
+
- Loading states for operations > 200ms: use skeleton/spinner, set aria-busy="true"
|
|
6
|
+
- Success/error states clearly communicated with both visual and ARIA cues
|
|
7
|
+
- Feedback duration: 100-150ms for hover/active/focus transitions
|
|
8
|
+
- State change transitions: 200-300ms
|
|
9
|
+
- Layout changes: 300-500ms
|
|
10
|
+
|
|
11
|
+
## Interaction States (8 Required)
|
|
12
|
+
Every interactive element must define all 8 states:
|
|
13
|
+
1. Default — base appearance
|
|
14
|
+
2. Hover — subtle bg/opacity change, wrap in @media(hover:hover)
|
|
15
|
+
3. Focus — :focus-visible with 2px solid accent, offset 2px, 3:1 contrast ratio
|
|
16
|
+
4. Active — scale(0.97) or darker background
|
|
17
|
+
5. Disabled — opacity 0.5, cursor: not-allowed, aria-disabled="true"
|
|
18
|
+
6. Loading — spinner/skeleton, disable interaction, aria-busy="true"
|
|
19
|
+
7. Error — red border, error message below, aria-invalid="true"
|
|
20
|
+
8. Success — green check, success message
|
|
7
21
|
|
|
8
22
|
## State Management
|
|
9
|
-
- UI state
|
|
10
|
-
- Optimistic updates
|
|
11
|
-
- State changes
|
|
23
|
+
- UI state must reflect underlying data state immediately
|
|
24
|
+
- Optimistic updates must have rollback mechanisms
|
|
25
|
+
- State changes must be atomic and predictable
|
|
26
|
+
- No direct array/object mutation (use spread/filter/map for reactive frameworks)
|
|
27
|
+
- Race conditions: use request cancellation or debounce
|
|
28
|
+
|
|
29
|
+
## Visual Design Quality
|
|
30
|
+
- Color: OKLCH-based, tinted neutrals (never pure gray/black/white), 60-30-10 rule
|
|
31
|
+
- Typography: distinctive fonts (not Inter/Roboto), modular scale, fluid clamp()
|
|
32
|
+
- Spacing: 4pt base scale with varied rhythm (tight/comfortable/generous)
|
|
33
|
+
- Motion: transform+opacity only, ease-out-quart easing, reduced-motion query required
|
|
34
|
+
- Hierarchy: squint test, single primary CTA per viewport
|
|
12
35
|
|
|
13
36
|
## Accessibility
|
|
14
|
-
-
|
|
15
|
-
- Color
|
|
16
|
-
- Focus states must
|
|
37
|
+
- All interactive elements keyboard accessible (tab + enter/space)
|
|
38
|
+
- Color must NOT be the only indicator of state
|
|
39
|
+
- Focus states must use :focus-visible (not bare :focus)
|
|
40
|
+
- Focus ring: 3:1 contrast against adjacent colors
|
|
41
|
+
- Touch targets: minimum 44x44px, 8px gap between adjacent
|
|
42
|
+
- Visible labels on all form inputs (placeholder is not a label)
|
|
43
|
+
- Skip links for keyboard navigation
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-visual-a11y
|
|
3
|
+
description: Unified team skill for visual accessibility QA. OKLCH color contrast, typography readability, focus management, WCAG AA/AAA audit at rendered level. Uses team-worker agent architecture. Triggers on "team visual a11y", "accessibility audit", "visual a11y".
|
|
4
|
+
allowed-tools: Agent, AskUserQuestion, Read, Write, Edit, Bash, Glob, Grep, TaskList, TaskGet, TaskUpdate, TaskCreate, TeamCreate, TeamDelete, SendMessage, mcp__ccw-tools__read_file, mcp__ccw-tools__write_file, mcp__ccw-tools__edit_file, mcp__ccw-tools__team_msg, mcp__chrome-devtools__evaluate_script, mcp__chrome-devtools__take_screenshot, mcp__chrome-devtools__emulate, mcp__chrome-devtools__lighthouse_audit, mcp__chrome-devtools__navigate_page, mcp__chrome-devtools__resize_page
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Team Visual Accessibility
|
|
8
|
+
|
|
9
|
+
Deep visual accessibility QA: OKLCH-based perceptual color contrast, typography readability at all viewports, focus-visible completeness, WCAG AA/AAA audit at rendered level. Built on **team-worker agent architecture** -- all worker roles share a single agent definition with role-specific Phase 2-4 loaded from `roles/<role>/role.md`.
|
|
10
|
+
|
|
11
|
+
## Architecture
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Skill(skill="team-visual-a11y", args="task description")
|
|
15
|
+
|
|
|
16
|
+
SKILL.md (this file) = Router
|
|
17
|
+
|
|
|
18
|
+
+--------------+--------------+
|
|
19
|
+
| |
|
|
20
|
+
no --role flag --role <name>
|
|
21
|
+
| |
|
|
22
|
+
Coordinator Worker
|
|
23
|
+
roles/coordinator/role.md roles/<name>/role.md
|
|
24
|
+
|
|
|
25
|
+
+-- analyze -> dispatch -> spawn workers -> STOP
|
|
26
|
+
|
|
|
27
|
+
+-------+-------+-------+
|
|
28
|
+
v v v |
|
|
29
|
+
[3 auditors spawn in PARALLEL] |
|
|
30
|
+
color-auditor typo-auditor focus-auditor
|
|
31
|
+
| | |
|
|
32
|
+
+---+---+---+---+
|
|
33
|
+
v
|
|
34
|
+
remediation-planner
|
|
35
|
+
|
|
|
36
|
+
v
|
|
37
|
+
fix-implementer (inner_loop)
|
|
38
|
+
|
|
|
39
|
+
v
|
|
40
|
+
[re-audit: color + focus in PARALLEL]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Role Registry
|
|
44
|
+
|
|
45
|
+
| Role | Path | Prefix | Inner Loop |
|
|
46
|
+
|------|------|--------|------------|
|
|
47
|
+
| coordinator | [roles/coordinator/role.md](roles/coordinator/role.md) | -- | -- |
|
|
48
|
+
| color-auditor | [roles/color-auditor/role.md](roles/color-auditor/role.md) | COLOR-* | false |
|
|
49
|
+
| typo-auditor | [roles/typo-auditor/role.md](roles/typo-auditor/role.md) | TYPO-* | false |
|
|
50
|
+
| focus-auditor | [roles/focus-auditor/role.md](roles/focus-auditor/role.md) | FOCUS-* | false |
|
|
51
|
+
| remediation-planner | [roles/remediation-planner/role.md](roles/remediation-planner/role.md) | REMED-* | false |
|
|
52
|
+
| fix-implementer | [roles/fix-implementer/role.md](roles/fix-implementer/role.md) | FIX-* | true |
|
|
53
|
+
|
|
54
|
+
## Role Router
|
|
55
|
+
|
|
56
|
+
Parse `$ARGUMENTS`:
|
|
57
|
+
- Has `--role <name>` -> Read `roles/<name>/role.md`, execute Phase 2-4
|
|
58
|
+
- No `--role` -> `@roles/coordinator/role.md`, execute entry router
|
|
59
|
+
|
|
60
|
+
## Shared Constants
|
|
61
|
+
|
|
62
|
+
- **Session prefix**: `VA`
|
|
63
|
+
- **Session path**: `.workflow/.team/VA-<slug>-<date>/`
|
|
64
|
+
- **team_name**: `visual-a11y`
|
|
65
|
+
- **CLI tools**: `ccw cli --mode analysis` (read-only), `ccw cli --mode write` (modifications)
|
|
66
|
+
- **Message bus**: `mcp__ccw-tools__team_msg(session_id=<session-id>, ...)`
|
|
67
|
+
- **Max GC rounds**: 2
|
|
68
|
+
|
|
69
|
+
## Worker Spawn Template
|
|
70
|
+
|
|
71
|
+
Coordinator spawns workers using this template:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Agent({
|
|
75
|
+
subagent_type: "team-worker",
|
|
76
|
+
description: "Spawn <role> worker for <task-id>",
|
|
77
|
+
team_name: "visual-a11y",
|
|
78
|
+
name: "<role>",
|
|
79
|
+
run_in_background: true,
|
|
80
|
+
prompt: `## Role Assignment
|
|
81
|
+
role: <role>
|
|
82
|
+
role_spec: <skill_root>/roles/<role>/role.md
|
|
83
|
+
session: <session-folder>
|
|
84
|
+
session_id: <session-id>
|
|
85
|
+
team_name: visual-a11y
|
|
86
|
+
requirement: <task-description>
|
|
87
|
+
inner_loop: <true|false>
|
|
88
|
+
|
|
89
|
+
Read role_spec file (@<skill_root>/roles/<role>/role.md) to load Phase 2-4 domain instructions.
|
|
90
|
+
Execute built-in Phase 1 (task discovery) -> role Phase 2-4 -> built-in Phase 5 (report).`
|
|
91
|
+
})
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## User Commands
|
|
95
|
+
|
|
96
|
+
| Command | Action |
|
|
97
|
+
|---------|--------|
|
|
98
|
+
| `check` / `status` | View execution status graph |
|
|
99
|
+
| `resume` / `continue` | Advance to next step |
|
|
100
|
+
|
|
101
|
+
## Specs Reference
|
|
102
|
+
|
|
103
|
+
- [specs/pipelines.md](specs/pipelines.md) -- Pipeline definitions and task registry
|
|
104
|
+
- [specs/oklch-standards.md](specs/oklch-standards.md) -- OKLCH color accessibility rules
|
|
105
|
+
- [specs/wcag-matrix.md](specs/wcag-matrix.md) -- WCAG 2.1 criteria matrix
|
|
106
|
+
- [specs/typography-scale.md](specs/typography-scale.md) -- Typography accessibility rules
|
|
107
|
+
- [specs/focus-patterns.md](specs/focus-patterns.md) -- Focus management patterns
|
|
108
|
+
|
|
109
|
+
## Session Directory
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
.workflow/.team/VA-<slug>-<date>/
|
|
113
|
+
+-- .msg/
|
|
114
|
+
| +-- messages.jsonl # Team message bus
|
|
115
|
+
| +-- meta.json # Pipeline config + GC state
|
|
116
|
+
+-- audits/
|
|
117
|
+
| +-- color/ # Color auditor output
|
|
118
|
+
| | +-- color-audit-001.md
|
|
119
|
+
| +-- typography/ # Typography auditor output
|
|
120
|
+
| | +-- typo-audit-001.md
|
|
121
|
+
| +-- focus/ # Focus auditor output
|
|
122
|
+
| +-- focus-audit-001.md
|
|
123
|
+
+-- remediation/ # Remediation planner output
|
|
124
|
+
| +-- remediation-plan.md
|
|
125
|
+
+-- fixes/ # Fix implementer output
|
|
126
|
+
| +-- fix-summary-001.md
|
|
127
|
+
+-- re-audit/ # Re-audit output (GC loop)
|
|
128
|
+
| +-- color-audit-002.md
|
|
129
|
+
| +-- focus-audit-002.md
|
|
130
|
+
+-- evidence/ # Screenshots, traces
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Error Handling
|
|
134
|
+
|
|
135
|
+
| Scenario | Resolution |
|
|
136
|
+
|----------|------------|
|
|
137
|
+
| Unknown command | Error with available command list |
|
|
138
|
+
| Role not found | Error with role registry |
|
|
139
|
+
| Session corruption | Attempt recovery, fallback to manual |
|
|
140
|
+
| Fast-advance conflict | Coordinator reconciles on next callback |
|
|
141
|
+
| Completion action fails | Default to Keep Active |
|
|
142
|
+
| GC loop stuck > 2 rounds | Escalate to user: accept / retry / terminate |
|
|
143
|
+
| Chrome DevTools unavailable | Degrade to static analysis only |
|