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,181 @@
|
|
|
1
|
+
# Phase 2: Pattern Analysis
|
|
2
|
+
|
|
3
|
+
> **COMPACT PROTECTION**: This is a core execution phase. If context compression has occurred and this file is only a summary, **MUST `Read` this file again before executing any Step**. Do not execute from memory.
|
|
4
|
+
|
|
5
|
+
Search for similar patterns in the codebase to determine if the bug is isolated or systemic.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
- Search for similar error patterns, antipatterns, or code smells across the codebase
|
|
10
|
+
- Determine if the bug is an isolated incident or part of a systemic issue
|
|
11
|
+
- Identify related code that may be affected by the same root cause
|
|
12
|
+
- Refine the scope of the investigation
|
|
13
|
+
|
|
14
|
+
## Input
|
|
15
|
+
|
|
16
|
+
| Source | Required | Description |
|
|
17
|
+
|--------|----------|-------------|
|
|
18
|
+
| investigation-report (phase 1) | Yes | Evidence, affected files, affected modules, initial diagnosis suspects |
|
|
19
|
+
| assign_task message | Yes | Phase 2 instruction |
|
|
20
|
+
|
|
21
|
+
## Execution Steps
|
|
22
|
+
|
|
23
|
+
### Step 1: Search for Similar Error Patterns
|
|
24
|
+
|
|
25
|
+
Search for the same error type or message elsewhere in the codebase:
|
|
26
|
+
|
|
27
|
+
1. Grep for identical or similar error message fragments in `src/` with 3 lines of context.
|
|
28
|
+
2. Grep for the same exception class or error code — output mode: files with matches.
|
|
29
|
+
3. Grep for similar error handling patterns in the same module.
|
|
30
|
+
|
|
31
|
+
**Decision table**:
|
|
32
|
+
|
|
33
|
+
| Result | Action |
|
|
34
|
+
|--------|--------|
|
|
35
|
+
| Similar patterns found in same module | Note as module-wide indicator, continue |
|
|
36
|
+
| Similar patterns found across multiple modules | Note as systemic indicator, continue |
|
|
37
|
+
| No similar patterns found | Note as isolated indicator, continue |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### Step 2: Search for the Same Antipattern
|
|
42
|
+
|
|
43
|
+
If the Phase 1 initial diagnosis identified a coding antipattern, search for it globally:
|
|
44
|
+
|
|
45
|
+
**Common antipattern examples to search for**:
|
|
46
|
+
|
|
47
|
+
| Antipattern | Grep pattern style |
|
|
48
|
+
|-------------|-------------------|
|
|
49
|
+
| Missing null/undefined check | `variable\.property` without guard |
|
|
50
|
+
| Unchecked async operation | unhandled promise, missing await |
|
|
51
|
+
| Direct mutation of shared state | shared state write without lock |
|
|
52
|
+
| Type assumption violation | forced cast without validation |
|
|
53
|
+
|
|
54
|
+
Execute at least one targeted Grep for the identified antipattern across relevant source directories.
|
|
55
|
+
|
|
56
|
+
**Decision table**:
|
|
57
|
+
|
|
58
|
+
| Result | Action |
|
|
59
|
+
|--------|--------|
|
|
60
|
+
| Antipattern found in multiple files | Classify as module-wide or systemic candidate |
|
|
61
|
+
| Antipattern isolated to one location | Classify as isolated candidate |
|
|
62
|
+
| No antipattern identifiable | Proceed without antipattern classification |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### Step 3: Module-Level Analysis
|
|
67
|
+
|
|
68
|
+
Examine the affected module for structural issues:
|
|
69
|
+
|
|
70
|
+
1. Use Glob to list all files in the affected module directory.
|
|
71
|
+
2. Grep for imports from the affected module to understand its consumers.
|
|
72
|
+
3. Check for circular dependencies or unusual import patterns.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### Step 4: CLI Cross-File Pattern Analysis (Optional)
|
|
77
|
+
|
|
78
|
+
For complex patterns that span many files, use inline-cli-analysis subagent:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
spawn_agent({
|
|
82
|
+
task_name: "inline-cli-analysis",
|
|
83
|
+
fork_context: false,
|
|
84
|
+
model: "haiku",
|
|
85
|
+
reasoning_effort: "medium",
|
|
86
|
+
message: `### MANDATORY FIRST STEPS
|
|
87
|
+
1. Read: ~/.codex/agents/cli-explore-agent.md
|
|
88
|
+
|
|
89
|
+
PURPOSE: Identify all instances of antipattern across codebase; success = complete scope map
|
|
90
|
+
TASK: Search for pattern '<antipattern_description>' | Map all occurrences | Assess systemic risk
|
|
91
|
+
MODE: analysis
|
|
92
|
+
CONTEXT: @src/**/*.<ext> | Bug in <module>, pattern: <pattern_description>
|
|
93
|
+
EXPECTED: List of all files with same pattern, risk assessment per occurrence (same_bug|potential_bug|safe)
|
|
94
|
+
CONSTRAINTS: Focus on <antipattern> pattern only | Ignore test files for scope`
|
|
95
|
+
})
|
|
96
|
+
const patternResult = wait_agent({ targets: ["inline-cli-analysis"], timeout_ms: 180000 })
|
|
97
|
+
close_agent({ target: "inline-cli-analysis" })
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Decision table**:
|
|
101
|
+
|
|
102
|
+
| Condition | Action |
|
|
103
|
+
|-----------|--------|
|
|
104
|
+
| Pattern spans >3 files in >1 module | Use subagent for full scope map |
|
|
105
|
+
| Pattern confined to 1 module | Skip subagent, proceed with manual search results |
|
|
106
|
+
| Subagent timeout | Continue with manual search results |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### Step 5: Classify Scope and Assemble Pattern Analysis
|
|
111
|
+
|
|
112
|
+
Classify the bug scope based on all search findings:
|
|
113
|
+
|
|
114
|
+
**Scope Definitions**:
|
|
115
|
+
|
|
116
|
+
| Scope | Definition |
|
|
117
|
+
|-------|-----------|
|
|
118
|
+
| `isolated` | Bug exists in a single location; no similar patterns found elsewhere |
|
|
119
|
+
| `module-wide` | Same pattern exists in multiple files within the same module |
|
|
120
|
+
| `systemic` | Pattern spans multiple modules; may require broader fix |
|
|
121
|
+
|
|
122
|
+
Assemble `pattern_analysis` section and add to investigation-report:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
pattern_analysis = {
|
|
126
|
+
scope: "isolated|module-wide|systemic",
|
|
127
|
+
similar_occurrences: [
|
|
128
|
+
{
|
|
129
|
+
file: "<path/to/file.ts>",
|
|
130
|
+
line: <line number>,
|
|
131
|
+
pattern: "<description of similar pattern>",
|
|
132
|
+
risk: "same_bug|potential_bug|safe"
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
total_occurrences: <count>,
|
|
136
|
+
affected_modules: ["<module-name>"],
|
|
137
|
+
antipattern_identified: "<description or null>",
|
|
138
|
+
scope_justification: "<evidence-based reasoning for this scope classification>"
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Scope decision table**:
|
|
143
|
+
|
|
144
|
+
| Scope | Phase 3 Focus |
|
|
145
|
+
|-------|--------------|
|
|
146
|
+
| isolated | Narrow hypothesis scope to single location |
|
|
147
|
+
| module-wide | Note all occurrences for Phase 4 fix planning |
|
|
148
|
+
| systemic | Note for potential multi-location fix; flag for separate tracking |
|
|
149
|
+
|
|
150
|
+
Output Phase 2 summary and await assign_task for Phase 3.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Output
|
|
155
|
+
|
|
156
|
+
| Artifact | Format | Description |
|
|
157
|
+
|----------|--------|-------------|
|
|
158
|
+
| investigation-report (phase 2) | In-memory JSON | Phase 1 fields + pattern_analysis section added |
|
|
159
|
+
| Phase 2 summary | Structured text output | Scope classification with justification, await Phase 3 |
|
|
160
|
+
|
|
161
|
+
## Success Criteria
|
|
162
|
+
|
|
163
|
+
| Criterion | Validation Method |
|
|
164
|
+
|-----------|-------------------|
|
|
165
|
+
| At least 3 search queries executed | Count of Grep/Glob operations performed |
|
|
166
|
+
| Scope classified | pattern_analysis.scope is one of: isolated, module-wide, systemic |
|
|
167
|
+
| Similar occurrences documented | pattern_analysis.similar_occurrences populated (empty array acceptable for isolated) |
|
|
168
|
+
| Scope justification provided | pattern_analysis.scope_justification non-empty with evidence |
|
|
169
|
+
|
|
170
|
+
## Error Handling
|
|
171
|
+
|
|
172
|
+
| Scenario | Resolution |
|
|
173
|
+
|----------|------------|
|
|
174
|
+
| No source directory found | Search from project root, document uncertainty |
|
|
175
|
+
| Grep returns too many results | Narrow pattern, add path filter, take top 10 most relevant |
|
|
176
|
+
| inline-cli-analysis timeout | Continue with manual search results, log warning |
|
|
177
|
+
| Antipattern not identifiable from Phase 1 | Skip Step 2 antipattern search, proceed with error pattern search only |
|
|
178
|
+
|
|
179
|
+
## Next Phase
|
|
180
|
+
|
|
181
|
+
-> [Phase 3: Hypothesis Testing](03-hypothesis-testing.md)
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Phase 3: Hypothesis Testing
|
|
2
|
+
|
|
3
|
+
> **COMPACT PROTECTION**: This is a core execution phase. If context compression has occurred and this file is only a summary, **MUST `Read` this file again before executing any Step**. Do not execute from memory.
|
|
4
|
+
|
|
5
|
+
Form hypotheses from evidence and test each one. Enforce the 3-strike escalation rule.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
- Form a maximum of 3 hypotheses from Phase 1-2 evidence
|
|
10
|
+
- Test each hypothesis with minimal, read-only probes
|
|
11
|
+
- Confirm or reject each hypothesis with concrete evidence
|
|
12
|
+
- Enforce 3-strike rule: STOP and escalate after 3 consecutive unproductive test failures
|
|
13
|
+
|
|
14
|
+
## Input
|
|
15
|
+
|
|
16
|
+
| Source | Required | Description |
|
|
17
|
+
|--------|----------|-------------|
|
|
18
|
+
| investigation-report (phases 1-2) | Yes | Evidence, affected files, pattern analysis, initial suspects |
|
|
19
|
+
| assign_task message | Yes | Phase 3 instruction |
|
|
20
|
+
|
|
21
|
+
## Execution Steps
|
|
22
|
+
|
|
23
|
+
### Step 1: Form Hypotheses
|
|
24
|
+
|
|
25
|
+
Using evidence from Phase 1 (investigation report) and Phase 2 (pattern analysis), form up to 3 ranked hypotheses:
|
|
26
|
+
|
|
27
|
+
**Hypothesis formation rules**:
|
|
28
|
+
- Each hypothesis must cite at least one piece of evidence from Phase 1-2
|
|
29
|
+
- Each hypothesis must have a testable prediction
|
|
30
|
+
- Rank by confidence (high first)
|
|
31
|
+
- Maximum 3 hypotheses per investigation
|
|
32
|
+
|
|
33
|
+
Assemble hypotheses in memory:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
hypotheses = [
|
|
37
|
+
{
|
|
38
|
+
id: "H1",
|
|
39
|
+
description: "The root cause is <X> because evidence <Y>",
|
|
40
|
+
evidence_supporting: ["<evidence item 1>", "<evidence item 2>"],
|
|
41
|
+
predicted_behavior: "If H1 is correct, then we should observe <Z>",
|
|
42
|
+
test_method: "How to verify: read file <X> line <Y>, check value <Z>",
|
|
43
|
+
confidence: "high|medium|low"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Initialize strike counter: 0
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### Step 2: Test Hypotheses Sequentially
|
|
53
|
+
|
|
54
|
+
Test each hypothesis starting from highest confidence (H1 first). Use read-only probes only during testing.
|
|
55
|
+
|
|
56
|
+
**Allowed test methods**:
|
|
57
|
+
|
|
58
|
+
| Method | Usage |
|
|
59
|
+
|--------|-------|
|
|
60
|
+
| Read a specific file | Check a specific value, condition, or code pattern |
|
|
61
|
+
| Grep for a pattern | Confirm or deny the presence of a condition |
|
|
62
|
+
| Bash targeted test | Run a specific test that reveals the condition |
|
|
63
|
+
| Temporary log statement | Add a log to observe runtime behavior; MUST revert after |
|
|
64
|
+
|
|
65
|
+
**Prohibited during hypothesis testing**:
|
|
66
|
+
- Modifying production code (save for Phase 4)
|
|
67
|
+
- Changing multiple things at once
|
|
68
|
+
- Running the full test suite (targeted checks only)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### Step 3: Record Test Results
|
|
73
|
+
|
|
74
|
+
For each hypothesis test, record:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
hypothesis_test = {
|
|
78
|
+
id: "H1",
|
|
79
|
+
test_performed: "<what was checked, e.g.: Read src/caller.ts:42 — checked null handling>",
|
|
80
|
+
result: "confirmed|rejected|inconclusive",
|
|
81
|
+
evidence: "<specific observation that confirms or rejects>",
|
|
82
|
+
files_checked: ["<src/caller.ts:42-55>"]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Step 4: 3-Strike Escalation Rule
|
|
89
|
+
|
|
90
|
+
Track consecutive unproductive test failures. After each hypothesis test, evaluate:
|
|
91
|
+
|
|
92
|
+
**Strike evaluation**:
|
|
93
|
+
|
|
94
|
+
| Test result | New insight gained | Strike action |
|
|
95
|
+
|-------------|-------------------|---------------|
|
|
96
|
+
| confirmed | — | CONFIRM root cause, end testing |
|
|
97
|
+
| rejected | Yes — narrows search or reveals new cause | No strike (productive rejection) |
|
|
98
|
+
| rejected | No — no actionable insight | +1 strike |
|
|
99
|
+
| inconclusive | Yes — identifies new area | No strike (productive) |
|
|
100
|
+
| inconclusive | No — no narrowing | +1 strike |
|
|
101
|
+
|
|
102
|
+
**Strike counter tracking**:
|
|
103
|
+
|
|
104
|
+
| Strike count | Action |
|
|
105
|
+
|--------------|--------|
|
|
106
|
+
| 1 | Continue to next hypothesis |
|
|
107
|
+
| 2 | Continue to next hypothesis |
|
|
108
|
+
| 3 | STOP — output escalation block immediately |
|
|
109
|
+
|
|
110
|
+
**On 3rd Strike — output this escalation block verbatim and halt**:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
## ESCALATION: 3-Strike Limit Reached
|
|
114
|
+
|
|
115
|
+
### Failed Step
|
|
116
|
+
- Phase: 3 — Hypothesis Testing
|
|
117
|
+
- Step: Hypothesis test #<N>
|
|
118
|
+
|
|
119
|
+
### Error History
|
|
120
|
+
1. Attempt 1: <H1 description>
|
|
121
|
+
Test: <what was checked>
|
|
122
|
+
Result: <rejected/inconclusive> — <why>
|
|
123
|
+
2. Attempt 2: <H2 description>
|
|
124
|
+
Test: <what was checked>
|
|
125
|
+
Result: <rejected/inconclusive> — <why>
|
|
126
|
+
3. Attempt 3: <H3 description>
|
|
127
|
+
Test: <what was checked>
|
|
128
|
+
Result: <rejected/inconclusive> — <why>
|
|
129
|
+
|
|
130
|
+
### Current State
|
|
131
|
+
- Evidence collected: <summary from Phase 1-2>
|
|
132
|
+
- Hypotheses tested: <list>
|
|
133
|
+
- Files examined: <list>
|
|
134
|
+
|
|
135
|
+
### Diagnosis
|
|
136
|
+
- Likely root cause area: <best guess based on all evidence>
|
|
137
|
+
- Suggested human action: <specific recommendation — e.g., "Add logging to X", "Check runtime config Y", "Reproduce in debugger at Z">
|
|
138
|
+
|
|
139
|
+
### Diagnostic Dump
|
|
140
|
+
<Full investigation-report content from all phases>
|
|
141
|
+
|
|
142
|
+
STATUS: BLOCKED
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
After outputting escalation: set status BLOCKED. Do not proceed to Phase 4.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### Step 5: Confirm Root Cause
|
|
150
|
+
|
|
151
|
+
If a hypothesis is confirmed, document the confirmed root cause:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
confirmed_root_cause = {
|
|
155
|
+
hypothesis_id: "H1",
|
|
156
|
+
description: "<Root cause description with full technical detail>",
|
|
157
|
+
evidence_chain: [
|
|
158
|
+
"Phase 1: <Error message X observed in Y>",
|
|
159
|
+
"Phase 2: <Same pattern found in N other files>",
|
|
160
|
+
"Phase 3: H1 confirmed — <specific condition at file.ts:42>"
|
|
161
|
+
],
|
|
162
|
+
affected_code: {
|
|
163
|
+
file: "<path/to/file.ts>",
|
|
164
|
+
line_range: "<42-55>",
|
|
165
|
+
function: "<functionName>"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Add `hypothesis_tests` and `confirmed_root_cause` to investigation-report in memory.
|
|
171
|
+
|
|
172
|
+
Output Phase 3 results and await assign_task for Phase 4.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Output
|
|
177
|
+
|
|
178
|
+
| Artifact | Format | Description |
|
|
179
|
+
|----------|--------|-------------|
|
|
180
|
+
| investigation-report (phase 3) | In-memory JSON | Phases 1-2 fields + hypothesis_tests + confirmed_root_cause |
|
|
181
|
+
| Phase 3 summary or escalation block | Structured text output | Either confirmed root cause or BLOCKED escalation |
|
|
182
|
+
|
|
183
|
+
## Success Criteria
|
|
184
|
+
|
|
185
|
+
| Criterion | Validation Method |
|
|
186
|
+
|-----------|-------------------|
|
|
187
|
+
| Maximum 3 hypotheses formed | Count of hypotheses array |
|
|
188
|
+
| Each hypothesis cites evidence | evidence_supporting non-empty for each |
|
|
189
|
+
| Each hypothesis tested with documented probe | test_performed field populated for each |
|
|
190
|
+
| Strike counter maintained correctly | Count of unproductive consecutive failures |
|
|
191
|
+
| Root cause confirmed with evidence chain OR escalation triggered | confirmed_root_cause present OR BLOCKED output |
|
|
192
|
+
|
|
193
|
+
## Error Handling
|
|
194
|
+
|
|
195
|
+
| Scenario | Resolution |
|
|
196
|
+
|----------|------------|
|
|
197
|
+
| Evidence insufficient to form 3 hypotheses | Form as many as evidence supports (minimum 1), proceed |
|
|
198
|
+
| Partial insight from rejected hypothesis | Do not count as strike; re-form or refine remaining hypotheses with new insight |
|
|
199
|
+
| All 3 hypotheses confirmed simultaneously | Use highest-confidence confirmed one as root cause |
|
|
200
|
+
| Hypothesis test requires production change | Prohibited — use static analysis or targeted read-only probe instead |
|
|
201
|
+
|
|
202
|
+
## Gate for Phase 4
|
|
203
|
+
|
|
204
|
+
Phase 4 can ONLY proceed if `confirmed_root_cause` is present. This is the Iron Law gate.
|
|
205
|
+
|
|
206
|
+
| Outcome | Next Step |
|
|
207
|
+
|---------|-----------|
|
|
208
|
+
| Root cause confirmed | -> [Phase 4: Implementation](04-implementation.md) |
|
|
209
|
+
| 3-strike escalation triggered | STOP — output diagnostic dump — STATUS: BLOCKED |
|
|
210
|
+
| Partial insight, re-forming hypotheses | Stay in Phase 3, re-test with refined hypotheses |
|
|
211
|
+
|
|
212
|
+
## Next Phase
|
|
213
|
+
|
|
214
|
+
-> [Phase 4: Implementation](04-implementation.md) ONLY with confirmed root cause.
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Phase 4: Implementation
|
|
2
|
+
|
|
3
|
+
> **COMPACT PROTECTION**: This is a core execution phase. If context compression has occurred and this file is only a summary, **MUST `Read` this file again before executing any Step**. Do not execute from memory.
|
|
4
|
+
|
|
5
|
+
Implement the minimal fix and add a regression test. Iron Law gate enforced at entry.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
- Verify Iron Law gate: confirmed root cause MUST exist from Phase 3
|
|
10
|
+
- Implement the minimal fix that addresses the confirmed root cause
|
|
11
|
+
- Add a regression test that fails without the fix and passes with it
|
|
12
|
+
- Verify the fix resolves the original reproduction case
|
|
13
|
+
|
|
14
|
+
## Input
|
|
15
|
+
|
|
16
|
+
| Source | Required | Description |
|
|
17
|
+
|--------|----------|-------------|
|
|
18
|
+
| investigation-report (phase 3) | Yes | Must contain confirmed_root_cause with evidence chain |
|
|
19
|
+
| assign_task message | Yes | Phase 4 instruction |
|
|
20
|
+
|
|
21
|
+
## Iron Law Gate Check
|
|
22
|
+
|
|
23
|
+
**MANDATORY FIRST ACTION before any code modification**:
|
|
24
|
+
|
|
25
|
+
| Condition | Action |
|
|
26
|
+
|-----------|--------|
|
|
27
|
+
| investigation-report contains `confirmed_root_cause` with non-empty description | Proceed to Step 1 |
|
|
28
|
+
| `confirmed_root_cause` absent or empty | Output "BLOCKED: Iron Law violation — no confirmed root cause. Return to Phase 3." Halt. Do NOT modify any files. |
|
|
29
|
+
|
|
30
|
+
Log the confirmed state before proceeding:
|
|
31
|
+
- Root cause: `<confirmed_root_cause.description>`
|
|
32
|
+
- Evidence chain: `<confirmed_root_cause.evidence_chain.length>` items
|
|
33
|
+
- Affected code: `<confirmed_root_cause.affected_code.file>:<confirmed_root_cause.affected_code.line_range>`
|
|
34
|
+
|
|
35
|
+
## Execution Steps
|
|
36
|
+
|
|
37
|
+
### Step 1: Plan the Minimal Fix
|
|
38
|
+
|
|
39
|
+
Define the fix scope BEFORE writing any code:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
fix_plan = {
|
|
43
|
+
description: "<What the fix does and why>",
|
|
44
|
+
changes: [
|
|
45
|
+
{
|
|
46
|
+
file: "<path/to/file.ts>",
|
|
47
|
+
change_type: "modify|add|remove",
|
|
48
|
+
description: "<specific change description>",
|
|
49
|
+
lines_affected: "<42-45>"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
total_files_changed: <count>,
|
|
53
|
+
total_lines_changed: "<estimated>"
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Minimal Fix Rules** (from Iron Law):
|
|
58
|
+
|
|
59
|
+
| Rule | Requirement |
|
|
60
|
+
|------|-------------|
|
|
61
|
+
| Change only necessary code | Only the confirmed root cause location |
|
|
62
|
+
| No refactoring | Do not restructure surrounding code |
|
|
63
|
+
| No feature additions | Fix only; no new capabilities |
|
|
64
|
+
| No style/format changes | Do not touch unrelated code formatting |
|
|
65
|
+
| >3 files changed | Requires written justification in fix_plan |
|
|
66
|
+
|
|
67
|
+
**Fix scope decision**:
|
|
68
|
+
|
|
69
|
+
| Files to change | Action |
|
|
70
|
+
|----------------|--------|
|
|
71
|
+
| 1-3 files | Proceed without justification |
|
|
72
|
+
| More than 3 files | Document justification in fix_plan.description before proceeding |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### Step 2: Implement the Fix
|
|
77
|
+
|
|
78
|
+
Apply the planned changes using Edit:
|
|
79
|
+
|
|
80
|
+
- Target only the file(s) and line(s) identified in `confirmed_root_cause.affected_code`
|
|
81
|
+
- Make exactly the change described in fix_plan
|
|
82
|
+
- Verify the edit was applied correctly by reading the modified section
|
|
83
|
+
|
|
84
|
+
**Decision table**:
|
|
85
|
+
|
|
86
|
+
| Edit outcome | Action |
|
|
87
|
+
|-------------|--------|
|
|
88
|
+
| Edit applied correctly | Proceed to Step 3 |
|
|
89
|
+
| Edit failed or incorrect | Re-apply with corrected old_string/new_string; if Edit fails 2+ times, use Bash sed as fallback |
|
|
90
|
+
| Fix requires more than planned | Document the additional change in fix_plan with justification |
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### Step 3: Add Regression Test
|
|
95
|
+
|
|
96
|
+
Create or modify a test that proves the fix:
|
|
97
|
+
|
|
98
|
+
1. Find the appropriate test file for the affected module:
|
|
99
|
+
- Use Glob for `**/*.test.{ts,js,py}`, `**/__tests__/**/*.{ts,js}`, or `**/test_*.py`
|
|
100
|
+
- Match the test file to the affected source module
|
|
101
|
+
2. Add a regression test with these requirements:
|
|
102
|
+
|
|
103
|
+
**Regression test requirements**:
|
|
104
|
+
|
|
105
|
+
| Requirement | Details |
|
|
106
|
+
|-------------|---------|
|
|
107
|
+
| Test name references the bug | Name clearly describes the bug scenario (e.g., "should handle null display_name without error") |
|
|
108
|
+
| Tests exact code path | Exercises the specific path identified in root cause |
|
|
109
|
+
| Deterministic | No timing dependencies, no external services |
|
|
110
|
+
| Correct placement | In the appropriate test file for the affected module |
|
|
111
|
+
| Proves the fix | Must fail when fix is reverted, pass when fix is applied |
|
|
112
|
+
|
|
113
|
+
**Decision table**:
|
|
114
|
+
|
|
115
|
+
| Condition | Action |
|
|
116
|
+
|-----------|--------|
|
|
117
|
+
| Existing test file found for module | Add test to that file |
|
|
118
|
+
| No existing test file found | Create new test file following project conventions |
|
|
119
|
+
| Multiple candidate test files | Choose the one most directly testing the affected module |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### Step 4: Verify Fix Against Reproduction
|
|
124
|
+
|
|
125
|
+
Re-run the original reproduction case from Phase 1:
|
|
126
|
+
|
|
127
|
+
- If Phase 1 used a failing test: run that same test now
|
|
128
|
+
- If Phase 1 used a failing command: run that same command now
|
|
129
|
+
- If Phase 1 used static analysis: run the regression test as verification
|
|
130
|
+
|
|
131
|
+
Record verification result:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
fix_applied = {
|
|
135
|
+
description: "<what was fixed>",
|
|
136
|
+
files_changed: ["<path/to/file.ts>"],
|
|
137
|
+
lines_changed: <count>,
|
|
138
|
+
regression_test: {
|
|
139
|
+
file: "<path/to/test.ts>",
|
|
140
|
+
test_name: "<test name>",
|
|
141
|
+
status: "added|modified"
|
|
142
|
+
},
|
|
143
|
+
reproduction_verified: true|false
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Decision table**:
|
|
148
|
+
|
|
149
|
+
| Verification result | Action |
|
|
150
|
+
|--------------------|--------|
|
|
151
|
+
| Reproduction case now passes | Set reproduction_verified: true, proceed to Step 5 |
|
|
152
|
+
| Reproduction case still fails | Analyze why fix is insufficient, adjust fix, re-run |
|
|
153
|
+
| Cannot verify (setup required) | Document as concern, set reproduction_verified: false, proceed |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
### Step 5: Assemble Phase 4 Output
|
|
158
|
+
|
|
159
|
+
Add `fix_applied` to investigation-report in memory. Output Phase 4 summary and await assign_task for Phase 5.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Output
|
|
164
|
+
|
|
165
|
+
| Artifact | Format | Description |
|
|
166
|
+
|----------|--------|-------------|
|
|
167
|
+
| Modified source files | File edits | Minimal fix applied to affected code |
|
|
168
|
+
| Regression test | File add/edit | Test covering the exact bug scenario |
|
|
169
|
+
| investigation-report (phase 4) | In-memory JSON | Phases 1-3 fields + fix_applied section |
|
|
170
|
+
| Phase 4 summary | Structured text output | Fix description, test added, verification result |
|
|
171
|
+
|
|
172
|
+
## Success Criteria
|
|
173
|
+
|
|
174
|
+
| Criterion | Validation Method |
|
|
175
|
+
|-----------|-------------------|
|
|
176
|
+
| Iron Law gate passed | confirmed_root_cause present before any code change |
|
|
177
|
+
| Fix is minimal | fix_plan.total_files_changed <= 3 OR justification documented |
|
|
178
|
+
| Regression test added | fix_applied.regression_test populated |
|
|
179
|
+
| Original reproduction passes | fix_applied.reproduction_verified: true |
|
|
180
|
+
| No unrelated code changes | Only confirmed_root_cause.affected_code locations modified |
|
|
181
|
+
|
|
182
|
+
## Error Handling
|
|
183
|
+
|
|
184
|
+
| Scenario | Resolution |
|
|
185
|
+
|----------|------------|
|
|
186
|
+
| Iron Law gate fails | Output BLOCKED, halt, do not modify any files |
|
|
187
|
+
| Edit tool fails twice | Try Bash sed/awk as fallback; if still failing, use Write to recreate file |
|
|
188
|
+
| Fix does not resolve reproduction | Analyze remaining failure, adjust fix within Phase 4 |
|
|
189
|
+
| Fix requires changing >3 files | Document justification, proceed after explicit justification |
|
|
190
|
+
| No test file found for module | Create new test file following nearest similar test file pattern |
|
|
191
|
+
| Regression test is non-deterministic | Refactor test to remove timing/external dependencies |
|
|
192
|
+
|
|
193
|
+
## Next Phase
|
|
194
|
+
|
|
195
|
+
-> [Phase 5: Verification & Report](05-verification-report.md)
|