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.
- 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-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-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-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/brainstorm/SKILL.md +3 -3
- package/.codex/skills/clean/SKILL.md +3 -3
- 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/issue-discover/SKILL.md +13 -13
- package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
- package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
- package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
- package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
- package/.codex/skills/review-cycle/SKILL.md +10 -10
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
- package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
- package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
- package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
- package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
- 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/spec-generator/README.md +1 -1
- package/.codex/skills/spec-generator/SKILL.md +184 -88
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
- package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
- package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
- package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
- package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
- package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
- package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
- package/.codex/skills/spec-setup/SKILL.md +4 -4
- 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/.codex/skills/workflow-plan/SKILL.md +6 -6
- package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
- 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-exlTDW81.js} +3 -3
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-exlTDW81.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-cgV9LfAI.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-Be9xsPiv.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BrE-oyEq.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cd3nrC93.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DXFl3VKF.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-CpDxtmRX.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-BchjWe7s.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-CbWvaJ0y.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-YMjVRiCk.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BtqzqDVq.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-BuWpQ7k5.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-D0BtMIWy.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-C7dwsAKG.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-D0nCNaeB.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-C-S5CehM.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-P_B0JVUQ.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-S4Jn9LUE.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-YEMjFARX.js} +3 -3
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-DnTm55nG.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CUwebtO2.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-BpgP4087.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-BpgP4087.js.map} +1 -1
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-CYSPdqWk.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-CYSPdqWk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-CPh6Zor1.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-Ds-8830B.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-CJODUxBk.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-CJODUxBk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-CjwVpw6k.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-CjwVpw6k.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-2vZa9Ic3.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-CUU5XDgT.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-BwpSRDUa.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-BwpSRDUa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-DBzUW1XC.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-DBzUW1XC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CGNNsjvE.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-D27G86Ul.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-D27G86Ul.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-C6MOB7Au.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-C6MOB7Au.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-BxfBlZ26.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-BxfBlZ26.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-NI237wA-.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-NI237wA-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-Byn2_2v6.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-Byn2_2v6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-D-7PhZjx.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-D-7PhZjx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-BoAsK_FL.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-BoAsK_FL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-DCSxJIS4.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-DCSxJIS4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-CHS3prza.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-CHS3prza.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-D7K35U7S.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-eq9xE07G.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-eq9xE07G.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-C1DMpBua.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-C1DMpBua.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-Di5SBCY-.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-Di5SBCY-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index--_R7COnA.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index--_R7COnA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-BUol9HDD.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-BUol9HDD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-CT9oykfw.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-CT9oykfw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-Ddwvf87H.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-Ddwvf87H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-LiX0qZbN.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-CL3DVEwb.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CC5cFeq6.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CC5cFeq6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-ngFQ9bs0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-ngFQ9bs0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-BEU6I0KK.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-BEU6I0KK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BWZdLA6y.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BWZdLA6y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-K6_Chm7n.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-K6_Chm7n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CWkphauf.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CWkphauf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-DrNgkamn.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-DrNgkamn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CMo3sw5_.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CMo3sw5_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-DppNTW5e.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-DppNTW5e.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-CD8aPMbZ.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-CD8aPMbZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-B4z90fQD.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-B4z90fQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2-CAKRU_QC.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2-CAKRU_QC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-KhI3HrzX.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-BtdGIpuq.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-BtdGIpuq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-ZoBUkXoD.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-ZoBUkXoD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CltxQP-P.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CltxQP-P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-C32OUSGf.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-C32OUSGf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-0IxoyAVZ.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-4eKCkyBn.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-4eKCkyBn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-zLTUWqhi.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-BtN2vpOX.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-BtN2vpOX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-_spj49qL.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-_spj49qL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-Bm9KFZvd.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-DOmpm6v9.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-D2rj4rea.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-D2rj4rea.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-OskEpomF.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-OskEpomF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-BjMgsNSF.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-CLhyYWa7.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-CLhyYWa7.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 +0 -150
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
- package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js +0 -7
- package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js.map +0 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: scanner
|
|
3
|
+
prefix: SCAN
|
|
4
|
+
inner_loop: false
|
|
5
|
+
message_types: [scan_complete, scan_progress, error]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# UI Scanner -- 8-Dimension Design Audit
|
|
9
|
+
|
|
10
|
+
Scan existing UI against Impeccable's 8 audit dimensions to discover all design problems. This is the team's core diagnostic engine. Every issue found here drives the entire downstream pipeline.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Target files or URL | From task description | Yes |
|
|
17
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
|
|
18
|
+
| Anti-patterns catalog | specs/anti-patterns.md | Yes |
|
|
19
|
+
| Design standards | specs/design-standards.md | Yes |
|
|
20
|
+
|
|
21
|
+
1. Extract session path and target from task description
|
|
22
|
+
2. Read specs/anti-patterns.md and specs/design-standards.md for reference criteria
|
|
23
|
+
3. Load target files based on target type:
|
|
24
|
+
- **URL target**: Use Chrome DevTools to navigate, take screenshots at 3 viewports:
|
|
25
|
+
- Mobile: `mcp__chrome-devtools__resize_page(width=375, height=812)` + screenshot
|
|
26
|
+
- Tablet: `mcp__chrome-devtools__resize_page(width=768, height=1024)` + screenshot
|
|
27
|
+
- Desktop: `mcp__chrome-devtools__resize_page(width=1440, height=900)` + screenshot
|
|
28
|
+
- Save to `<session>/evidence/before-mobile.png`, `before-tablet.png`, `before-desktop.png`
|
|
29
|
+
- **Component target**: Read CSS/SCSS, HTML, JS/TS/JSX/TSX files
|
|
30
|
+
- **Full site target**: Glob for all frontend source files (*.css, *.scss, *.tsx, *.jsx, *.html, *.vue, *.svelte)
|
|
31
|
+
4. Extract raw data for analysis:
|
|
32
|
+
- All color values (hex, rgb, hsl, oklch, named colors, CSS custom properties)
|
|
33
|
+
- All font declarations (font-family, font-size, font-weight, line-height)
|
|
34
|
+
- All spacing values (margin, padding, gap, inset)
|
|
35
|
+
- All animation/transition declarations
|
|
36
|
+
- All interactive pseudo-classes and state handling
|
|
37
|
+
5. If Chrome DevTools available: extract computed styles via `mcp__chrome-devtools__evaluate_script`
|
|
38
|
+
|
|
39
|
+
## Phase 3: 8-Dimension Scan
|
|
40
|
+
|
|
41
|
+
For each dimension, check every item in the checklist. Record each finding with:
|
|
42
|
+
- Location: file:line (or "screenshot: viewport" for visual-only issues)
|
|
43
|
+
- Severity: P0 (blocking) / P1 (major) / P2 (minor) / P3 (polish)
|
|
44
|
+
- Description: what is wrong and why it matters
|
|
45
|
+
- Evidence: the specific code or visual that triggers the finding
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Dimension 1: Anti-AI-Slop Detection (CRITICAL -- scan first)
|
|
50
|
+
|
|
51
|
+
**The AI Slop Test**: "If you showed this to someone and said 'AI made this,' would they believe you immediately? If yes, that is the problem."
|
|
52
|
+
|
|
53
|
+
Check for these AI-generated UI fingerprints:
|
|
54
|
+
|
|
55
|
+
| # | Pattern | What to Look For | Severity |
|
|
56
|
+
|---|---------|-------------------|----------|
|
|
57
|
+
| 1 | AI color palette | cyan-on-dark (#00d4ff, #06b6d4), purple-to-blue gradients, neon accents on dark backgrounds | P1 |
|
|
58
|
+
| 2 | Gradient text | `background-clip: text` + gradient on metrics, headings, or hero text for "impact" | P1 |
|
|
59
|
+
| 3 | Default dark mode | Dark background with glowing/neon accents as the default theme; avoids real design decisions | P2 |
|
|
60
|
+
| 4 | Glassmorphism everywhere | `backdrop-filter: blur()`, glass cards, glow borders (`box-shadow: 0 0 Xpx color`), used decoratively not functionally | P1 |
|
|
61
|
+
| 5 | Hero metric layout | Big number + small label + supporting stats in a row + gradient accent. The "AI dashboard" template | P2 |
|
|
62
|
+
| 6 | Identical card grids | Same-sized cards with icon + heading + body text repeated 3-6 times in a grid | P2 |
|
|
63
|
+
| 7 | Nested cards | Cards inside cards (`.card .card`, multiple layers of bordered containers) | P2 |
|
|
64
|
+
| 8 | Generic fonts | Inter, Roboto, Arial, Open Sans, Lato, Montserrat, system-ui used without intentional choice | P2 |
|
|
65
|
+
| 9 | Rounded rect + shadow | `border-radius: 8-16px` + `box-shadow: 0 1-4px 6-24px rgba(0,0,0,0.1)` on everything | P3 |
|
|
66
|
+
| 10 | Icon-above-heading | Large icons (24-48px) with rounded corners/background placed above every heading or card | P2 |
|
|
67
|
+
| 11 | One-side border accent | `border-left: 3-4px solid <accent>` or `border-top` as lazy accent on cards | P3 |
|
|
68
|
+
| 12 | Decorative sparklines | Tiny charts/graphs that look sophisticated but convey no actionable data | P2 |
|
|
69
|
+
| 13 | Bounce/elastic easing | `cubic-bezier(0.68, -0.55, 0.265, 1.55)` or spring animations. Dated, 2015 aesthetic | P2 |
|
|
70
|
+
| 14 | Redundant copy | Intro paragraphs that restate the heading. "Welcome to Dashboard. This dashboard shows..." | P3 |
|
|
71
|
+
| 15 | All buttons primary | Every button is filled/primary. No ghost buttons, text links, or secondary variants | P1 |
|
|
72
|
+
| 16 | Everything centered | `text-align: center` or `justify-content: center` on everything. No asymmetry | P2 |
|
|
73
|
+
| 17 | Same spacing everywhere | Identical margin/padding on all elements. No spacing rhythm or variation | P2 |
|
|
74
|
+
| 18 | Monospace as tech | Monospace fonts used for non-code content to appear "techy" | P3 |
|
|
75
|
+
| 19 | Modal overuse | Modals for confirmations, settings, forms -- when inline or drawer would work | P3 |
|
|
76
|
+
| 20 | Pure black/white | `#000000` or `#ffffff` without any tint toward brand hue | P1 |
|
|
77
|
+
|
|
78
|
+
**Scoring**:
|
|
79
|
+
- 0: AI slop gallery (5+ tells present)
|
|
80
|
+
- 1: Heavy AI influence (3-4 tells)
|
|
81
|
+
- 2: Some AI tells (1-2 noticeable)
|
|
82
|
+
- 3: Mostly clean (subtle traces only)
|
|
83
|
+
- 4: Distinctive (genuinely intentional design, zero AI tells)
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### Dimension 2: Color Quality
|
|
88
|
+
|
|
89
|
+
| # | Check | What to Look For | Severity |
|
|
90
|
+
|---|-------|-------------------|----------|
|
|
91
|
+
| 1 | Pure black usage | `#000`, `#000000`, `rgb(0,0,0)` anywhere except borders/outlines | P1 |
|
|
92
|
+
| 2 | Pure white usage | `#fff`, `#ffffff`, `rgb(255,255,255)` for backgrounds without brand tint | P1 |
|
|
93
|
+
| 3 | Untinted grays | Gray values with chroma exactly 0 (pure gray). Should have chroma 0.005-0.01 toward brand hue | P2 |
|
|
94
|
+
| 4 | Gray on colored bg | Gray text (#666, #999, etc.) on colored backgrounds. Looks washed out. Use shade of background or transparency | P1 |
|
|
95
|
+
| 5 | WCAG AA contrast | Text contrast below 4.5:1 (normal text) or 3:1 (large text >= 18px/24px bold) | P0 |
|
|
96
|
+
| 6 | UI component contrast | Interactive component boundaries below 3:1 contrast against adjacent colors | P1 |
|
|
97
|
+
| 7 | No OKLCH | All colors in hex/rgb/hsl without oklch() for perceptual uniformity | P2 |
|
|
98
|
+
| 8 | Accent overuse | Accent color exceeds 10% of visual weight. Violates 60-30-10 rule (60% neutral, 30% secondary, 10% accent) | P2 |
|
|
99
|
+
| 9 | No semantic roles | Colors not organized into primary/neutral/semantic(success,warning,error)/surface layers | P2 |
|
|
100
|
+
| 10 | Hard-coded colors | Color values inline in components instead of CSS custom properties or design tokens | P2 |
|
|
101
|
+
| 11 | No dark/light tokens | Single-theme colors without alternate theme support | P3 |
|
|
102
|
+
|
|
103
|
+
**Scoring**:
|
|
104
|
+
- 0: Multiple contrast failures, pure black/white everywhere, no system
|
|
105
|
+
- 1: Contrast issues, hard-coded colors, no tokens
|
|
106
|
+
- 2: Basic contrast OK but no OKLCH, some hard-coded values
|
|
107
|
+
- 3: Good system with minor gaps (some untinted grays or missing tokens)
|
|
108
|
+
- 4: OKLCH-based, fully tokenized, WCAG AA+ compliant, proper 60-30-10
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### Dimension 3: Typography Quality
|
|
113
|
+
|
|
114
|
+
| # | Check | What to Look For | Severity |
|
|
115
|
+
|---|-------|-------------------|----------|
|
|
116
|
+
| 1 | Overused fonts | Inter, Roboto, Open Sans, Lato, Montserrat, Arial without intentional justification | P2 |
|
|
117
|
+
| 2 | Muddy hierarchy | Too many close font sizes (e.g., 13/14/15/16/18). Should have clear steps | P1 |
|
|
118
|
+
| 3 | No modular scale | Font sizes without mathematical ratio (1.125, 1.2, 1.25, 1.333, 1.5, 1.618) | P2 |
|
|
119
|
+
| 4 | Small body text | Body/paragraph text below 16px (1rem) | P1 |
|
|
120
|
+
| 5 | Line length | Body text wider than 75ch or narrower than 45ch. Optimal: 65ch | P2 |
|
|
121
|
+
| 6 | Inconsistent line-height | Different line-heights without system. Should follow vertical rhythm | P2 |
|
|
122
|
+
| 7 | No fluid sizing | Headings without `clamp()` for responsive scaling. Fixed px that are too big on mobile or too small on desktop | P2 |
|
|
123
|
+
| 8 | Monospace misuse | Monospace fonts for non-code body content used as "tech" aesthetic | P3 |
|
|
124
|
+
| 9 | Missing font-display | No `font-display: swap` causing FOIT (flash of invisible text) | P2 |
|
|
125
|
+
| 10 | Too many font families | More than 2-3 font families in use (excluding monospace for code) | P2 |
|
|
126
|
+
| 11 | No fallback metrics | Custom fonts without `size-adjust`, `ascent-override` for CLS prevention | P3 |
|
|
127
|
+
|
|
128
|
+
**Scoring**:
|
|
129
|
+
- 0: Generic font, no scale, tiny text, no hierarchy
|
|
130
|
+
- 1: Overused font, muddy sizes, missing fluid sizing
|
|
131
|
+
- 2: Decent font choice but inconsistent scale or line-height
|
|
132
|
+
- 3: Good typography with minor gaps (missing clamp, slight inconsistencies)
|
|
133
|
+
- 4: Distinctive font, clear modular scale, fluid sizing, proper rhythm
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### Dimension 4: Spacing & Layout Quality
|
|
138
|
+
|
|
139
|
+
| # | Check | What to Look For | Severity |
|
|
140
|
+
|---|-------|-------------------|----------|
|
|
141
|
+
| 1 | Arbitrary spacing | Spacing values outside a consistent scale (e.g., 7px, 13px, 22px, 37px) | P2 |
|
|
142
|
+
| 2 | No spacing scale | No evidence of 4pt base (4, 8, 12, 16, 24, 32, 48, 64, 96px) or similar system | P2 |
|
|
143
|
+
| 3 | Monotonous spacing | Same padding/margin value everywhere. No rhythm (tight groups + generous separations) | P2 |
|
|
144
|
+
| 4 | Card overuse | Everything wrapped in cards. Cards for single text items, cards for navigation, cards for everything | P2 |
|
|
145
|
+
| 5 | Nested cards | Cards inside cards. Multiple bordered containers creating visual noise | P1 |
|
|
146
|
+
| 6 | Fixed widths | Hard-coded pixel widths that break on different viewports | P1 |
|
|
147
|
+
| 7 | Small touch targets | Interactive elements below 44x44px (buttons, links, inputs on mobile) | P1 |
|
|
148
|
+
| 8 | Margin for siblings | Using `margin` between sibling elements instead of `gap` on parent | P3 |
|
|
149
|
+
| 9 | No optical adjustment | Purely mathematical centering without optical corrections (e.g., play button in circle) | P3 |
|
|
150
|
+
| 10 | No max-width on prose | Text containers without max-width causing ultra-wide line lengths | P2 |
|
|
151
|
+
|
|
152
|
+
**Scoring**:
|
|
153
|
+
- 0: Random spacing, nested cards, fixed widths, tiny touch targets
|
|
154
|
+
- 1: Some system but many arbitrary values, cards overused
|
|
155
|
+
- 2: Decent spacing but monotonous or missing rhythm
|
|
156
|
+
- 3: Good system with minor gaps (occasional arbitrary value)
|
|
157
|
+
- 4: Consistent scale, varied rhythm, gap usage, proper touch targets
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### Dimension 5: Motion & Animation Quality
|
|
162
|
+
|
|
163
|
+
| # | Check | What to Look For | Severity |
|
|
164
|
+
|---|-------|-------------------|----------|
|
|
165
|
+
| 1 | Layout property animation | Animating `width`, `height`, `top`, `left`, `margin`, `padding` (causes layout thrashing) | P1 |
|
|
166
|
+
| 2 | Bad easing | Using `ease` (default), `linear`, or `ease-in-out` for UI transitions. Should use exponential curves | P2 |
|
|
167
|
+
| 3 | Bounce/elastic | `cubic-bezier(0.68, -0.55, 0.265, 1.55)` or similar bounce curves. Dated aesthetic | P2 |
|
|
168
|
+
| 4 | No reduced-motion | Missing `@media (prefers-reduced-motion: reduce)` query. Affects ~35% of adults over 40 | P0 |
|
|
169
|
+
| 5 | No motion tokens | No consistent duration/easing system. Random 200ms/300ms/0.5s values | P2 |
|
|
170
|
+
| 6 | Uncapped stagger | Stagger animation over 10 items or total duration > 500ms | P2 |
|
|
171
|
+
| 7 | Premature will-change | `will-change` set in CSS instead of activated on interaction (wastes GPU memory) | P3 |
|
|
172
|
+
| 8 | No exit animation | Elements appear with animation but disappear instantly | P3 |
|
|
173
|
+
| 9 | Slow feedback | Hover/focus/active feedback slower than 150ms | P2 |
|
|
174
|
+
| 10 | Animation on load | Heavy entrance animations on page load that delay content access | P2 |
|
|
175
|
+
|
|
176
|
+
**Scoring**:
|
|
177
|
+
- 0: Layout animations, no reduced-motion, bounce easing, no system
|
|
178
|
+
- 1: Some transform-based but bad easing, missing reduced-motion
|
|
179
|
+
- 2: Decent animations but no token system or missing reduced-motion
|
|
180
|
+
- 3: Good system with minor gaps (occasional bad easing, missing exit animation)
|
|
181
|
+
- 4: Transform+opacity only, exponential easing, reduced-motion, token system, proper stagger
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
### Dimension 6: Interaction States
|
|
186
|
+
|
|
187
|
+
| # | Check | What to Look For | Severity |
|
|
188
|
+
|---|-------|-------------------|----------|
|
|
189
|
+
| 1 | Missing hover | Interactive elements without `:hover` state (no pointer feedback) | P1 |
|
|
190
|
+
| 2 | Missing focus | Interactive elements without `:focus` state (keyboard users invisible) | P0 |
|
|
191
|
+
| 3 | outline: none | `outline: none` or `outline: 0` without replacement focus indicator | P0 |
|
|
192
|
+
| 4 | No focus-visible | Using `:focus` instead of `:focus-visible` (showing focus ring on mouse click) | P2 |
|
|
193
|
+
| 5 | Missing active | No `:active` / pressed state on buttons/links | P2 |
|
|
194
|
+
| 6 | Missing disabled | No visual distinction for disabled state, or `disabled` without opacity/cursor change | P2 |
|
|
195
|
+
| 7 | Missing loading | Async actions (form submit, API calls) without loading feedback | P1 |
|
|
196
|
+
| 8 | Missing error/success | Forms without error/success state indication | P1 |
|
|
197
|
+
| 9 | Placeholder as label | `placeholder` used as the only label for form inputs (disappears on focus) | P1 |
|
|
198
|
+
| 10 | No empty state | Lists/tables without empty state design (blank space when no data) | P2 |
|
|
199
|
+
| 11 | Focus ring quality | Focus ring not meeting 2px solid accent, offset 2px, 3:1 contrast spec | P2 |
|
|
200
|
+
|
|
201
|
+
**Scoring**:
|
|
202
|
+
- 0: No hover, no focus, outline:none everywhere, no loading states
|
|
203
|
+
- 1: Basic hover but missing focus/active, no loading states
|
|
204
|
+
- 2: Hover + focus exist but no focus-visible, missing some states
|
|
205
|
+
- 3: Most states present with minor gaps (missing empty state, imperfect focus ring)
|
|
206
|
+
- 4: All 8 states implemented, focus-visible, proper focus ring, loading/error/success/empty
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
### Dimension 7: Visual Hierarchy
|
|
211
|
+
|
|
212
|
+
| # | Check | What to Look For | Severity |
|
|
213
|
+
|---|-------|-------------------|----------|
|
|
214
|
+
| 1 | Fails squint test | When page is blurred/squinted, cannot identify 1st and 2nd most important elements | P1 |
|
|
215
|
+
| 2 | Primary action unclear | Cannot identify the primary action within 2 seconds of viewing | P1 |
|
|
216
|
+
| 3 | Size-only hierarchy | Hierarchy established only through font size, not combining size + weight + color + space | P2 |
|
|
217
|
+
| 4 | No information grouping | Related content not grouped by proximity. Equal spacing between related and unrelated items | P2 |
|
|
218
|
+
| 5 | Visual competition | Multiple elements competing for attention at the same visual weight | P1 |
|
|
219
|
+
| 6 | No 3:1 ratio | Less than 3:1 size ratio between major hierarchy levels (e.g., h1 vs body) | P2 |
|
|
220
|
+
| 7 | Decoration over content | Visual decorations (icons, borders, backgrounds) draw more attention than content | P2 |
|
|
221
|
+
| 8 | No progressive disclosure | All information shown at once. No layering of detail (summary -> detail on demand) | P3 |
|
|
222
|
+
|
|
223
|
+
**Scoring**:
|
|
224
|
+
- 0: Everything same visual weight, no clear action, fails squint test
|
|
225
|
+
- 1: Some size differences but no clear hierarchy system
|
|
226
|
+
- 2: Basic hierarchy via size but missing weight/color/space dimensions
|
|
227
|
+
- 3: Good hierarchy with minor issues (occasional visual competition)
|
|
228
|
+
- 4: Clear squint test pass, obvious primary action, multi-dimension hierarchy, progressive disclosure
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
### Dimension 8: Responsive Design
|
|
233
|
+
|
|
234
|
+
| # | Check | What to Look For | Severity |
|
|
235
|
+
|---|-------|-------------------|----------|
|
|
236
|
+
| 1 | Fixed widths | Hard-coded pixel widths that break below certain viewport sizes | P1 |
|
|
237
|
+
| 2 | Horizontal scroll | Content causing horizontal scrollbar on viewports >= 320px | P0 |
|
|
238
|
+
| 3 | Hidden content | Content hidden on mobile via `display:none` instead of being adapted/restructured | P2 |
|
|
239
|
+
| 4 | No container queries | Components that should adapt to container size still using viewport media queries only | P3 |
|
|
240
|
+
| 5 | Small mobile text | Text below 14px on mobile viewports (illegible without zoom) | P1 |
|
|
241
|
+
| 6 | Tiny mobile targets | Touch targets below 44x44px on mobile (frustrating to tap) | P1 |
|
|
242
|
+
| 7 | No breakpoints | Single layout for all viewports. No media queries or responsive grid | P1 |
|
|
243
|
+
| 8 | Broken images | Images that overflow or distort on narrow viewports (missing max-width:100%) | P1 |
|
|
244
|
+
| 9 | No viewport meta | Missing `<meta name="viewport" content="width=device-width, initial-scale=1">` | P0 |
|
|
245
|
+
| 10 | Desktop-first only | Only desktop layout works properly. Mobile is broken or unusable | P1 |
|
|
246
|
+
|
|
247
|
+
**Scoring**:
|
|
248
|
+
- 0: No responsive design, horizontal scroll, broken on mobile
|
|
249
|
+
- 1: Basic media queries but many breakage points
|
|
250
|
+
- 2: Decent mobile but some fixed widths or small targets
|
|
251
|
+
- 3: Good responsive with minor issues (missing container queries, occasional small target)
|
|
252
|
+
- 4: Fluid design, proper breakpoints, container queries, 44px targets, no overflow
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
### Dimension 9: Cognitive Load
|
|
257
|
+
|
|
258
|
+
Evaluate information processing burden per Impeccable's cognitive load principles.
|
|
259
|
+
|
|
260
|
+
| Check | Detection | Score Impact |
|
|
261
|
+
|-------|-----------|-------------|
|
|
262
|
+
| Information overload | >7 distinct data groups visible simultaneously without progressive disclosure | -1 per violation |
|
|
263
|
+
| Choice overload | >5 equally-weighted CTAs in one viewport | -1 |
|
|
264
|
+
| No progressive disclosure | All details shown at once, no expand/collapse or summary→detail | -1 |
|
|
265
|
+
| Redundant copy | Heading text repeated in body paragraph (>50% overlap) | -0.5 |
|
|
266
|
+
| Generic labels | "OK/Submit/Cancel" buttons without verb+object | -0.5 |
|
|
267
|
+
| Error without guidance | Error messages missing what+why+fix formula | -1 |
|
|
268
|
+
| Empty state without action | Data list shows "No data" without create/import guidance | -0.5 |
|
|
269
|
+
| No visual grouping | Related items not proximity-grouped or separated from unrelated | -1 |
|
|
270
|
+
|
|
271
|
+
### Dimension 10: Dark Mode Quality
|
|
272
|
+
|
|
273
|
+
Only score if dark mode exists. Skip and note "N/A — no dark mode" if not present.
|
|
274
|
+
|
|
275
|
+
| Check | Detection | Score Impact |
|
|
276
|
+
|-------|-----------|-------------|
|
|
277
|
+
| Pure black background | #000 or rgb(0,0,0) as base background | -2 |
|
|
278
|
+
| Same font weights as light | No weight reduction in dark theme | -1 |
|
|
279
|
+
| Saturated accents on dark | Same chroma values as light theme (vibrating colors) | -1 |
|
|
280
|
+
| No surface hierarchy | All dark surfaces same lightness (flat, no depth) | -1 |
|
|
281
|
+
| Dangerous combinations | Gray text on colored bg, saturated red-green adjacent | -1 |
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Phase 4: Generate Scan Report
|
|
286
|
+
|
|
287
|
+
Output: `<session>/scan/scan-report.md`
|
|
288
|
+
|
|
289
|
+
Report structure:
|
|
290
|
+
|
|
291
|
+
```markdown
|
|
292
|
+
# UI Polish Scan Report
|
|
293
|
+
|
|
294
|
+
## Overall Score: X/36 (<rating-band>)
|
|
295
|
+
|
|
296
|
+
## Anti-Patterns Verdict (Dimension 1)
|
|
297
|
+
Score: X/4
|
|
298
|
+
<verdict summary -- this section comes FIRST as it is most important>
|
|
299
|
+
<list of detected AI slop tells>
|
|
300
|
+
|
|
301
|
+
## Per-Dimension Scores
|
|
302
|
+
|
|
303
|
+
| Dimension | Score | Key Finding |
|
|
304
|
+
|-----------|-------|-------------|
|
|
305
|
+
| 1. Anti-Patterns | X/4 | <one-line summary> |
|
|
306
|
+
| 2. Color Quality | X/4 | <one-line summary> |
|
|
307
|
+
| 3. Typography | X/4 | <one-line summary> |
|
|
308
|
+
| 4. Spacing/Layout | X/4 | <one-line summary> |
|
|
309
|
+
| 5. Motion | X/4 | <one-line summary> |
|
|
310
|
+
| 6. Interaction States | X/4 | <one-line summary> |
|
|
311
|
+
| 7. Visual Hierarchy | X/4 | <one-line summary> |
|
|
312
|
+
| 8. Responsive | X/4 | <one-line summary> |
|
|
313
|
+
| 9. Cognitive Load | X/4 | <one-line summary> |
|
|
314
|
+
| 10. Dark Mode | X/4 or N/A | <one-line summary> |
|
|
315
|
+
|
|
316
|
+
## Issue Inventory
|
|
317
|
+
|
|
318
|
+
### P0 -- Blocking
|
|
319
|
+
| # | Dimension | Location | Description |
|
|
320
|
+
|---|-----------|----------|-------------|
|
|
321
|
+
| 1 | ... | file:line | ... |
|
|
322
|
+
|
|
323
|
+
### P1 -- Major
|
|
324
|
+
...
|
|
325
|
+
|
|
326
|
+
### P2 -- Minor
|
|
327
|
+
...
|
|
328
|
+
|
|
329
|
+
### P3 -- Polish
|
|
330
|
+
...
|
|
331
|
+
|
|
332
|
+
## Patterns & Systemic Issues
|
|
333
|
+
<recurring problems that affect multiple locations>
|
|
334
|
+
|
|
335
|
+
## Positive Findings
|
|
336
|
+
<what works well -- important for optimizer to not break>
|
|
337
|
+
|
|
338
|
+
## Scan Metadata
|
|
339
|
+
- Target: <target>
|
|
340
|
+
- Files scanned: <count>
|
|
341
|
+
- Screenshots: <yes/no, viewports>
|
|
342
|
+
- Timestamp: <ISO timestamp>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Rating Bands** (total out of 36, or 40 with dark mode):
|
|
346
|
+
- 32-36: Excellent (36-40 with dark mode)
|
|
347
|
+
- 25-31: Good (29-35 with dark mode)
|
|
348
|
+
- 18-24: Acceptable (22-28 with dark mode)
|
|
349
|
+
- 11-17: Poor (15-21 with dark mode)
|
|
350
|
+
- 0-10: Critical (0-14 with dark mode)
|
|
351
|
+
|
|
352
|
+
After writing the report, send completion message:
|
|
353
|
+
```
|
|
354
|
+
mcp__ccw-tools__team_msg(session_id, role="scanner", type="scan_complete", content="Scan complete. Score: X/36. P0: N, P1: N, P2: N, P3: N issues found.")
|
|
355
|
+
SendMessage(participant="coordinator", message="[scanner] SCAN-001 complete. Score: X/36 (<rating-band>). Issues: P0=N P1=N P2=N P3=N. Report: <session>/scan/scan-report.md")
|
|
356
|
+
```
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: verifier
|
|
3
|
+
prefix: VERIFY
|
|
4
|
+
inner_loop: false
|
|
5
|
+
message_types: [verify_passed, verify_failed, fix_required, error]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Verification & Regression Check
|
|
9
|
+
|
|
10
|
+
Before/after comparison verification. Re-scan fixed code against same 8 dimensions, calculate improvement, detect regressions. Acts as Critic in the optimizer<->verifier Generator-Critic loop.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Original scan report | <session>/scan/scan-report.md | Yes |
|
|
17
|
+
| Fix log | <session>/optimization/fix-log.md | Yes |
|
|
18
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
|
|
19
|
+
| Anti-patterns catalog | specs/anti-patterns.md | Yes |
|
|
20
|
+
| Design standards | specs/design-standards.md | Yes |
|
|
21
|
+
| Scoring guide | specs/scoring-guide.md | Yes |
|
|
22
|
+
|
|
23
|
+
1. Extract session path from task description
|
|
24
|
+
2. Read original scan report: parse before-scores per dimension and issue inventory
|
|
25
|
+
3. Read fix log: parse all fixes applied and files modified
|
|
26
|
+
4. Read specs for scoring reference
|
|
27
|
+
|
|
28
|
+
## Phase 3: Verification
|
|
29
|
+
|
|
30
|
+
### Step 1: Re-scan Fixed Code
|
|
31
|
+
|
|
32
|
+
Apply the same 8-dimension scan as the scanner role (reference roles/scanner/role.md Phase 3) to the current state of files. Use identical checklist items and scoring criteria.
|
|
33
|
+
|
|
34
|
+
If Chrome DevTools available:
|
|
35
|
+
- Take screenshots at same 3 viewports (mobile 375px, tablet 768px, desktop 1440px)
|
|
36
|
+
- Save to `<session>/evidence/after-mobile.png`, `after-tablet.png`, `after-desktop.png`
|
|
37
|
+
|
|
38
|
+
### Step 2: Calculate Score Delta
|
|
39
|
+
|
|
40
|
+
For each dimension, compare before and after:
|
|
41
|
+
|
|
42
|
+
| Dimension | Before | After | Delta | Status |
|
|
43
|
+
|-----------|--------|-------|-------|--------|
|
|
44
|
+
| 1. Anti-Patterns | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
45
|
+
| 2. Color Quality | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
46
|
+
| 3. Typography | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
47
|
+
| 4. Spacing/Layout | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
48
|
+
| 5. Motion | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
49
|
+
| 6. Interaction States | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
50
|
+
| 7. Visual Hierarchy | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
51
|
+
| 8. Responsive | X/4 | Y/4 | +/-N | improved/same/regressed |
|
|
52
|
+
| **Total** | X/32 | Y/32 | +/-N | |
|
|
53
|
+
|
|
54
|
+
### Step 3: Regression Detection
|
|
55
|
+
|
|
56
|
+
Check for NEW issues not present in original scan report:
|
|
57
|
+
|
|
58
|
+
| Check | Method |
|
|
59
|
+
|-------|--------|
|
|
60
|
+
| New issues introduced | Compare current issue inventory against original. Any issue not in original = regression |
|
|
61
|
+
| Score dropped | Any dimension score lower than before = regression |
|
|
62
|
+
| Positive findings broken | Items from original "Positive Findings" no longer hold |
|
|
63
|
+
| Build broken | Modified files have syntax errors or lint failures |
|
|
64
|
+
|
|
65
|
+
Classify regressions:
|
|
66
|
+
- **Critical**: Score dropped in any dimension, WCAG AA violation introduced, build broken
|
|
67
|
+
- **Non-critical**: New minor issues introduced but overall score improved
|
|
68
|
+
|
|
69
|
+
### Step 4: Determine Signal
|
|
70
|
+
|
|
71
|
+
| Condition | Signal |
|
|
72
|
+
|-----------|--------|
|
|
73
|
+
| No regressions AND total score >= before score | `verify_passed` |
|
|
74
|
+
| Non-critical regressions AND total score improved | `verify_failed` (fixable) |
|
|
75
|
+
| Critical regressions OR total score dropped | `fix_required` (urgent) |
|
|
76
|
+
|
|
77
|
+
## Phase 4: Generate Verification Report
|
|
78
|
+
|
|
79
|
+
Output: `<session>/verification/verify-report.md`
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
# Verification Report
|
|
83
|
+
|
|
84
|
+
## Verdict: <PASSED | FAILED | FIX REQUIRED>
|
|
85
|
+
|
|
86
|
+
## Score Comparison
|
|
87
|
+
|
|
88
|
+
| Dimension | Before | After | Delta |
|
|
89
|
+
|-----------|--------|-------|-------|
|
|
90
|
+
| 1. Anti-Patterns | X/4 | Y/4 | +N |
|
|
91
|
+
| 2. Color Quality | X/4 | Y/4 | +N |
|
|
92
|
+
| 3. Typography | X/4 | Y/4 | +N |
|
|
93
|
+
| 4. Spacing/Layout | X/4 | Y/4 | +N |
|
|
94
|
+
| 5. Motion | X/4 | Y/4 | +N |
|
|
95
|
+
| 6. Interaction States | X/4 | Y/4 | +N |
|
|
96
|
+
| 7. Visual Hierarchy | X/4 | Y/4 | +N |
|
|
97
|
+
| 8. Responsive | X/4 | Y/4 | +N |
|
|
98
|
+
| **Total** | **X/32** | **Y/32** | **+N** |
|
|
99
|
+
|
|
100
|
+
## Before Rating: <rating-band> -> After Rating: <rating-band>
|
|
101
|
+
|
|
102
|
+
## Regressions Found
|
|
103
|
+
<list of regressions with location, severity, description>
|
|
104
|
+
<or "None" if clean>
|
|
105
|
+
|
|
106
|
+
## Remaining Issues
|
|
107
|
+
<issues from original scan that were NOT fixed>
|
|
108
|
+
|
|
109
|
+
## Improvements
|
|
110
|
+
<per-dimension improvement details>
|
|
111
|
+
|
|
112
|
+
## Screenshots
|
|
113
|
+
- Before: <session>/evidence/before-*.png
|
|
114
|
+
- After: <session>/evidence/after-*.png
|
|
115
|
+
<or "Chrome DevTools not available" if no screenshots>
|
|
116
|
+
|
|
117
|
+
## Metadata
|
|
118
|
+
- Original scan: <session>/scan/scan-report.md
|
|
119
|
+
- Fix log: <session>/optimization/fix-log.md
|
|
120
|
+
- GC round: <round number>
|
|
121
|
+
- Timestamp: <ISO timestamp>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
After writing the report, send signal-appropriate message:
|
|
125
|
+
|
|
126
|
+
**If verify_passed**:
|
|
127
|
+
```
|
|
128
|
+
mcp__ccw-tools__team_msg(session_id, role="verifier", type="verify_passed", content="Verification passed. Score: before X/32 -> after Y/32 (+N). No regressions.")
|
|
129
|
+
SendMessage(participant="coordinator", message="[verifier] VERIFY-001 passed. Score: X/32 -> Y/32 (+N). No regressions. Report: <session>/verification/verify-report.md")
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**If verify_failed**:
|
|
133
|
+
```
|
|
134
|
+
mcp__ccw-tools__team_msg(session_id, role="verifier", type="verify_failed", content="Verification failed. N non-critical regressions found. Score: X/32 -> Y/32.")
|
|
135
|
+
SendMessage(participant="coordinator", message="[verifier] VERIFY-001 failed. N regressions (non-critical). Score: X/32 -> Y/32. Report: <session>/verification/verify-report.md")
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**If fix_required**:
|
|
139
|
+
```
|
|
140
|
+
mcp__ccw-tools__team_msg(session_id, role="verifier", type="fix_required", content="Fix required. N critical regressions. Score dropped: X/32 -> Y/32.")
|
|
141
|
+
SendMessage(participant="coordinator", message="[verifier] VERIFY-001 fix_required. N critical regressions. Score: X/32 -> Y/32 (DROPPED). Report: <session>/verification/verify-report.md")
|
|
142
|
+
```
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Anti-Pattern Catalog
|
|
2
|
+
|
|
3
|
+
Complete catalog of UI design anti-patterns from Impeccable's design audit knowledge. Used by scanner for detection and optimizer for remediation.
|
|
4
|
+
|
|
5
|
+
## The AI Slop Test
|
|
6
|
+
|
|
7
|
+
> "If you showed this to someone and said 'AI made this,' would they believe you immediately? If yes, that is the problem."
|
|
8
|
+
|
|
9
|
+
AI-generated UIs share recognizable fingerprints. These are not inherently bad techniques -- they become problems when used as defaults without intentional design decisions. The issue is not the technique itself but the lack of thought behind it.
|
|
10
|
+
|
|
11
|
+
## AI Slop Tells (20 Items)
|
|
12
|
+
|
|
13
|
+
### 1. AI Color Palette
|
|
14
|
+
**Pattern**: Cyan-on-dark (#00d4ff, #06b6d4), purple-to-blue gradients (#8b5cf6 to #3b82f6), neon accents on dark backgrounds.
|
|
15
|
+
**Why it is a tell**: Every AI model defaults to the same "futuristic" palette. It signals zero design intent.
|
|
16
|
+
**Detection**: Search for cyan/purple/neon values on dark backgrounds. Check if palette could be from any Tailwind dark template.
|
|
17
|
+
**Severity**: P1
|
|
18
|
+
|
|
19
|
+
### 2. Gradient Text for Impact
|
|
20
|
+
**Pattern**: `background-clip: text` + gradient applied to metrics, headings, or hero text.
|
|
21
|
+
**Why it is a tell**: AI uses gradient text as a crutch to make numbers and titles feel "premium." Real typography achieves emphasis through weight, size, and space.
|
|
22
|
+
**Detection**: Search for `background-clip: text` or `-webkit-background-clip: text`.
|
|
23
|
+
**Severity**: P1
|
|
24
|
+
|
|
25
|
+
### 3. Default Dark Mode with Glowing Accents
|
|
26
|
+
**Pattern**: Dark background (gray-900/950) as default with glowing/neon accent colors. No light mode offered or light mode is an afterthought.
|
|
27
|
+
**Why it is a tell**: Dark mode with glow effects requires no real color decisions. It hides contrast problems and creates false sophistication.
|
|
28
|
+
**Detection**: Check default theme. If dark with glow `box-shadow` or neon colors, flag it.
|
|
29
|
+
**Severity**: P2
|
|
30
|
+
|
|
31
|
+
### 4. Glassmorphism Everywhere
|
|
32
|
+
**Pattern**: `backdrop-filter: blur()`, glass cards, glow borders (`box-shadow: 0 0 Xpx <color>`), used decoratively on multiple components.
|
|
33
|
+
**Why it is a tell**: Glassmorphism is a valid technique for specific use cases (overlays, elevated surfaces). AI applies it everywhere as the default "modern" aesthetic.
|
|
34
|
+
**Detection**: Count instances of `backdrop-filter: blur`. If > 2 components use it without functional reason, flag.
|
|
35
|
+
**Severity**: P1
|
|
36
|
+
|
|
37
|
+
### 5. Hero Metric Layout
|
|
38
|
+
**Pattern**: Big number (32-48px) + small label underneath + supporting stats in a row + gradient accent or colored bar.
|
|
39
|
+
**Why it is a tell**: This is the universal "AI dashboard" template. Every AI-generated analytics page uses this exact layout.
|
|
40
|
+
**Detection**: Pattern match for large-number + small-label structures repeated in a metrics row/grid.
|
|
41
|
+
**Severity**: P2
|
|
42
|
+
|
|
43
|
+
### 6. Identical Card Grids
|
|
44
|
+
**Pattern**: Same-sized cards with icon + heading + body text repeated 3-6 times in a grid. Equal width, equal height, equal spacing.
|
|
45
|
+
**Why it is a tell**: Real content varies in importance. AI treats all items as equally important because it has no content strategy.
|
|
46
|
+
**Detection**: Grid of 3+ cards with identical structure and sizing. No featured/hero card.
|
|
47
|
+
**Severity**: P2
|
|
48
|
+
|
|
49
|
+
### 7. Nested Cards
|
|
50
|
+
**Pattern**: Cards inside cards. `.card > .card-body > .inner-card`. Multiple layers of bordered containers.
|
|
51
|
+
**Why it is a tell**: AI nests containers to create visual "depth." It actually creates noise and makes hierarchy unclear.
|
|
52
|
+
**Detection**: Search for elements with border/shadow inside elements with border/shadow. Two levels of containment.
|
|
53
|
+
**Severity**: P2
|
|
54
|
+
|
|
55
|
+
### 8. Generic Fonts
|
|
56
|
+
**Pattern**: Inter, Roboto, Arial, Open Sans, Lato, Montserrat, system-ui used as primary font without intentional choice.
|
|
57
|
+
**Why it is a tell**: These are defaults. AI picks them because they are safe. Safe means forgettable.
|
|
58
|
+
**Detection**: Check `font-family` declarations. If primary font is in the generic list, flag.
|
|
59
|
+
**Severity**: P2
|
|
60
|
+
|
|
61
|
+
### 9. Rounded Rectangles with Generic Drop Shadows
|
|
62
|
+
**Pattern**: `border-radius: 8-16px` combined with `box-shadow: 0 1-4px 6-24px rgba(0,0,0,0.05-0.15)` on every container.
|
|
63
|
+
**Why it is a tell**: The "safe shape." Every AI output uses this exact combination because it is never wrong -- but never distinctive either.
|
|
64
|
+
**Detection**: Count elements with both border-radius (8-16px range) and generic box-shadow. If > 5, flag.
|
|
65
|
+
**Severity**: P3
|
|
66
|
+
|
|
67
|
+
### 10. Large Icons Above Every Heading
|
|
68
|
+
**Pattern**: 24-48px icons with rounded corners or colored backgrounds placed above every heading or card title.
|
|
69
|
+
**Why it is a tell**: AI uses icons as visual filler. Real design uses icons sparingly where they aid comprehension.
|
|
70
|
+
**Detection**: Pattern match for icon elements directly above heading elements. If repeated 3+ times, flag.
|
|
71
|
+
**Severity**: P2
|
|
72
|
+
|
|
73
|
+
### 11. One-Side Border Accent
|
|
74
|
+
**Pattern**: `border-left: 3-4px solid <accent-color>` or `border-top` used as the primary accent technique on cards/containers.
|
|
75
|
+
**Why it is a tell**: Lazy accent. It is a shortcut to add "personality" without making real design decisions.
|
|
76
|
+
**Detection**: Search for `border-left: [2-5]px solid` or `border-top: [2-5]px solid` with accent colors.
|
|
77
|
+
**Severity**: P3
|
|
78
|
+
|
|
79
|
+
### 12. Decorative Sparklines
|
|
80
|
+
**Pattern**: Tiny charts, mini-graphs, or trend indicators that look sophisticated but convey no actionable data. Often in card corners.
|
|
81
|
+
**Why it is a tell**: AI adds charts to appear data-driven. If the chart has no axis labels, no values, and no interaction, it is decoration.
|
|
82
|
+
**Detection**: Small SVG/canvas charts (<100px) without labels, tooltips, or legends.
|
|
83
|
+
**Severity**: P2
|
|
84
|
+
|
|
85
|
+
### 13. Bounce/Elastic Easing
|
|
86
|
+
**Pattern**: `cubic-bezier(0.68, -0.55, 0.265, 1.55)`, spring animations, or any easing that overshoots.
|
|
87
|
+
**Why it is a tell**: Bounce easing was trendy circa 2015. AI still defaults to it for "playfulness." It feels dated and tacky in modern UI.
|
|
88
|
+
**Detection**: Search for cubic-bezier with negative values or spring keyword.
|
|
89
|
+
**Severity**: P2
|
|
90
|
+
|
|
91
|
+
### 14. Redundant Copy
|
|
92
|
+
**Pattern**: Intro paragraphs that restate the heading. "Welcome to your Dashboard. This is your dashboard where you can see..."
|
|
93
|
+
**Why it is a tell**: AI generates text to fill space. Real UX uses headings as the message and body for additional context only.
|
|
94
|
+
**Detection**: Compare heading text with first paragraph. If >50% word overlap, flag.
|
|
95
|
+
**Severity**: P3
|
|
96
|
+
|
|
97
|
+
### 15. All Buttons Primary
|
|
98
|
+
**Pattern**: Every button is filled/primary color. No ghost buttons, text links, outline buttons, or secondary variants.
|
|
99
|
+
**Why it is a tell**: AI makes everything important. Real design creates hierarchy: 1 primary, 1-2 secondary, rest tertiary.
|
|
100
|
+
**Detection**: Check button variants. If all buttons have same fill/color treatment, flag.
|
|
101
|
+
**Severity**: P1
|
|
102
|
+
|
|
103
|
+
### 16. Everything Centered
|
|
104
|
+
**Pattern**: `text-align: center` or `justify-content: center` / `align-items: center` on most content blocks including body text.
|
|
105
|
+
**Why it is a tell**: Centering is the safe choice. Real design uses left-alignment for readability, centering only for specific elements (headings, hero).
|
|
106
|
+
**Detection**: Count centered text blocks. If body text is centered, flag. If > 60% of content sections are centered, flag.
|
|
107
|
+
**Severity**: P2
|
|
108
|
+
|
|
109
|
+
### 17. Same Spacing Everywhere
|
|
110
|
+
**Pattern**: Identical padding/margin on all cards, sections, and components. No variation in spacing rhythm.
|
|
111
|
+
**Why it is a tell**: AI applies uniform spacing because it has no sense of content grouping or visual rhythm.
|
|
112
|
+
**Detection**: Extract all padding/margin values. If > 70% are the same value, flag.
|
|
113
|
+
**Severity**: P2
|
|
114
|
+
|
|
115
|
+
### 18. Monospace as Tech Aesthetic
|
|
116
|
+
**Pattern**: Monospace font (Fira Code, JetBrains Mono, Source Code Pro) used for non-code content to appear "techy."
|
|
117
|
+
**Why it is a tell**: AI equates monospace with "developer tool" aesthetic. Real design uses monospace only for actual code.
|
|
118
|
+
**Detection**: Monospace `font-family` on non-`<code>`, non-`<pre>` elements.
|
|
119
|
+
**Severity**: P3
|
|
120
|
+
|
|
121
|
+
### 19. Modal Overuse
|
|
122
|
+
**Pattern**: Modals for confirmations, settings changes, form entries, when inline editing, drawers, or expandable sections would work.
|
|
123
|
+
**Why it is a tell**: Modals are AI's default "interaction" pattern because they are self-contained. Real UX considers context loss and flow interruption.
|
|
124
|
+
**Detection**: Count modal/dialog components. If > 3 modals for non-critical actions, flag.
|
|
125
|
+
**Severity**: P3
|
|
126
|
+
|
|
127
|
+
### 20. Pure Black or Pure White
|
|
128
|
+
**Pattern**: `#000000` or `#ffffff` used as primary background/text colors without any tint.
|
|
129
|
+
**Why it is a tell**: Pure black and white create harsh contrast and feel sterile. Real design tints toward a brand hue.
|
|
130
|
+
**Detection**: Search for `#000`, `#000000`, `rgb(0,0,0)`, `#fff`, `#ffffff`, `rgb(255,255,255)` in styles.
|
|
131
|
+
**Severity**: P1
|
|
132
|
+
|
|
133
|
+
## Scoring Guide
|
|
134
|
+
|
|
135
|
+
| Score | Tells Present | Label |
|
|
136
|
+
|-------|---------------|-------|
|
|
137
|
+
| 0 | 5+ tells | AI Slop Gallery |
|
|
138
|
+
| 1 | 3-4 tells | Heavy AI Influence |
|
|
139
|
+
| 2 | 1-2 tells | Some AI Tells |
|
|
140
|
+
| 3 | Subtle traces only | Mostly Clean |
|
|
141
|
+
| 4 | Zero tells, distinctive | Genuinely Intentional |
|