claude-code-workflow 7.2.27 → 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-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/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,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-interactive-craft
|
|
3
|
+
description: Unified team skill for interactive component crafting. Vanilla JS + CSS interactive components with zero dependencies. Research -> interaction design -> build -> a11y test. Uses team-worker agent architecture with roles/ for domain logic. Coordinator orchestrates pipeline with GC loops and sync points. Triggers on "team interactive craft", "interactive component".
|
|
4
|
+
allowed-tools: spawn_agent(*), wait_agent(*), send_message(*), assign_task(*), close_agent(*), list_agents(*), report_agent_job_result(*), request_user_input(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*), mcp__ace-tool__search_context(*), mcp__ccw-tools__read_file(*), mcp__ccw-tools__write_file(*), mcp__ccw-tools__edit_file(*), mcp__ccw-tools__team_msg(*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Team Interactive Craft
|
|
8
|
+
|
|
9
|
+
Systematic interactive component pipeline: research -> interaction design -> build -> a11y test. Built on **team-worker agent architecture** -- all worker roles share a single agent definition with role-specific Phase 2-4 loaded from `roles/<role>/role.md`.
|
|
10
|
+
|
|
11
|
+
## Architecture
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Skill(skill="team-interactive-craft", args="task description")
|
|
15
|
+
|
|
|
16
|
+
SKILL.md (this file) = Router
|
|
17
|
+
|
|
|
18
|
+
+--------------+--------------+
|
|
19
|
+
| |
|
|
20
|
+
no --role flag --role <name>
|
|
21
|
+
| |
|
|
22
|
+
Coordinator Worker
|
|
23
|
+
roles/coordinator/role.md roles/<name>/role.md
|
|
24
|
+
|
|
|
25
|
+
+-- analyze -> dispatch -> spawn workers -> STOP
|
|
26
|
+
|
|
|
27
|
+
+-------+-------+-------+-------+
|
|
28
|
+
v v v v
|
|
29
|
+
[team-worker agents, each loads roles/<role>/role.md]
|
|
30
|
+
researcher interaction-designer builder a11y-tester
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Role Registry
|
|
34
|
+
|
|
35
|
+
| Role | Path | Prefix | Inner Loop |
|
|
36
|
+
|------|------|--------|------------|
|
|
37
|
+
| coordinator | [roles/coordinator/role.md](roles/coordinator/role.md) | -- | -- |
|
|
38
|
+
| researcher | [roles/researcher/role.md](roles/researcher/role.md) | RESEARCH-* | false |
|
|
39
|
+
| interaction-designer | [roles/interaction-designer/role.md](roles/interaction-designer/role.md) | INTERACT-* | false |
|
|
40
|
+
| builder | [roles/builder/role.md](roles/builder/role.md) | BUILD-* | true |
|
|
41
|
+
| a11y-tester | [roles/a11y-tester/role.md](roles/a11y-tester/role.md) | A11Y-* | false |
|
|
42
|
+
|
|
43
|
+
## Role Router
|
|
44
|
+
|
|
45
|
+
Parse `$ARGUMENTS`:
|
|
46
|
+
- Has `--role <name>` -> Read `roles/<name>/role.md`, execute Phase 2-4
|
|
47
|
+
- No `--role` -> `roles/coordinator/role.md`, execute entry router
|
|
48
|
+
|
|
49
|
+
## Delegation Lock
|
|
50
|
+
|
|
51
|
+
**Coordinator is a PURE ORCHESTRATOR. It coordinates, it does NOT do.**
|
|
52
|
+
|
|
53
|
+
Before calling ANY tool, apply this check:
|
|
54
|
+
|
|
55
|
+
| Tool Call | Verdict | Reason |
|
|
56
|
+
|-----------|---------|--------|
|
|
57
|
+
| `spawn_agent`, `wait_agent`, `close_agent`, `send_message`, `assign_task` | ALLOWED | Orchestration |
|
|
58
|
+
| `list_agents` | ALLOWED | Agent health check |
|
|
59
|
+
| `request_user_input` | ALLOWED | User interaction |
|
|
60
|
+
| `mcp__ccw-tools__team_msg` | ALLOWED | Message bus |
|
|
61
|
+
| `Read/Write` on `.workflow/.team/` files | ALLOWED | Session state |
|
|
62
|
+
| `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
|
|
63
|
+
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
64
|
+
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
65
|
+
| `Bash("ccw cli ...")` | BLOCKED | Only workers call CLI |
|
|
66
|
+
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
67
|
+
|
|
68
|
+
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
69
|
+
|
|
70
|
+
**No exceptions for "simple" tasks.** Even a single-file read-and-report MUST go through spawn_agent.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Shared Constants
|
|
75
|
+
|
|
76
|
+
- **Session prefix**: `IC`
|
|
77
|
+
- **Session path**: `.workflow/.team/IC-<slug>-<date>/`
|
|
78
|
+
- **CLI tools**: `ccw cli --mode analysis` (read-only), `ccw cli --mode write` (modifications)
|
|
79
|
+
- **Message bus**: `mcp__ccw-tools__team_msg(session_id=<session-id>, ...)`
|
|
80
|
+
- **Max GC rounds**: 2
|
|
81
|
+
|
|
82
|
+
## Worker Spawn Template
|
|
83
|
+
|
|
84
|
+
Coordinator spawns workers using this template:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
spawn_agent({
|
|
88
|
+
agent_type: "team_worker",
|
|
89
|
+
task_name: "<task-id>",
|
|
90
|
+
fork_context: false,
|
|
91
|
+
items: [
|
|
92
|
+
{ type: "text", text: `## Role Assignment
|
|
93
|
+
role: <role>
|
|
94
|
+
role_spec: <skill_root>/roles/<role>/role.md
|
|
95
|
+
session: <session-folder>
|
|
96
|
+
session_id: <session-id>
|
|
97
|
+
requirement: <task-description>
|
|
98
|
+
inner_loop: <true|false>
|
|
99
|
+
|
|
100
|
+
Read role_spec file (<skill_root>/roles/<role>/role.md) to load Phase 2-4 domain instructions.` },
|
|
101
|
+
|
|
102
|
+
{ type: "text", text: `## Task Context
|
|
103
|
+
task_id: <task-id>
|
|
104
|
+
title: <task-title>
|
|
105
|
+
description: <task-description>
|
|
106
|
+
pipeline_phase: <pipeline-phase>` },
|
|
107
|
+
|
|
108
|
+
{ type: "text", text: `## Upstream Context
|
|
109
|
+
<prev_context>` }
|
|
110
|
+
]
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
After spawning, use `wait_agent({ targets: [...], timeout_ms: 900000 })` to collect results, then `close_agent({ target })` each worker.
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
### Model Selection Guide
|
|
118
|
+
|
|
119
|
+
Interactive craft is a technical pipeline where research informs interaction design, which guides implementation. Builder needs creative problem-solving for vanilla JS constraints, a11y-tester needs thorough analysis.
|
|
120
|
+
|
|
121
|
+
| Role | reasoning_effort | Rationale |
|
|
122
|
+
|------|-------------------|-----------|
|
|
123
|
+
| researcher | high | Deep analysis of existing interactive patterns and browser APIs |
|
|
124
|
+
| interaction-designer | high | Creative state machine and event flow design |
|
|
125
|
+
| builder | high | Complex vanilla JS implementation with GPU animation and touch handling |
|
|
126
|
+
| a11y-tester | high | Thorough accessibility audit must catch all keyboard/screen reader issues |
|
|
127
|
+
|
|
128
|
+
### Research-to-Design Context Flow
|
|
129
|
+
|
|
130
|
+
Researcher findings must reach interaction-designer via coordinator's upstream context:
|
|
131
|
+
```
|
|
132
|
+
// After RESEARCH-001 completes, coordinator sends findings to interaction-designer
|
|
133
|
+
spawn_agent({
|
|
134
|
+
agent_type: "team_worker",
|
|
135
|
+
task_name: "INTERACT-001",
|
|
136
|
+
fork_context: false,
|
|
137
|
+
items: [
|
|
138
|
+
...,
|
|
139
|
+
{ type: "text", text: `## Upstream Context
|
|
140
|
+
Research findings: <session>/research/interaction-inventory.json
|
|
141
|
+
Browser API audit: <session>/research/browser-api-audit.json
|
|
142
|
+
Pattern reference: <session>/research/pattern-reference.json` }
|
|
143
|
+
]
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## User Commands
|
|
148
|
+
|
|
149
|
+
| Command | Action |
|
|
150
|
+
|---------|--------|
|
|
151
|
+
| `check` / `status` | View execution status graph |
|
|
152
|
+
| `resume` / `continue` | Advance to next step |
|
|
153
|
+
|
|
154
|
+
## Specs Reference
|
|
155
|
+
|
|
156
|
+
- [specs/pipelines.md](specs/pipelines.md) -- Pipeline definitions and task registry
|
|
157
|
+
- [specs/interaction-patterns.md](specs/interaction-patterns.md) -- Interaction pattern catalog
|
|
158
|
+
- [specs/vanilla-constraints.md](specs/vanilla-constraints.md) -- Zero-dependency rules
|
|
159
|
+
|
|
160
|
+
## Session Directory
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
.workflow/.team/IC-<slug>-<date>/
|
|
164
|
+
+-- .msg/
|
|
165
|
+
| +-- messages.jsonl # Team message bus
|
|
166
|
+
| +-- meta.json # Pipeline config + GC state
|
|
167
|
+
+-- research/ # Researcher output
|
|
168
|
+
| +-- interaction-inventory.json
|
|
169
|
+
| +-- browser-api-audit.json
|
|
170
|
+
| +-- pattern-reference.json
|
|
171
|
+
+-- interaction/ # Interaction designer output
|
|
172
|
+
| +-- blueprints/
|
|
173
|
+
| +-- {component-name}.md
|
|
174
|
+
+-- build/ # Builder output
|
|
175
|
+
| +-- components/
|
|
176
|
+
| +-- {name}.js
|
|
177
|
+
| +-- {name}.css
|
|
178
|
+
+-- a11y/ # A11y tester output
|
|
179
|
+
| +-- a11y-audit-{NNN}.md
|
|
180
|
+
+-- wisdom/ # Cross-task knowledge
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## v4 Agent Coordination
|
|
184
|
+
|
|
185
|
+
### Message Semantics
|
|
186
|
+
|
|
187
|
+
| Intent | API | Example |
|
|
188
|
+
|--------|-----|---------|
|
|
189
|
+
| Queue supplementary info (don't interrupt) | `send_message` | Send research findings to running interaction-designer |
|
|
190
|
+
| Assign build from reviewed blueprints | `assign_task` | Assign BUILD task after blueprint review |
|
|
191
|
+
| Check running agents | `list_agents` | Verify agent health during resume |
|
|
192
|
+
|
|
193
|
+
### Agent Health Check
|
|
194
|
+
|
|
195
|
+
Use `list_agents({})` in handleResume and handleComplete:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
// Reconcile session state with actual running agents
|
|
199
|
+
const running = list_agents({})
|
|
200
|
+
// Compare with tasks.json active_agents
|
|
201
|
+
// Reset orphaned tasks (in_progress but agent gone) to pending
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Named Agent Targeting
|
|
205
|
+
|
|
206
|
+
Workers are spawned with `task_name: "<task-id>"` enabling direct addressing:
|
|
207
|
+
- `send_message({ target: "INTERACT-001", items: [...] })` -- send research findings to interaction-designer
|
|
208
|
+
- `assign_task({ target: "BUILD-001", items: [...] })` -- assign implementation from interaction blueprint
|
|
209
|
+
- `close_agent({ target: "A11Y-001" })` -- cleanup after a11y audit
|
|
210
|
+
|
|
211
|
+
## Error Handling
|
|
212
|
+
|
|
213
|
+
| Scenario | Resolution |
|
|
214
|
+
|----------|------------|
|
|
215
|
+
| Unknown command | Error with available command list |
|
|
216
|
+
| Role not found | Error with role registry |
|
|
217
|
+
| Session corruption | Attempt recovery, fallback to manual |
|
|
218
|
+
| Fast-advance conflict | Coordinator reconciles on next callback |
|
|
219
|
+
| Completion action fails | Default to Keep Active |
|
|
220
|
+
| GC loop stuck > 2 rounds | Escalate to user: accept / retry / terminate |
|
|
@@ -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
|
+
```
|