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,101 @@
|
|
|
1
|
+
# Iron Law of Debugging
|
|
2
|
+
|
|
3
|
+
The Iron Law defines the non-negotiable rules that govern every investigation performed by this skill. These rules exist to prevent symptom-fixing and ensure durable, evidence-based solutions.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
| Phase | Usage | Section |
|
|
8
|
+
|-------|-------|---------|
|
|
9
|
+
| Phase 3 | Hypothesis must produce confirmed root cause before proceeding | Rule 1 |
|
|
10
|
+
| Phase 1 | Reproduction must produce observable evidence | Rule 2 |
|
|
11
|
+
| Phase 4 | Fix scope must be minimal | Rule 3 |
|
|
12
|
+
| Phase 4 | Regression test is mandatory | Rule 4 |
|
|
13
|
+
| Phase 3 | 3 consecutive unproductive hypothesis failures trigger escalation | Rule 5 |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Rules
|
|
18
|
+
|
|
19
|
+
### Rule 1: Never Fix Without Confirmed Root Cause
|
|
20
|
+
|
|
21
|
+
**Statement**: No code modification is permitted until a root cause has been confirmed through hypothesis testing with concrete evidence.
|
|
22
|
+
|
|
23
|
+
**Enforcement**: Phase 4 begins with an Iron Law gate check. If `confirmed_root_cause` is absent from the investigation report, Phase 4 is blocked.
|
|
24
|
+
|
|
25
|
+
**Rationale**: Fixing symptoms without understanding the cause leads to:
|
|
26
|
+
- Incomplete fixes that break under different conditions
|
|
27
|
+
- Masking of deeper issues
|
|
28
|
+
- Wasted investigation time when the bug recurs
|
|
29
|
+
|
|
30
|
+
### Rule 2: Evidence Must Be Reproducible
|
|
31
|
+
|
|
32
|
+
**Statement**: The bug must be reproducible through documented steps, or if not reproducible, the evidence must be sufficient to identify the root cause through static analysis.
|
|
33
|
+
|
|
34
|
+
**Enforcement**: Phase 1 documents reproduction steps and evidence. If reproduction fails, this is flagged as a concern but does not block investigation if sufficient static evidence exists.
|
|
35
|
+
|
|
36
|
+
**Acceptable evidence types**:
|
|
37
|
+
- Failing test case
|
|
38
|
+
- Error message with stack trace
|
|
39
|
+
- Log output showing the failure
|
|
40
|
+
- Code path analysis showing the defect condition
|
|
41
|
+
|
|
42
|
+
### Rule 3: Fix Must Be Minimal
|
|
43
|
+
|
|
44
|
+
**Statement**: The fix must change only what is necessary to address the confirmed root cause. No refactoring, no feature additions, no style changes to unrelated code.
|
|
45
|
+
|
|
46
|
+
**Enforcement**: Phase 4 requires a fix plan before implementation. Changes exceeding 3 files require written justification.
|
|
47
|
+
|
|
48
|
+
**What counts as minimal**:
|
|
49
|
+
- Adding a missing null check
|
|
50
|
+
- Fixing an incorrect condition
|
|
51
|
+
- Correcting a wrong variable reference
|
|
52
|
+
- Adding a missing import or dependency
|
|
53
|
+
|
|
54
|
+
**What is NOT minimal**:
|
|
55
|
+
- Refactoring the function "while we're here"
|
|
56
|
+
- Renaming variables for clarity
|
|
57
|
+
- Adding error handling to unrelated code paths
|
|
58
|
+
- Reformatting surrounding code
|
|
59
|
+
|
|
60
|
+
### Rule 4: Regression Test Required
|
|
61
|
+
|
|
62
|
+
**Statement**: Every fix must include a test that:
|
|
63
|
+
1. Fails when the fix is reverted (proves it tests the bug)
|
|
64
|
+
2. Passes when the fix is applied (proves the fix works)
|
|
65
|
+
|
|
66
|
+
**Enforcement**: Phase 4 requires a regression test before the phase is marked complete.
|
|
67
|
+
|
|
68
|
+
**Test requirements**:
|
|
69
|
+
- Test name clearly references the bug scenario
|
|
70
|
+
- Test exercises the exact code path of the root cause
|
|
71
|
+
- Test is deterministic (no timing dependencies, no external services)
|
|
72
|
+
- Test is placed in the appropriate test file for the affected module
|
|
73
|
+
|
|
74
|
+
### Rule 5: 3-Strike Escalation on Hypothesis Failure
|
|
75
|
+
|
|
76
|
+
**Statement**: If 3 consecutive hypothesis tests produce no actionable insight, the investigation must STOP and escalate with a full diagnostic dump.
|
|
77
|
+
|
|
78
|
+
**Enforcement**: Phase 3 tracks a strike counter. On the 3rd consecutive unproductive failure, execution halts and outputs the escalation block.
|
|
79
|
+
|
|
80
|
+
**What counts as a strike**:
|
|
81
|
+
- Hypothesis rejected AND no new insight gained
|
|
82
|
+
- Test was inconclusive AND no narrowing of search space
|
|
83
|
+
|
|
84
|
+
**What does NOT count as a strike**:
|
|
85
|
+
- Hypothesis rejected BUT new evidence narrows the search
|
|
86
|
+
- Hypothesis rejected BUT reveals a different potential cause
|
|
87
|
+
- Test inconclusive BUT identifies a new area to investigate
|
|
88
|
+
|
|
89
|
+
**Post-escalation**: Status set to BLOCKED. No further automated investigation. Preserve all intermediate outputs for human review.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Validation Checklist
|
|
94
|
+
|
|
95
|
+
Before completing any investigation, verify:
|
|
96
|
+
|
|
97
|
+
- [ ] Rule 1: Root cause confirmed before any fix was applied
|
|
98
|
+
- [ ] Rule 2: Bug reproduction documented (or static evidence justified)
|
|
99
|
+
- [ ] Rule 3: Fix changes only necessary code (file count, line count documented)
|
|
100
|
+
- [ ] Rule 4: Regression test exists and passes
|
|
101
|
+
- [ ] Rule 5: No more than 3 consecutive unproductive hypothesis tests (or escalation triggered)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-audit
|
|
3
|
+
description: OWASP Top 10 and STRIDE security auditing with supply chain analysis. Triggers on "security audit", "security scan", "cso".
|
|
4
|
+
allowed-tools: Read, Write, Bash, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Security Audit
|
|
8
|
+
|
|
9
|
+
4-phase security audit covering supply chain risks, OWASP Top 10 code review, STRIDE threat modeling, and trend-tracked reporting. Produces structured JSON findings in `.workflow/.security/`.
|
|
10
|
+
|
|
11
|
+
## Architecture Overview
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
+-------------------------------------------------------------------+
|
|
15
|
+
| Phase 1: Supply Chain Scan |
|
|
16
|
+
| -> Dependency audit, secrets detection, CI/CD review, LLM risks |
|
|
17
|
+
| -> Output: supply-chain-report.json |
|
|
18
|
+
+-----------------------------------+-------------------------------+
|
|
19
|
+
|
|
|
20
|
+
+-----------------------------------v-------------------------------+
|
|
21
|
+
| Phase 2: OWASP Review |
|
|
22
|
+
| -> OWASP Top 10 2021 code-level analysis via ccw cli |
|
|
23
|
+
| -> Output: owasp-findings.json |
|
|
24
|
+
+-----------------------------------+-------------------------------+
|
|
25
|
+
|
|
|
26
|
+
+-----------------------------------v-------------------------------+
|
|
27
|
+
| Phase 3: Threat Modeling (STRIDE) |
|
|
28
|
+
| -> 6 threat categories mapped to architecture components |
|
|
29
|
+
| -> Output: threat-model.json |
|
|
30
|
+
+-----------------------------------+-------------------------------+
|
|
31
|
+
|
|
|
32
|
+
+-----------------------------------v-------------------------------+
|
|
33
|
+
| Phase 4: Report & Tracking |
|
|
34
|
+
| -> Score calculation, trend comparison, dated report |
|
|
35
|
+
| -> Output: .workflow/.security/audit-report-{date}.json |
|
|
36
|
+
+-------------------------------------------------------------------+
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Key Design Principles
|
|
40
|
+
|
|
41
|
+
1. **Infrastructure-first**: Phase 1 catches low-hanging fruit (leaked secrets, vulnerable deps) before deeper analysis
|
|
42
|
+
2. **Standards-based**: OWASP Top 10 2021 and STRIDE provide systematic coverage
|
|
43
|
+
3. **Scoring gates**: Daily quick-scan must score 8/10; comprehensive audit minimum 2/10 for initial baseline
|
|
44
|
+
4. **Trend tracking**: Each audit compares against prior results in `.workflow/.security/`
|
|
45
|
+
|
|
46
|
+
## Execution Flow
|
|
47
|
+
|
|
48
|
+
### Quick-Scan Mode (daily)
|
|
49
|
+
|
|
50
|
+
Run Phase 1 only. Must score >= 8/10 to pass.
|
|
51
|
+
|
|
52
|
+
### Comprehensive Mode (full audit)
|
|
53
|
+
|
|
54
|
+
Run all 4 phases sequentially. Initial baseline minimum 2/10.
|
|
55
|
+
|
|
56
|
+
### Phase Sequence
|
|
57
|
+
|
|
58
|
+
1. **Phase 1: Supply Chain Scan** -- [phases/01-supply-chain-scan.md](phases/01-supply-chain-scan.md)
|
|
59
|
+
- Dependency audit (npm audit / pip-audit / safety check)
|
|
60
|
+
- Secrets detection (API keys, tokens, passwords in source)
|
|
61
|
+
- CI/CD config review (injection risks in workflow YAML)
|
|
62
|
+
- LLM/AI prompt injection check
|
|
63
|
+
2. **Phase 2: OWASP Review** -- [phases/02-owasp-review.md](phases/02-owasp-review.md)
|
|
64
|
+
- Systematic OWASP Top 10 2021 code review
|
|
65
|
+
- Uses `ccw cli --tool gemini --mode analysis --rule analysis-assess-security-risks`
|
|
66
|
+
3. **Phase 3: Threat Modeling** -- [phases/03-threat-modeling.md](phases/03-threat-modeling.md)
|
|
67
|
+
- STRIDE threat model mapped to architecture components
|
|
68
|
+
- Trust boundary identification and attack surface assessment
|
|
69
|
+
4. **Phase 4: Report & Tracking** -- [phases/04-report-tracking.md](phases/04-report-tracking.md)
|
|
70
|
+
- Score calculation with severity weights
|
|
71
|
+
- Trend comparison with previous audits
|
|
72
|
+
- Date-stamped report to `.workflow/.security/`
|
|
73
|
+
|
|
74
|
+
## Scoring Overview
|
|
75
|
+
|
|
76
|
+
See [specs/scoring-gates.md](specs/scoring-gates.md) for full specification.
|
|
77
|
+
|
|
78
|
+
| Severity | Weight | Example |
|
|
79
|
+
|----------|--------|---------|
|
|
80
|
+
| Critical | 10 | RCE, SQL injection, leaked credentials |
|
|
81
|
+
| High | 7 | Broken auth, SSRF, privilege escalation |
|
|
82
|
+
| Medium | 4 | XSS, CSRF, verbose error messages |
|
|
83
|
+
| Low | 1 | Missing headers, informational disclosures |
|
|
84
|
+
|
|
85
|
+
**Gates**: Daily quick-scan >= 8/10, Comprehensive initial >= 2/10.
|
|
86
|
+
|
|
87
|
+
## Directory Setup
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
mkdir -p .workflow/.security
|
|
91
|
+
WORK_DIR=".workflow/.security"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Output Structure
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
.workflow/.security/
|
|
98
|
+
audit-report-{YYYY-MM-DD}.json # Dated audit report
|
|
99
|
+
supply-chain-report.json # Latest supply chain scan
|
|
100
|
+
owasp-findings.json # Latest OWASP findings
|
|
101
|
+
threat-model.json # Latest STRIDE threat model
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Reference Documents
|
|
105
|
+
|
|
106
|
+
| Document | Purpose |
|
|
107
|
+
|----------|---------|
|
|
108
|
+
| [phases/01-supply-chain-scan.md](phases/01-supply-chain-scan.md) | Dependency, secrets, CI/CD, LLM risk scan |
|
|
109
|
+
| [phases/02-owasp-review.md](phases/02-owasp-review.md) | OWASP Top 10 2021 code review |
|
|
110
|
+
| [phases/03-threat-modeling.md](phases/03-threat-modeling.md) | STRIDE threat modeling |
|
|
111
|
+
| [phases/04-report-tracking.md](phases/04-report-tracking.md) | Report generation and trend tracking |
|
|
112
|
+
| [specs/scoring-gates.md](specs/scoring-gates.md) | Scoring system and quality gates |
|
|
113
|
+
| [specs/owasp-checklist.md](specs/owasp-checklist.md) | OWASP Top 10 detection patterns |
|
|
114
|
+
|
|
115
|
+
## Completion Status Protocol
|
|
116
|
+
|
|
117
|
+
This skill follows the Completion Status Protocol defined in `_shared/SKILL-DESIGN-SPEC.md` sections 13-14.
|
|
118
|
+
|
|
119
|
+
Possible termination statuses:
|
|
120
|
+
- **DONE**: All phases completed, score calculated, report generated
|
|
121
|
+
- **DONE_WITH_CONCERNS**: Audit completed but findings exceed acceptable thresholds
|
|
122
|
+
- **BLOCKED**: Required tools unavailable (e.g., npm/pip not installed), permission denied
|
|
123
|
+
- **NEEDS_CONTEXT**: Ambiguous project scope, unclear trust boundaries
|
|
124
|
+
|
|
125
|
+
Escalation follows the Three-Strike Rule (section 14) per step.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Phase 1: Supply Chain Scan
|
|
2
|
+
|
|
3
|
+
Detect low-hanging security risks in dependencies, secrets, CI/CD pipelines, and LLM/AI integrations.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Audit third-party dependencies for known vulnerabilities
|
|
8
|
+
- Scan source code for leaked secrets and credentials
|
|
9
|
+
- Review CI/CD configuration for injection risks
|
|
10
|
+
- Check for LLM/AI prompt injection vulnerabilities
|
|
11
|
+
|
|
12
|
+
## Execution Steps
|
|
13
|
+
|
|
14
|
+
### Step 1: Dependency Audit
|
|
15
|
+
|
|
16
|
+
Detect package manager and run appropriate audit tool.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Node.js projects
|
|
20
|
+
if [ -f package-lock.json ] || [ -f yarn.lock ]; then
|
|
21
|
+
npm audit --json > "${WORK_DIR}/npm-audit-raw.json" 2>&1 || true
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Python projects
|
|
25
|
+
if [ -f requirements.txt ] || [ -f pyproject.toml ]; then
|
|
26
|
+
pip-audit --format json --output "${WORK_DIR}/pip-audit-raw.json" 2>&1 || true
|
|
27
|
+
# Fallback: safety check
|
|
28
|
+
safety check --json > "${WORK_DIR}/safety-raw.json" 2>&1 || true
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Go projects
|
|
32
|
+
if [ -f go.sum ]; then
|
|
33
|
+
govulncheck ./... 2>&1 | tee "${WORK_DIR}/govulncheck-raw.txt" || true
|
|
34
|
+
fi
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If audit tools are not installed, log as INFO finding and continue.
|
|
38
|
+
|
|
39
|
+
### Step 2: Secrets Detection
|
|
40
|
+
|
|
41
|
+
Scan source files for hardcoded secrets using regex patterns.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# High-confidence patterns (case-insensitive)
|
|
45
|
+
grep -rniE \
|
|
46
|
+
'(api[_-]?key|api[_-]?secret|access[_-]?token|auth[_-]?token|secret[_-]?key)\s*[:=]\s*["\x27][A-Za-z0-9+/=_-]{16,}' \
|
|
47
|
+
--include='*.ts' --include='*.js' --include='*.py' --include='*.go' \
|
|
48
|
+
--include='*.java' --include='*.rb' --include='*.env' --include='*.yml' \
|
|
49
|
+
--include='*.yaml' --include='*.json' --include='*.toml' --include='*.cfg' \
|
|
50
|
+
. || true
|
|
51
|
+
|
|
52
|
+
# AWS patterns
|
|
53
|
+
grep -rniE '(AKIA[0-9A-Z]{16}|aws[_-]?secret[_-]?access[_-]?key)' . || true
|
|
54
|
+
|
|
55
|
+
# Private keys
|
|
56
|
+
grep -rniE '-----BEGIN (RSA |EC |DSA )?PRIVATE KEY-----' . || true
|
|
57
|
+
|
|
58
|
+
# Connection strings with passwords
|
|
59
|
+
grep -rniE '(mongodb|postgres|mysql|redis)://[^:]+:[^@]+@' . || true
|
|
60
|
+
|
|
61
|
+
# JWT tokens (hardcoded)
|
|
62
|
+
grep -rniE 'eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}' . || true
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Exclude: `node_modules/`, `.git/`, `dist/`, `build/`, `__pycache__/`, `*.lock`, `*.min.js`.
|
|
66
|
+
|
|
67
|
+
### Step 3: CI/CD Config Review
|
|
68
|
+
|
|
69
|
+
Check GitHub Actions and other CI/CD configs for injection risks.
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Find workflow files
|
|
73
|
+
find .github/workflows -name '*.yml' -o -name '*.yaml' 2>/dev/null
|
|
74
|
+
|
|
75
|
+
# Check for expression injection in run: blocks
|
|
76
|
+
# Dangerous: ${{ github.event.pull_request.title }} in run:
|
|
77
|
+
grep -rn '\${{.*github\.event\.' .github/workflows/ 2>/dev/null || true
|
|
78
|
+
|
|
79
|
+
# Check for pull_request_target with checkout of PR code
|
|
80
|
+
grep -rn 'pull_request_target' .github/workflows/ 2>/dev/null || true
|
|
81
|
+
|
|
82
|
+
# Check for use of deprecated/vulnerable actions
|
|
83
|
+
grep -rn 'actions/checkout@v1\|actions/checkout@v2' .github/workflows/ 2>/dev/null || true
|
|
84
|
+
|
|
85
|
+
# Check for secrets passed to untrusted contexts
|
|
86
|
+
grep -rn 'secrets\.' .github/workflows/ 2>/dev/null || true
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Step 4: LLM/AI Prompt Injection Check
|
|
90
|
+
|
|
91
|
+
Scan for patterns indicating prompt injection risk in LLM integrations.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# User input concatenated directly into prompts
|
|
95
|
+
grep -rniE '(prompt|system_message|messages)\s*[+=].*\b(user_input|request\.(body|query|params)|req\.)' \
|
|
96
|
+
--include='*.ts' --include='*.js' --include='*.py' . || true
|
|
97
|
+
|
|
98
|
+
# Template strings with user data in LLM calls
|
|
99
|
+
grep -rniE '(openai|anthropic|llm|chat|completion)\.' \
|
|
100
|
+
--include='*.ts' --include='*.js' --include='*.py' . || true
|
|
101
|
+
|
|
102
|
+
# Check for missing input sanitization before LLM calls
|
|
103
|
+
grep -rniE 'f".*{.*}.*".*\.(chat|complete|generate)' \
|
|
104
|
+
--include='*.py' . || true
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Output
|
|
108
|
+
|
|
109
|
+
- **File**: `supply-chain-report.json`
|
|
110
|
+
- **Location**: `${WORK_DIR}/supply-chain-report.json`
|
|
111
|
+
- **Format**: JSON
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"phase": "supply-chain-scan",
|
|
116
|
+
"timestamp": "ISO-8601",
|
|
117
|
+
"findings": [
|
|
118
|
+
{
|
|
119
|
+
"category": "dependency|secret|cicd|llm",
|
|
120
|
+
"severity": "critical|high|medium|low",
|
|
121
|
+
"title": "Finding title",
|
|
122
|
+
"description": "Detailed description",
|
|
123
|
+
"file": "path/to/file",
|
|
124
|
+
"line": 42,
|
|
125
|
+
"evidence": "matched text or context",
|
|
126
|
+
"remediation": "How to fix"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"summary": {
|
|
130
|
+
"total": 0,
|
|
131
|
+
"by_severity": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
|
|
132
|
+
"by_category": { "dependency": 0, "secret": 0, "cicd": 0, "llm": 0 }
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Next Phase
|
|
138
|
+
|
|
139
|
+
Proceed to [Phase 2: OWASP Review](02-owasp-review.md) with supply chain findings as context.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Phase 2: OWASP Review
|
|
2
|
+
|
|
3
|
+
Systematic code-level review against OWASP Top 10 2021 categories.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Review codebase against all 10 OWASP Top 10 2021 categories
|
|
8
|
+
- Use CCW CLI multi-model analysis for comprehensive coverage
|
|
9
|
+
- Produce structured findings with file:line references and remediation steps
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
- Phase 1 supply-chain-report.json (provides dependency context)
|
|
14
|
+
- Read [specs/owasp-checklist.md](../specs/owasp-checklist.md) for detection patterns
|
|
15
|
+
|
|
16
|
+
## Execution Steps
|
|
17
|
+
|
|
18
|
+
### Step 1: Identify Target Scope
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Identify source directories (exclude deps, build, test fixtures)
|
|
22
|
+
# Focus on: API routes, auth modules, data access, input handlers
|
|
23
|
+
find . -type f \( -name '*.ts' -o -name '*.js' -o -name '*.py' -o -name '*.go' -o -name '*.java' \) \
|
|
24
|
+
! -path '*/node_modules/*' ! -path '*/dist/*' ! -path '*/.git/*' \
|
|
25
|
+
! -path '*/build/*' ! -path '*/__pycache__/*' ! -path '*/vendor/*' \
|
|
26
|
+
| head -200
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Step 2: CCW CLI Analysis
|
|
30
|
+
|
|
31
|
+
Run multi-model security analysis using the security risks rule template.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
ccw cli -p "PURPOSE: OWASP Top 10 2021 security audit of this codebase.
|
|
35
|
+
Systematically check each OWASP category:
|
|
36
|
+
A01 Broken Access Control | A02 Cryptographic Failures | A03 Injection |
|
|
37
|
+
A04 Insecure Design | A05 Security Misconfiguration | A06 Vulnerable Components |
|
|
38
|
+
A07 Identification/Auth Failures | A08 Software/Data Integrity Failures |
|
|
39
|
+
A09 Security Logging/Monitoring Failures | A10 SSRF
|
|
40
|
+
|
|
41
|
+
TASK: For each OWASP category, scan relevant code patterns, identify vulnerabilities with file:line references, classify severity, provide remediation.
|
|
42
|
+
|
|
43
|
+
MODE: analysis
|
|
44
|
+
|
|
45
|
+
CONTEXT: @src/**/* @**/*.config.* @**/*.env.example
|
|
46
|
+
|
|
47
|
+
EXPECTED: JSON-structured findings per OWASP category with severity, file:line, evidence, remediation.
|
|
48
|
+
|
|
49
|
+
CONSTRAINTS: Code-level analysis only | Every finding must have file:line reference | Focus on real vulnerabilities not theoretical risks
|
|
50
|
+
" --tool gemini --mode analysis --rule analysis-assess-security-risks
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 3: Manual Pattern Scanning
|
|
54
|
+
|
|
55
|
+
Supplement CLI analysis with targeted pattern scans per OWASP category. Reference [specs/owasp-checklist.md](../specs/owasp-checklist.md) for full pattern list.
|
|
56
|
+
|
|
57
|
+
**A01 - Broken Access Control**:
|
|
58
|
+
```bash
|
|
59
|
+
# Missing auth middleware on routes
|
|
60
|
+
grep -rn 'app\.\(get\|post\|put\|delete\|patch\)(' --include='*.ts' --include='*.js' . | grep -v 'auth\|middleware\|protect'
|
|
61
|
+
# Direct object references without ownership check
|
|
62
|
+
grep -rn 'params\.id\|req\.params\.' --include='*.ts' --include='*.js' . || true
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**A03 - Injection**:
|
|
66
|
+
```bash
|
|
67
|
+
# SQL string concatenation
|
|
68
|
+
grep -rniE '(query|execute|raw)\s*\(\s*[`"'\'']\s*SELECT.*\+\s*|f".*SELECT.*{' --include='*.ts' --include='*.js' --include='*.py' . || true
|
|
69
|
+
# Command injection
|
|
70
|
+
grep -rniE '(exec|spawn|system|popen|subprocess)\s*\(' --include='*.ts' --include='*.js' --include='*.py' . || true
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**A05 - Security Misconfiguration**:
|
|
74
|
+
```bash
|
|
75
|
+
# Debug mode enabled
|
|
76
|
+
grep -rniE '(DEBUG|debug)\s*[:=]\s*(true|True|1|"true")' --include='*.env' --include='*.py' --include='*.ts' --include='*.json' . || true
|
|
77
|
+
# CORS wildcard
|
|
78
|
+
grep -rniE "cors.*\*|Access-Control-Allow-Origin.*\*" --include='*.ts' --include='*.js' --include='*.py' . || true
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**A07 - Identification and Authentication Failures**:
|
|
82
|
+
```bash
|
|
83
|
+
# Weak password patterns
|
|
84
|
+
grep -rniE 'password.*length.*[0-5][^0-9]|minlength.*[0-5][^0-9]' --include='*.ts' --include='*.js' --include='*.py' . || true
|
|
85
|
+
# Hardcoded credentials
|
|
86
|
+
grep -rniE '(password|passwd|pwd)\s*[:=]\s*["\x27][^"\x27]{3,}' --include='*.ts' --include='*.js' --include='*.py' --include='*.env' . || true
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Step 4: Consolidate Findings
|
|
90
|
+
|
|
91
|
+
Merge CLI analysis results and manual pattern scan results. Deduplicate and classify by OWASP category.
|
|
92
|
+
|
|
93
|
+
## OWASP Top 10 2021 Categories
|
|
94
|
+
|
|
95
|
+
| ID | Category | Key Checks |
|
|
96
|
+
|----|----------|------------|
|
|
97
|
+
| A01 | Broken Access Control | Missing auth, IDOR, path traversal, CORS |
|
|
98
|
+
| A02 | Cryptographic Failures | Weak algorithms, plaintext storage, missing TLS |
|
|
99
|
+
| A03 | Injection | SQL, NoSQL, OS command, LDAP, XPath injection |
|
|
100
|
+
| A04 | Insecure Design | Missing threat modeling, insecure business logic |
|
|
101
|
+
| A05 | Security Misconfiguration | Debug enabled, default creds, verbose errors |
|
|
102
|
+
| A06 | Vulnerable and Outdated Components | Known CVEs in dependencies (from Phase 1) |
|
|
103
|
+
| A07 | Identification and Authentication Failures | Weak passwords, missing MFA, session issues |
|
|
104
|
+
| A08 | Software and Data Integrity Failures | Unsigned updates, insecure deserialization, CI/CD |
|
|
105
|
+
| A09 | Security Logging and Monitoring Failures | Missing audit logs, no alerting, insufficient logging |
|
|
106
|
+
| A10 | Server-Side Request Forgery (SSRF) | Unvalidated URLs, internal resource access |
|
|
107
|
+
|
|
108
|
+
## Output
|
|
109
|
+
|
|
110
|
+
- **File**: `owasp-findings.json`
|
|
111
|
+
- **Location**: `${WORK_DIR}/owasp-findings.json`
|
|
112
|
+
- **Format**: JSON
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"phase": "owasp-review",
|
|
117
|
+
"timestamp": "ISO-8601",
|
|
118
|
+
"owasp_version": "2021",
|
|
119
|
+
"findings": [
|
|
120
|
+
{
|
|
121
|
+
"owasp_id": "A01",
|
|
122
|
+
"owasp_category": "Broken Access Control",
|
|
123
|
+
"severity": "critical|high|medium|low",
|
|
124
|
+
"title": "Finding title",
|
|
125
|
+
"description": "Detailed description",
|
|
126
|
+
"file": "path/to/file",
|
|
127
|
+
"line": 42,
|
|
128
|
+
"evidence": "code snippet or pattern match",
|
|
129
|
+
"remediation": "Specific fix recommendation",
|
|
130
|
+
"cwe": "CWE-XXX"
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"coverage": {
|
|
134
|
+
"A01": "checked|not_applicable",
|
|
135
|
+
"A02": "checked|not_applicable",
|
|
136
|
+
"A03": "checked|not_applicable",
|
|
137
|
+
"A04": "checked|not_applicable",
|
|
138
|
+
"A05": "checked|not_applicable",
|
|
139
|
+
"A06": "checked|not_applicable",
|
|
140
|
+
"A07": "checked|not_applicable",
|
|
141
|
+
"A08": "checked|not_applicable",
|
|
142
|
+
"A09": "checked|not_applicable",
|
|
143
|
+
"A10": "checked|not_applicable"
|
|
144
|
+
},
|
|
145
|
+
"summary": {
|
|
146
|
+
"total": 0,
|
|
147
|
+
"by_severity": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
|
|
148
|
+
"categories_checked": 10,
|
|
149
|
+
"categories_with_findings": 0
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Next Phase
|
|
155
|
+
|
|
156
|
+
Proceed to [Phase 3: Threat Modeling](03-threat-modeling.md) with OWASP findings as input for STRIDE analysis.
|