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
|
@@ -36,9 +36,29 @@ Worker completed. Process and advance.
|
|
|
36
36
|
- CHECKPOINT-* with verdict "warn" -> log risks to wisdom, proceed normally
|
|
37
37
|
- CHECKPOINT-* with verdict "pass" -> proceed normally
|
|
38
38
|
- QUALITY-001 -> display quality gate, pause for user commands
|
|
39
|
-
- PLAN-001 ->
|
|
39
|
+
- PLAN-001 -> dynamicImplDispatch (see below)
|
|
40
40
|
6. -> handleSpawnNext
|
|
41
41
|
|
|
42
|
+
### dynamicImplDispatch (PLAN-001 callback)
|
|
43
|
+
|
|
44
|
+
When PLAN-001 completes, coordinator creates IMPL tasks based on complexity:
|
|
45
|
+
|
|
46
|
+
1. Read `<session>/plan/plan.json` → extract `complexity`, `tasks[]`
|
|
47
|
+
2. Route by complexity (per specs/pipelines.md §6):
|
|
48
|
+
|
|
49
|
+
| Complexity | Action |
|
|
50
|
+
|------------|--------|
|
|
51
|
+
| Low (1-2 modules) | Create single IMPL-001, blockedBy: [PLAN-001], InnerLoop: true |
|
|
52
|
+
| Medium (3-4 modules) | Create IMPL-{1..N}, each blockedBy: [PLAN-001] only, InnerLoop: false |
|
|
53
|
+
| High (5+ modules) | Create IMPL-{1..N} with DAG deps from plan.json, InnerLoop per dispatch rules |
|
|
54
|
+
|
|
55
|
+
3. For each IMPL task: TaskCreate with structured description (dispatch.md template)
|
|
56
|
+
4. Set blockedBy:
|
|
57
|
+
- **Parallel tasks**: blockedBy: [PLAN-001] (or [CHECKPOINT-003] if supervision enabled)
|
|
58
|
+
- **Serial chain within DAG**: blockedBy includes upstream IMPL task IDs
|
|
59
|
+
5. Update team-session.json: `pipeline.tasks_total`, `pipeline.impl_topology: "single"|"parallel"|"dag"`
|
|
60
|
+
6. Log via team_msg: `{ type: "state_update", data: { impl_count: N, topology: "..." } }`
|
|
61
|
+
|
|
42
62
|
## handleCheck
|
|
43
63
|
|
|
44
64
|
Read-only status report, then STOP.
|
|
@@ -71,7 +91,9 @@ Find ready tasks, spawn workers, STOP.
|
|
|
71
91
|
2. No ready + work in progress -> report waiting, STOP
|
|
72
92
|
3. No ready + nothing in progress -> handleComplete
|
|
73
93
|
4. Has ready -> for each:
|
|
74
|
-
a. Check
|
|
94
|
+
a. Check inner_loop: parse task description `InnerLoop:` field (NOT role.md default)
|
|
95
|
+
- InnerLoop: true AND same-role worker already active -> skip (worker picks up next task)
|
|
96
|
+
- InnerLoop: false OR no active same-role worker -> spawn new worker
|
|
75
97
|
b. **CHECKPOINT-* task** -> wake resident supervisor (see below)
|
|
76
98
|
c. Other tasks -> standard spawn:
|
|
77
99
|
- TaskUpdate -> in_progress
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
role: executor
|
|
3
3
|
prefix: IMPL
|
|
4
|
-
inner_loop:
|
|
4
|
+
inner_loop: dynamic
|
|
5
5
|
message_types:
|
|
6
6
|
success: impl_complete
|
|
7
7
|
progress: impl_progress
|
|
@@ -12,6 +12,8 @@ message_types:
|
|
|
12
12
|
|
|
13
13
|
Code implementation worker with dual execution modes.
|
|
14
14
|
|
|
15
|
+
> **inner_loop: dynamic** — Dispatch sets per-task: `true` for serial IMPL chains (IMPL-001→002→003 with inter-dependencies), `false` for parallel IMPL sets (independent modules). When false, each IMPL task gets its own worker.
|
|
16
|
+
|
|
15
17
|
## Identity
|
|
16
18
|
- Tag: [executor] | Prefix: IMPL-*
|
|
17
19
|
- Responsibility: Implement code from plan tasks via agent or CLI delegation
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-motion-design
|
|
3
|
+
description: Unified team skill for motion design. Animation token systems, scroll choreography, GPU-accelerated transforms, reduced-motion fallback. Uses team-worker agent architecture. Triggers on "team motion design", "animation system".
|
|
4
|
+
allowed-tools: Agent, AskUserQuestion, Read, Write, Edit, Bash, Glob, Grep, TaskList, TaskGet, TaskUpdate, TaskCreate, TeamCreate, TeamDelete, SendMessage, mcp__ccw-tools__read_file, mcp__ccw-tools__write_file, mcp__ccw-tools__edit_file, mcp__ccw-tools__team_msg, mcp__chrome-devtools__performance_start_trace, mcp__chrome-devtools__performance_stop_trace, mcp__chrome-devtools__performance_analyze_insight, mcp__chrome-devtools__evaluate_script, mcp__chrome-devtools__take_screenshot
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Team Motion Design
|
|
8
|
+
|
|
9
|
+
Systematic motion design pipeline: research -> choreography -> animation -> performance testing. 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-motion-design", 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
|
+
motion-researcher choreographer animator motion-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
|
+
| motion-researcher | [roles/motion-researcher/role.md](roles/motion-researcher/role.md) | MRESEARCH-* | false |
|
|
39
|
+
| choreographer | [roles/choreographer/role.md](roles/choreographer/role.md) | CHOREO-* | false |
|
|
40
|
+
| animator | [roles/animator/role.md](roles/animator/role.md) | ANIM-* | true |
|
|
41
|
+
| motion-tester | [roles/motion-tester/role.md](roles/motion-tester/role.md) | MTEST-* | 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
|
+
## Shared Constants
|
|
50
|
+
|
|
51
|
+
- **Session prefix**: `MD`
|
|
52
|
+
- **Session path**: `.workflow/.team/MD-<slug>-<date>/`
|
|
53
|
+
- **CLI tools**: `ccw cli --mode analysis` (read-only), `ccw cli --mode write` (modifications)
|
|
54
|
+
- **Message bus**: `mcp__ccw-tools__team_msg(session_id=<session-id>, ...)`
|
|
55
|
+
- **Max GC rounds**: 2
|
|
56
|
+
|
|
57
|
+
## Worker Spawn Template
|
|
58
|
+
|
|
59
|
+
Coordinator spawns workers using this template:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Agent({
|
|
63
|
+
subagent_type: "team-worker",
|
|
64
|
+
description: "Spawn <role> worker for <task-id>",
|
|
65
|
+
team_name: "motion-design",
|
|
66
|
+
name: "<role>",
|
|
67
|
+
run_in_background: true,
|
|
68
|
+
prompt: `## Role Assignment
|
|
69
|
+
role: <role>
|
|
70
|
+
role_spec: <skill_root>/roles/<role>/role.md
|
|
71
|
+
session: <session-folder>
|
|
72
|
+
session_id: <session-id>
|
|
73
|
+
team_name: motion-design
|
|
74
|
+
requirement: <task-description>
|
|
75
|
+
inner_loop: <true|false>
|
|
76
|
+
|
|
77
|
+
Read role_spec file (@<skill_root>/roles/<role>/role.md) to load Phase 2-4 domain instructions.
|
|
78
|
+
Execute built-in Phase 1 (task discovery) -> role Phase 2-4 -> built-in Phase 5 (report).`
|
|
79
|
+
})
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## User Commands
|
|
83
|
+
|
|
84
|
+
| Command | Action |
|
|
85
|
+
|---------|--------|
|
|
86
|
+
| `check` / `status` | View execution status graph |
|
|
87
|
+
| `resume` / `continue` | Advance to next step |
|
|
88
|
+
|
|
89
|
+
## Specs Reference
|
|
90
|
+
|
|
91
|
+
- [specs/pipelines.md](specs/pipelines.md) -- Pipeline definitions and task registry
|
|
92
|
+
- [specs/motion-tokens.md](specs/motion-tokens.md) -- Animation token schema
|
|
93
|
+
- [specs/gpu-constraints.md](specs/gpu-constraints.md) -- Compositor-only animation rules
|
|
94
|
+
- [specs/reduced-motion.md](specs/reduced-motion.md) -- Accessibility motion preferences
|
|
95
|
+
|
|
96
|
+
## Session Directory
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
.workflow/.team/MD-<slug>-<date>/
|
|
100
|
+
+-- .msg/
|
|
101
|
+
| +-- messages.jsonl # Team message bus
|
|
102
|
+
| +-- meta.json # Pipeline config + GC state
|
|
103
|
+
+-- research/ # Motion researcher output
|
|
104
|
+
| +-- perf-traces/ # Chrome DevTools performance traces
|
|
105
|
+
| +-- animation-inventory.json
|
|
106
|
+
| +-- performance-baseline.json
|
|
107
|
+
| +-- easing-catalog.json
|
|
108
|
+
+-- choreography/ # Choreographer output
|
|
109
|
+
| +-- motion-tokens.json
|
|
110
|
+
| +-- sequences/ # Scroll choreography sequences
|
|
111
|
+
+-- animations/ # Animator output
|
|
112
|
+
| +-- keyframes/ # CSS @keyframes files
|
|
113
|
+
| +-- orchestrators/ # JS animation orchestrators
|
|
114
|
+
+-- testing/ # Motion tester output
|
|
115
|
+
| +-- traces/ # Performance trace data
|
|
116
|
+
| +-- reports/ # Performance reports
|
|
117
|
+
+-- wisdom/ # Cross-task knowledge
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Error Handling
|
|
121
|
+
|
|
122
|
+
| Scenario | Resolution |
|
|
123
|
+
|----------|------------|
|
|
124
|
+
| Unknown command | Error with available command list |
|
|
125
|
+
| Role not found | Error with role registry |
|
|
126
|
+
| Session corruption | Attempt recovery, fallback to manual |
|
|
127
|
+
| Fast-advance conflict | Coordinator reconciles on next callback |
|
|
128
|
+
| Completion action fails | Default to Keep Active |
|
|
129
|
+
| GC loop stuck > 2 rounds | Escalate to user: accept / retry / terminate |
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: animator
|
|
3
|
+
prefix: ANIM
|
|
4
|
+
inner_loop: true
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Animation Implementer
|
|
9
|
+
|
|
10
|
+
Implement CSS animations/transitions and JS orchestration from choreography specs. Build @keyframes with motion tokens as custom properties, IntersectionObserver-based scroll triggers, requestAnimationFrame coordination, and prefers-reduced-motion overrides. GPU-accelerated, compositor-only animations.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Motion tokens | <session>/choreography/motion-tokens.json | Yes |
|
|
17
|
+
| Choreography sequences | <session>/choreography/sequences/*.md | Yes (component/page) |
|
|
18
|
+
| Research artifacts | <session>/research/*.json | Yes |
|
|
19
|
+
| GPU constraints | specs/gpu-constraints.md | Yes |
|
|
20
|
+
| Reduced motion spec | specs/reduced-motion.md | Yes |
|
|
21
|
+
| Performance report | <session>/testing/reports/perf-report-*.md | Only for GC fix tasks |
|
|
22
|
+
| .msg/meta.json | <session>/wisdom/.msg/meta.json | Yes |
|
|
23
|
+
|
|
24
|
+
1. Extract session path from task description
|
|
25
|
+
2. Read motion tokens from choreography/motion-tokens.json
|
|
26
|
+
3. Read choreography sequences (if applicable) from choreography/sequences/*.md
|
|
27
|
+
4. Read research artifacts for existing animation context
|
|
28
|
+
5. Read GPU constraints and reduced motion specs
|
|
29
|
+
6. Detect task type from subject: "token" -> Token CSS, "section" -> Section animation, "fix" -> GC fix
|
|
30
|
+
7. If GC fix task: read latest performance report from testing/reports/
|
|
31
|
+
|
|
32
|
+
## Phase 3: Implementation Execution
|
|
33
|
+
|
|
34
|
+
### Token CSS Implementation (ANIM-001 in tokens mode)
|
|
35
|
+
|
|
36
|
+
Generate CSS custom properties and utility classes:
|
|
37
|
+
|
|
38
|
+
**File: `<session>/animations/keyframes/motion-tokens.css`**:
|
|
39
|
+
```css
|
|
40
|
+
:root {
|
|
41
|
+
/* Easing functions */
|
|
42
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
43
|
+
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
44
|
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
45
|
+
|
|
46
|
+
/* Duration scale */
|
|
47
|
+
--duration-fast: 0.15s;
|
|
48
|
+
--duration-base: 0.3s;
|
|
49
|
+
--duration-slow: 0.6s;
|
|
50
|
+
--duration-slower: 0.8s;
|
|
51
|
+
--duration-slowest: 1.2s;
|
|
52
|
+
|
|
53
|
+
/* Stagger */
|
|
54
|
+
--stagger-increment: 0.05s;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Reduced motion overrides */
|
|
58
|
+
@media (prefers-reduced-motion: reduce) {
|
|
59
|
+
*, *::before, *::after {
|
|
60
|
+
animation-duration: 0.01ms !important;
|
|
61
|
+
animation-iteration-count: 1 !important;
|
|
62
|
+
transition-duration: 0.01ms !important;
|
|
63
|
+
scroll-behavior: auto !important;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**File: `<session>/animations/keyframes/utility-animations.css`**:
|
|
69
|
+
- `@keyframes fade-in` (opacity 0->1)
|
|
70
|
+
- `@keyframes fade-up` (opacity 0->1, translateY 20px->0)
|
|
71
|
+
- `@keyframes fade-down` (opacity 0->1, translateY -20px->0)
|
|
72
|
+
- `@keyframes slide-in-left` (translateX -100%->0)
|
|
73
|
+
- `@keyframes slide-in-right` (translateX 100%->0)
|
|
74
|
+
- `@keyframes scale-in` (scale 0.95->1, opacity 0->1)
|
|
75
|
+
- Utility classes: `.animate-fade-in`, `.animate-fade-up`, etc.
|
|
76
|
+
- All animations consume motion token custom properties
|
|
77
|
+
- All use compositor-only properties (transform, opacity)
|
|
78
|
+
|
|
79
|
+
### Component/Section Animation (ANIM-001..N in component/page mode)
|
|
80
|
+
|
|
81
|
+
For each section or component defined in choreography sequences:
|
|
82
|
+
|
|
83
|
+
**CSS @keyframes** (`<session>/animations/keyframes/<name>.css`):
|
|
84
|
+
- Define @keyframes consuming motion tokens via `var(--ease-out)`, `var(--duration-slow)`
|
|
85
|
+
- Use `will-change: transform, opacity` on animated elements (remove after animation via JS)
|
|
86
|
+
- Only animate compositor-safe properties: transform (translate, scale, rotate), opacity, filter
|
|
87
|
+
- NEVER animate: width, height, top, left, margin, padding, border, color, background-color
|
|
88
|
+
|
|
89
|
+
**JS Orchestrator** (`<session>/animations/orchestrators/<name>.js`):
|
|
90
|
+
```javascript
|
|
91
|
+
// IntersectionObserver-based scroll trigger
|
|
92
|
+
const observer = new IntersectionObserver((entries) => {
|
|
93
|
+
entries.forEach(entry => {
|
|
94
|
+
if (entry.isIntersecting) {
|
|
95
|
+
entry.target.classList.add('is-visible');
|
|
96
|
+
observer.unobserve(entry.target); // one-shot
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}, { threshold: 0.2, rootMargin: '0px 0px -100px 0px' });
|
|
100
|
+
|
|
101
|
+
// Staggered animation orchestrator
|
|
102
|
+
function staggerReveal(container, itemSelector) {
|
|
103
|
+
const items = container.querySelectorAll(itemSelector);
|
|
104
|
+
const increment = parseFloat(getComputedStyle(document.documentElement)
|
|
105
|
+
.getPropertyValue('--stagger-increment')) || 0.05;
|
|
106
|
+
|
|
107
|
+
items.forEach((item, index) => {
|
|
108
|
+
item.style.transitionDelay = `${index * increment}s`;
|
|
109
|
+
});
|
|
110
|
+
// Trigger via IntersectionObserver on container
|
|
111
|
+
observer.observe(container);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Reduced motion detection
|
|
115
|
+
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
116
|
+
if (prefersReducedMotion.matches) {
|
|
117
|
+
// Skip parallax, disable springs, use instant transitions
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// requestAnimationFrame for scroll-linked effects (parallax)
|
|
121
|
+
function parallaxScroll(element, rate) {
|
|
122
|
+
if (prefersReducedMotion.matches) return; // skip for reduced motion
|
|
123
|
+
let ticking = false;
|
|
124
|
+
window.addEventListener('scroll', () => {
|
|
125
|
+
if (!ticking) {
|
|
126
|
+
requestAnimationFrame(() => {
|
|
127
|
+
const scrolled = window.pageYOffset;
|
|
128
|
+
element.style.transform = `translateY(${scrolled * rate}px)`;
|
|
129
|
+
ticking = false;
|
|
130
|
+
});
|
|
131
|
+
ticking = true;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Height Animation Workaround
|
|
138
|
+
Since `height` triggers layout (NEVER animate), use the grid trick:
|
|
139
|
+
```css
|
|
140
|
+
.expandable {
|
|
141
|
+
display: grid;
|
|
142
|
+
grid-template-rows: 0fr;
|
|
143
|
+
transition: grid-template-rows var(--duration-normal) var(--ease-out-quart);
|
|
144
|
+
}
|
|
145
|
+
.expandable.open {
|
|
146
|
+
grid-template-rows: 1fr;
|
|
147
|
+
}
|
|
148
|
+
.expandable > .content {
|
|
149
|
+
overflow: hidden;
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
This achieves smooth height animation using only grid layout changes (compositor-friendly).
|
|
153
|
+
|
|
154
|
+
### Perceived Performance
|
|
155
|
+
- **80ms threshold**: Any response under 80ms feels instant to the human brain
|
|
156
|
+
- **Preemptive starts**: Begin animation on `pointerdown` not `click` (saves ~80-120ms perceived)
|
|
157
|
+
- **Early completion**: Visual feedback can "finish" before actual operation completes (optimistic UI)
|
|
158
|
+
- **Ease-in compresses perceived time**: Use ease-in for waiting states (progress bars) — makes them feel faster
|
|
159
|
+
- **Ease-out satisfies entrances**: Use ease-out for content appearing — natural deceleration feels "settled"
|
|
160
|
+
|
|
161
|
+
### GC Fix Mode (ANIM-fix-N)
|
|
162
|
+
|
|
163
|
+
- Parse performance report for specific issues
|
|
164
|
+
- Replace layout-triggering properties with compositor-only alternatives:
|
|
165
|
+
- `width/height` -> `transform: scale()`
|
|
166
|
+
- `top/left` -> `transform: translate()`
|
|
167
|
+
- `background-color` -> `opacity` on overlay
|
|
168
|
+
- Reduce will-change elements to max 3-4 simultaneous
|
|
169
|
+
- Add missing prefers-reduced-motion overrides
|
|
170
|
+
- Signal `animation_revision` instead of `animation_ready`
|
|
171
|
+
|
|
172
|
+
## Phase 4: Self-Validation & Output
|
|
173
|
+
|
|
174
|
+
1. Animation integrity checks:
|
|
175
|
+
|
|
176
|
+
| Check | Pass Criteria |
|
|
177
|
+
|-------|---------------|
|
|
178
|
+
| no_layout_triggers | No width, height, top, left, margin, padding in @keyframes |
|
|
179
|
+
| will_change_budget | Max 3-4 elements with will-change simultaneously |
|
|
180
|
+
| reduced_motion | @media (prefers-reduced-motion: reduce) query present |
|
|
181
|
+
| token_consumption | Animations use var(--token) references, no hardcoded values |
|
|
182
|
+
| compositor_only | Only transform, opacity, filter in animation properties |
|
|
183
|
+
|
|
184
|
+
2. JS orchestrator checks:
|
|
185
|
+
|
|
186
|
+
| Check | Pass Criteria |
|
|
187
|
+
|-------|---------------|
|
|
188
|
+
| intersection_observer | IntersectionObserver used for scroll triggers (not scroll events) |
|
|
189
|
+
| raf_throttled | requestAnimationFrame used with ticking guard for scroll |
|
|
190
|
+
| reduced_motion_js | `matchMedia('(prefers-reduced-motion: reduce)')` check present |
|
|
191
|
+
| cleanup | will-change removed after animation completes (if applicable) |
|
|
192
|
+
|
|
193
|
+
3. Update `<session>/wisdom/.msg/meta.json` under `animator` namespace:
|
|
194
|
+
- Read existing -> merge `{ "animator": { task_type, keyframe_count, orchestrator_count, uses_intersection_observer, has_parallax, has_stagger } }` -> write back
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: choreographer
|
|
3
|
+
prefix: CHOREO
|
|
4
|
+
inner_loop: false
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Motion Choreographer
|
|
9
|
+
|
|
10
|
+
Design animation token systems (easing functions, duration/delay scales), scroll-triggered reveal sequences, and transition state diagrams. Consume research findings from motion-researcher. Define the motion language that the animator implements.
|
|
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
|
+
| Motion token spec | specs/motion-tokens.md | Yes |
|
|
19
|
+
| GPU constraints | specs/gpu-constraints.md | Yes |
|
|
20
|
+
| Reduced motion spec | specs/reduced-motion.md | Yes |
|
|
21
|
+
|
|
22
|
+
1. Extract session path from task description
|
|
23
|
+
2. Read research findings: animation-inventory.json, performance-baseline.json, easing-catalog.json
|
|
24
|
+
3. Read motion token schema from specs/motion-tokens.md
|
|
25
|
+
4. Read GPU constraints from specs/gpu-constraints.md for safe property list
|
|
26
|
+
5. Read reduced motion guidelines from specs/reduced-motion.md
|
|
27
|
+
|
|
28
|
+
## Phase 3: Design Execution
|
|
29
|
+
|
|
30
|
+
### Motion Token System
|
|
31
|
+
|
|
32
|
+
Define complete token system as CSS custom properties + JSON:
|
|
33
|
+
|
|
34
|
+
**Easing Functions**:
|
|
35
|
+
- `--ease-out`: `cubic-bezier(0.16, 1, 0.3, 1)` -- emphasis exit, deceleration
|
|
36
|
+
- `--ease-in-out`: `cubic-bezier(0.65, 0, 0.35, 1)` -- smooth symmetrical
|
|
37
|
+
- `--ease-spring`: `cubic-bezier(0.34, 1.56, 0.64, 1)` -- overshoot bounce
|
|
38
|
+
- Integrate existing easing functions from research (avoid duplicates, reconcile naming)
|
|
39
|
+
|
|
40
|
+
**Duration Scale**:
|
|
41
|
+
- `--duration-fast`: `0.15s` -- micro-interactions (button press, toggle)
|
|
42
|
+
- `--duration-base`: `0.3s` -- standard transitions (hover, focus)
|
|
43
|
+
- `--duration-slow`: `0.6s` -- content reveals, panel slides
|
|
44
|
+
- `--duration-slower`: `0.8s` -- page transitions, large moves
|
|
45
|
+
- `--duration-slowest`: `1.2s` -- hero animations, splash
|
|
46
|
+
|
|
47
|
+
**Delay Scale**:
|
|
48
|
+
- `--stagger-base`: `0s` -- first item in stagger sequence
|
|
49
|
+
- `--stagger-increment`: `0.05s` to `0.1s` -- per-item delay addition
|
|
50
|
+
- Formula: `delay = base_delay + (index * stagger_increment)`
|
|
51
|
+
- Max visible stagger: 8 items (avoid >0.8s total delay)
|
|
52
|
+
|
|
53
|
+
**Reduced Motion Overrides**:
|
|
54
|
+
- All durations -> `0.01ms`
|
|
55
|
+
- All easings -> `linear` (instant)
|
|
56
|
+
- No parallax, no bounce/spring
|
|
57
|
+
- Opacity-only fades allowed (<0.15s)
|
|
58
|
+
|
|
59
|
+
Output: `<session>/choreography/motion-tokens.json`
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"easing": {
|
|
63
|
+
"ease-out": { "value": "cubic-bezier(0.16, 1, 0.3, 1)", "use": "exit emphasis, deceleration" },
|
|
64
|
+
"ease-in-out": { "value": "cubic-bezier(0.65, 0, 0.35, 1)", "use": "smooth symmetrical" },
|
|
65
|
+
"ease-spring": { "value": "cubic-bezier(0.34, 1.56, 0.64, 1)", "use": "overshoot bounce" }
|
|
66
|
+
},
|
|
67
|
+
"duration": {
|
|
68
|
+
"fast": { "value": "0.15s", "use": "micro-interactions" },
|
|
69
|
+
"base": { "value": "0.3s", "use": "standard transitions" },
|
|
70
|
+
"slow": { "value": "0.6s", "use": "content reveals" },
|
|
71
|
+
"slower": { "value": "0.8s", "use": "page transitions" },
|
|
72
|
+
"slowest": { "value": "1.2s", "use": "hero animations" }
|
|
73
|
+
},
|
|
74
|
+
"stagger": {
|
|
75
|
+
"base_delay": "0s",
|
|
76
|
+
"increment": "0.05s",
|
|
77
|
+
"max_items": 8
|
|
78
|
+
},
|
|
79
|
+
"reduced_motion": {
|
|
80
|
+
"duration_override": "0.01ms",
|
|
81
|
+
"easing_override": "linear",
|
|
82
|
+
"allowed": ["opacity"],
|
|
83
|
+
"disallowed": ["parallax", "bounce", "spring", "infinite-loop"]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Scroll Choreography Sequences
|
|
89
|
+
|
|
90
|
+
For component and page modes, define reveal sequences:
|
|
91
|
+
|
|
92
|
+
- IntersectionObserver thresholds per section (typical: 0.1 to 0.3)
|
|
93
|
+
- Entry direction: fade-up, fade-in, slide-left, slide-right
|
|
94
|
+
- Stagger groups: which elements stagger together, with calculated delays
|
|
95
|
+
- Parallax depths: foreground (1x), midground (0.5x), background (0.2x) scroll rates
|
|
96
|
+
- Scroll-linked effects: progress-based opacity, transform interpolation
|
|
97
|
+
|
|
98
|
+
Output per section: `<session>/choreography/sequences/<section-name>.md`
|
|
99
|
+
```markdown
|
|
100
|
+
# Section: <name>
|
|
101
|
+
|
|
102
|
+
## Trigger
|
|
103
|
+
- Observer threshold: 0.2
|
|
104
|
+
- Root margin: "0px 0px -100px 0px"
|
|
105
|
+
|
|
106
|
+
## Sequence
|
|
107
|
+
1. Heading: fade-up, duration-slow, ease-out, delay 0s
|
|
108
|
+
2. Subheading: fade-up, duration-slow, ease-out, delay 0.05s
|
|
109
|
+
3. Cards[0..N]: fade-up, duration-slow, ease-out, stagger 0.08s each
|
|
110
|
+
|
|
111
|
+
## Parallax (if applicable)
|
|
112
|
+
- Background image: 0.2x scroll rate
|
|
113
|
+
- Foreground elements: 1x (normal)
|
|
114
|
+
|
|
115
|
+
## Reduced Motion Fallback
|
|
116
|
+
- All elements: opacity fade only, duration-fast
|
|
117
|
+
- No parallax, no directional movement
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Transition State Diagrams
|
|
121
|
+
|
|
122
|
+
Define state transitions for interactive elements:
|
|
123
|
+
|
|
124
|
+
| State Pair | Properties | Duration | Easing |
|
|
125
|
+
|------------|-----------|----------|--------|
|
|
126
|
+
| hidden -> visible (entry) | opacity: 0->1, transform: translateY(20px)->0 | duration-slow | ease-out |
|
|
127
|
+
| visible -> hidden (exit) | opacity: 1->0, transform: 0->translateY(-10px) | duration-base | ease-in-out |
|
|
128
|
+
| idle -> hover | opacity: 1->0.8, transform: scale(1)->scale(1.02) | duration-fast | ease-out |
|
|
129
|
+
| idle -> focus | outline: none->2px solid, outline-offset: 0->2px | duration-fast | ease-out |
|
|
130
|
+
| idle -> active (pressed) | transform: scale(1)->scale(0.98) | duration-fast | ease-out |
|
|
131
|
+
| idle -> loading | opacity: 1->0.6, add pulse animation | duration-base | ease-in-out |
|
|
132
|
+
|
|
133
|
+
All transitions use compositor-only properties (transform, opacity) per GPU constraints.
|
|
134
|
+
|
|
135
|
+
## Phase 4: Self-Validation
|
|
136
|
+
|
|
137
|
+
1. Token completeness checks:
|
|
138
|
+
|
|
139
|
+
| Check | Pass Criteria |
|
|
140
|
+
|-------|---------------|
|
|
141
|
+
| easing_complete | All 3 easing functions defined with valid cubic-bezier |
|
|
142
|
+
| duration_complete | All 5 duration steps defined |
|
|
143
|
+
| stagger_defined | Base delay, increment, and max items specified |
|
|
144
|
+
| reduced_motion | Override values defined for all token categories |
|
|
145
|
+
|
|
146
|
+
2. Sequence checks (if applicable):
|
|
147
|
+
|
|
148
|
+
| Check | Pass Criteria |
|
|
149
|
+
|-------|---------------|
|
|
150
|
+
| threshold_valid | IntersectionObserver threshold between 0 and 1 |
|
|
151
|
+
| safe_properties | Only compositor-safe properties in animations |
|
|
152
|
+
| stagger_budget | No stagger sequence exceeds 0.8s total |
|
|
153
|
+
| fallback_present | Reduced motion fallback defined for each sequence |
|
|
154
|
+
|
|
155
|
+
3. State diagram checks:
|
|
156
|
+
|
|
157
|
+
| Check | Pass Criteria |
|
|
158
|
+
|-------|---------------|
|
|
159
|
+
| states_covered | entry, exit, hover, focus, active states defined |
|
|
160
|
+
| compositor_only | All animated properties are transform or opacity |
|
|
161
|
+
| durations_use_tokens | All durations reference token scale values |
|
|
162
|
+
|
|
163
|
+
4. Update `<session>/wisdom/.msg/meta.json` under `choreographer` namespace:
|
|
164
|
+
- Read existing -> merge `{ "choreographer": { token_count, sequence_count, state_diagrams, has_parallax, has_stagger } }` -> write back
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Analyze Task
|
|
2
|
+
|
|
3
|
+
Parse user task -> detect motion design scope -> build dependency graph -> 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
|
+
| easing, cubic-bezier, duration, timing | token system | tokens |
|
|
12
|
+
| scroll, parallax, reveal, stagger, intersection | scroll choreography | page |
|
|
13
|
+
| transition, hover, focus, state change | component animation | component |
|
|
14
|
+
| @keyframes, will-change, transform, opacity | animation implementation | component |
|
|
15
|
+
| page transition, route animation, full page | page-level motion | page |
|
|
16
|
+
| motion tokens, animation system, design system | token system | tokens |
|
|
17
|
+
| spring, bounce, overshoot | easing design | tokens |
|
|
18
|
+
| reduced-motion, prefers-reduced-motion, a11y | accessibility | component or tokens |
|
|
19
|
+
|
|
20
|
+
## Scope Determination
|
|
21
|
+
|
|
22
|
+
| Signal | Pipeline Mode |
|
|
23
|
+
|--------|---------------|
|
|
24
|
+
| Token/easing/duration system mentioned | tokens |
|
|
25
|
+
| Animate specific component(s) | component |
|
|
26
|
+
| Full page scroll choreography or page transitions | page |
|
|
27
|
+
| Unclear | ask user |
|
|
28
|
+
|
|
29
|
+
## Complexity Scoring
|
|
30
|
+
|
|
31
|
+
| Factor | Points |
|
|
32
|
+
|--------|--------|
|
|
33
|
+
| Single easing/token system | +1 |
|
|
34
|
+
| Component animation | +2 |
|
|
35
|
+
| Full page choreography | +3 |
|
|
36
|
+
| Multiple scroll sections | +1 |
|
|
37
|
+
| Parallax effects | +1 |
|
|
38
|
+
| Reduced-motion required | +1 |
|
|
39
|
+
| Performance constraints mentioned | +1 |
|
|
40
|
+
|
|
41
|
+
Results: 1-2 Low (tokens), 3-4 Medium (component), 5+ High (page)
|
|
42
|
+
|
|
43
|
+
## Framework Detection
|
|
44
|
+
|
|
45
|
+
| Keywords | Framework |
|
|
46
|
+
|----------|-----------|
|
|
47
|
+
| react, jsx, tsx | React |
|
|
48
|
+
| vue, v-bind | Vue |
|
|
49
|
+
| svelte | Svelte |
|
|
50
|
+
| vanilla, plain js | Vanilla JS |
|
|
51
|
+
| css-only, pure css | CSS-only |
|
|
52
|
+
| Default | CSS + Vanilla JS |
|
|
53
|
+
|
|
54
|
+
## Output
|
|
55
|
+
|
|
56
|
+
Write scope context to coordinator memory:
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"pipeline_mode": "<tokens|component|page>",
|
|
60
|
+
"scope": "<description>",
|
|
61
|
+
"framework": "<detected-framework>",
|
|
62
|
+
"complexity": { "score": 0, "level": "Low|Medium|High" }
|
|
63
|
+
}
|
|
64
|
+
```
|