claude-code-workflow 7.2.27 → 7.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
|
@@ -0,0 +1,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
|
+
```
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Command: Dispatch
|
|
2
|
+
|
|
3
|
+
Create the motion design task chain with correct dependencies and structured task descriptions. Supports tokens, component, and page pipeline modes.
|
|
4
|
+
|
|
5
|
+
## Phase 2: Context Loading
|
|
6
|
+
|
|
7
|
+
| Input | Source | Required |
|
|
8
|
+
|-------|--------|----------|
|
|
9
|
+
| User requirement | From coordinator Phase 1 | Yes |
|
|
10
|
+
| Session folder | From coordinator Phase 2 | Yes |
|
|
11
|
+
| Pipeline mode | From tasks.json `pipeline_mode` | Yes |
|
|
12
|
+
| Framework config | From tasks.json `framework` | Yes |
|
|
13
|
+
|
|
14
|
+
1. Load user requirement and motion scope from tasks.json
|
|
15
|
+
2. Load pipeline stage definitions from specs/pipelines.md
|
|
16
|
+
3. Read `pipeline_mode` and `framework` from tasks.json
|
|
17
|
+
|
|
18
|
+
## Phase 3: Task Chain Creation (Mode-Branched)
|
|
19
|
+
|
|
20
|
+
### Task Description Template
|
|
21
|
+
|
|
22
|
+
Every task is added to tasks.json with structured format:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"<TASK-ID>": {
|
|
27
|
+
"title": "<task title>",
|
|
28
|
+
"description": "PURPOSE: <what this task achieves> | Success: <measurable completion criteria>\nTASK:\n - <step 1: specific action>\n - <step 2: specific action>\n - <step 3: specific action>\nCONTEXT:\n - Session: <session-folder>\n - Scope: <motion-scope>\n - Framework: <framework>\n - Upstream artifacts: <artifact-1>, <artifact-2>\n - Shared memory: <session>/wisdom/.msg/meta.json\nEXPECTED: <deliverable path> + <quality criteria>\nCONSTRAINTS: <scope limits, focus areas>",
|
|
29
|
+
"role": "<role>",
|
|
30
|
+
"prefix": "<PREFIX>",
|
|
31
|
+
"deps": ["<dependency-list>"],
|
|
32
|
+
"status": "pending",
|
|
33
|
+
"findings": "",
|
|
34
|
+
"error": ""
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Mode Router
|
|
40
|
+
|
|
41
|
+
| Mode | Action |
|
|
42
|
+
|------|--------|
|
|
43
|
+
| `tokens` | Create 4 tasks: MRESEARCH -> CHOREO -> ANIM -> MTEST |
|
|
44
|
+
| `component` | Create 4 tasks: MRESEARCH -> CHOREO -> ANIM -> MTEST (GC loop) |
|
|
45
|
+
| `page` | Create 4+ tasks: MRESEARCH -> CHOREO -> [ANIM-001..N parallel] -> MTEST |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Tokens Pipeline Task Chain
|
|
50
|
+
|
|
51
|
+
**MRESEARCH-001** (motion-researcher):
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"MRESEARCH-001": {
|
|
55
|
+
"title": "Audit existing animations and measure performance baseline",
|
|
56
|
+
"description": "PURPOSE: Audit existing animations, measure performance baseline, catalog easing patterns | Success: 3 research artifacts produced with valid data\nTASK:\n - Scan codebase for existing CSS @keyframes, transitions, JS animation code\n - Measure paint/composite costs via Chrome DevTools performance traces (if available)\n - Catalog existing easing functions and timing patterns\n - Identify properties being animated (safe vs unsafe for compositor)\nCONTEXT:\n - Session: <session-folder>\n - Scope: <motion-scope>\n - Framework: <framework>\n - Shared memory: <session>/wisdom/.msg/meta.json\nEXPECTED: <session>/research/*.json | All 3 research files with valid JSON\nCONSTRAINTS: Read-only analysis | Focus on existing animation patterns",
|
|
57
|
+
"role": "motion-researcher",
|
|
58
|
+
"prefix": "MRESEARCH",
|
|
59
|
+
"deps": [],
|
|
60
|
+
"status": "pending",
|
|
61
|
+
"findings": "",
|
|
62
|
+
"error": ""
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**CHOREO-001** (choreographer):
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"CHOREO-001": {
|
|
71
|
+
"title": "Design animation token system",
|
|
72
|
+
"description": "PURPOSE: Design animation token system with easing functions, duration scale, stagger formulas | Success: Complete motion-tokens.json with all token categories\nTASK:\n - Define easing functions (ease-out, ease-in-out, ease-spring) as cubic-bezier values\n - Define duration scale (fast, base, slow, slower, slowest)\n - Define stagger formula with base delay and increment\n - Define reduced-motion fallback tokens\n - Reference specs/motion-tokens.md for token schema\nCONTEXT:\n - Session: <session-folder>\n - Scope: <motion-scope>\n - Framework: <framework>\n - Upstream artifacts: research/*.json\n - Shared memory: <session>/wisdom/.msg/meta.json\nEXPECTED: <session>/choreography/motion-tokens.json | Complete token system\nCONSTRAINTS: Follow motion-tokens.md schema | All tokens must have reduced-motion fallback",
|
|
73
|
+
"role": "choreographer",
|
|
74
|
+
"prefix": "CHOREO",
|
|
75
|
+
"deps": ["MRESEARCH-001"],
|
|
76
|
+
"status": "pending",
|
|
77
|
+
"findings": "",
|
|
78
|
+
"error": ""
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**ANIM-001** (animator):
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"ANIM-001": {
|
|
87
|
+
"title": "Implement CSS custom properties and utility classes from motion tokens",
|
|
88
|
+
"description": "PURPOSE: Implement CSS custom properties and utility classes from motion tokens | Success: Production-ready CSS with token consumption and reduced-motion overrides\nTASK:\n - Generate CSS custom properties from motion-tokens.json\n - Create utility animation classes consuming tokens\n - Add prefers-reduced-motion media query overrides\n - Ensure compositor-only properties (transform, opacity) per specs/gpu-constraints.md\nCONTEXT:\n - Session: <session-folder>\n - Scope: <motion-scope>\n - Framework: <framework>\n - Upstream artifacts: choreography/motion-tokens.json\n - Shared memory: <session>/wisdom/.msg/meta.json\nEXPECTED: <session>/animations/keyframes/*.css | Token CSS + utility classes + reduced-motion\nCONSTRAINTS: Compositor-only animations | No layout-triggering properties | will-change budget",
|
|
89
|
+
"role": "animator",
|
|
90
|
+
"prefix": "ANIM",
|
|
91
|
+
"deps": ["CHOREO-001"],
|
|
92
|
+
"status": "pending",
|
|
93
|
+
"findings": "",
|
|
94
|
+
"error": ""
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**MTEST-001** (motion-tester):
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"MTEST-001": {
|
|
103
|
+
"title": "Verify animation performance and accessibility compliance",
|
|
104
|
+
"description": "PURPOSE: Verify animation performance and accessibility compliance | Success: 60fps confirmed, no layout thrashing, reduced-motion present\nTASK:\n - Start Chrome DevTools performance trace (if available)\n - Verify compositor-only animations (no paint/layout triggers)\n - Check will-change usage (not excessive, max 3-4 elements)\n - Validate prefers-reduced-motion @media query presence\n - Static code analysis as fallback if Chrome DevTools unavailable\nCONTEXT:\n - Session: <session-folder>\n - Scope: <motion-scope>\n - Framework: <framework>\n - Upstream artifacts: animations/keyframes/*.css, choreography/motion-tokens.json\n - Shared memory: <session>/wisdom/.msg/meta.json\nEXPECTED: <session>/testing/reports/perf-report-001.md | Performance validation report\nCONSTRAINTS: Target 60fps | Flag any layout-triggering properties",
|
|
105
|
+
"role": "motion-tester",
|
|
106
|
+
"prefix": "MTEST",
|
|
107
|
+
"deps": ["ANIM-001"],
|
|
108
|
+
"status": "pending",
|
|
109
|
+
"findings": "",
|
|
110
|
+
"error": ""
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Component Pipeline Task Chain
|
|
118
|
+
|
|
119
|
+
Same as Tokens pipeline with enhanced task descriptions:
|
|
120
|
+
|
|
121
|
+
- **MRESEARCH-001**: Same as tokens, plus focus on target component(s) existing animation
|
|
122
|
+
- **CHOREO-001**: Same token design, plus transition state diagrams (entry/exit/hover/focus/loading) and scroll-triggered reveal sequences for the component(s)
|
|
123
|
+
- **ANIM-001**: Implement component-specific animations: @keyframes, IntersectionObserver triggers, rAF coordination, staggered orchestration
|
|
124
|
+
- **MTEST-001**: Same as tokens, plus GC loop -- if FPS < 60 or layout thrashing, send `fix_required` signal
|
|
125
|
+
|
|
126
|
+
GC loop between animator and motion-tester (max 2 rounds).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### Page Pipeline Task Chain
|
|
131
|
+
|
|
132
|
+
**MRESEARCH-001** and **CHOREO-001**: Same as component, but scope is full page with multiple scroll sections.
|
|
133
|
+
|
|
134
|
+
**CHOREO-001** additionally defines scroll section boundaries, parallax depths, and staggered entry sequences per section.
|
|
135
|
+
|
|
136
|
+
**ANIM-001..N** (parallel): One ANIM task per scroll section or page area:
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"ANIM-<NNN>": {
|
|
140
|
+
"title": "Implement animations for <section-name>",
|
|
141
|
+
"description": "PURPOSE: Implement animations for <section-name> | Success: Scroll-triggered reveals with 60fps performance\nTASK:\n - Implement IntersectionObserver-based scroll triggers for <section-name>\n - Apply staggered entry animations with calculated delays\n - Add scroll-linked parallax (if specified in choreography)\n - Ensure prefers-reduced-motion fallback\nCONTEXT:\n - Session: <session-folder>\n - Section: <section-name>\n - Upstream artifacts: choreography/sequences/<section>.md, choreography/motion-tokens.json\n - Shared memory: <session>/wisdom/.msg/meta.json\nEXPECTED: <session>/animations/keyframes/<section>.css + orchestrators/<section>.js\nCONSTRAINTS: Compositor-only | will-change budget | Follow motion-tokens",
|
|
142
|
+
"role": "animator",
|
|
143
|
+
"prefix": "ANIM",
|
|
144
|
+
"deps": ["CHOREO-001"],
|
|
145
|
+
"status": "pending",
|
|
146
|
+
"findings": "",
|
|
147
|
+
"error": ""
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**MTEST-001**: Blocked by all ANIM tasks. Full page performance validation.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Phase 4: Validation
|
|
157
|
+
|
|
158
|
+
Verify task chain integrity:
|
|
159
|
+
|
|
160
|
+
| Check | Method | Expected |
|
|
161
|
+
|-------|--------|----------|
|
|
162
|
+
| Task count correct | tasks.json count | tokens: 4, component: 4, page: 4+N |
|
|
163
|
+
| Dependencies correct | Trace dependency graph | Acyclic, correct deps |
|
|
164
|
+
| No circular dependencies | Trace dependency graph | Acyclic |
|
|
165
|
+
| Task IDs use correct prefixes | Pattern check | MRESEARCH/CHOREO/ANIM/MTEST |
|
|
166
|
+
| Structured descriptions complete | Each has PURPOSE/TASK/CONTEXT/EXPECTED/CONSTRAINTS | All present |
|
|
167
|
+
|
|
168
|
+
If validation fails, fix the specific task and re-validate.
|