claude-code-workflow 7.2.26 → 7.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-arch-opt/SKILL.md +1 -1
- package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +3 -1
- package/.claude/skills/team-arch-opt/roles/refactorer/role.md +3 -1
- package/.claude/skills/team-arch-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-coordinate/SKILL.md +4 -3
- package/.claude/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +1 -1
- package/.claude/skills/team-coordinate/roles/coordinator/commands/dispatch.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/commands/monitor.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/role.md +16 -15
- package/.claude/skills/team-coordinate/specs/pipelines.md +7 -4
- package/.claude/skills/team-coordinate/specs/role-spec-template.md +1 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-lifecycle-v4/SKILL.md +1 -1
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +14 -2
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +24 -2
- package/.claude/skills/team-lifecycle-v4/roles/executor/role.md +3 -1
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-perf-opt/SKILL.md +1 -1
- package/.claude/skills/team-perf-opt/roles/optimizer/role.md +3 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/executor/role.md +3 -1
- package/.claude/skills/team-testing/SKILL.md +1 -1
- package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +5 -2
- package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-testing/roles/executor/role.md +3 -1
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Monitor Pipeline
|
|
2
|
+
|
|
3
|
+
Event-driven pipeline coordination. Beat model: coordinator wake -> process -> spawn -> STOP.
|
|
4
|
+
|
|
5
|
+
## Constants
|
|
6
|
+
|
|
7
|
+
- SPAWN_MODE: background
|
|
8
|
+
- ONE_STEP_PER_INVOCATION: true
|
|
9
|
+
- FAST_ADVANCE_AWARE: true
|
|
10
|
+
- WORKER_AGENT: team-worker
|
|
11
|
+
- MAX_GC_ROUNDS: 2
|
|
12
|
+
|
|
13
|
+
## Handler Router
|
|
14
|
+
|
|
15
|
+
| Source | Handler |
|
|
16
|
+
|--------|---------|
|
|
17
|
+
| Message contains [color-auditor], [typo-auditor], [focus-auditor], [remediation-planner], [fix-implementer] | handleCallback |
|
|
18
|
+
| "capability_gap" | handleAdapt |
|
|
19
|
+
| "check" or "status" | handleCheck |
|
|
20
|
+
| "resume" or "continue" | handleResume |
|
|
21
|
+
| All tasks completed | handleComplete |
|
|
22
|
+
| Default | handleSpawnNext |
|
|
23
|
+
|
|
24
|
+
## handleCallback
|
|
25
|
+
|
|
26
|
+
Worker completed. Process and advance.
|
|
27
|
+
|
|
28
|
+
1. Parse message to identify role and task ID:
|
|
29
|
+
|
|
30
|
+
| Message Pattern | Role |
|
|
31
|
+
|----------------|------|
|
|
32
|
+
| `[color-auditor]` or `COLOR-*` | color-auditor |
|
|
33
|
+
| `[typo-auditor]` or `TYPO-*` | typo-auditor |
|
|
34
|
+
| `[focus-auditor]` or `FOCUS-*` | focus-auditor |
|
|
35
|
+
| `[remediation-planner]` or `REMED-*` | remediation-planner |
|
|
36
|
+
| `[fix-implementer]` or `FIX-*` | fix-implementer |
|
|
37
|
+
|
|
38
|
+
2. Mark task completed: `TaskUpdate({ taskId: "<task-id>", status: "completed" })`
|
|
39
|
+
3. Record completion in session state
|
|
40
|
+
|
|
41
|
+
4. Check checkpoint for completed task:
|
|
42
|
+
|
|
43
|
+
| Completed Task | Checkpoint | Action |
|
|
44
|
+
|---------------|------------|--------|
|
|
45
|
+
| COLOR-001 | Parallel fan-in | Check if all 3 audits complete -> unblock REMED-001 |
|
|
46
|
+
| TYPO-001 | Parallel fan-in | Check if all 3 audits complete -> unblock REMED-001 |
|
|
47
|
+
| FOCUS-001 | Parallel fan-in | Check if all 3 audits complete -> unblock REMED-001 |
|
|
48
|
+
| REMED-001 | -- | Unblock FIX-001 (full mode only) |
|
|
49
|
+
| FIX-001 | GC check | Spawn COLOR-002 + FOCUS-002 in parallel (full mode) |
|
|
50
|
+
| COLOR-002 | Re-audit fan-in | Check if both re-audits complete -> handleComplete |
|
|
51
|
+
| FOCUS-002 | Re-audit fan-in | Check if both re-audits complete -> handleComplete |
|
|
52
|
+
|
|
53
|
+
5. **Parallel fan-in handling** (audit task completed):
|
|
54
|
+
|
|
55
|
+
**CRITICAL**: REMED-001 must wait for ALL 3 auditors (COLOR-001 + TYPO-001 + FOCUS-001) to complete.
|
|
56
|
+
|
|
57
|
+
Check completion state:
|
|
58
|
+
```
|
|
59
|
+
completed_audits = count of completed tasks in [COLOR-001, TYPO-001, FOCUS-001]
|
|
60
|
+
if completed_audits < 3:
|
|
61
|
+
-> Log "[coordinator] Audit fan-in: {completed_audits}/3 complete, waiting for remaining"
|
|
62
|
+
-> STOP (do NOT advance)
|
|
63
|
+
if completed_audits === 3:
|
|
64
|
+
-> Log "[coordinator] All 3 audits complete, advancing to REMED-001"
|
|
65
|
+
-> handleSpawnNext (will pick up REMED-001)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
6. **GC loop handling** (full mode, after FIX-001 completes):
|
|
69
|
+
|
|
70
|
+
Read re-audit results when COLOR-002 and FOCUS-002 both complete:
|
|
71
|
+
|
|
72
|
+
| Signal | Condition | Action |
|
|
73
|
+
|--------|-----------|--------|
|
|
74
|
+
| All pass | No critical/high issues remaining | GC converged -> handleComplete |
|
|
75
|
+
| Issues remain | Critical/high issues found | gc_rounds < max -> create FIX-002 + re-audit tasks |
|
|
76
|
+
| Any | gc_rounds >= max | Escalate to user |
|
|
77
|
+
|
|
78
|
+
**GC Fix Task Creation** (when re-audit finds issues):
|
|
79
|
+
```
|
|
80
|
+
TaskCreate({ subject: "FIX-002",
|
|
81
|
+
description: "PURPOSE: Address remaining issues from re-audit | Success: All critical/high issues resolved
|
|
82
|
+
TASK:
|
|
83
|
+
- Parse re-audit reports for remaining issues
|
|
84
|
+
- Apply targeted fixes for color and focus issues
|
|
85
|
+
CONTEXT:
|
|
86
|
+
- Session: <session-folder>
|
|
87
|
+
- Upstream artifacts: re-audit/color-audit-002.md, re-audit/focus-audit-002.md" })
|
|
88
|
+
TaskUpdate({ taskId: "FIX-002", addBlockedBy: ["COLOR-002", "FOCUS-002"], owner: "fix-implementer" })
|
|
89
|
+
```
|
|
90
|
+
Then create new re-audit tasks blocked by FIX-002. Increment gc_state.round.
|
|
91
|
+
|
|
92
|
+
**GC Escalation Options** (when max rounds exceeded):
|
|
93
|
+
1. Accept current state - acknowledge remaining issues
|
|
94
|
+
2. Try one more round
|
|
95
|
+
3. Terminate
|
|
96
|
+
|
|
97
|
+
7. -> handleSpawnNext
|
|
98
|
+
|
|
99
|
+
## handleCheck
|
|
100
|
+
|
|
101
|
+
Read-only status report, then STOP.
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
Pipeline Status (<pipeline-mode>):
|
|
105
|
+
[DONE] COLOR-001 (color-auditor) -> audits/color/color-audit-001.md
|
|
106
|
+
[DONE] TYPO-001 (typo-auditor) -> audits/typography/typo-audit-001.md
|
|
107
|
+
[RUN] FOCUS-001 (focus-auditor) -> auditing focus...
|
|
108
|
+
[WAIT] REMED-001 (remediation-planner) -> blocked by COLOR-001, TYPO-001, FOCUS-001
|
|
109
|
+
[WAIT] FIX-001 (fix-implementer) -> blocked by REMED-001
|
|
110
|
+
[WAIT] COLOR-002 (color-auditor) -> blocked by FIX-001
|
|
111
|
+
[WAIT] FOCUS-002 (focus-auditor) -> blocked by FIX-001
|
|
112
|
+
|
|
113
|
+
Fan-in: 2/3 audits complete
|
|
114
|
+
GC Rounds: 0/2
|
|
115
|
+
Session: <session-id>
|
|
116
|
+
Commands: 'resume' to advance | 'check' to refresh
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Output status -- do NOT advance pipeline.
|
|
120
|
+
|
|
121
|
+
## handleResume
|
|
122
|
+
|
|
123
|
+
1. Audit task list for inconsistencies:
|
|
124
|
+
- Tasks stuck in "in_progress" -> reset to "pending"
|
|
125
|
+
- Tasks with completed blockers but still "pending" -> include in spawn list
|
|
126
|
+
2. -> handleSpawnNext
|
|
127
|
+
|
|
128
|
+
## handleSpawnNext
|
|
129
|
+
|
|
130
|
+
Find ready tasks, spawn workers, STOP.
|
|
131
|
+
|
|
132
|
+
1. Collect: completedSubjects, inProgressSubjects, readySubjects (pending + all blockedBy completed)
|
|
133
|
+
2. No ready + work in progress -> report waiting, STOP
|
|
134
|
+
3. No ready + nothing in progress -> handleComplete
|
|
135
|
+
4. Has ready -> for each:
|
|
136
|
+
a. Check inner loop role with active worker -> skip (worker picks up)
|
|
137
|
+
b. TaskUpdate -> in_progress
|
|
138
|
+
c. team_msg log -> task_unblocked
|
|
139
|
+
d. Spawn team-worker:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Agent({
|
|
143
|
+
subagent_type: "team-worker",
|
|
144
|
+
description: "Spawn <role> worker for <task-id>",
|
|
145
|
+
team_name: "visual-a11y",
|
|
146
|
+
name: "<role>",
|
|
147
|
+
run_in_background: true,
|
|
148
|
+
prompt: `## Role Assignment
|
|
149
|
+
role: <role>
|
|
150
|
+
role_spec: <skill_root>/roles/<role>/role.md
|
|
151
|
+
session: <session-folder>
|
|
152
|
+
session_id: <session-id>
|
|
153
|
+
team_name: visual-a11y
|
|
154
|
+
requirement: <task-description>
|
|
155
|
+
inner_loop: <true|false>
|
|
156
|
+
|
|
157
|
+
Read role_spec file to load Phase 2-4 domain instructions.
|
|
158
|
+
Execute built-in Phase 1 (task discovery) -> role Phase 2-4 -> built-in Phase 5 (report).`
|
|
159
|
+
})
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Parallel spawn rules by mode**:
|
|
163
|
+
|
|
164
|
+
| Mode | Scenario | Spawn Behavior |
|
|
165
|
+
|------|----------|---------------|
|
|
166
|
+
| audit-only | Initial | Spawn COLOR-001 + TYPO-001 + FOCUS-001 in parallel |
|
|
167
|
+
| audit-only | After 3 audits complete | Spawn REMED-001 |
|
|
168
|
+
| full | Initial | Spawn COLOR-001 + TYPO-001 + FOCUS-001 in parallel |
|
|
169
|
+
| full | After 3 audits complete | Spawn REMED-001 |
|
|
170
|
+
| full | After REMED-001 | Spawn FIX-001 |
|
|
171
|
+
| full | After FIX-001 | Spawn COLOR-002 + FOCUS-002 in parallel |
|
|
172
|
+
|
|
173
|
+
5. Add to active_workers, update session, output summary, STOP
|
|
174
|
+
|
|
175
|
+
## handleComplete
|
|
176
|
+
|
|
177
|
+
Pipeline done. Generate report and completion action.
|
|
178
|
+
|
|
179
|
+
**Completion check by mode**:
|
|
180
|
+
|
|
181
|
+
| Mode | Completion Condition |
|
|
182
|
+
|------|---------------------|
|
|
183
|
+
| audit-only | All 4 tasks (+ any fix tasks) completed |
|
|
184
|
+
| full | All 7 tasks (+ any GC fix tasks) completed |
|
|
185
|
+
|
|
186
|
+
1. If any tasks not completed -> handleSpawnNext
|
|
187
|
+
2. If all completed -> transition to coordinator Phase 5
|
|
188
|
+
|
|
189
|
+
## handleAdapt
|
|
190
|
+
|
|
191
|
+
Capability gap reported mid-pipeline.
|
|
192
|
+
|
|
193
|
+
1. Parse gap description
|
|
194
|
+
2. Check if existing role covers it -> redirect
|
|
195
|
+
3. Role count < 6 -> generate dynamic role spec
|
|
196
|
+
4. Create new task, spawn worker
|
|
197
|
+
5. Role count >= 6 -> merge or pause
|
|
198
|
+
|
|
199
|
+
## Fast-Advance Reconciliation
|
|
200
|
+
|
|
201
|
+
On every coordinator wake:
|
|
202
|
+
1. Read team_msg entries with type="fast_advance"
|
|
203
|
+
2. Sync active_workers with spawned successors
|
|
204
|
+
3. No duplicate spawns
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Coordinator Role
|
|
2
|
+
|
|
3
|
+
Visual Accessibility Team coordinator. Orchestrate pipeline: analyze -> dispatch -> spawn -> monitor -> report. Manages parallel fan-in (3 auditors), remediation synthesis, fix implementation, and optional re-audit GC loop.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
- **Name**: coordinator | **Tag**: [coordinator]
|
|
7
|
+
- **Responsibility**: Analyze scope -> Create team -> Dispatch tasks -> Monitor progress -> Report results
|
|
8
|
+
|
|
9
|
+
## Boundaries
|
|
10
|
+
|
|
11
|
+
### MUST
|
|
12
|
+
- All output (SendMessage, team_msg, logs) must carry `[coordinator]` identifier
|
|
13
|
+
- Use `team-worker` agent type for all worker spawns (NOT `general-purpose`)
|
|
14
|
+
- Dispatch tasks with proper dependency chains and blockedBy
|
|
15
|
+
- Spawn COLOR-001, TYPO-001, FOCUS-001 in PARALLEL (no blockedBy between them)
|
|
16
|
+
- Monitor worker progress via message bus and route messages
|
|
17
|
+
- Handle Generator-Critic loops with max 2 iterations
|
|
18
|
+
- Maintain session state persistence
|
|
19
|
+
|
|
20
|
+
### MUST NOT
|
|
21
|
+
- Implement domain logic (auditing, planning, fixing) -- workers handle this
|
|
22
|
+
- Spawn workers without creating tasks first
|
|
23
|
+
- Skip sync points when configured
|
|
24
|
+
- Force-advance pipeline past failed audit
|
|
25
|
+
- Modify source code or design artifacts directly -- delegate to workers
|
|
26
|
+
- Omit `[coordinator]` identifier in any output
|
|
27
|
+
|
|
28
|
+
## Command Execution Protocol
|
|
29
|
+
|
|
30
|
+
When coordinator needs to execute a command (analyze, dispatch, monitor):
|
|
31
|
+
|
|
32
|
+
1. Read `commands/<command>.md`
|
|
33
|
+
2. Follow the workflow defined in the command
|
|
34
|
+
3. Commands are inline execution guides, NOT separate agents
|
|
35
|
+
4. Execute synchronously, complete before proceeding
|
|
36
|
+
|
|
37
|
+
## Entry Router
|
|
38
|
+
|
|
39
|
+
| Detection | Condition | Handler |
|
|
40
|
+
|-----------|-----------|---------|
|
|
41
|
+
| Worker callback | Message contains [color-auditor], [typo-auditor], [focus-auditor], [remediation-planner], [fix-implementer] | -> handleCallback (monitor.md) |
|
|
42
|
+
| Status check | Args contain "check" or "status" | -> handleCheck (monitor.md) |
|
|
43
|
+
| Manual resume | Args contain "resume" or "continue" | -> handleResume (monitor.md) |
|
|
44
|
+
| Capability gap | Message contains "capability_gap" | -> handleAdapt (monitor.md) |
|
|
45
|
+
| Pipeline complete | All tasks have status "completed" | -> handleComplete (monitor.md) |
|
|
46
|
+
| Interrupted session | Active/paused session exists in .workflow/.team/VA-* | -> Phase 0 |
|
|
47
|
+
| New session | None of above | -> Phase 1 |
|
|
48
|
+
|
|
49
|
+
For callback/check/resume/adapt/complete: load `@commands/monitor.md`, execute matched handler, STOP.
|
|
50
|
+
|
|
51
|
+
## Phase 0: Session Resume Check
|
|
52
|
+
|
|
53
|
+
1. Scan `.workflow/.team/VA-*/.msg/meta.json` for active/paused sessions
|
|
54
|
+
2. No sessions -> Phase 1
|
|
55
|
+
3. Single session -> reconcile (audit TaskList, reset in_progress->pending, rebuild team, kick first ready task)
|
|
56
|
+
4. Multiple -> AskUserQuestion for selection
|
|
57
|
+
|
|
58
|
+
## Phase 1: Requirement Clarification
|
|
59
|
+
|
|
60
|
+
TEXT-LEVEL ONLY. No source code reading.
|
|
61
|
+
|
|
62
|
+
1. Parse task description from arguments
|
|
63
|
+
2. Detect audit scope:
|
|
64
|
+
|
|
65
|
+
| Signal | Pipeline Mode |
|
|
66
|
+
|--------|---------------|
|
|
67
|
+
| "audit only", "no fixes", "assessment" | audit-only |
|
|
68
|
+
| "full audit", "fix", "remediate", "full cycle" | full |
|
|
69
|
+
| Unclear | ask user |
|
|
70
|
+
|
|
71
|
+
3. Ask for missing parameters if scope unclear:
|
|
72
|
+
```
|
|
73
|
+
AskUserQuestion({
|
|
74
|
+
questions: [
|
|
75
|
+
{ question: "Accessibility audit scope?", header: "Scope", options: [
|
|
76
|
+
{ label: "Audit only", description: "Color + typography + focus audit with remediation plan" },
|
|
77
|
+
{ label: "Full cycle", description: "Audit + fix + re-audit verification" }
|
|
78
|
+
]},
|
|
79
|
+
{ question: "Target?", header: "Target", options: [
|
|
80
|
+
{ label: "URL (rendered page)" },
|
|
81
|
+
{ label: "Component path (source)" },
|
|
82
|
+
{ label: "Full site" }
|
|
83
|
+
]}
|
|
84
|
+
]
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
4. Delegate to `@commands/analyze.md` -> output scope context
|
|
88
|
+
5. Record: pipeline_mode, target, wcag_level
|
|
89
|
+
|
|
90
|
+
## Phase 2: Create Team + Initialize Session
|
|
91
|
+
|
|
92
|
+
1. Resolve workspace paths (MUST do first):
|
|
93
|
+
- `project_root` = result of `Bash({ command: "pwd" })`
|
|
94
|
+
- `skill_root` = `<project_root>/.claude/skills/team-visual-a11y`
|
|
95
|
+
2. Generate session ID: `VA-<slug>-<YYYY-MM-DD>`
|
|
96
|
+
3. Create session folder structure:
|
|
97
|
+
```
|
|
98
|
+
.workflow/.team/VA-<slug>-<date>/audits/color/
|
|
99
|
+
.workflow/.team/VA-<slug>-<date>/audits/typography/
|
|
100
|
+
.workflow/.team/VA-<slug>-<date>/audits/focus/
|
|
101
|
+
.workflow/.team/VA-<slug>-<date>/remediation/
|
|
102
|
+
.workflow/.team/VA-<slug>-<date>/fixes/
|
|
103
|
+
.workflow/.team/VA-<slug>-<date>/re-audit/
|
|
104
|
+
.workflow/.team/VA-<slug>-<date>/evidence/
|
|
105
|
+
.workflow/.team/VA-<slug>-<date>/.msg/
|
|
106
|
+
```
|
|
107
|
+
4. Initialize `.msg/meta.json` via team_msg state_update with pipeline metadata
|
|
108
|
+
5. TeamCreate(team_name="visual-a11y")
|
|
109
|
+
6. Do NOT spawn workers yet - deferred to Phase 4
|
|
110
|
+
|
|
111
|
+
## Phase 3: Create Task Chain
|
|
112
|
+
|
|
113
|
+
Delegate to `@commands/dispatch.md`. Task chains by mode:
|
|
114
|
+
|
|
115
|
+
| Mode | Task Chain |
|
|
116
|
+
|------|------------|
|
|
117
|
+
| audit-only | [COLOR-001 + TYPO-001 + FOCUS-001 parallel] -> REMED-001 |
|
|
118
|
+
| full | [COLOR-001 + TYPO-001 + FOCUS-001 parallel] -> REMED-001 -> FIX-001 -> [COLOR-002 + FOCUS-002 parallel] |
|
|
119
|
+
|
|
120
|
+
## Phase 4: Spawn-and-Stop
|
|
121
|
+
|
|
122
|
+
**CRITICAL**: Spawn COLOR-001, TYPO-001, FOCUS-001 in PARALLEL (all 3 have NO blockedBy).
|
|
123
|
+
|
|
124
|
+
Delegate to `@commands/monitor.md#handleSpawnNext`:
|
|
125
|
+
1. Find ready tasks (pending + blockedBy resolved)
|
|
126
|
+
2. Spawn team-worker agents (see SKILL.md Spawn Template)
|
|
127
|
+
3. Output status summary
|
|
128
|
+
4. STOP
|
|
129
|
+
|
|
130
|
+
## Phase 5: Report + Completion Action
|
|
131
|
+
|
|
132
|
+
1. Read session state -> collect all results
|
|
133
|
+
2. List deliverables:
|
|
134
|
+
|
|
135
|
+
| Deliverable | Path |
|
|
136
|
+
|-------------|------|
|
|
137
|
+
| Color Audit | <session>/audits/color/color-audit-001.md |
|
|
138
|
+
| Typography Audit | <session>/audits/typography/typo-audit-001.md |
|
|
139
|
+
| Focus Audit | <session>/audits/focus/focus-audit-001.md |
|
|
140
|
+
| Remediation Plan | <session>/remediation/remediation-plan.md |
|
|
141
|
+
| Fix Summary | <session>/fixes/fix-summary-001.md (full mode) |
|
|
142
|
+
| Re-audit Color | <session>/re-audit/color-audit-002.md (full mode) |
|
|
143
|
+
| Re-audit Focus | <session>/re-audit/focus-audit-002.md (full mode) |
|
|
144
|
+
| Evidence | <session>/evidence/*.png (if Chrome DevTools used) |
|
|
145
|
+
|
|
146
|
+
3. Calculate: completed_tasks, gc_rounds, issues_found, issues_fixed, wcag_compliance_level
|
|
147
|
+
4. Output pipeline summary with [coordinator] prefix
|
|
148
|
+
5. Execute completion action:
|
|
149
|
+
```
|
|
150
|
+
AskUserQuestion({
|
|
151
|
+
questions: [{ question: "Pipeline complete. What next?", header: "Completion", options: [
|
|
152
|
+
{ label: "Archive & Clean", description: "Archive session and clean up team resources" },
|
|
153
|
+
{ label: "Keep Active", description: "Keep session for follow-up work" },
|
|
154
|
+
{ label: "Export Results", description: "Export deliverables to specified location" }
|
|
155
|
+
]}]
|
|
156
|
+
})
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Error Handling
|
|
160
|
+
|
|
161
|
+
| Error | Resolution |
|
|
162
|
+
|-------|------------|
|
|
163
|
+
| Task timeout | Log, mark failed, ask user to retry or skip |
|
|
164
|
+
| Worker crash | Reset task to pending, respawn worker |
|
|
165
|
+
| Dependency cycle | Detect, report to user, halt |
|
|
166
|
+
| Invalid scope | Reject with error, ask to clarify |
|
|
167
|
+
| Session corruption | Attempt recovery, fallback to manual reconciliation |
|
|
168
|
+
| GC loop stuck > 2 rounds | Escalate to user: accept / try one more / terminate |
|
|
169
|
+
| Chrome DevTools unavailable | Mark in meta.json, auditors degrade to static analysis |
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
role: fix-implementer
|
|
3
|
+
prefix: FIX
|
|
4
|
+
inner_loop: true
|
|
5
|
+
message_types: [state_update]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Accessibility Fix Implementer
|
|
9
|
+
|
|
10
|
+
Implement accessibility fixes from the remediation plan. OKLCH color corrections, focus styles, ARIA attributes, reduced-motion queries, typography adjustments. Apply fixes in priority order (critical first) and self-validate results.
|
|
11
|
+
|
|
12
|
+
## Phase 2: Context & Artifact Loading
|
|
13
|
+
|
|
14
|
+
| Input | Source | Required |
|
|
15
|
+
|-------|--------|----------|
|
|
16
|
+
| Task description | From task subject/description | Yes |
|
|
17
|
+
| Session path | Extracted from task description | Yes |
|
|
18
|
+
| Remediation plan | <session>/remediation/remediation-plan.md | Yes |
|
|
19
|
+
| Color audit report | <session>/audits/color/color-audit-001.md | Yes |
|
|
20
|
+
| Focus audit report | <session>/audits/focus/focus-audit-001.md | Yes |
|
|
21
|
+
| Typography audit report | <session>/audits/typography/typo-audit-001.md | Yes |
|
|
22
|
+
| .msg/meta.json | <session>/.msg/meta.json | Yes |
|
|
23
|
+
| Re-audit reports (GC loop) | <session>/re-audit/*.md | Only for FIX-002+ |
|
|
24
|
+
|
|
25
|
+
1. Extract session path from task description
|
|
26
|
+
2. Read remediation plan -- this is the primary work instruction
|
|
27
|
+
3. Parse priority matrix for ordered fix list
|
|
28
|
+
4. Read audit reports for detailed context on each issue
|
|
29
|
+
5. For FIX-002+ (GC loop): read re-audit reports for remaining issues
|
|
30
|
+
|
|
31
|
+
## Phase 3: Fix Implementation
|
|
32
|
+
|
|
33
|
+
Apply fixes in priority order: Critical -> High -> Medium -> Low.
|
|
34
|
+
|
|
35
|
+
### Category 1: OKLCH Color Corrections
|
|
36
|
+
|
|
37
|
+
**Goal**: Adjust OKLCH lightness/chroma to meet contrast requirements.
|
|
38
|
+
|
|
39
|
+
**Process**:
|
|
40
|
+
1. Read remediation plan for specific color changes needed
|
|
41
|
+
2. Locate CSS custom properties or color definitions in source files
|
|
42
|
+
3. Apply lightness adjustments:
|
|
43
|
+
- Text too light -> decrease L% (e.g., L 55% -> L 35%)
|
|
44
|
+
- Background too dark -> increase L% (e.g., L 80% -> L 92%)
|
|
45
|
+
- Maintain hue (H) and adjust chroma (C) minimally
|
|
46
|
+
4. Verify new contrast ratios meet WCAG target
|
|
47
|
+
5. If dark mode exists, apply corresponding adjustments
|
|
48
|
+
|
|
49
|
+
**Example**:
|
|
50
|
+
```css
|
|
51
|
+
/* Before: contrast 3.2:1 */
|
|
52
|
+
--color-text: oklch(55% 0 0);
|
|
53
|
+
--color-bg: oklch(98% 0 0);
|
|
54
|
+
|
|
55
|
+
/* After: contrast 7.2:1 (AAA) */
|
|
56
|
+
--color-text: oklch(25% 0 0);
|
|
57
|
+
--color-bg: oklch(98% 0 0);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Category 2: Focus Styles
|
|
61
|
+
|
|
62
|
+
**Goal**: Add visible, high-contrast focus indicators for keyboard users.
|
|
63
|
+
|
|
64
|
+
**Process**:
|
|
65
|
+
1. Add `:focus-visible` rules per specs/focus-patterns.md:
|
|
66
|
+
```css
|
|
67
|
+
:focus-visible {
|
|
68
|
+
outline: 2px solid var(--color-accent);
|
|
69
|
+
outline-offset: 2px;
|
|
70
|
+
}
|
|
71
|
+
:focus:not(:focus-visible) {
|
|
72
|
+
outline: none;
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
2. Remove bare `outline: none` or `outline: 0` that suppress focus without alternative
|
|
76
|
+
3. Verify focus indicator contrast >= 3:1 against adjacent colors
|
|
77
|
+
4. Add consistent focus style across all interactive elements
|
|
78
|
+
|
|
79
|
+
### Category 3: ARIA Attributes
|
|
80
|
+
|
|
81
|
+
**Goal**: Add missing ARIA roles, states, and properties.
|
|
82
|
+
|
|
83
|
+
**Process**:
|
|
84
|
+
1. Add `role` attributes where semantic HTML is not used:
|
|
85
|
+
- `<div onclick>` -> add `role="button"` and `tabindex="0"`
|
|
86
|
+
- Custom widgets -> appropriate ARIA role
|
|
87
|
+
2. Add state attributes:
|
|
88
|
+
- Toggle buttons: `aria-pressed="true|false"`
|
|
89
|
+
- Expandable: `aria-expanded="true|false"`, `aria-controls="panel-id"`
|
|
90
|
+
- Dialogs: `role="dialog"`, `aria-modal="true"`, `aria-labelledby="title-id"`
|
|
91
|
+
3. Add labels:
|
|
92
|
+
- `aria-label` for icon-only buttons
|
|
93
|
+
- `aria-labelledby` for dialogs and sections
|
|
94
|
+
- `aria-describedby` for form error messages
|
|
95
|
+
4. Add live regions:
|
|
96
|
+
- Status messages: `aria-live="polite"`
|
|
97
|
+
- Error messages: `aria-live="assertive"`
|
|
98
|
+
|
|
99
|
+
### Category 4: Reduced-Motion Queries
|
|
100
|
+
|
|
101
|
+
**Goal**: Respect user's motion preferences.
|
|
102
|
+
|
|
103
|
+
**Process**:
|
|
104
|
+
1. Wrap animations and transitions in media query:
|
|
105
|
+
```css
|
|
106
|
+
@media (prefers-reduced-motion: reduce) {
|
|
107
|
+
*,
|
|
108
|
+
*::before,
|
|
109
|
+
*::after {
|
|
110
|
+
animation-duration: 0.01ms !important;
|
|
111
|
+
animation-iteration-count: 1 !important;
|
|
112
|
+
transition-duration: 0.01ms !important;
|
|
113
|
+
scroll-behavior: auto !important;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
2. Or per-element: disable specific animations while keeping layout
|
|
118
|
+
3. Ensure no content is lost when motion is reduced
|
|
119
|
+
|
|
120
|
+
### Category 5: Typography Adjustments
|
|
121
|
+
|
|
122
|
+
**Goal**: Fix font sizes, line heights, and reading widths.
|
|
123
|
+
|
|
124
|
+
**Process**:
|
|
125
|
+
1. Replace fixed font sizes with responsive clamp():
|
|
126
|
+
```css
|
|
127
|
+
body { font-size: clamp(1rem, 1vw + 0.875rem, 1.25rem); }
|
|
128
|
+
```
|
|
129
|
+
2. Fix line-height to acceptable ranges:
|
|
130
|
+
```css
|
|
131
|
+
body { line-height: 1.625; }
|
|
132
|
+
h1, h2, h3 { line-height: 1.2; }
|
|
133
|
+
```
|
|
134
|
+
3. Add max-width for reading containers:
|
|
135
|
+
```css
|
|
136
|
+
.content { max-width: 70ch; }
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Category 6: Skip Link
|
|
140
|
+
|
|
141
|
+
**Goal**: Add skip-to-main-content link if missing.
|
|
142
|
+
|
|
143
|
+
**Process** (per specs/focus-patterns.md):
|
|
144
|
+
1. Add as first child of `<body>`:
|
|
145
|
+
```html
|
|
146
|
+
<a href="#main" class="skip-link">Skip to main content</a>
|
|
147
|
+
```
|
|
148
|
+
2. Add CSS:
|
|
149
|
+
```css
|
|
150
|
+
.skip-link {
|
|
151
|
+
position: absolute;
|
|
152
|
+
left: -9999px;
|
|
153
|
+
top: auto;
|
|
154
|
+
}
|
|
155
|
+
.skip-link:focus {
|
|
156
|
+
position: fixed;
|
|
157
|
+
left: 16px;
|
|
158
|
+
top: 16px;
|
|
159
|
+
z-index: 9999;
|
|
160
|
+
background: var(--color-paper, #fff);
|
|
161
|
+
color: var(--color-ink, #000);
|
|
162
|
+
padding: 8px 16px;
|
|
163
|
+
border-radius: 4px;
|
|
164
|
+
text-decoration: underline;
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
3. Ensure main content has `id="main"` (or equivalent target)
|
|
168
|
+
|
|
169
|
+
### Category 7: Focus Trap for Modals
|
|
170
|
+
|
|
171
|
+
**Goal**: Implement proper focus management in dialogs.
|
|
172
|
+
|
|
173
|
+
**Process** (per specs/focus-patterns.md):
|
|
174
|
+
1. On dialog open:
|
|
175
|
+
- Store `document.activeElement` as return target
|
|
176
|
+
- Move focus to first focusable element within dialog
|
|
177
|
+
2. Trap Tab/Shift+Tab within dialog:
|
|
178
|
+
- Collect all focusable elements within dialog
|
|
179
|
+
- On Tab at last element -> focus first element
|
|
180
|
+
- On Shift+Tab at first element -> focus last element
|
|
181
|
+
3. On Escape -> close dialog, restore focus to stored element
|
|
182
|
+
4. Set `aria-modal="true"` on dialog container
|
|
183
|
+
5. Optional: set `inert` on background content
|
|
184
|
+
|
|
185
|
+
## Phase 4: Self-Validation & Output
|
|
186
|
+
|
|
187
|
+
1. Validate each fix category:
|
|
188
|
+
|
|
189
|
+
| Category | Validation Method |
|
|
190
|
+
|----------|------------------|
|
|
191
|
+
| Color | Recalculate contrast ratios for changed colors, verify >= target |
|
|
192
|
+
| Focus | Search for :focus-visible rules, verify no bare outline:none |
|
|
193
|
+
| ARIA | Check all dialogs have role+aria-modal, all buttons have labels |
|
|
194
|
+
| Motion | Verify prefers-reduced-motion media query exists |
|
|
195
|
+
| Typography | Check clamp() minimum >= 1rem, line-height in range |
|
|
196
|
+
| Skip link | Verify skip link element exists, CSS hides then shows on focus |
|
|
197
|
+
| Focus trap | Verify dialog has focus management code |
|
|
198
|
+
|
|
199
|
+
2. Write fix summary to `<session>/fixes/fix-summary-{NNN}.md`:
|
|
200
|
+
|
|
201
|
+
```markdown
|
|
202
|
+
# Fix Summary - {NNN}
|
|
203
|
+
[fix-implementer]
|
|
204
|
+
|
|
205
|
+
## Overview
|
|
206
|
+
- **Total fixes applied**: {count}
|
|
207
|
+
- **Critical fixed**: {count}
|
|
208
|
+
- **High fixed**: {count}
|
|
209
|
+
- **Medium fixed**: {count}
|
|
210
|
+
- **Files modified**: {count}
|
|
211
|
+
|
|
212
|
+
## Fixes Applied
|
|
213
|
+
|
|
214
|
+
### Fix 1: Color contrast (Critical, WCAG 1.4.3)
|
|
215
|
+
- **File**: `src/styles/globals.css:12`
|
|
216
|
+
- **Before**: `--color-text: oklch(55% 0 0)` (contrast 3.2:1)
|
|
217
|
+
- **After**: `--color-text: oklch(25% 0 0)` (contrast 7.2:1)
|
|
218
|
+
- **Validated**: PASS
|
|
219
|
+
|
|
220
|
+
### Fix 2: Focus indicators (High, WCAG 2.4.7)
|
|
221
|
+
- **File**: `src/styles/globals.css:45`
|
|
222
|
+
- **Before**: No :focus-visible rules
|
|
223
|
+
- **After**: Added :focus-visible with 2px outline
|
|
224
|
+
- **Validated**: PASS
|
|
225
|
+
|
|
226
|
+
...
|
|
227
|
+
|
|
228
|
+
## Files Modified
|
|
229
|
+
| File | Changes |
|
|
230
|
+
|------|---------|
|
|
231
|
+
| src/styles/globals.css | Color adjustments, focus styles, reduced-motion |
|
|
232
|
+
| src/components/Modal.tsx | Focus trap, ARIA attributes |
|
|
233
|
+
| src/app/layout.tsx | Skip link |
|
|
234
|
+
|
|
235
|
+
## Remaining Issues
|
|
236
|
+
- {Any medium/low issues not addressed in this round}
|
|
237
|
+
|
|
238
|
+
## Verification Status
|
|
239
|
+
- [ ] Color contrast: {n}/{total} passing
|
|
240
|
+
- [ ] Focus indicators: {n}/{total} visible
|
|
241
|
+
- [ ] ARIA coverage: {n}/{total} complete
|
|
242
|
+
- [ ] Typography: {n}/{total} compliant
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
3. Update `<session>/.msg/meta.json` under `fix-implementer` namespace:
|
|
246
|
+
- Read existing -> merge `{ "fix-implementer": { fix_id, total_fixes, critical_fixed, high_fixed, medium_fixed, files_modified, timestamp } }` -> write back
|