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,183 @@
|
|
|
1
|
+
# Monitor Pipeline
|
|
2
|
+
|
|
3
|
+
Event-driven pipeline coordination. Beat model: coordinator wake -> process -> spawn -> STOP.
|
|
4
|
+
|
|
5
|
+
## Constants
|
|
6
|
+
|
|
7
|
+
- SPAWN_MODE: background
|
|
8
|
+
- ONE_STEP_PER_INVOCATION: true
|
|
9
|
+
- FAST_ADVANCE_AWARE: true
|
|
10
|
+
- WORKER_AGENT: team-worker
|
|
11
|
+
- MAX_GC_ROUNDS: 2
|
|
12
|
+
|
|
13
|
+
## Handler Router
|
|
14
|
+
|
|
15
|
+
| Source | Handler |
|
|
16
|
+
|--------|---------|
|
|
17
|
+
| Message contains [researcher], [interaction-designer], [builder], [a11y-tester] | handleCallback |
|
|
18
|
+
| "capability_gap" | handleAdapt |
|
|
19
|
+
| "check" or "status" | handleCheck |
|
|
20
|
+
| "resume" or "continue" | handleResume |
|
|
21
|
+
| All tasks completed | handleComplete |
|
|
22
|
+
| Default | handleSpawnNext |
|
|
23
|
+
|
|
24
|
+
## handleCallback
|
|
25
|
+
|
|
26
|
+
Worker completed. Process and advance.
|
|
27
|
+
|
|
28
|
+
1. Parse message to identify role and task ID:
|
|
29
|
+
|
|
30
|
+
| Message Pattern | Role |
|
|
31
|
+
|----------------|------|
|
|
32
|
+
| `[researcher]` or `RESEARCH-*` | researcher |
|
|
33
|
+
| `[interaction-designer]` or `INTERACT-*` | interaction-designer |
|
|
34
|
+
| `[builder]` or `BUILD-*` | builder |
|
|
35
|
+
| `[a11y-tester]` or `A11Y-*` | a11y-tester |
|
|
36
|
+
|
|
37
|
+
2. Mark task completed: `TaskUpdate({ taskId: "<task-id>", status: "completed" })`
|
|
38
|
+
3. Record completion in session state
|
|
39
|
+
|
|
40
|
+
4. Check checkpoint for completed task:
|
|
41
|
+
|
|
42
|
+
| Completed Task | Checkpoint | Action |
|
|
43
|
+
|---------------|------------|--------|
|
|
44
|
+
| RESEARCH-001 | - | Notify user: research complete |
|
|
45
|
+
| INTERACT-001 | - | Proceed to BUILD-001 (single/gallery) or BUILD-001..N (page parallel) |
|
|
46
|
+
| INTERACT-002 | - | Proceed to BUILD-002 (gallery) |
|
|
47
|
+
| BUILD-001 | - | Check mode: single -> A11Y-001; gallery -> INTERACT-002; page -> check if all BUILD done |
|
|
48
|
+
| BUILD-001..N | - | Page mode: check if all BUILD tasks done -> A11Y-001 |
|
|
49
|
+
| BUILD-002 | - | Gallery: proceed to A11Y-001 |
|
|
50
|
+
| A11Y-001 | QUALITY: A11y Gate | Check a11y signal -> GC loop or complete |
|
|
51
|
+
|
|
52
|
+
5. **A11y Gate handling** (A11Y task completed):
|
|
53
|
+
Read a11y signal from message: `a11y_passed`, `a11y_result`, or `fix_required`
|
|
54
|
+
|
|
55
|
+
| Signal | Condition | Action |
|
|
56
|
+
|--------|-----------|--------|
|
|
57
|
+
| `a11y_passed` | 0 critical issues | GC converged -> record gate -> handleComplete |
|
|
58
|
+
| `a11y_result` | Minor issues only | gc_rounds < max -> create BUILD-fix task |
|
|
59
|
+
| `fix_required` | Critical issues found | gc_rounds < max -> create BUILD-fix task (CRITICAL) |
|
|
60
|
+
| Any | gc_rounds >= max | Escalate to user |
|
|
61
|
+
|
|
62
|
+
**GC Fix Task Creation**:
|
|
63
|
+
```
|
|
64
|
+
TaskCreate({ subject: "BUILD-fix-<round>",
|
|
65
|
+
description: "PURPOSE: Address a11y audit feedback | Success: All critical/high issues resolved
|
|
66
|
+
TASK:
|
|
67
|
+
- Parse a11y audit feedback for specific issues
|
|
68
|
+
- Apply targeted fixes to component JS/CSS
|
|
69
|
+
CONTEXT:
|
|
70
|
+
- Session: <session-folder>
|
|
71
|
+
- Upstream artifacts: a11y/a11y-audit-<NNN>.md" })
|
|
72
|
+
TaskUpdate({ taskId: "BUILD-fix-<round>", owner: "builder" })
|
|
73
|
+
```
|
|
74
|
+
Then create new A11Y task blocked by fix. Increment gc_state.round.
|
|
75
|
+
|
|
76
|
+
**GC Escalation Options** (when max rounds exceeded):
|
|
77
|
+
1. Accept current implementation - skip remaining a11y fixes
|
|
78
|
+
2. Try one more round
|
|
79
|
+
3. Terminate
|
|
80
|
+
|
|
81
|
+
6. -> handleSpawnNext
|
|
82
|
+
|
|
83
|
+
## handleCheck
|
|
84
|
+
|
|
85
|
+
Read-only status report, then STOP.
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Pipeline Status (<pipeline-mode>):
|
|
89
|
+
[DONE] RESEARCH-001 (researcher) -> research/*.json
|
|
90
|
+
[DONE] INTERACT-001 (interaction-designer) -> blueprints/*.md
|
|
91
|
+
[RUN] BUILD-001 (builder) -> building component...
|
|
92
|
+
[WAIT] A11Y-001 (a11y-tester) -> blocked by BUILD-001
|
|
93
|
+
|
|
94
|
+
GC Rounds: 0/2
|
|
95
|
+
Session: <session-id>
|
|
96
|
+
Commands: 'resume' to advance | 'check' to refresh
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Output status -- do NOT advance pipeline.
|
|
100
|
+
|
|
101
|
+
## handleResume
|
|
102
|
+
|
|
103
|
+
1. Audit task list for inconsistencies:
|
|
104
|
+
- Tasks stuck in "in_progress" -> reset to "pending"
|
|
105
|
+
- Tasks with completed blockers but still "pending" -> include in spawn list
|
|
106
|
+
2. -> handleSpawnNext
|
|
107
|
+
|
|
108
|
+
## handleSpawnNext
|
|
109
|
+
|
|
110
|
+
Find ready tasks, spawn workers, STOP.
|
|
111
|
+
|
|
112
|
+
1. Collect: completedSubjects, inProgressSubjects, readySubjects (pending + all blockedBy completed)
|
|
113
|
+
2. No ready + work in progress -> report waiting, STOP
|
|
114
|
+
3. No ready + nothing in progress -> handleComplete
|
|
115
|
+
4. Has ready -> for each:
|
|
116
|
+
a. Check inner loop role with active worker -> skip (worker picks up)
|
|
117
|
+
b. TaskUpdate -> in_progress
|
|
118
|
+
c. team_msg log -> task_unblocked
|
|
119
|
+
d. Spawn team-worker:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
Agent({
|
|
123
|
+
subagent_type: "team-worker",
|
|
124
|
+
description: "Spawn <role> worker for <task-id>",
|
|
125
|
+
team_name: "interactive-craft",
|
|
126
|
+
name: "<role>",
|
|
127
|
+
run_in_background: true,
|
|
128
|
+
prompt: `## Role Assignment
|
|
129
|
+
role: <role>
|
|
130
|
+
role_spec: <project>/.claude/skills/team-interactive-craft/roles/<role>/role.md
|
|
131
|
+
session: <session-folder>
|
|
132
|
+
session_id: <session-id>
|
|
133
|
+
team_name: interactive-craft
|
|
134
|
+
requirement: <task-description>
|
|
135
|
+
inner_loop: <true|false>
|
|
136
|
+
|
|
137
|
+
Read role_spec file to load Phase 2-4 domain instructions.
|
|
138
|
+
Execute built-in Phase 1 (task discovery) -> role Phase 2-4 -> built-in Phase 5 (report).`
|
|
139
|
+
})
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Parallel spawn rules by mode**:
|
|
143
|
+
|
|
144
|
+
| Mode | Scenario | Spawn Behavior |
|
|
145
|
+
|------|----------|---------------|
|
|
146
|
+
| single | Sequential | One task at a time |
|
|
147
|
+
| gallery | Sequential | One task at a time |
|
|
148
|
+
| page | After INTERACT-001 | Spawn BUILD-001..N in parallel (CP-3 fan-out) |
|
|
149
|
+
| page | After all BUILD done | Spawn A11Y-001 |
|
|
150
|
+
|
|
151
|
+
5. Add to active_workers, update session, output summary, STOP
|
|
152
|
+
|
|
153
|
+
## handleComplete
|
|
154
|
+
|
|
155
|
+
Pipeline done. Generate report and completion action.
|
|
156
|
+
|
|
157
|
+
**Completion check by mode**:
|
|
158
|
+
|
|
159
|
+
| Mode | Completion Condition |
|
|
160
|
+
|------|---------------------|
|
|
161
|
+
| single | All 4 tasks (+ fix tasks) completed |
|
|
162
|
+
| gallery | All 6 tasks (+ fix tasks) completed |
|
|
163
|
+
| page | All 3+N tasks (+ fix tasks) completed |
|
|
164
|
+
|
|
165
|
+
1. If any tasks not completed -> handleSpawnNext
|
|
166
|
+
2. If all completed -> transition to coordinator Phase 5
|
|
167
|
+
|
|
168
|
+
## handleAdapt
|
|
169
|
+
|
|
170
|
+
Capability gap reported mid-pipeline.
|
|
171
|
+
|
|
172
|
+
1. Parse gap description
|
|
173
|
+
2. Check if existing role covers it -> redirect
|
|
174
|
+
3. Role count < 5 -> generate dynamic role spec
|
|
175
|
+
4. Create new task, spawn worker
|
|
176
|
+
5. Role count >= 5 -> merge or pause
|
|
177
|
+
|
|
178
|
+
## Fast-Advance Reconciliation
|
|
179
|
+
|
|
180
|
+
On every coordinator wake:
|
|
181
|
+
1. Read team_msg entries with type="fast_advance"
|
|
182
|
+
2. Sync active_workers with spawned successors
|
|
183
|
+
3. No duplicate spawns
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Coordinator Role
|
|
2
|
+
|
|
3
|
+
Interactive Craft Team coordinator. Orchestrate pipeline: analyze -> dispatch -> spawn -> monitor -> report. Manages task chains for interactive component creation, GC loops between builder and a11y-tester, parallel fan-out for page mode.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
- **Name**: coordinator | **Tag**: [coordinator]
|
|
7
|
+
- **Responsibility**: Analyze task -> Create team -> Dispatch tasks -> Monitor progress -> Report results
|
|
8
|
+
|
|
9
|
+
## Boundaries
|
|
10
|
+
|
|
11
|
+
### MUST
|
|
12
|
+
- All output (SendMessage, team_msg, logs) must carry `[coordinator]` identifier
|
|
13
|
+
- Use `team-worker` agent type for all worker spawns (NOT `general-purpose`)
|
|
14
|
+
- Dispatch tasks with proper dependency chains and blockedBy
|
|
15
|
+
- Monitor worker progress via message bus and route messages
|
|
16
|
+
- Handle Generator-Critic loops with max 2 iterations
|
|
17
|
+
- Maintain session state persistence
|
|
18
|
+
|
|
19
|
+
### MUST NOT
|
|
20
|
+
- Implement domain logic (researching, designing, building, testing) -- workers handle this
|
|
21
|
+
- Spawn workers without creating tasks first
|
|
22
|
+
- Skip sync points when configured
|
|
23
|
+
- Force-advance pipeline past failed a11y audit
|
|
24
|
+
- Modify source code or component artifacts directly -- delegate to workers
|
|
25
|
+
- Omit `[coordinator]` identifier in any output
|
|
26
|
+
|
|
27
|
+
## Command Execution Protocol
|
|
28
|
+
|
|
29
|
+
When coordinator needs to execute a command (analyze, dispatch, monitor):
|
|
30
|
+
|
|
31
|
+
1. Read `commands/<command>.md`
|
|
32
|
+
2. Follow the workflow defined in the command
|
|
33
|
+
3. Commands are inline execution guides, NOT separate agents
|
|
34
|
+
4. Execute synchronously, complete before proceeding
|
|
35
|
+
|
|
36
|
+
## Entry Router
|
|
37
|
+
|
|
38
|
+
| Detection | Condition | Handler |
|
|
39
|
+
|-----------|-----------|---------|
|
|
40
|
+
| Worker callback | Message contains [researcher], [interaction-designer], [builder], [a11y-tester] | -> handleCallback (monitor.md) |
|
|
41
|
+
| Status check | Args contain "check" or "status" | -> handleCheck (monitor.md) |
|
|
42
|
+
| Manual resume | Args contain "resume" or "continue" | -> handleResume (monitor.md) |
|
|
43
|
+
| Capability gap | Message contains "capability_gap" | -> handleAdapt (monitor.md) |
|
|
44
|
+
| Pipeline complete | All tasks have status "completed" | -> handleComplete (monitor.md) |
|
|
45
|
+
| Interrupted session | Active/paused session exists in .workflow/.team/IC-* | -> Phase 0 |
|
|
46
|
+
| New session | None of above | -> Phase 1 |
|
|
47
|
+
|
|
48
|
+
For callback/check/resume/adapt/complete: load `@commands/monitor.md`, execute matched handler, STOP.
|
|
49
|
+
|
|
50
|
+
## Phase 0: Session Resume Check
|
|
51
|
+
|
|
52
|
+
1. Scan `.workflow/.team/IC-*/.msg/meta.json` for active/paused sessions
|
|
53
|
+
2. No sessions -> Phase 1
|
|
54
|
+
3. Single session -> reconcile (audit TaskList, reset in_progress->pending, rebuild team, kick first ready task)
|
|
55
|
+
4. Multiple -> AskUserQuestion for selection
|
|
56
|
+
|
|
57
|
+
## Phase 1: Requirement Clarification
|
|
58
|
+
|
|
59
|
+
TEXT-LEVEL ONLY. No source code reading.
|
|
60
|
+
|
|
61
|
+
1. Parse task description from arguments
|
|
62
|
+
2. Detect interactive scope:
|
|
63
|
+
|
|
64
|
+
| Signal | Pipeline Mode |
|
|
65
|
+
|--------|---------------|
|
|
66
|
+
| Single component (split compare, lightbox, lens, scroll reveal, glass terminal) | single |
|
|
67
|
+
| Gallery, carousel, scroll-snap collection, multi-component scroll | gallery |
|
|
68
|
+
| Full interactive page, landing page, multi-section interactive | page |
|
|
69
|
+
| Unclear | ask user |
|
|
70
|
+
|
|
71
|
+
3. Ask for missing parameters if scope unclear:
|
|
72
|
+
```
|
|
73
|
+
AskUserQuestion({
|
|
74
|
+
questions: [
|
|
75
|
+
{ question: "Interactive component scope?", header: "Scope", options: [
|
|
76
|
+
{ label: "Single component", description: "One interactive element (split compare, lightbox, etc.)" },
|
|
77
|
+
{ label: "Gallery / Scroll collection", description: "Scroll-snap gallery or multi-component scroll" },
|
|
78
|
+
{ label: "Full interactive page", description: "Complete page with multiple interactive sections" }
|
|
79
|
+
]},
|
|
80
|
+
{ question: "Primary interaction type?", header: "Interaction", options: [
|
|
81
|
+
{ label: "Pointer/drag", description: "Drag, resize, slider interactions" },
|
|
82
|
+
{ label: "Scroll-based", description: "Scroll snap, scroll reveal, parallax" },
|
|
83
|
+
{ label: "Overlay/modal", description: "Lightbox, lens, tooltip overlays" },
|
|
84
|
+
{ label: "Mixed" }
|
|
85
|
+
]}
|
|
86
|
+
]
|
|
87
|
+
})
|
|
88
|
+
```
|
|
89
|
+
4. Delegate to `@commands/analyze.md` -> output scope context
|
|
90
|
+
5. Record: pipeline_mode, interaction_type, complexity
|
|
91
|
+
|
|
92
|
+
## Phase 2: Create Team + Initialize Session
|
|
93
|
+
|
|
94
|
+
1. Resolve workspace paths (MUST do first):
|
|
95
|
+
- `project_root` = result of `Bash({ command: "pwd" })`
|
|
96
|
+
- `skill_root` = `<project_root>/.claude/skills/team-interactive-craft`
|
|
97
|
+
2. Generate session ID: `IC-<slug>-<YYYY-MM-DD>`
|
|
98
|
+
3. Create session folder structure:
|
|
99
|
+
```
|
|
100
|
+
.workflow/.team/IC-<slug>-<date>/research/
|
|
101
|
+
.workflow/.team/IC-<slug>-<date>/interaction/blueprints/
|
|
102
|
+
.workflow/.team/IC-<slug>-<date>/build/components/
|
|
103
|
+
.workflow/.team/IC-<slug>-<date>/a11y/
|
|
104
|
+
.workflow/.team/IC-<slug>-<date>/wisdom/
|
|
105
|
+
.workflow/.team/IC-<slug>-<date>/.msg/
|
|
106
|
+
```
|
|
107
|
+
4. Initialize `.msg/meta.json` via team_msg state_update with pipeline metadata
|
|
108
|
+
5. TeamCreate(team_name="interactive-craft")
|
|
109
|
+
6. Do NOT spawn workers yet - deferred to Phase 4
|
|
110
|
+
|
|
111
|
+
## Phase 3: Create Task Chain
|
|
112
|
+
|
|
113
|
+
Delegate to `@commands/dispatch.md`. Task chains by mode:
|
|
114
|
+
|
|
115
|
+
| Mode | Task Chain |
|
|
116
|
+
|------|------------|
|
|
117
|
+
| single | RESEARCH-001 -> INTERACT-001 -> BUILD-001 -> A11Y-001 |
|
|
118
|
+
| gallery | RESEARCH-001 -> INTERACT-001 -> BUILD-001 -> INTERACT-002 -> BUILD-002 -> A11Y-001 |
|
|
119
|
+
| page | RESEARCH-001 -> INTERACT-001 -> [BUILD-001..N parallel] -> A11Y-001 |
|
|
120
|
+
|
|
121
|
+
## Phase 4: Spawn-and-Stop
|
|
122
|
+
|
|
123
|
+
Delegate to `@commands/monitor.md#handleSpawnNext`:
|
|
124
|
+
1. Find ready tasks (pending + blockedBy resolved)
|
|
125
|
+
2. Spawn team-worker agents (see SKILL.md Spawn Template)
|
|
126
|
+
3. Output status summary
|
|
127
|
+
4. STOP
|
|
128
|
+
|
|
129
|
+
## Phase 5: Report + Completion Action
|
|
130
|
+
|
|
131
|
+
1. Read session state -> collect all results
|
|
132
|
+
2. List deliverables:
|
|
133
|
+
|
|
134
|
+
| Deliverable | Path |
|
|
135
|
+
|-------------|------|
|
|
136
|
+
| Interaction Inventory | <session>/research/interaction-inventory.json |
|
|
137
|
+
| Browser API Audit | <session>/research/browser-api-audit.json |
|
|
138
|
+
| Pattern Reference | <session>/research/pattern-reference.json |
|
|
139
|
+
| Interaction Blueprints | <session>/interaction/blueprints/*.md |
|
|
140
|
+
| Component JS Files | <session>/build/components/*.js |
|
|
141
|
+
| Component CSS Files | <session>/build/components/*.css |
|
|
142
|
+
| A11y Audit Reports | <session>/a11y/a11y-audit-*.md |
|
|
143
|
+
|
|
144
|
+
3. Calculate: completed_tasks, gc_rounds, a11y_score, components_built
|
|
145
|
+
4. Output pipeline summary with [coordinator] prefix
|
|
146
|
+
5. Execute completion action:
|
|
147
|
+
```
|
|
148
|
+
AskUserQuestion({
|
|
149
|
+
questions: [{ question: "Pipeline complete. What next?", header: "Completion", options: [
|
|
150
|
+
{ label: "Archive & Clean", description: "Archive session and clean up team resources" },
|
|
151
|
+
{ label: "Keep Active", description: "Keep session for follow-up work" },
|
|
152
|
+
{ label: "Export Results", description: "Export deliverables to specified location" }
|
|
153
|
+
]}]
|
|
154
|
+
})
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Error Handling
|
|
158
|
+
|
|
159
|
+
| Error | Resolution |
|
|
160
|
+
|-------|------------|
|
|
161
|
+
| Task timeout | Log, mark failed, ask user to retry or skip |
|
|
162
|
+
| Worker crash | Reset task to pending, respawn worker |
|
|
163
|
+
| Dependency cycle | Detect, report to user, halt |
|
|
164
|
+
| Invalid scope | Reject with error, ask to clarify |
|
|
165
|
+
| Session corruption | Attempt recovery, fallback to manual reconciliation |
|
|
166
|
+
| GC loop stuck > 2 rounds | Escalate to user: accept / try one more / terminate |
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: interaction-designer
|
|
3
|
+
prefix: INTERACT
|
|
4
|
+
inner_loop: false
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Interaction Blueprint Designer
|
|
9
|
+
|
|
10
|
+
Design complete interaction blueprints: state machines, event flows, gesture specifications, animation choreography, and input mapping tables. Consume research artifacts to produce blueprints for the builder role.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Research artifacts | <session>/research/*.json | Yes |
|
|
17
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
|
|
18
|
+
| Existing blueprints | <session>/interaction/blueprints/*.md | Only for INTERACT-002+ |
|
|
19
|
+
|
|
20
|
+
1. Extract session path from task description
|
|
21
|
+
2. Read research findings: interaction-inventory.json, browser-api-audit.json, pattern-reference.json
|
|
22
|
+
3. Detect task type from subject: "001" -> Primary blueprint, "002" -> Secondary/gallery blueprint
|
|
23
|
+
4. If INTERACT-002+: read existing blueprints for consistency with base component
|
|
24
|
+
|
|
25
|
+
## Phase 3: Design Execution
|
|
26
|
+
|
|
27
|
+
**Primary Blueprint (INTERACT-001)**:
|
|
28
|
+
|
|
29
|
+
For each target component, produce a blueprint document containing:
|
|
30
|
+
|
|
31
|
+
### State Machine
|
|
32
|
+
Define complete state diagram:
|
|
33
|
+
```
|
|
34
|
+
[idle] --(pointerenter)--> [hover]
|
|
35
|
+
[hover] --(pointerdown)--> [active]
|
|
36
|
+
[hover] --(pointerleave)--> [idle]
|
|
37
|
+
[active] --(pointermove)--> [dragging/animating]
|
|
38
|
+
[active] --(pointerup)--> [hover]
|
|
39
|
+
[dragging] --(pointerup)--> [settling]
|
|
40
|
+
[settling] --(transitionend)--> [idle]
|
|
41
|
+
[any] --(focus)--> [focused]
|
|
42
|
+
[focused] --(blur)--> [previous-state]
|
|
43
|
+
[any] --(keydown:Escape)--> [idle]
|
|
44
|
+
```
|
|
45
|
+
- All states must be reachable
|
|
46
|
+
- All states must have exit transitions
|
|
47
|
+
- Error/reset transitions from every state back to idle
|
|
48
|
+
|
|
49
|
+
### Event Flow Map
|
|
50
|
+
Map events to handlers to state transitions:
|
|
51
|
+
|
|
52
|
+
| Event | Source | Handler | State Transition | Side Effect |
|
|
53
|
+
|-------|--------|---------|-----------------|-------------|
|
|
54
|
+
| pointerdown | element | onPointerDown | idle->active | setPointerCapture, preventDefault |
|
|
55
|
+
| pointermove | document | onPointerMove | active->dragging | update position via lerp |
|
|
56
|
+
| pointerup | document | onPointerUp | dragging->settling | releasePointerCapture |
|
|
57
|
+
| keydown:ArrowLeft | element | onKeyDown | - | decrement value |
|
|
58
|
+
| keydown:ArrowRight | element | onKeyDown | - | increment value |
|
|
59
|
+
| keydown:Escape | element | onKeyDown | any->idle | reset to default |
|
|
60
|
+
| keydown:Enter/Space | element | onKeyDown | idle->active | toggle/activate |
|
|
61
|
+
|
|
62
|
+
### Gesture Specification
|
|
63
|
+
For pointer/touch interactions:
|
|
64
|
+
|
|
65
|
+
| Gesture | Detection | Parameters |
|
|
66
|
+
|---------|-----------|------------|
|
|
67
|
+
| Drag | pointerdown + pointermove > 3px | lerp speed: 0.15, axis: x/y/both |
|
|
68
|
+
| Swipe | pointerup with velocity > 0.5px/ms | direction: left/right/up/down |
|
|
69
|
+
| Pinch | 2+ touch points, distance change | scale factor, min/max zoom |
|
|
70
|
+
| Scroll snap | CSS scroll-snap-type: x mandatory | align: start/center, behavior: smooth |
|
|
71
|
+
|
|
72
|
+
- Lerp interpolation: `current += (target - current) * speed`
|
|
73
|
+
- Dead zone: ignore movements < 3px from start
|
|
74
|
+
- Velocity tracking: store last 3-5 pointer positions with timestamps
|
|
75
|
+
|
|
76
|
+
### Animation Choreography
|
|
77
|
+
Define animation sequences:
|
|
78
|
+
|
|
79
|
+
| Animation | Trigger | Properties | Duration | Easing | GPU |
|
|
80
|
+
|-----------|---------|------------|----------|--------|-----|
|
|
81
|
+
| Entry | mount/reveal | opacity 0->1, translateY 20px->0 | 400ms | cubic-bezier(0.16,1,0.3,1) | Yes |
|
|
82
|
+
| Exit | unmount/hide | opacity 1->0, translateY 0->-10px | 200ms | ease-in | Yes |
|
|
83
|
+
| Drag follow | pointermove | translateX via lerp | per-frame | linear (lerp) | Yes |
|
|
84
|
+
| Settle | pointerup | translateX to snap point | 300ms | cubic-bezier(0.16,1,0.3,1) | Yes |
|
|
85
|
+
| Hover | pointerenter | scale 1->1.02 | 200ms | ease-out | Yes |
|
|
86
|
+
| Focus ring | focus-visible | outline-offset 0->2px | 150ms | ease-out | No (outline) |
|
|
87
|
+
| Stagger | intersection | delay: index * 80ms | 400ms+delay | cubic-bezier(0.16,1,0.3,1) | Yes |
|
|
88
|
+
|
|
89
|
+
- ALL animations must use transform + opacity only (GPU-composited)
|
|
90
|
+
- Exception: outline for focus indicators
|
|
91
|
+
- Reduced motion: replace all motion with opacity-only crossfade (200ms)
|
|
92
|
+
|
|
93
|
+
### Input Mapping Table
|
|
94
|
+
Unified mapping across input methods:
|
|
95
|
+
|
|
96
|
+
| Action | Mouse | Touch | Keyboard | Screen Reader |
|
|
97
|
+
|--------|-------|-------|----------|--------------|
|
|
98
|
+
| Activate | click | tap | Enter/Space | Enter/Space |
|
|
99
|
+
| Navigate prev | - | swipe-right | ArrowLeft | ArrowLeft |
|
|
100
|
+
| Navigate next | - | swipe-left | ArrowRight | ArrowRight |
|
|
101
|
+
| Drag/adjust | pointerdown+move | pointerdown+move | Arrow keys (step) | Arrow keys (step) |
|
|
102
|
+
| Dismiss | click outside | tap outside | Escape | Escape |
|
|
103
|
+
| Focus | pointermove (hover) | - | Tab | Tab |
|
|
104
|
+
|
|
105
|
+
### Platform API Preference
|
|
106
|
+
|
|
107
|
+
When designing interaction blueprints, prefer native APIs over custom implementations:
|
|
108
|
+
|
|
109
|
+
| Need | Native API | Custom Fallback |
|
|
110
|
+
|------|-----------|-----------------|
|
|
111
|
+
| Modal dialog | `<dialog>` + `showModal()` | Custom with focus trap + inert |
|
|
112
|
+
| Tooltip/popover | Popover API (`popover` attribute) | Custom with click-outside listener |
|
|
113
|
+
| Dropdown positioning | CSS Anchor Positioning | `position: fixed` + JS coords |
|
|
114
|
+
| Focus trap | `<dialog>` built-in or `inert` attribute | Manual focus cycling with tabindex |
|
|
115
|
+
| Escape-to-close | Built into `<dialog>` and Popover | Manual keydown listener |
|
|
116
|
+
|
|
117
|
+
Document in blueprint: which native API to use, what the fallback is for unsupported browsers, and how to feature-detect.
|
|
118
|
+
|
|
119
|
+
**Gallery/Secondary Blueprint (INTERACT-002)**:
|
|
120
|
+
- Design scroll-snap container interaction
|
|
121
|
+
- Navigation controls (prev/next arrows, dots/indicators)
|
|
122
|
+
- Active item detection via IntersectionObserver
|
|
123
|
+
- Keyboard navigation within gallery (ArrowLeft/ArrowRight between items)
|
|
124
|
+
- Touch momentum and snap behavior
|
|
125
|
+
- Reference base component blueprint for consistency
|
|
126
|
+
|
|
127
|
+
Output: `<session>/interaction/blueprints/{component-name}.md`
|
|
128
|
+
|
|
129
|
+
## Phase 4: Self-Validation
|
|
130
|
+
|
|
131
|
+
| Check | Pass Criteria |
|
|
132
|
+
|-------|---------------|
|
|
133
|
+
| State machine complete | All states reachable, all states have exit |
|
|
134
|
+
| Event coverage | All events mapped to handlers |
|
|
135
|
+
| Keyboard complete | All interactive actions have keyboard equivalent |
|
|
136
|
+
| Touch parity | All mouse actions have touch equivalent |
|
|
137
|
+
| GPU-only animations | No width/height/top/left animations |
|
|
138
|
+
| Reduced motion | prefers-reduced-motion fallback defined |
|
|
139
|
+
| Screen reader path | All actions accessible via screen reader |
|
|
140
|
+
|
|
141
|
+
If any check fails, revise the blueprint before output.
|
|
142
|
+
|
|
143
|
+
Update `<session>/wisdom/.msg/meta.json` under `interaction-designer` namespace:
|
|
144
|
+
- Read existing -> merge `{ "interaction-designer": { task_type, components_designed, states_count, events_count, gestures } }` -> write back
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: researcher
|
|
3
|
+
prefix: RESEARCH
|
|
4
|
+
inner_loop: false
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Interaction Pattern Researcher
|
|
9
|
+
|
|
10
|
+
Analyze existing interactive components, audit browser API usage, and collect reference patterns for target component types. Produce foundation data for downstream interaction-designer, builder, and a11y-tester roles.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Environment Detection
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Task description | From task subject/description | Yes |
|
|
17
|
+
| Session path | Extracted from task description | Yes |
|
|
18
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | No |
|
|
19
|
+
|
|
20
|
+
1. Extract session path and target scope from task description
|
|
21
|
+
2. Detect project structure and existing interactive patterns:
|
|
22
|
+
|
|
23
|
+
| File Pattern | Detected Pattern |
|
|
24
|
+
|--------------|-----------------|
|
|
25
|
+
| *.js with addEventListener | Event-driven components |
|
|
26
|
+
| IntersectionObserver usage | Scroll-triggered animations |
|
|
27
|
+
| ResizeObserver usage | Responsive layout components |
|
|
28
|
+
| pointer/mouse/touch events | Interactive drag/gesture components |
|
|
29
|
+
| scroll-snap in CSS | Scroll-snap gallery |
|
|
30
|
+
| backdrop-filter in CSS | Glass/frosted effects |
|
|
31
|
+
| clip-path in CSS | Reveal/mask animations |
|
|
32
|
+
|
|
33
|
+
3. Use CLI tools (e.g., `ccw cli -p "..." --tool gemini --mode analysis`) or direct tools (Glob, Grep) to scan for existing interactive components, animation patterns, event handling approaches
|
|
34
|
+
4. Read interaction type context from session config
|
|
35
|
+
|
|
36
|
+
## Phase 3: Research Execution
|
|
37
|
+
|
|
38
|
+
Execute 3 analysis streams:
|
|
39
|
+
|
|
40
|
+
**Stream 1 -- Interaction Inventory**:
|
|
41
|
+
- Search for existing interactive components (event listeners, observers, animation code)
|
|
42
|
+
- Identify interaction patterns in use (drag, scroll, overlay, reveal)
|
|
43
|
+
- Map component lifecycle (init, mount, resize, destroy)
|
|
44
|
+
- Find dependency patterns (any external libs vs vanilla)
|
|
45
|
+
- Catalog gesture handling approaches (pointer vs mouse+touch)
|
|
46
|
+
- Output: `<session>/research/interaction-inventory.json`
|
|
47
|
+
- Schema:
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"existing_components": [
|
|
51
|
+
{ "name": "", "type": "", "events": [], "observers": [], "file": "" }
|
|
52
|
+
],
|
|
53
|
+
"patterns": {
|
|
54
|
+
"event_handling": "",
|
|
55
|
+
"animation_approach": "",
|
|
56
|
+
"lifecycle": "",
|
|
57
|
+
"dependency_model": ""
|
|
58
|
+
},
|
|
59
|
+
"summary": { "total_interactive": 0, "vanilla_count": 0, "lib_count": 0 }
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Stream 2 -- Browser API Audit**:
|
|
64
|
+
- Check availability and usage of target browser APIs:
|
|
65
|
+
- IntersectionObserver (scroll triggers, lazy loading, visibility detection)
|
|
66
|
+
- ResizeObserver (responsive layout, container queries)
|
|
67
|
+
- Pointer Events (unified mouse/touch/pen input)
|
|
68
|
+
- Touch Events (gesture recognition, multi-touch)
|
|
69
|
+
- CSS scroll-snap (snap points, scroll behavior)
|
|
70
|
+
- CSS clip-path (shape masking, reveal animations)
|
|
71
|
+
- CSS backdrop-filter (blur, brightness, glass effects)
|
|
72
|
+
- Web Animations API (programmatic animation control)
|
|
73
|
+
- requestAnimationFrame (frame-synced updates)
|
|
74
|
+
- Identify polyfill needs for target browser support
|
|
75
|
+
- Output: `<session>/research/browser-api-audit.json`
|
|
76
|
+
- Schema:
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"apis": {
|
|
80
|
+
"<api-name>": {
|
|
81
|
+
"available": true,
|
|
82
|
+
"in_use": false,
|
|
83
|
+
"support": "baseline|modern|polyfill-needed",
|
|
84
|
+
"usage_count": 0,
|
|
85
|
+
"notes": ""
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"polyfill_needs": [],
|
|
89
|
+
"min_browser_target": ""
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Stream 3 -- Pattern Reference**:
|
|
94
|
+
- Collect reference patterns for each target component type
|
|
95
|
+
- For each component, document: state machine pattern, event flow, animation approach, touch handling, accessibility pattern
|
|
96
|
+
- Reference well-known implementations (e.g., scroll-snap gallery, split-view compare, lightbox overlay)
|
|
97
|
+
- Note performance considerations and gotchas per pattern
|
|
98
|
+
- Output: `<session>/research/pattern-reference.json`
|
|
99
|
+
- Schema:
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"patterns": [
|
|
103
|
+
{
|
|
104
|
+
"component_type": "",
|
|
105
|
+
"state_machine": { "states": [], "transitions": [] },
|
|
106
|
+
"events": { "primary": [], "fallback": [] },
|
|
107
|
+
"animation": { "approach": "", "gpu_only": true, "easing": "" },
|
|
108
|
+
"touch": { "gestures": [], "threshold_px": 0 },
|
|
109
|
+
"a11y": { "role": "", "aria_states": [], "keyboard": [] },
|
|
110
|
+
"performance": { "budget_ms": 0, "gotchas": [] }
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Compile research summary metrics: existing_interactive_count, vanilla_ratio, apis_available, polyfill_count, patterns_collected.
|
|
117
|
+
|
|
118
|
+
## Phase 4: Validation & Output
|
|
119
|
+
|
|
120
|
+
1. Verify all 3 output files exist and contain valid JSON with required fields:
|
|
121
|
+
|
|
122
|
+
| File | Required Fields |
|
|
123
|
+
|------|----------------|
|
|
124
|
+
| interaction-inventory.json | existing_components array, patterns object |
|
|
125
|
+
| browser-api-audit.json | apis object |
|
|
126
|
+
| pattern-reference.json | patterns array |
|
|
127
|
+
|
|
128
|
+
2. If any file missing or invalid, re-run corresponding stream
|
|
129
|
+
|
|
130
|
+
3. Update `<session>/wisdom/.msg/meta.json` under `researcher` namespace:
|
|
131
|
+
- Read existing -> merge `{ "researcher": { interactive_count, vanilla_ratio, apis_available, polyfill_needs, scope } }` -> write back
|