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,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: a11y-tester
|
|
3
|
+
prefix: A11Y
|
|
4
|
+
inner_loop: false
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Accessibility Tester
|
|
9
|
+
|
|
10
|
+
Test interactive components for keyboard navigation, screen reader compatibility, reduced motion fallback, focus management, and color contrast. Act as Critic in the builder<->a11y-tester Generator-Critic loop. Serve as quality gate before pipeline completion.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Built components | <session>/build/components/*.js, *.css | Yes |
|
|
17
|
+
| Interaction blueprints | <session>/interaction/blueprints/*.md | Yes |
|
|
18
|
+
| Research artifacts | <session>/research/browser-api-audit.json | No |
|
|
19
|
+
| Previous audits | <session>/a11y/a11y-audit-*.md | Only for GC re-audit |
|
|
20
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
|
|
21
|
+
|
|
22
|
+
1. Extract session path from task description
|
|
23
|
+
2. Read all built component files (JS + CSS)
|
|
24
|
+
3. Read interaction blueprints for expected behavior reference
|
|
25
|
+
4. If GC re-audit: read previous audit to track improvement/regression
|
|
26
|
+
5. Load audit history from meta.json for trend analysis
|
|
27
|
+
|
|
28
|
+
## Phase 3: Audit Execution
|
|
29
|
+
|
|
30
|
+
Test 5 accessibility dimensions. For each, evaluate every built component:
|
|
31
|
+
|
|
32
|
+
### Dimension 1: Keyboard Navigation (Weight: 25%)
|
|
33
|
+
|
|
34
|
+
| Check | Method | Pass Criteria |
|
|
35
|
+
|-------|--------|---------------|
|
|
36
|
+
| Tab order | Scan tabindex values, focusable elements | Logical tab order, no tabindex > 0 |
|
|
37
|
+
| Arrow key navigation | Check onKeyDown for ArrowLeft/Right/Up/Down | All navigable items reachable via arrows |
|
|
38
|
+
| Enter/Space activation | Check onKeyDown for Enter, Space | All interactive elements activatable |
|
|
39
|
+
| Escape dismissal | Check onKeyDown for Escape | Overlays/modals dismiss on Escape |
|
|
40
|
+
| Focus trap (overlays) | Check focus cycling logic | Tab stays within overlay when open |
|
|
41
|
+
| No keyboard trap | Verify all states have keyboard exit | Can always Tab/Escape out of component |
|
|
42
|
+
|
|
43
|
+
Score: count(pass) / count(total_checks) * 10
|
|
44
|
+
|
|
45
|
+
### Dimension 2: Screen Reader Compatibility (Weight: 25%)
|
|
46
|
+
|
|
47
|
+
| Check | Method | Pass Criteria |
|
|
48
|
+
|-------|--------|---------------|
|
|
49
|
+
| ARIA role | Scan for role attribute | Appropriate role set (slider, dialog, tablist, etc.) |
|
|
50
|
+
| ARIA label | Scan for aria-label, aria-labelledby | All interactive elements have accessible name |
|
|
51
|
+
| ARIA states | Scan for aria-expanded, aria-selected, aria-hidden | Dynamic states update with interaction |
|
|
52
|
+
| Live regions | Scan for aria-live, aria-atomic | State changes announced (polite/assertive as needed) |
|
|
53
|
+
| Semantic HTML | Check element types | Uses button/a/input where appropriate, not div-only |
|
|
54
|
+
| Alt text | Check img/svg elements | Decorative: aria-hidden; informative: alt/aria-label |
|
|
55
|
+
|
|
56
|
+
Score: count(pass) / count(total_checks) * 10
|
|
57
|
+
|
|
58
|
+
### Dimension 3: Reduced Motion (Weight: 20%)
|
|
59
|
+
|
|
60
|
+
| Check | Method | Pass Criteria |
|
|
61
|
+
|-------|--------|---------------|
|
|
62
|
+
| Media query present | Search CSS for prefers-reduced-motion | @media (prefers-reduced-motion: reduce) exists |
|
|
63
|
+
| Transitions disabled | Check reduced-motion block | transition-duration near 0 or removed |
|
|
64
|
+
| Animations disabled | Check reduced-motion block | animation-duration near 0 or removed |
|
|
65
|
+
| Content still accessible | Verify no content depends on animation | Information conveyed without motion |
|
|
66
|
+
| JS respects preference | Check matchMedia usage | JS checks prefers-reduced-motion before animating |
|
|
67
|
+
|
|
68
|
+
Score: count(pass) / count(total_checks) * 10
|
|
69
|
+
|
|
70
|
+
### Dimension 4: Focus Management (Weight: 20%)
|
|
71
|
+
|
|
72
|
+
| Check | Method | Pass Criteria |
|
|
73
|
+
|-------|--------|---------------|
|
|
74
|
+
| Visible focus indicator | Search CSS for :focus-visible | Visible outline/ring on keyboard focus |
|
|
75
|
+
| Focus contrast | Check outline color against background | >= 3:1 contrast ratio |
|
|
76
|
+
| Focus on open | Check overlay/modal open logic | Focus moves to first interactive element |
|
|
77
|
+
| Focus on close | Check overlay/modal close logic | Focus returns to trigger element |
|
|
78
|
+
| No focus loss | Check state transitions | Focus never moves to non-interactive element |
|
|
79
|
+
| Skip link (page mode) | Check for skip navigation | Present if multiple interactive sections |
|
|
80
|
+
|
|
81
|
+
Score: count(pass) / count(total_checks) * 10
|
|
82
|
+
|
|
83
|
+
### Dimension 5: Color Contrast (Weight: 10%)
|
|
84
|
+
|
|
85
|
+
| Check | Method | Pass Criteria |
|
|
86
|
+
|-------|--------|---------------|
|
|
87
|
+
| Text contrast | Evaluate CSS color vs background | >= 4.5:1 for normal text, >= 3:1 for large text |
|
|
88
|
+
| UI component contrast | Evaluate interactive element borders/fills | >= 3:1 against adjacent colors |
|
|
89
|
+
| Focus indicator contrast | Evaluate outline color | >= 3:1 against background |
|
|
90
|
+
| State indication | Check non-color state indicators | State not conveyed by color alone |
|
|
91
|
+
|
|
92
|
+
Score: count(pass) / count(total_checks) * 10
|
|
93
|
+
|
|
94
|
+
### Overall Score Calculation
|
|
95
|
+
|
|
96
|
+
`overallScore = round(keyboard*0.25 + screenReader*0.25 + reducedMotion*0.20 + focus*0.20 + contrast*0.10)`
|
|
97
|
+
|
|
98
|
+
### Issue Classification
|
|
99
|
+
|
|
100
|
+
| Severity | Definition | Examples |
|
|
101
|
+
|----------|-----------|----------|
|
|
102
|
+
| Critical | Component unusable for assistive tech users | No keyboard access, no ARIA role, focus trap |
|
|
103
|
+
| High | Significant barrier, workaround exists | Missing aria-label, no reduced motion, poor focus |
|
|
104
|
+
| Medium | Minor inconvenience | Suboptimal tab order, missing live region |
|
|
105
|
+
| Low | Enhancement opportunity | Could improve contrast, better semantic HTML |
|
|
106
|
+
|
|
107
|
+
### Signal Determination
|
|
108
|
+
|
|
109
|
+
| Condition | Signal |
|
|
110
|
+
|-----------|--------|
|
|
111
|
+
| 0 critical AND 0 high issues | `a11y_passed` (GC CONVERGED) |
|
|
112
|
+
| 0 critical AND high_count > 0 | `a11y_result` (GC REVISION NEEDED) |
|
|
113
|
+
| critical_count > 0 | `fix_required` (CRITICAL FIX NEEDED) |
|
|
114
|
+
|
|
115
|
+
## Phase 4: Report & Output
|
|
116
|
+
|
|
117
|
+
1. Write audit report to `<session>/a11y/a11y-audit-{NNN}.md`:
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
# A11y Audit Report - {NNN}
|
|
121
|
+
|
|
122
|
+
## Summary
|
|
123
|
+
- **Overall Score**: X/10
|
|
124
|
+
- **Signal**: a11y_passed | a11y_result | fix_required
|
|
125
|
+
- **Critical**: N | **High**: N | **Medium**: N | **Low**: N
|
|
126
|
+
|
|
127
|
+
## Dimension Scores
|
|
128
|
+
|
|
129
|
+
| Dimension | Score | Weight | Weighted |
|
|
130
|
+
|-----------|-------|--------|----------|
|
|
131
|
+
| Keyboard Navigation | X/10 | 25% | X.XX |
|
|
132
|
+
| Screen Reader | X/10 | 25% | X.XX |
|
|
133
|
+
| Reduced Motion | X/10 | 20% | X.XX |
|
|
134
|
+
| Focus Management | X/10 | 20% | X.XX |
|
|
135
|
+
| Color Contrast | X/10 | 10% | X.XX |
|
|
136
|
+
|
|
137
|
+
## Issues
|
|
138
|
+
|
|
139
|
+
### Critical
|
|
140
|
+
- [C-001] {description} | File: {file}:{line} | Fix: {remediation}
|
|
141
|
+
|
|
142
|
+
### High
|
|
143
|
+
- [H-001] {description} | File: {file}:{line} | Fix: {remediation}
|
|
144
|
+
|
|
145
|
+
### Medium
|
|
146
|
+
- [M-001] {description} | File: {file}:{line} | Fix: {remediation}
|
|
147
|
+
|
|
148
|
+
## GC Loop Status
|
|
149
|
+
- **Signal**: {signal}
|
|
150
|
+
- **Action Required**: {none | builder fix | escalate}
|
|
151
|
+
|
|
152
|
+
## Trend (if previous audit exists)
|
|
153
|
+
- Previous score: X/10 -> Current: X/10 ({improving|stable|declining})
|
|
154
|
+
- Resolved issues: [list]
|
|
155
|
+
- New issues: [list]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
2. Update `<session>/wisdom/.msg/meta.json` under `a11y-tester` namespace:
|
|
159
|
+
- Read existing -> merge `{ "a11y-tester": { audit_id, score, critical_count, high_count, signal, timestamp } }` -> write back
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: builder
|
|
3
|
+
prefix: BUILD
|
|
4
|
+
inner_loop: true
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Interactive Component Builder
|
|
9
|
+
|
|
10
|
+
Implement vanilla JS + CSS interactive components from interaction blueprints. Zero dependencies, ES modules, progressive enhancement, GPU-only animations, touch-aware. Act as Generator in the builder<->a11y-tester Generator-Critic loop.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Interaction blueprints | <session>/interaction/blueprints/*.md | Yes |
|
|
17
|
+
| Research artifacts | <session>/research/*.json | Yes |
|
|
18
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
|
|
19
|
+
| A11y audit feedback | <session>/a11y/a11y-audit-*.md | Only for GC fix tasks |
|
|
20
|
+
|
|
21
|
+
1. Extract session path from task description
|
|
22
|
+
2. Read interaction blueprint for target component
|
|
23
|
+
3. Read research artifacts: browser-api-audit.json (API availability), pattern-reference.json (reference patterns)
|
|
24
|
+
4. Detect task type from subject: numbered -> New component, "fix" -> GC fix
|
|
25
|
+
5. If GC fix task: read latest a11y audit feedback
|
|
26
|
+
|
|
27
|
+
## Phase 3: Implementation Execution
|
|
28
|
+
|
|
29
|
+
**Component Implementation (BUILD-001, BUILD-002, etc.)**:
|
|
30
|
+
|
|
31
|
+
### JavaScript (ES Module)
|
|
32
|
+
Implement component class in `<session>/build/components/{name}.js`:
|
|
33
|
+
|
|
34
|
+
```javascript
|
|
35
|
+
// Structure template (adapt to component type)
|
|
36
|
+
export class ComponentName {
|
|
37
|
+
// --- Configuration ---
|
|
38
|
+
static defaults = { /* configurable params from blueprint */ };
|
|
39
|
+
|
|
40
|
+
// --- Lifecycle ---
|
|
41
|
+
constructor(element, options = {}) { /* merge options, query DOM, bind events */ }
|
|
42
|
+
init() { /* setup observers, initial state */ }
|
|
43
|
+
destroy() { /* cleanup: remove listeners, disconnect observers */ }
|
|
44
|
+
|
|
45
|
+
// --- State Machine ---
|
|
46
|
+
#state = 'idle';
|
|
47
|
+
#setState(next) { /* validate transition, update, trigger side effects */ }
|
|
48
|
+
|
|
49
|
+
// --- Event Handlers (from blueprint event flow map) ---
|
|
50
|
+
#onPointerDown(e) { /* setPointerCapture, transition state */ }
|
|
51
|
+
#onPointerMove(e) { /* lerp interpolation, update transform */ }
|
|
52
|
+
#onPointerUp(e) { /* releasePointerCapture, settle animation */ }
|
|
53
|
+
#onKeyDown(e) { /* keyboard mapping from blueprint */ }
|
|
54
|
+
|
|
55
|
+
// --- Animation ---
|
|
56
|
+
#lerp(current, target, speed) { return current + (target - current) * speed; }
|
|
57
|
+
#animate() { /* requestAnimationFrame loop, GPU-only transforms */ }
|
|
58
|
+
|
|
59
|
+
// --- Observers ---
|
|
60
|
+
#resizeObserver = null; // responsive behavior
|
|
61
|
+
#intersectionObserver = null; // scroll triggers
|
|
62
|
+
|
|
63
|
+
// --- Accessibility ---
|
|
64
|
+
#announceToScreenReader(message) { /* aria-live region update */ }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Auto-init: progressive enhancement
|
|
68
|
+
document.querySelectorAll('[data-component-name]').forEach(el => {
|
|
69
|
+
new ComponentName(el);
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Requirements:
|
|
74
|
+
- Pure ES module with `export` (no CommonJS, no bundler)
|
|
75
|
+
- Class-based with private fields (#)
|
|
76
|
+
- Constructor accepts DOM element + options object
|
|
77
|
+
- State machine from blueprint with validated transitions
|
|
78
|
+
- Event handlers from blueprint event flow map
|
|
79
|
+
- Lerp interpolation for smooth drag/follow (speed from blueprint)
|
|
80
|
+
- requestAnimationFrame for frame-synced updates
|
|
81
|
+
- setPointerCapture for reliable drag tracking
|
|
82
|
+
- ResizeObserver for responsive layout adjustments
|
|
83
|
+
- IntersectionObserver for scroll-triggered behavior (when applicable)
|
|
84
|
+
- Proper cleanup in destroy() method
|
|
85
|
+
- Auto-init via data attribute for progressive enhancement
|
|
86
|
+
|
|
87
|
+
### CSS (Custom Properties)
|
|
88
|
+
Implement styles in `<session>/build/components/{name}.css`:
|
|
89
|
+
|
|
90
|
+
```css
|
|
91
|
+
/* Structure template */
|
|
92
|
+
/* --- Custom Properties (configurable) --- */
|
|
93
|
+
.component-name {
|
|
94
|
+
--component-duration: 400ms;
|
|
95
|
+
--component-easing: cubic-bezier(0.16, 1, 0.3, 1);
|
|
96
|
+
--component-color-primary: #1a1a2e;
|
|
97
|
+
/* ... from blueprint animation choreography */
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* --- Base Layout (works without JS) --- */
|
|
101
|
+
.component-name { /* progressive enhancement base */ }
|
|
102
|
+
|
|
103
|
+
/* --- States (from blueprint state machine) --- */
|
|
104
|
+
.component-name[data-state="idle"] { }
|
|
105
|
+
.component-name[data-state="hover"] { }
|
|
106
|
+
.component-name[data-state="active"] { }
|
|
107
|
+
.component-name[data-state="dragging"] { }
|
|
108
|
+
|
|
109
|
+
/* --- Animations (GPU-only: transform + opacity) --- */
|
|
110
|
+
.component-name__element {
|
|
111
|
+
transform: translateX(0);
|
|
112
|
+
opacity: 1;
|
|
113
|
+
transition: transform var(--component-duration) var(--component-easing),
|
|
114
|
+
opacity var(--component-duration) var(--component-easing);
|
|
115
|
+
will-change: transform, opacity;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* --- Focus Styles --- */
|
|
119
|
+
.component-name:focus-visible {
|
|
120
|
+
outline: 2px solid var(--component-focus-color, #4a9eff);
|
|
121
|
+
outline-offset: 2px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* --- Reduced Motion --- */
|
|
125
|
+
@media (prefers-reduced-motion: reduce) {
|
|
126
|
+
.component-name,
|
|
127
|
+
.component-name * {
|
|
128
|
+
transition-duration: 0.01ms !important;
|
|
129
|
+
animation-duration: 0.01ms !important;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* --- Responsive --- */
|
|
134
|
+
@media (max-width: 768px) { /* touch-optimized sizes */ }
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Requirements:
|
|
138
|
+
- CSS custom properties for all configurable values (no preprocessor)
|
|
139
|
+
- Base layout works without JavaScript (progressive enhancement)
|
|
140
|
+
- State-driven via data attributes (`data-state`, `data-active`)
|
|
141
|
+
- GPU-only animations: transform + opacity ONLY (no width/height/top/left)
|
|
142
|
+
- `will-change` on animated elements
|
|
143
|
+
- `prefers-reduced-motion` media query with instant transitions
|
|
144
|
+
- `focus-visible` for keyboard-only focus ring
|
|
145
|
+
- Responsive breakpoints for touch targets (min 44x44px)
|
|
146
|
+
- No inline styles from JS -- use CSS classes and custom properties
|
|
147
|
+
|
|
148
|
+
### Native Platform APIs (prefer over custom implementations)
|
|
149
|
+
|
|
150
|
+
**Dialog API** (`<dialog>`):
|
|
151
|
+
- Use `<dialog>` for modals — provides built-in focus trap and backdrop
|
|
152
|
+
- `dialog.showModal()` for modal (with backdrop, escape-to-close, focus trap)
|
|
153
|
+
- `dialog.show()` for non-modal
|
|
154
|
+
- `dialog.close()` to dismiss
|
|
155
|
+
- Style `::backdrop` pseudo-element for overlay
|
|
156
|
+
- Returns focus to trigger element on close
|
|
157
|
+
- Add `inert` attribute to siblings when modal is open (prevents background interaction)
|
|
158
|
+
|
|
159
|
+
**Popover API** (native tooltips/dropdowns):
|
|
160
|
+
- `<div popover>` for light-dismiss popovers (click-outside-to-close)
|
|
161
|
+
- `<button popovertarget="id">` for trigger
|
|
162
|
+
- Auto-stacking (no z-index management needed)
|
|
163
|
+
- Built-in accessibility (focus management, escape-to-close)
|
|
164
|
+
- Use for: tooltips, dropdown menus, date pickers, color pickers
|
|
165
|
+
|
|
166
|
+
**CSS Anchor Positioning** (Chrome 125+, progressive enhancement):
|
|
167
|
+
- `anchor-name: --trigger` on trigger element
|
|
168
|
+
- `position-anchor: --trigger` on positioned element
|
|
169
|
+
- `@position-try` for fallback positioning
|
|
170
|
+
- Fallback: `position: fixed` with JS-calculated coordinates
|
|
171
|
+
|
|
172
|
+
**GC Fix Mode (BUILD-fix-N)**:
|
|
173
|
+
- Parse a11y audit feedback for specific issues
|
|
174
|
+
- Re-read affected component files
|
|
175
|
+
- Apply targeted fixes: missing ARIA attributes, keyboard handlers, focus management, contrast adjustments
|
|
176
|
+
- Re-write affected files
|
|
177
|
+
- Signal `build_revision` instead of `build_ready`
|
|
178
|
+
|
|
179
|
+
## Phase 4: Self-Validation & Output
|
|
180
|
+
|
|
181
|
+
1. Zero-dependency check:
|
|
182
|
+
|
|
183
|
+
| Check | Pass Criteria |
|
|
184
|
+
|-------|---------------|
|
|
185
|
+
| No imports from npm | No `import` from node_modules paths |
|
|
186
|
+
| No require() | No CommonJS require statements |
|
|
187
|
+
| ES module exports | Uses `export class` or `export function` |
|
|
188
|
+
| No build tools needed | Runs directly in browser with `<script type="module">` |
|
|
189
|
+
|
|
190
|
+
2. State machine completeness:
|
|
191
|
+
|
|
192
|
+
| Check | Pass Criteria |
|
|
193
|
+
|-------|---------------|
|
|
194
|
+
| All states from blueprint | Every blueprint state has corresponding code path |
|
|
195
|
+
| All transitions | Every transition has handler code |
|
|
196
|
+
| Error recovery | All states can reach idle via reset |
|
|
197
|
+
|
|
198
|
+
3. Accessibility baseline:
|
|
199
|
+
|
|
200
|
+
| Check | Pass Criteria |
|
|
201
|
+
|-------|---------------|
|
|
202
|
+
| Keyboard handlers | onKeyDown handles Enter, Space, Escape, Arrows |
|
|
203
|
+
| ARIA attributes | role, aria-label, aria-expanded (as needed) set |
|
|
204
|
+
| Focus management | tabindex, focus-visible styles present |
|
|
205
|
+
| Reduced motion | prefers-reduced-motion media query in CSS |
|
|
206
|
+
|
|
207
|
+
4. Performance baseline:
|
|
208
|
+
|
|
209
|
+
| Check | Pass Criteria |
|
|
210
|
+
|-------|---------------|
|
|
211
|
+
| GPU-only transforms | No width/height/top/left in transitions |
|
|
212
|
+
| No forced reflow | No offsetWidth/getBoundingClientRect in animation loop |
|
|
213
|
+
| Cleanup | destroy() disconnects all observers and listeners |
|
|
214
|
+
|
|
215
|
+
5. Update `<session>/wisdom/.msg/meta.json` under `builder` namespace:
|
|
216
|
+
- Read existing -> merge `{ "builder": { task_type, component_name, file_count, output_dir, states_implemented, events_bound } }` -> write back
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Analyze Task
|
|
2
|
+
|
|
3
|
+
Parse user task -> detect interactive component scope -> identify browser APIs -> determine pipeline mode.
|
|
4
|
+
|
|
5
|
+
**CONSTRAINT**: Text-level analysis only. NO source code reading, NO codebase exploration.
|
|
6
|
+
|
|
7
|
+
## Signal Detection
|
|
8
|
+
|
|
9
|
+
| Keywords | Capability | Pipeline Hint |
|
|
10
|
+
|----------|------------|---------------|
|
|
11
|
+
| split, compare, before/after, slider, divider | split-compare | single |
|
|
12
|
+
| gallery, carousel, scroll-snap, horizontal scroll | scroll-snap-gallery | gallery |
|
|
13
|
+
| lightbox, modal, overlay, fullscreen view | lightbox | single |
|
|
14
|
+
| scroll reveal, appear on scroll, fade in, stagger | scroll-reveal | single or gallery |
|
|
15
|
+
| glass, terminal, frosted, blur, backdrop | glass-terminal | single |
|
|
16
|
+
| lens, magnify, zoom, loupe | lens-effect | single |
|
|
17
|
+
| drag, resize, pointer, touch | pointer-interaction | single |
|
|
18
|
+
| page, landing, sections, multi-section | interactive-page | page |
|
|
19
|
+
| multiple components, collection, set | multi-component | gallery or page |
|
|
20
|
+
|
|
21
|
+
## Scope Determination
|
|
22
|
+
|
|
23
|
+
| Signal | Pipeline Mode |
|
|
24
|
+
|--------|---------------|
|
|
25
|
+
| Single component mentioned | single |
|
|
26
|
+
| Gallery or scroll-based multi-component | gallery |
|
|
27
|
+
| Full interactive page or multi-section | page |
|
|
28
|
+
| Unclear | ask user |
|
|
29
|
+
|
|
30
|
+
## Complexity Scoring
|
|
31
|
+
|
|
32
|
+
| Factor | Points |
|
|
33
|
+
|--------|--------|
|
|
34
|
+
| Single component | +1 |
|
|
35
|
+
| Gallery / scroll collection | +2 |
|
|
36
|
+
| Full interactive page | +3 |
|
|
37
|
+
| Pointer/drag interactions | +1 |
|
|
38
|
+
| Scroll-based triggers (IntersectionObserver) | +1 |
|
|
39
|
+
| Touch gestures (pinch, swipe) | +1 |
|
|
40
|
+
| Overlay/modal with focus trap | +1 |
|
|
41
|
+
| Animation choreography (stagger, sequence) | +1 |
|
|
42
|
+
|
|
43
|
+
Results: 1-2 Low (single), 3-4 Medium (gallery), 5+ High (page)
|
|
44
|
+
|
|
45
|
+
## Browser API Detection
|
|
46
|
+
|
|
47
|
+
| Keywords | Browser API |
|
|
48
|
+
|----------|-------------|
|
|
49
|
+
| scroll, appear, visibility, threshold | IntersectionObserver |
|
|
50
|
+
| resize, container, responsive, layout | ResizeObserver |
|
|
51
|
+
| drag, pointer, mouse, click | Pointer Events |
|
|
52
|
+
| touch, swipe, pinch, gesture | Touch Events |
|
|
53
|
+
| scroll snap, snap point, mandatory | CSS scroll-snap |
|
|
54
|
+
| clip, mask, reveal, wipe | CSS clip-path |
|
|
55
|
+
| blur, frosted, glass | CSS backdrop-filter |
|
|
56
|
+
| animate, transition, keyframe | Web Animations API |
|
|
57
|
+
| focus, trap, tab, keyboard | Focus Management |
|
|
58
|
+
|
|
59
|
+
## Output
|
|
60
|
+
|
|
61
|
+
Write scope context to coordinator memory:
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"pipeline_mode": "<single|gallery|page>",
|
|
65
|
+
"scope": "<description>",
|
|
66
|
+
"interaction_type": "<pointer|scroll|overlay|mixed>",
|
|
67
|
+
"components": ["<detected-component-types>"],
|
|
68
|
+
"browser_apis": ["<detected-apis>"],
|
|
69
|
+
"complexity": { "score": 0, "level": "Low|Medium|High" }
|
|
70
|
+
}
|
|
71
|
+
```
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Command: Dispatch
|
|
2
|
+
|
|
3
|
+
Create the interactive craft task chain with correct dependencies and structured task descriptions. Supports single, gallery, and page pipeline modes.
|
|
4
|
+
|
|
5
|
+
## Phase 2: Context Loading
|
|
6
|
+
|
|
7
|
+
| Input | Source | Required |
|
|
8
|
+
|-------|--------|----------|
|
|
9
|
+
| User requirement | From coordinator Phase 1 | Yes |
|
|
10
|
+
| Session folder | From coordinator Phase 2 | Yes |
|
|
11
|
+
| Pipeline mode | From session meta.json `pipeline` | Yes |
|
|
12
|
+
| Interaction type | From session meta.json `interaction_type` | Yes |
|
|
13
|
+
|
|
14
|
+
1. Load user requirement and scope from session meta.json
|
|
15
|
+
2. Load pipeline stage definitions from specs/pipelines.md
|
|
16
|
+
3. Read `pipeline` and `interaction_type` from session meta.json
|
|
17
|
+
|
|
18
|
+
## Phase 3: Task Chain Creation (Mode-Branched)
|
|
19
|
+
|
|
20
|
+
### Task Description Template
|
|
21
|
+
|
|
22
|
+
Every task description uses structured format:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
TaskCreate({
|
|
26
|
+
subject: "<TASK-ID>",
|
|
27
|
+
description: "PURPOSE: <what this task achieves> | Success: <measurable completion criteria>
|
|
28
|
+
TASK:
|
|
29
|
+
- <step 1: specific action>
|
|
30
|
+
- <step 2: specific action>
|
|
31
|
+
- <step 3: specific action>
|
|
32
|
+
CONTEXT:
|
|
33
|
+
- Session: <session-folder>
|
|
34
|
+
- Scope: <interaction-scope>
|
|
35
|
+
- Components: <component-list>
|
|
36
|
+
- Upstream artifacts: <artifact-1>, <artifact-2>
|
|
37
|
+
- Shared memory: <session>/wisdom/.msg/meta.json
|
|
38
|
+
EXPECTED: <deliverable path> + <quality criteria>
|
|
39
|
+
CONSTRAINTS: <scope limits, focus areas>"
|
|
40
|
+
})
|
|
41
|
+
TaskUpdate({ taskId: "<TASK-ID>", addBlockedBy: [<dependency-list>], owner: "<role>" })
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Mode Router
|
|
45
|
+
|
|
46
|
+
| Mode | Action |
|
|
47
|
+
|------|--------|
|
|
48
|
+
| `single` | Create 4 tasks: RESEARCH -> INTERACT -> BUILD -> A11Y |
|
|
49
|
+
| `gallery` | Create 6 tasks: RESEARCH -> INTERACT-001 -> BUILD-001 -> INTERACT-002 -> BUILD-002 -> A11Y |
|
|
50
|
+
| `page` | Create 4+ tasks: RESEARCH -> INTERACT -> [BUILD-001..N parallel] -> A11Y |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### Single Pipeline Task Chain
|
|
55
|
+
|
|
56
|
+
**RESEARCH-001** (researcher):
|
|
57
|
+
```
|
|
58
|
+
TaskCreate({
|
|
59
|
+
subject: "RESEARCH-001",
|
|
60
|
+
description: "PURPOSE: Analyze interaction patterns, browser API availability, and reference implementations | Success: 3 research artifacts with valid data
|
|
61
|
+
TASK:
|
|
62
|
+
- Catalog existing interactive components in project
|
|
63
|
+
- Audit browser API usage (IntersectionObserver, ResizeObserver, Pointer Events, Touch Events)
|
|
64
|
+
- Collect reference patterns for target component type
|
|
65
|
+
CONTEXT:
|
|
66
|
+
- Session: <session-folder>
|
|
67
|
+
- Scope: <interaction-scope>
|
|
68
|
+
- Components: <component-list>
|
|
69
|
+
- Shared memory: <session>/wisdom/.msg/meta.json
|
|
70
|
+
EXPECTED: <session>/research/*.json | All 3 research files with valid JSON
|
|
71
|
+
CONSTRAINTS: Read-only analysis | Focus on <interaction-scope>"
|
|
72
|
+
})
|
|
73
|
+
TaskUpdate({ taskId: "RESEARCH-001", owner: "researcher" })
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**INTERACT-001** (interaction-designer):
|
|
77
|
+
```
|
|
78
|
+
TaskCreate({
|
|
79
|
+
subject: "INTERACT-001",
|
|
80
|
+
description: "PURPOSE: Design complete interaction blueprint with state machine and event flows | Success: Blueprint with all states, events, and keyboard mappings defined
|
|
81
|
+
TASK:
|
|
82
|
+
- Define state machine (idle -> hover -> active -> animating -> complete)
|
|
83
|
+
- Map event flows (pointer/touch/keyboard -> handlers -> state transitions)
|
|
84
|
+
- Specify gesture parameters (lerp speed, thresholds, easing)
|
|
85
|
+
- Design animation choreography (entry/exit/idle transitions)
|
|
86
|
+
- Create touch/keyboard/mouse mapping table
|
|
87
|
+
CONTEXT:
|
|
88
|
+
- Session: <session-folder>
|
|
89
|
+
- Scope: <interaction-scope>
|
|
90
|
+
- Upstream artifacts: research/*.json
|
|
91
|
+
- Shared memory: <session>/wisdom/.msg/meta.json
|
|
92
|
+
EXPECTED: <session>/interaction/blueprints/<component-name>.md | Complete state machine + event map + keyboard coverage
|
|
93
|
+
CONSTRAINTS: Vanilla JS only | GPU-only animations | Progressive enhancement"
|
|
94
|
+
})
|
|
95
|
+
TaskUpdate({ taskId: "INTERACT-001", addBlockedBy: ["RESEARCH-001"], owner: "interaction-designer" })
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**BUILD-001** (builder):
|
|
99
|
+
```
|
|
100
|
+
TaskCreate({
|
|
101
|
+
subject: "BUILD-001",
|
|
102
|
+
description: "PURPOSE: Implement interactive component as vanilla JS + CSS | Success: Working ES module + CSS with all states, touch-aware, keyboard accessible
|
|
103
|
+
TASK:
|
|
104
|
+
- Implement ES module component class from interaction blueprint
|
|
105
|
+
- Write CSS with custom properties (no preprocessor)
|
|
106
|
+
- Add progressive enhancement (content works without JS)
|
|
107
|
+
- Use GPU-only animations (transform + opacity)
|
|
108
|
+
- Implement pointer events with touch fallback
|
|
109
|
+
- Add ResizeObserver for responsive behavior
|
|
110
|
+
- Add IntersectionObserver for scroll triggers (if applicable)
|
|
111
|
+
CONTEXT:
|
|
112
|
+
- Session: <session-folder>
|
|
113
|
+
- Scope: <interaction-scope>
|
|
114
|
+
- Upstream artifacts: interaction/blueprints/*.md, research/*.json
|
|
115
|
+
- Shared memory: <session>/wisdom/.msg/meta.json
|
|
116
|
+
EXPECTED: <session>/build/components/<name>.js + <name>.css | Zero dependencies, all states implemented
|
|
117
|
+
CONSTRAINTS: No npm packages | ES modules only | No inline styles | < 5ms per frame"
|
|
118
|
+
})
|
|
119
|
+
TaskUpdate({ taskId: "BUILD-001", addBlockedBy: ["INTERACT-001"], owner: "builder" })
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**A11Y-001** (a11y-tester):
|
|
123
|
+
```
|
|
124
|
+
TaskCreate({
|
|
125
|
+
subject: "A11Y-001",
|
|
126
|
+
description: "PURPOSE: Audit accessibility of built component | Success: Audit report with pass/fail per check, 0 critical issues
|
|
127
|
+
TASK:
|
|
128
|
+
- Test keyboard navigation (tab order, arrow keys, escape, enter/space)
|
|
129
|
+
- Check screen reader compatibility (ARIA roles, states, live regions)
|
|
130
|
+
- Verify reduced motion fallback (prefers-reduced-motion)
|
|
131
|
+
- Test focus management (visible indicator, focus trap for overlays)
|
|
132
|
+
- Check color contrast (foreground/background ratio)
|
|
133
|
+
CONTEXT:
|
|
134
|
+
- Session: <session-folder>
|
|
135
|
+
- Scope: <interaction-scope>
|
|
136
|
+
- Upstream artifacts: build/components/*.js, build/components/*.css, interaction/blueprints/*.md
|
|
137
|
+
- Shared memory: <session>/wisdom/.msg/meta.json
|
|
138
|
+
EXPECTED: <session>/a11y/a11y-audit-001.md | Per-check pass/fail with remediation suggestions
|
|
139
|
+
CONSTRAINTS: Read-only analysis | GC convergence: 0 critical issues"
|
|
140
|
+
})
|
|
141
|
+
TaskUpdate({ taskId: "A11Y-001", addBlockedBy: ["BUILD-001"], owner: "a11y-tester" })
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### Gallery Pipeline Task Chain
|
|
147
|
+
|
|
148
|
+
Create tasks in dependency order:
|
|
149
|
+
|
|
150
|
+
| Task | Role | blockedBy | Description |
|
|
151
|
+
|------|------|-----------|-------------|
|
|
152
|
+
| RESEARCH-001 | researcher | (none) | Interaction patterns + browser API audit |
|
|
153
|
+
| INTERACT-001 | interaction-designer | RESEARCH-001 | Base component interaction blueprint |
|
|
154
|
+
| BUILD-001 | builder | INTERACT-001 | Base component implementation |
|
|
155
|
+
| INTERACT-002 | interaction-designer | BUILD-001 | Gallery/scroll-snap interaction blueprint |
|
|
156
|
+
| BUILD-002 | builder | INTERACT-002 | Gallery container + navigation implementation |
|
|
157
|
+
| A11Y-001 | a11y-tester | BUILD-002 | Full gallery accessibility audit |
|
|
158
|
+
|
|
159
|
+
Task descriptions follow same template as single pipeline, with subject-specific content:
|
|
160
|
+
- INTERACT-002 focuses on scroll-snap container, navigation dots, active item detection
|
|
161
|
+
- BUILD-002 focuses on gallery container with CSS scroll-snap, IntersectionObserver for active item, navigation controls
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### Page Pipeline Task Chain
|
|
166
|
+
|
|
167
|
+
| Task | Role | blockedBy | Description |
|
|
168
|
+
|------|------|-----------|-------------|
|
|
169
|
+
| RESEARCH-001 | researcher | (none) | Interaction patterns for all page sections |
|
|
170
|
+
| INTERACT-001 | interaction-designer | RESEARCH-001 | Blueprints for all interactive sections |
|
|
171
|
+
| BUILD-001..N | builder | INTERACT-001 | One task per section (parallel fan-out) |
|
|
172
|
+
| A11Y-001 | a11y-tester | BUILD-001..N (all) | Full page accessibility audit |
|
|
173
|
+
|
|
174
|
+
**Parallel fan-out**: Create one BUILD task per distinct interactive section detected in the interaction blueprint. Each BUILD task is blocked only by INTERACT-001. A11Y-001 is blocked by ALL BUILD tasks.
|
|
175
|
+
|
|
176
|
+
Task descriptions for each BUILD-00N specify which section to implement, referencing the corresponding section in the interaction blueprint.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Phase 4: Validation
|
|
181
|
+
|
|
182
|
+
Verify task chain integrity:
|
|
183
|
+
|
|
184
|
+
| Check | Method | Expected |
|
|
185
|
+
|-------|--------|----------|
|
|
186
|
+
| Task count correct | TaskList count | single: 4, gallery: 6, page: 3+N |
|
|
187
|
+
| Dependencies correct | Trace dependency graph | Acyclic, correct blockedBy |
|
|
188
|
+
| No circular dependencies | Trace dependency graph | Acyclic |
|
|
189
|
+
| Task IDs use correct prefixes | Pattern check | RESEARCH/INTERACT/BUILD/A11Y |
|
|
190
|
+
| Structured descriptions complete | Each has PURPOSE/TASK/CONTEXT/EXPECTED/CONSTRAINTS | All present |
|
|
191
|
+
|
|
192
|
+
If validation fails, fix the specific task and re-validate.
|