claude-code-workflow 7.2.27 → 7.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Phase 3: Hypothesis Testing
|
|
2
|
+
|
|
3
|
+
Form hypotheses from evidence and test each one. Enforce the 3-strike escalation rule.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Form a maximum of 3 hypotheses from Phase 1-2 evidence
|
|
8
|
+
- Test each hypothesis with minimal, read-only probes
|
|
9
|
+
- Confirm or reject each hypothesis with concrete evidence
|
|
10
|
+
- Enforce 3-strike rule: STOP and escalate after 3 consecutive test failures
|
|
11
|
+
|
|
12
|
+
## Execution Steps
|
|
13
|
+
|
|
14
|
+
### Step 1: Form Hypotheses
|
|
15
|
+
|
|
16
|
+
Using evidence from Phase 1 (investigation report) and Phase 2 (pattern analysis), form up to 3 ranked hypotheses:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"hypotheses": [
|
|
21
|
+
{
|
|
22
|
+
"id": "H1",
|
|
23
|
+
"description": "The root cause is X because evidence Y",
|
|
24
|
+
"evidence_supporting": ["evidence item 1", "evidence item 2"],
|
|
25
|
+
"predicted_behavior": "If H1 is correct, then we should observe Z",
|
|
26
|
+
"test_method": "How to verify: read file X line Y, check value Z",
|
|
27
|
+
"confidence": "high|medium|low"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Hypothesis Formation Rules**:
|
|
34
|
+
- Each hypothesis must cite at least one piece of evidence from Phase 1-2
|
|
35
|
+
- Each hypothesis must have a testable prediction
|
|
36
|
+
- Rank by confidence (high first)
|
|
37
|
+
- Maximum 3 hypotheses per investigation
|
|
38
|
+
|
|
39
|
+
### Step 2: Test Hypotheses Sequentially
|
|
40
|
+
|
|
41
|
+
Test each hypothesis starting from highest confidence. Use read-only probes:
|
|
42
|
+
|
|
43
|
+
**Allowed test methods**:
|
|
44
|
+
- `Read` a specific file and check a specific value or condition
|
|
45
|
+
- `Grep` for a pattern that would confirm or deny the hypothesis
|
|
46
|
+
- `Bash` to run a specific test or command that reveals the condition
|
|
47
|
+
- Temporarily add a log statement to observe runtime behavior (revert after)
|
|
48
|
+
|
|
49
|
+
**Prohibited during testing**:
|
|
50
|
+
- Modifying production code (save that for Phase 4)
|
|
51
|
+
- Changing multiple things at once
|
|
52
|
+
- Running the full test suite (targeted checks only)
|
|
53
|
+
|
|
54
|
+
```javascript
|
|
55
|
+
// Example hypothesis test
|
|
56
|
+
// H1: "Function X receives null because caller Y doesn't check return value"
|
|
57
|
+
const evidence = Read({ file_path: "src/caller.ts" })
|
|
58
|
+
// Check: Does caller Y use the return value without null check?
|
|
59
|
+
// Result: Confirmed / Rejected with specific evidence
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Step 3: Record Test Results
|
|
63
|
+
|
|
64
|
+
For each hypothesis test:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"hypothesis_tests": [
|
|
69
|
+
{
|
|
70
|
+
"id": "H1",
|
|
71
|
+
"test_performed": "Read src/caller.ts:42 - checked null handling",
|
|
72
|
+
"result": "confirmed|rejected|inconclusive",
|
|
73
|
+
"evidence": "specific observation that confirms or rejects",
|
|
74
|
+
"files_checked": ["src/caller.ts:42-55"]
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Step 4: 3-Strike Escalation Rule
|
|
81
|
+
|
|
82
|
+
Track consecutive test failures. A "failure" means the test was inconclusive or the hypothesis was rejected AND no actionable insight was gained.
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
Strike Counter:
|
|
86
|
+
[H1 rejected, no insight] → Strike 1
|
|
87
|
+
[H2 rejected, no insight] → Strike 2
|
|
88
|
+
[H3 rejected, no insight] → Strike 3 → STOP
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Important**: A rejected hypothesis that provides useful insight (narrows the search) does NOT count as a strike. Only truly unproductive tests count.
|
|
92
|
+
|
|
93
|
+
**On 3rd Strike — STOP and Escalate**:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
## ESCALATION: 3-Strike Limit Reached
|
|
97
|
+
|
|
98
|
+
### Failed Step
|
|
99
|
+
- Phase: 3 — Hypothesis Testing
|
|
100
|
+
- Step: Hypothesis test #{N}
|
|
101
|
+
|
|
102
|
+
### Error History
|
|
103
|
+
1. Attempt 1: H1 — {description}
|
|
104
|
+
Test: {what was checked}
|
|
105
|
+
Result: {rejected/inconclusive} — {why}
|
|
106
|
+
2. Attempt 2: H2 — {description}
|
|
107
|
+
Test: {what was checked}
|
|
108
|
+
Result: {rejected/inconclusive} — {why}
|
|
109
|
+
3. Attempt 3: H3 — {description}
|
|
110
|
+
Test: {what was checked}
|
|
111
|
+
Result: {rejected/inconclusive} — {why}
|
|
112
|
+
|
|
113
|
+
### Current State
|
|
114
|
+
- Evidence collected: {summary from Phase 1-2}
|
|
115
|
+
- Hypotheses tested: {list}
|
|
116
|
+
- Files examined: {list}
|
|
117
|
+
|
|
118
|
+
### Diagnosis
|
|
119
|
+
- Likely root cause area: {best guess based on all evidence}
|
|
120
|
+
- Suggested human action: {specific recommendation — e.g., "Add logging to X", "Check runtime config Y", "Reproduce in debugger at Z"}
|
|
121
|
+
|
|
122
|
+
### Diagnostic Dump
|
|
123
|
+
{Full investigation-report.json content}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
After escalation, set status to **BLOCKED** per Completion Status Protocol.
|
|
127
|
+
|
|
128
|
+
### Step 5: Confirm Root Cause
|
|
129
|
+
|
|
130
|
+
If a hypothesis is confirmed, document the confirmed root cause:
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
{
|
|
134
|
+
"phase": 3,
|
|
135
|
+
"confirmed_root_cause": {
|
|
136
|
+
"hypothesis_id": "H1",
|
|
137
|
+
"description": "Root cause description with full evidence chain",
|
|
138
|
+
"evidence_chain": [
|
|
139
|
+
"Phase 1: Error message X observed in Y",
|
|
140
|
+
"Phase 2: Same pattern found in 3 other files",
|
|
141
|
+
"Phase 3: H1 confirmed — null check missing at file.ts:42"
|
|
142
|
+
],
|
|
143
|
+
"affected_code": {
|
|
144
|
+
"file": "path/to/file.ts",
|
|
145
|
+
"line_range": "42-55",
|
|
146
|
+
"function": "functionName"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Output
|
|
153
|
+
|
|
154
|
+
- **Data**: `hypothesis-tests` and `confirmed_root_cause` added to investigation report (in-memory)
|
|
155
|
+
- **Format**: JSON structure as defined above
|
|
156
|
+
|
|
157
|
+
## Gate for Phase 4
|
|
158
|
+
|
|
159
|
+
**Phase 4 can ONLY proceed if `confirmed_root_cause` is present.** This is the Iron Law gate.
|
|
160
|
+
|
|
161
|
+
| Outcome | Next Step |
|
|
162
|
+
|---------|-----------|
|
|
163
|
+
| Root cause confirmed | Proceed to [Phase 4: Implementation](04-implementation.md) |
|
|
164
|
+
| 3-strike escalation | STOP, output diagnostic dump, status = BLOCKED |
|
|
165
|
+
| Partial insight | Re-form hypotheses with new evidence (stays in Phase 3) |
|
|
166
|
+
|
|
167
|
+
## Quality Checks
|
|
168
|
+
|
|
169
|
+
- [ ] Maximum 3 hypotheses formed, each with cited evidence
|
|
170
|
+
- [ ] Each hypothesis tested with a specific, documented probe
|
|
171
|
+
- [ ] Test results recorded with concrete evidence
|
|
172
|
+
- [ ] 3-strike counter maintained correctly
|
|
173
|
+
- [ ] Root cause confirmed with full evidence chain OR escalation triggered
|
|
174
|
+
|
|
175
|
+
## Next Phase
|
|
176
|
+
|
|
177
|
+
Proceed to [Phase 4: Implementation](04-implementation.md) ONLY with confirmed root cause.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Phase 4: Implementation
|
|
2
|
+
|
|
3
|
+
Implement the minimal fix and add a regression test. Iron Law gate enforced.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Verify Iron Law gate: confirmed root cause MUST exist from Phase 3
|
|
8
|
+
- Implement the minimal fix that addresses the confirmed root cause
|
|
9
|
+
- Add a regression test that fails without the fix and passes with it
|
|
10
|
+
- Verify the fix resolves the original reproduction case
|
|
11
|
+
|
|
12
|
+
## Iron Law Gate Check
|
|
13
|
+
|
|
14
|
+
**MANDATORY**: Before any code modification, verify:
|
|
15
|
+
|
|
16
|
+
```javascript
|
|
17
|
+
if (!investigation_report.confirmed_root_cause) {
|
|
18
|
+
// VIOLATION: Cannot proceed without confirmed root cause
|
|
19
|
+
// Return to Phase 3 or escalate
|
|
20
|
+
throw new Error("Iron Law violation: No confirmed root cause. Return to Phase 3.")
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
console.log(`Root cause confirmed: ${investigation_report.confirmed_root_cause.description}`)
|
|
24
|
+
console.log(`Evidence chain: ${investigation_report.confirmed_root_cause.evidence_chain.length} items`)
|
|
25
|
+
console.log(`Affected code: ${investigation_report.confirmed_root_cause.affected_code.file}:${investigation_report.confirmed_root_cause.affected_code.line_range}`)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If the gate check fails, do NOT proceed. Return status **BLOCKED** with reason "Iron Law: no confirmed root cause".
|
|
29
|
+
|
|
30
|
+
## Execution Steps
|
|
31
|
+
|
|
32
|
+
### Step 1: Plan the Minimal Fix
|
|
33
|
+
|
|
34
|
+
Define the fix scope BEFORE writing any code:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"fix_plan": {
|
|
39
|
+
"description": "What the fix does and why",
|
|
40
|
+
"changes": [
|
|
41
|
+
{
|
|
42
|
+
"file": "path/to/file.ts",
|
|
43
|
+
"change_type": "modify|add|remove",
|
|
44
|
+
"description": "specific change description",
|
|
45
|
+
"lines_affected": "42-45"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"total_files_changed": 1,
|
|
49
|
+
"total_lines_changed": "estimated"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Minimal Fix Rules** (from [specs/iron-law.md](../specs/iron-law.md)):
|
|
55
|
+
- Change only what is necessary to fix the confirmed root cause
|
|
56
|
+
- Do not refactor surrounding code
|
|
57
|
+
- Do not add features
|
|
58
|
+
- Do not change formatting or style of unrelated code
|
|
59
|
+
- If the fix requires changes to more than 3 files, document justification
|
|
60
|
+
|
|
61
|
+
### Step 2: Implement the Fix
|
|
62
|
+
|
|
63
|
+
Apply the planned changes using `Edit` tool:
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
Edit({
|
|
67
|
+
file_path: "path/to/affected/file.ts",
|
|
68
|
+
old_string: "buggy code",
|
|
69
|
+
new_string: "fixed code"
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Step 3: Add Regression Test
|
|
74
|
+
|
|
75
|
+
Create or modify a test that:
|
|
76
|
+
1. **Fails** without the fix (tests the exact bug condition)
|
|
77
|
+
2. **Passes** with the fix
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
// Identify existing test file for the module
|
|
81
|
+
Glob({ pattern: "**/*.test.{ts,js,py}" })
|
|
82
|
+
// or
|
|
83
|
+
Glob({ pattern: "**/test_*.py" })
|
|
84
|
+
|
|
85
|
+
// Add regression test
|
|
86
|
+
// Test name should reference the bug: "should handle null return from X"
|
|
87
|
+
// Test should exercise the exact code path that caused the bug
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Regression test requirements**:
|
|
91
|
+
- Test name clearly describes the bug scenario
|
|
92
|
+
- Test exercises the specific code path identified in root cause
|
|
93
|
+
- Test is deterministic (no flaky timing, external dependencies)
|
|
94
|
+
- Test is placed in the appropriate test file for the module
|
|
95
|
+
|
|
96
|
+
### Step 4: Verify Fix Against Reproduction
|
|
97
|
+
|
|
98
|
+
Re-run the original reproduction case from Phase 1:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Run the specific failing test/command from Phase 1
|
|
102
|
+
# It should now pass
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Record the verification result:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"phase": 4,
|
|
110
|
+
"fix_applied": {
|
|
111
|
+
"description": "what was fixed",
|
|
112
|
+
"files_changed": ["path/to/file.ts"],
|
|
113
|
+
"lines_changed": 3,
|
|
114
|
+
"regression_test": {
|
|
115
|
+
"file": "path/to/test.ts",
|
|
116
|
+
"test_name": "should handle null return from X",
|
|
117
|
+
"status": "added|modified"
|
|
118
|
+
},
|
|
119
|
+
"reproduction_verified": true
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Output
|
|
125
|
+
|
|
126
|
+
- **Data**: `fix_applied` section added to investigation report (in-memory)
|
|
127
|
+
- **Artifacts**: Modified source files and test files
|
|
128
|
+
|
|
129
|
+
## Quality Checks
|
|
130
|
+
|
|
131
|
+
- [ ] Iron Law gate passed: confirmed root cause exists
|
|
132
|
+
- [ ] Fix is minimal: only necessary changes made
|
|
133
|
+
- [ ] Regression test added that covers the specific bug
|
|
134
|
+
- [ ] Original reproduction case passes with the fix
|
|
135
|
+
- [ ] No unrelated code changes included
|
|
136
|
+
|
|
137
|
+
## Next Phase
|
|
138
|
+
|
|
139
|
+
Proceed to [Phase 5: Verification & Report](05-verification-report.md) to run full test suite and generate report.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Phase 5: Verification & Report
|
|
2
|
+
|
|
3
|
+
Run full test suite, check for regressions, and generate the structured debug report.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Run the full test suite to verify no regressions were introduced
|
|
8
|
+
- Generate a structured debug report for future reference
|
|
9
|
+
- Output the report to `.workflow/.debug/` directory
|
|
10
|
+
|
|
11
|
+
## Execution Steps
|
|
12
|
+
|
|
13
|
+
### Step 1: Run Full Test Suite
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Detect and run the project's test framework
|
|
17
|
+
# npm test / pytest / go test / cargo test / etc.
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Record results:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"test_results": {
|
|
25
|
+
"total": 0,
|
|
26
|
+
"passed": 0,
|
|
27
|
+
"failed": 0,
|
|
28
|
+
"skipped": 0,
|
|
29
|
+
"regression_test_passed": true,
|
|
30
|
+
"new_failures": []
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**If new failures are found**:
|
|
36
|
+
- Check if the failures are related to the fix
|
|
37
|
+
- If related: the fix introduced a regression — return to Phase 4 to adjust
|
|
38
|
+
- If unrelated: document as pre-existing failures, proceed with report
|
|
39
|
+
|
|
40
|
+
### Step 2: Regression Check
|
|
41
|
+
|
|
42
|
+
Verify specifically:
|
|
43
|
+
1. The new regression test passes
|
|
44
|
+
2. All tests that passed before the fix still pass
|
|
45
|
+
3. No new warnings or errors in test output
|
|
46
|
+
|
|
47
|
+
### Step 3: Generate Structured Debug Report
|
|
48
|
+
|
|
49
|
+
Create the report following the schema in [specs/debug-report-format.md](../specs/debug-report-format.md):
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
mkdir -p .workflow/.debug
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"bug_description": "concise description of the bug",
|
|
58
|
+
"reproduction_steps": [
|
|
59
|
+
"step 1",
|
|
60
|
+
"step 2",
|
|
61
|
+
"step 3: observe error"
|
|
62
|
+
],
|
|
63
|
+
"root_cause": "confirmed root cause description with technical detail",
|
|
64
|
+
"evidence_chain": [
|
|
65
|
+
"Phase 1: error message X observed in module Y",
|
|
66
|
+
"Phase 2: pattern analysis found N similar occurrences",
|
|
67
|
+
"Phase 3: hypothesis H1 confirmed — specific condition at file:line"
|
|
68
|
+
],
|
|
69
|
+
"fix_description": "what was changed and why",
|
|
70
|
+
"files_changed": [
|
|
71
|
+
{
|
|
72
|
+
"path": "src/module/file.ts",
|
|
73
|
+
"change_type": "modify",
|
|
74
|
+
"description": "added null check before property access"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"tests_added": [
|
|
78
|
+
{
|
|
79
|
+
"file": "src/module/__tests__/file.test.ts",
|
|
80
|
+
"test_name": "should handle null return from X",
|
|
81
|
+
"type": "regression"
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"regression_check_result": {
|
|
85
|
+
"passed": true,
|
|
86
|
+
"total_tests": 0,
|
|
87
|
+
"new_failures": [],
|
|
88
|
+
"pre_existing_failures": []
|
|
89
|
+
},
|
|
90
|
+
"completion_status": "DONE|DONE_WITH_CONCERNS|BLOCKED",
|
|
91
|
+
"concerns": [],
|
|
92
|
+
"timestamp": "ISO-8601",
|
|
93
|
+
"investigation_duration_phases": 5
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 4: Write Report File
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
const slug = bugDescription.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
|
101
|
+
const dateStr = new Date().toISOString().substring(0, 10)
|
|
102
|
+
const reportPath = `.workflow/.debug/debug-report-${dateStr}-${slug}.json`
|
|
103
|
+
|
|
104
|
+
Write({ file_path: reportPath, content: JSON.stringify(report, null, 2) })
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Step 5: Output Completion Status
|
|
108
|
+
|
|
109
|
+
Follow the Completion Status Protocol from `_shared/SKILL-DESIGN-SPEC.md` section 13:
|
|
110
|
+
|
|
111
|
+
**DONE**:
|
|
112
|
+
```
|
|
113
|
+
## STATUS: DONE
|
|
114
|
+
|
|
115
|
+
**Summary**: Fixed {bug_description} — root cause was {root_cause_summary}
|
|
116
|
+
|
|
117
|
+
### Details
|
|
118
|
+
- Phases completed: 5/5
|
|
119
|
+
- Root cause: {confirmed_root_cause}
|
|
120
|
+
- Fix: {fix_description}
|
|
121
|
+
- Regression test: {test_name} in {test_file}
|
|
122
|
+
|
|
123
|
+
### Outputs
|
|
124
|
+
- Debug report: {reportPath}
|
|
125
|
+
- Files changed: {list}
|
|
126
|
+
- Tests added: {list}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**DONE_WITH_CONCERNS**:
|
|
130
|
+
```
|
|
131
|
+
## STATUS: DONE_WITH_CONCERNS
|
|
132
|
+
|
|
133
|
+
**Summary**: Fixed {bug_description} with concerns
|
|
134
|
+
|
|
135
|
+
### Details
|
|
136
|
+
- Phases completed: 5/5
|
|
137
|
+
- Concerns:
|
|
138
|
+
1. {concern} — Impact: {low|medium} — Suggested fix: {action}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Output
|
|
142
|
+
|
|
143
|
+
- **File**: `debug-report-{YYYY-MM-DD}-{slug}.json`
|
|
144
|
+
- **Location**: `.workflow/.debug/`
|
|
145
|
+
- **Format**: JSON (see [specs/debug-report-format.md](../specs/debug-report-format.md))
|
|
146
|
+
|
|
147
|
+
## Quality Checks
|
|
148
|
+
|
|
149
|
+
- [ ] Full test suite executed
|
|
150
|
+
- [ ] Regression test specifically verified
|
|
151
|
+
- [ ] No new test failures introduced (or documented if pre-existing)
|
|
152
|
+
- [ ] Debug report written to `.workflow/.debug/`
|
|
153
|
+
- [ ] Completion status output follows protocol
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Debug Report Format
|
|
2
|
+
|
|
3
|
+
Defines the structured JSON schema for debug reports generated by the investigate skill.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
| Phase | Usage | Section |
|
|
8
|
+
|-------|-------|---------|
|
|
9
|
+
| Phase 5 | Generate final report | Full schema |
|
|
10
|
+
| Phase 3 (escalation) | Diagnostic dump includes partial report | Partial schema |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## JSON Schema
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
19
|
+
"title": "Debug Report",
|
|
20
|
+
"type": "object",
|
|
21
|
+
"required": [
|
|
22
|
+
"bug_description",
|
|
23
|
+
"reproduction_steps",
|
|
24
|
+
"root_cause",
|
|
25
|
+
"evidence_chain",
|
|
26
|
+
"fix_description",
|
|
27
|
+
"files_changed",
|
|
28
|
+
"tests_added",
|
|
29
|
+
"regression_check_result",
|
|
30
|
+
"completion_status"
|
|
31
|
+
],
|
|
32
|
+
"properties": {
|
|
33
|
+
"bug_description": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"description": "Concise description of the bug symptom",
|
|
36
|
+
"minLength": 10
|
|
37
|
+
},
|
|
38
|
+
"reproduction_steps": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"description": "Ordered steps to reproduce the bug",
|
|
41
|
+
"items": { "type": "string" },
|
|
42
|
+
"minItems": 1
|
|
43
|
+
},
|
|
44
|
+
"root_cause": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Confirmed root cause with technical detail",
|
|
47
|
+
"minLength": 20
|
|
48
|
+
},
|
|
49
|
+
"evidence_chain": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"description": "Ordered evidence from Phase 1 through Phase 3, each prefixed with phase number",
|
|
52
|
+
"items": { "type": "string" },
|
|
53
|
+
"minItems": 1
|
|
54
|
+
},
|
|
55
|
+
"fix_description": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "What was changed and why",
|
|
58
|
+
"minLength": 10
|
|
59
|
+
},
|
|
60
|
+
"files_changed": {
|
|
61
|
+
"type": "array",
|
|
62
|
+
"items": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"required": ["path", "change_type", "description"],
|
|
65
|
+
"properties": {
|
|
66
|
+
"path": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"description": "Relative file path"
|
|
69
|
+
},
|
|
70
|
+
"change_type": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"enum": ["add", "modify", "remove"]
|
|
73
|
+
},
|
|
74
|
+
"description": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "Brief description of changes to this file"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"tests_added": {
|
|
82
|
+
"type": "array",
|
|
83
|
+
"items": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"required": ["file", "test_name", "type"],
|
|
86
|
+
"properties": {
|
|
87
|
+
"file": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "Test file path"
|
|
90
|
+
},
|
|
91
|
+
"test_name": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Name of the test function or describe block"
|
|
94
|
+
},
|
|
95
|
+
"type": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"enum": ["regression", "unit", "integration"],
|
|
98
|
+
"description": "Type of test added"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"regression_check_result": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"required": ["passed", "total_tests"],
|
|
106
|
+
"properties": {
|
|
107
|
+
"passed": {
|
|
108
|
+
"type": "boolean",
|
|
109
|
+
"description": "Whether the full test suite passed"
|
|
110
|
+
},
|
|
111
|
+
"total_tests": {
|
|
112
|
+
"type": "integer",
|
|
113
|
+
"description": "Total number of tests executed"
|
|
114
|
+
},
|
|
115
|
+
"new_failures": {
|
|
116
|
+
"type": "array",
|
|
117
|
+
"items": { "type": "string" },
|
|
118
|
+
"description": "Tests that failed after the fix but passed before"
|
|
119
|
+
},
|
|
120
|
+
"pre_existing_failures": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": { "type": "string" },
|
|
123
|
+
"description": "Tests that were already failing before the investigation"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"completion_status": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"enum": ["DONE", "DONE_WITH_CONCERNS", "BLOCKED"],
|
|
130
|
+
"description": "Final status per Completion Status Protocol"
|
|
131
|
+
},
|
|
132
|
+
"concerns": {
|
|
133
|
+
"type": "array",
|
|
134
|
+
"items": {
|
|
135
|
+
"type": "object",
|
|
136
|
+
"properties": {
|
|
137
|
+
"description": { "type": "string" },
|
|
138
|
+
"impact": { "type": "string", "enum": ["low", "medium"] },
|
|
139
|
+
"suggested_action": { "type": "string" }
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"description": "Non-blocking concerns (populated when status is DONE_WITH_CONCERNS)"
|
|
143
|
+
},
|
|
144
|
+
"timestamp": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"format": "date-time",
|
|
147
|
+
"description": "ISO-8601 timestamp of report generation"
|
|
148
|
+
},
|
|
149
|
+
"investigation_duration_phases": {
|
|
150
|
+
"type": "integer",
|
|
151
|
+
"description": "Number of phases completed (1-5)",
|
|
152
|
+
"minimum": 1,
|
|
153
|
+
"maximum": 5
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Field Descriptions
|
|
160
|
+
|
|
161
|
+
| Field | Source Phase | Description |
|
|
162
|
+
|-------|-------------|-------------|
|
|
163
|
+
| `bug_description` | Phase 1 | User-reported symptom, one sentence |
|
|
164
|
+
| `reproduction_steps` | Phase 1 | Ordered steps to trigger the bug |
|
|
165
|
+
| `root_cause` | Phase 3 | Confirmed cause with file:line reference |
|
|
166
|
+
| `evidence_chain` | Phase 1-3 | Each item prefixed with "Phase N:" |
|
|
167
|
+
| `fix_description` | Phase 4 | What code was changed and why |
|
|
168
|
+
| `files_changed` | Phase 4 | Each file with change type and description |
|
|
169
|
+
| `tests_added` | Phase 4 | Regression tests covering the bug |
|
|
170
|
+
| `regression_check_result` | Phase 5 | Full test suite results |
|
|
171
|
+
| `completion_status` | Phase 5 | Final status per protocol |
|
|
172
|
+
| `concerns` | Phase 5 | Non-blocking issues (if any) |
|
|
173
|
+
| `timestamp` | Phase 5 | When report was generated |
|
|
174
|
+
| `investigation_duration_phases` | Phase 5 | How many phases were completed |
|
|
175
|
+
|
|
176
|
+
## Example Report
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"bug_description": "API returns 500 when user profile has null display_name",
|
|
181
|
+
"reproduction_steps": [
|
|
182
|
+
"Create user account without setting display_name",
|
|
183
|
+
"Call GET /api/users/:id/profile",
|
|
184
|
+
"Observe 500 Internal Server Error"
|
|
185
|
+
],
|
|
186
|
+
"root_cause": "ProfileSerializer.format() calls displayName.trim() without null check at src/serializers/profile.ts:42",
|
|
187
|
+
"evidence_chain": [
|
|
188
|
+
"Phase 1: TypeError: Cannot read properties of null (reading 'trim') in server logs",
|
|
189
|
+
"Phase 2: Same pattern in 2 other serializers (address.ts:28, company.ts:35)",
|
|
190
|
+
"Phase 3: H1 confirmed — displayName field is nullable in DB but serializer assumes non-null"
|
|
191
|
+
],
|
|
192
|
+
"fix_description": "Added null-safe access for displayName in ProfileSerializer.format()",
|
|
193
|
+
"files_changed": [
|
|
194
|
+
{
|
|
195
|
+
"path": "src/serializers/profile.ts",
|
|
196
|
+
"change_type": "modify",
|
|
197
|
+
"description": "Added optional chaining for displayName.trim() call"
|
|
198
|
+
}
|
|
199
|
+
],
|
|
200
|
+
"tests_added": [
|
|
201
|
+
{
|
|
202
|
+
"file": "src/serializers/__tests__/profile.test.ts",
|
|
203
|
+
"test_name": "should handle null display_name without error",
|
|
204
|
+
"type": "regression"
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"regression_check_result": {
|
|
208
|
+
"passed": true,
|
|
209
|
+
"total_tests": 142,
|
|
210
|
+
"new_failures": [],
|
|
211
|
+
"pre_existing_failures": []
|
|
212
|
+
},
|
|
213
|
+
"completion_status": "DONE",
|
|
214
|
+
"concerns": [],
|
|
215
|
+
"timestamp": "2026-03-29T15:30:00+08:00",
|
|
216
|
+
"investigation_duration_phases": 5
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Output Location
|
|
221
|
+
|
|
222
|
+
Reports are written to: `.workflow/.debug/debug-report-{YYYY-MM-DD}-{slug}.json`
|
|
223
|
+
|
|
224
|
+
Where:
|
|
225
|
+
- `{YYYY-MM-DD}` is the investigation date
|
|
226
|
+
- `{slug}` is derived from the bug description (lowercase, hyphens, max 40 chars)
|