claude-code-workflow 7.2.26 → 7.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ccw/specs/architecture-constraints.md +5 -0
- package/.claude/skills/_shared/SKILL-DESIGN-SPEC.md +140 -0
- package/.claude/skills/investigate/SKILL.md +110 -0
- package/.claude/skills/investigate/phases/01-root-cause-investigation.md +132 -0
- package/.claude/skills/investigate/phases/02-pattern-analysis.md +126 -0
- package/.claude/skills/investigate/phases/03-hypothesis-testing.md +177 -0
- package/.claude/skills/investigate/phases/04-implementation.md +139 -0
- package/.claude/skills/investigate/phases/05-verification-report.md +153 -0
- package/.claude/skills/investigate/specs/debug-report-format.md +226 -0
- package/.claude/skills/investigate/specs/iron-law.md +101 -0
- package/.claude/skills/security-audit/SKILL.md +125 -0
- package/.claude/skills/security-audit/phases/01-supply-chain-scan.md +139 -0
- package/.claude/skills/security-audit/phases/02-owasp-review.md +156 -0
- package/.claude/skills/security-audit/phases/03-threat-modeling.md +180 -0
- package/.claude/skills/security-audit/phases/04-report-tracking.md +177 -0
- package/.claude/skills/security-audit/specs/owasp-checklist.md +442 -0
- package/.claude/skills/security-audit/specs/scoring-gates.md +141 -0
- package/.claude/skills/ship/SKILL.md +105 -0
- package/.claude/skills/ship/phases/01-preflight-checks.md +121 -0
- package/.claude/skills/ship/phases/02-code-review.md +137 -0
- package/.claude/skills/ship/phases/03-version-bump.md +171 -0
- package/.claude/skills/ship/phases/04-changelog-commit.md +167 -0
- package/.claude/skills/ship/phases/05-pr-creation.md +163 -0
- package/.claude/skills/skill-generator/templates/sequential-phase.md +10 -0
- package/.claude/skills/skill-generator/templates/skill-md.md +4 -0
- package/.claude/skills/team-arch-opt/SKILL.md +1 -1
- package/.claude/skills/team-arch-opt/roles/coordinator/commands/monitor.md +3 -1
- package/.claude/skills/team-arch-opt/roles/refactorer/role.md +3 -1
- package/.claude/skills/team-arch-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-coordinate/SKILL.md +4 -3
- package/.claude/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +1 -1
- package/.claude/skills/team-coordinate/roles/coordinator/commands/dispatch.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/commands/monitor.md +3 -2
- package/.claude/skills/team-coordinate/roles/coordinator/role.md +16 -15
- package/.claude/skills/team-coordinate/specs/pipelines.md +7 -4
- package/.claude/skills/team-coordinate/specs/role-spec-template.md +1 -0
- package/.claude/skills/team-interactive-craft/SKILL.md +127 -0
- package/.claude/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.claude/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +192 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +183 -0
- package/.claude/skills/team-interactive-craft/roles/coordinator/role.md +166 -0
- package/.claude/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.claude/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.claude/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.claude/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.claude/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.claude/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.claude/skills/team-lifecycle-v4/SKILL.md +1 -1
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +14 -2
- package/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +24 -2
- package/.claude/skills/team-lifecycle-v4/roles/executor/role.md +3 -1
- package/.claude/skills/team-motion-design/SKILL.md +129 -0
- package/.claude/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.claude/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/dispatch.md +203 -0
- package/.claude/skills/team-motion-design/roles/coordinator/commands/monitor.md +184 -0
- package/.claude/skills/team-motion-design/roles/coordinator/role.md +167 -0
- package/.claude/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.claude/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.claude/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.claude/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.claude/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.claude/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.claude/skills/team-motion-design/specs/team-config.json +99 -0
- package/.claude/skills/team-perf-opt/SKILL.md +1 -1
- package/.claude/skills/team-perf-opt/roles/optimizer/role.md +3 -1
- package/.claude/skills/team-perf-opt/specs/team-config.json +2 -2
- package/.claude/skills/team-quality-assurance/SKILL.md +1 -1
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-quality-assurance/roles/executor/role.md +3 -1
- package/.claude/skills/team-testing/SKILL.md +1 -1
- package/.claude/skills/team-testing/roles/coordinator/commands/dispatch.md +5 -2
- package/.claude/skills/team-testing/roles/coordinator/commands/monitor.md +4 -2
- package/.claude/skills/team-testing/roles/executor/role.md +3 -1
- package/.claude/skills/team-ui-polish/SKILL.md +127 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +194 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/commands/monitor.md +180 -0
- package/.claude/skills/team-ui-polish/roles/coordinator/role.md +170 -0
- package/.claude/skills/team-ui-polish/roles/diagnostician/role.md +160 -0
- package/.claude/skills/team-ui-polish/roles/optimizer/role.md +225 -0
- package/.claude/skills/team-ui-polish/roles/scanner/role.md +356 -0
- package/.claude/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.claude/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.claude/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.claude/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.claude/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.claude/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.claude/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.claude/skills/team-uidesign/SKILL.md +6 -1
- package/.claude/skills/team-uidesign/roles/designer/role.md +28 -4
- package/.claude/skills/team-uidesign/roles/implementer/role.md +25 -3
- package/.claude/skills/team-uidesign/roles/researcher/role.md +21 -2
- package/.claude/skills/team-uidesign/roles/reviewer/role.md +19 -17
- package/.claude/skills/team-uidesign/specs/anti-patterns.md +211 -0
- package/.claude/skills/team-uidesign/specs/design-standards.md +329 -0
- package/.claude/skills/team-uidesign/specs/scoring-guide.md +114 -0
- package/.claude/skills/team-uidesign/specs/team-config.json +1 -1
- package/.claude/skills/team-uidesign/specs/ux-writing.md +86 -0
- package/.claude/skills/team-ux-improve/SKILL.md +3 -0
- package/.claude/skills/team-ux-improve/roles/designer/role.md +30 -0
- package/.claude/skills/team-ux-improve/roles/diagnoser/role.md +16 -1
- package/.claude/skills/team-ux-improve/roles/scanner/role.md +43 -1
- package/.claude/skills/team-ux-improve/specs/anti-patterns.md +103 -0
- package/.claude/skills/team-ux-improve/specs/design-standards.md +54 -0
- package/.claude/skills/team-ux-improve/specs/heuristics.md +88 -0
- package/.claude/skills/team-ux-improve/wisdom/anti-patterns/common-ux-pitfalls.md +40 -8
- package/.claude/skills/team-ux-improve/wisdom/patterns/state-management.md +32 -12
- package/.claude/skills/team-ux-improve/wisdom/patterns/ui-feedback.md +35 -11
- package/.claude/skills/team-ux-improve/wisdom/principles/general-ux.md +36 -9
- package/.claude/skills/team-visual-a11y/SKILL.md +143 -0
- package/.claude/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +250 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +204 -0
- package/.claude/skills/team-visual-a11y/roles/coordinator/role.md +169 -0
- package/.claude/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.claude/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.claude/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.claude/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.claude/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.claude/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.claude/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.claude/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.claude/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.claude/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/.codex/skills/investigate/agents/investigator.md +392 -0
- package/.codex/skills/investigate/orchestrator.md +362 -0
- package/.codex/skills/investigate/phases/01-root-cause-investigation.md +212 -0
- package/.codex/skills/investigate/phases/02-pattern-analysis.md +181 -0
- package/.codex/skills/investigate/phases/03-hypothesis-testing.md +214 -0
- package/.codex/skills/investigate/phases/04-implementation.md +195 -0
- package/.codex/skills/investigate/phases/05-verification-report.md +240 -0
- package/.codex/skills/security-audit/agents/security-auditor.md +341 -0
- package/.codex/skills/security-audit/orchestrator.md +384 -0
- package/.codex/skills/security-audit/phases/01-supply-chain-scan.md +226 -0
- package/.codex/skills/security-audit/phases/02-owasp-review.md +232 -0
- package/.codex/skills/security-audit/phases/03-threat-modeling.md +249 -0
- package/.codex/skills/security-audit/phases/04-report-tracking.md +300 -0
- package/.codex/skills/ship/agents/ship-operator.md +318 -0
- package/.codex/skills/ship/orchestrator.md +426 -0
- package/.codex/skills/ship/phases/01-preflight-checks.md +198 -0
- package/.codex/skills/ship/phases/02-code-review.md +228 -0
- package/.codex/skills/ship/phases/03-version-bump.md +259 -0
- package/.codex/skills/ship/phases/04-changelog-commit.md +263 -0
- package/.codex/skills/ship/phases/05-pr-creation.md +280 -0
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -0
- package/.codex/skills/team-interactive-craft/roles/a11y-tester/role.md +159 -0
- package/.codex/skills/team-interactive-craft/roles/builder/role.md +216 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/analyze.md +71 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/dispatch.md +162 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/commands/monitor.md +233 -0
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -0
- package/.codex/skills/team-interactive-craft/roles/interaction-designer/role.md +144 -0
- package/.codex/skills/team-interactive-craft/roles/researcher/role.md +131 -0
- package/.codex/skills/team-interactive-craft/specs/interaction-patterns.md +362 -0
- package/.codex/skills/team-interactive-craft/specs/pipelines.md +85 -0
- package/.codex/skills/team-interactive-craft/specs/team-config.json +105 -0
- package/.codex/skills/team-interactive-craft/specs/vanilla-constraints.md +83 -0
- package/.codex/skills/team-motion-design/SKILL.md +222 -0
- package/.codex/skills/team-motion-design/roles/animator/role.md +194 -0
- package/.codex/skills/team-motion-design/roles/choreographer/role.md +164 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/analyze.md +64 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/dispatch.md +168 -0
- package/.codex/skills/team-motion-design/roles/coordinator/commands/monitor.md +242 -0
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -0
- package/.codex/skills/team-motion-design/roles/motion-researcher/role.md +115 -0
- package/.codex/skills/team-motion-design/roles/motion-tester/role.md +175 -0
- package/.codex/skills/team-motion-design/specs/gpu-constraints.md +114 -0
- package/.codex/skills/team-motion-design/specs/motion-tokens.md +128 -0
- package/.codex/skills/team-motion-design/specs/pipelines.md +74 -0
- package/.codex/skills/team-motion-design/specs/reduced-motion.md +129 -0
- package/.codex/skills/team-motion-design/specs/team-config.json +99 -0
- package/.codex/skills/team-ui-polish/SKILL.md +218 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/analyze.md +77 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/dispatch.md +167 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/commands/monitor.md +230 -0
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-ui-polish/roles/diagnostician/role.md +164 -0
- package/.codex/skills/team-ui-polish/roles/optimizer/role.md +229 -0
- package/.codex/skills/team-ui-polish/roles/scanner/role.md +360 -0
- package/.codex/skills/team-ui-polish/roles/verifier/role.md +142 -0
- package/.codex/skills/team-ui-polish/specs/anti-patterns.md +141 -0
- package/.codex/skills/team-ui-polish/specs/design-standards.md +356 -0
- package/.codex/skills/team-ui-polish/specs/fix-strategies.md +235 -0
- package/.codex/skills/team-ui-polish/specs/pipelines.md +81 -0
- package/.codex/skills/team-ui-polish/specs/scoring-guide.md +162 -0
- package/.codex/skills/team-ui-polish/specs/team-config.json +73 -0
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -0
- package/.codex/skills/team-visual-a11y/roles/color-auditor/role.md +178 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/analyze.md +72 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/dispatch.md +188 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/commands/monitor.md +281 -0
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -0
- package/.codex/skills/team-visual-a11y/roles/fix-implementer/role.md +246 -0
- package/.codex/skills/team-visual-a11y/roles/focus-auditor/role.md +222 -0
- package/.codex/skills/team-visual-a11y/roles/remediation-planner/role.md +206 -0
- package/.codex/skills/team-visual-a11y/roles/typo-auditor/role.md +185 -0
- package/.codex/skills/team-visual-a11y/specs/focus-patterns.md +325 -0
- package/.codex/skills/team-visual-a11y/specs/oklch-standards.md +130 -0
- package/.codex/skills/team-visual-a11y/specs/pipelines.md +98 -0
- package/.codex/skills/team-visual-a11y/specs/team-config.json +109 -0
- package/.codex/skills/team-visual-a11y/specs/typography-scale.md +165 -0
- package/.codex/skills/team-visual-a11y/specs/wcag-matrix.md +133 -0
- package/README.md +8 -0
- package/ccw/dist/core/hooks/hook-templates.d.ts.map +1 -1
- package/ccw/dist/core/hooks/hook-templates.js +114 -1
- package/ccw/dist/core/hooks/hook-templates.js.map +1 -1
- package/ccw/dist/core/routes/cli-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/cli-routes.js +34 -0
- package/ccw/dist/core/routes/cli-routes.js.map +1 -1
- package/ccw/dist/core/routes/system-routes.js +2 -2
- package/ccw/dist/core/routes/system-routes.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js → AlertDialog-BjP1ydDR.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-BjP1ydDR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-CAX3xqMf.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-CAX3xqMf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-CtWlmztq.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-CtWlmztq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-hR4a-eLX.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-hR4a-eLX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-DzNPkFN9.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-DzNPkFN9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BPEGN4TT.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BPEGN4TT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cf0r2RHY.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cf0r2RHY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DEm1rJ4h.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DEm1rJ4h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-BpeWw8HO.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-BpeWw8HO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-BEsmh2vF.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-BEsmh2vF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-B30SFdtU.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-B30SFdtU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-BVvMpg1O.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-BVvMpg1O.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-CL73dHbh.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-CL73dHbh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-BL-28lMZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-BL-28lMZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BzZDciHZ.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BzZDciHZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-CDp6-d8P.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-CDp6-d8P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-fZY_7O9n.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-fZY_7O9n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-4LJeC9bq.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-4LJeC9bq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-Bpigrbhw.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-Bpigrbhw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-BP0zJc1R.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-BP0zJc1R.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-CSt2oVKQ.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-CSt2oVKQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-B-xaMA0w.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-B-xaMA0w.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-CJqo_7DY.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-CJqo_7DY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-ibZeQA-Y.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-ibZeQA-Y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-DgJ4ctPQ.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-DgJ4ctPQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-Cit0Yq0D.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-Cit0Yq0D.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-Ce1HDIK0.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-Ce1HDIK0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-J1KikNrk.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-J1KikNrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CdBjTmth.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CdBjTmth.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-B9ZK7LvX.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-B9ZK7LvX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-CW_nS5UR.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-CW_nS5UR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-BPDbXPSM.js → SettingsPage-B2PYzSoO.js} +35 -35
- package/ccw/frontend/dist/assets/SettingsPage-B2PYzSoO.js.map +1 -0
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js → SkillsManagerPage-CTnWrrwp.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-D3LzbpJY.js.map → SkillsManagerPage-CTnWrrwp.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DJpi9XQL.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DJpi9XQL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-Ac6Ov7uy.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-Ac6Ov7uy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-DZAAspqR.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-DZAAspqR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-BJkwfhIZ.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-BJkwfhIZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-BJgjxBgb.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-BJgjxBgb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-D1WekoOy.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-D1WekoOy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-DxemgIhF.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-DxemgIhF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-CjS83f1V.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-CjS83f1V.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-B5PUcn8I.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-B5PUcn8I.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-DCc9aPbb.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-DCc9aPbb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-DOwFtzak.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-DOwFtzak.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-96qH3aFh.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-96qH3aFh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CCxSuil1.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CCxSuil1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-CZNSJFdq.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-CZNSJFdq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-h8xtvw2_.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-h8xtvw2_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-D3NY0bm6.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-D3NY0bm6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-Cy2vkc8p.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-Cy2vkc8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-Bzq3U1Mx.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-Bzq3U1Mx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-DwuwPDPi.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-DwuwPDPi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-q9g-bknU.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-q9g-bknU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-CL6vb42J.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-CL6vb42J.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-BkrcQBly.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-BkrcQBly.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-BQbwyNeV.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-BQbwyNeV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-x5_7DrN7.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-x5_7DrN7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-DTyWXwzf.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-DTyWXwzf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-80O0kJO7.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-80O0kJO7.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-DDlN2Bwa.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-DDlN2Bwa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-B9A3Hnrk.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-B9A3Hnrk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-Bs80iCX0.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-Bs80iCX0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index-mbeo62f8.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index-mbeo62f8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-rLgoBCfV.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-rLgoBCfV.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-C1niOWJx.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-C1niOWJx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-BTmI7SUg.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-BTmI7SUg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CB9HKeuZ.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CB9HKeuZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-koEYiemK.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-koEYiemK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-v2_GaLdC.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-v2_GaLdC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BQNfAqG_.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BQNfAqG_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-Dzq5LGg9.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-Dzq5LGg9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CtkoJXcz.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CtkoJXcz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-CH3smL37.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-CH3smL37.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CZ0aL_yF.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CZ0aL_yF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-F2A_J4l6.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-F2A_J4l6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-Byxot0YU.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-Byxot0YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-JjqhUkpw.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-JjqhUkpw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2--SuN9rAt.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2--SuN9rAt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-BbngGB2h.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-BbngGB2h.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-CgrHgZSl.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-CgrHgZSl.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-BU3TQr7Z.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-BU3TQr7Z.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CKs7nnn3.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CKs7nnn3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-DW5tsDW6.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-DW5tsDW6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-BHm7w3ON.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-BHm7w3ON.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-DYR7PWwt.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-DYR7PWwt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-D0TVgQD_.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-D0TVgQD_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-DfY8mAP8.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-DfY8mAP8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-CGusDp0F.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-CGusDp0F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-CIwh0fF1.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-CIwh0fF1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-FMyFv39K.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-FMyFv39K.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-B2qhsoTb.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-B2qhsoTb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-cxKXMBm3.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-cxKXMBm3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-B-xUT_z-.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-B-xUT_z-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-DZV_3lPr.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-DZV_3lPr.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +105 -105
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Phase 5: Verification & Report
|
|
2
|
+
|
|
3
|
+
> **COMPACT PROTECTION**: This is a core execution phase. If context compression has occurred and this file is only a summary, **MUST `Read` this file again before executing any Step**. Do not execute from memory.
|
|
4
|
+
|
|
5
|
+
Run full test suite, check for regressions, and generate the structured debug report.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
- Run the full test suite to verify no regressions were introduced
|
|
10
|
+
- Generate a structured debug report for future reference
|
|
11
|
+
- Output the report to `.workflow/.debug/` directory
|
|
12
|
+
|
|
13
|
+
## Input
|
|
14
|
+
|
|
15
|
+
| Source | Required | Description |
|
|
16
|
+
|--------|----------|-------------|
|
|
17
|
+
| investigation-report (phases 1-4) | Yes | All phases populated: evidence, root cause, fix_applied |
|
|
18
|
+
| assign_task message | Yes | Phase 5 instruction |
|
|
19
|
+
|
|
20
|
+
## Execution Steps
|
|
21
|
+
|
|
22
|
+
### Step 1: Detect and Run Full Test Suite
|
|
23
|
+
|
|
24
|
+
Detect the project's test framework by checking for project files, then run the full suite:
|
|
25
|
+
|
|
26
|
+
| Detection file | Test command |
|
|
27
|
+
|---------------|-------------|
|
|
28
|
+
| `package.json` with `test` script | `npm test` |
|
|
29
|
+
| `pytest.ini` or `pyproject.toml` | `pytest` |
|
|
30
|
+
| `go.mod` | `go test ./...` |
|
|
31
|
+
| `Cargo.toml` | `cargo test` |
|
|
32
|
+
| `Makefile` with `test` target | `make test` |
|
|
33
|
+
| None detected | Try `npm test`, `pytest`, `go test ./...` sequentially |
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Bash: mkdir -p .workflow/.debug
|
|
37
|
+
Bash: <detected test command>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Record test results:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
test_results = {
|
|
44
|
+
total: <count>,
|
|
45
|
+
passed: <count>,
|
|
46
|
+
failed: <count>,
|
|
47
|
+
skipped: <count>,
|
|
48
|
+
regression_test_passed: true|false,
|
|
49
|
+
new_failures: []
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Step 2: Regression Check
|
|
56
|
+
|
|
57
|
+
Verify specifically:
|
|
58
|
+
|
|
59
|
+
1. The new regression test passes (check by test name from fix_applied.regression_test.test_name).
|
|
60
|
+
2. All tests that were passing before the fix still pass.
|
|
61
|
+
3. No new warnings or errors appeared in test output.
|
|
62
|
+
|
|
63
|
+
**Decision table for new failures**:
|
|
64
|
+
|
|
65
|
+
| New failure | Assessment | Action |
|
|
66
|
+
|-------------|-----------|--------|
|
|
67
|
+
| Related to fix (same module, same code path) | Fix introduced regression | Return to Phase 4 to adjust fix |
|
|
68
|
+
| Unrelated to fix (different module, pre-existing) | Pre-existing failure | Document in pre_existing_failures, proceed |
|
|
69
|
+
| Regression test itself fails | Fix is not working correctly | Return to Phase 4 |
|
|
70
|
+
|
|
71
|
+
Classify failures:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
regression_check_result = {
|
|
75
|
+
passed: true|false,
|
|
76
|
+
total_tests: <count>,
|
|
77
|
+
new_failures: ["<test names that newly fail>"],
|
|
78
|
+
pre_existing_failures: ["<tests that were already failing>"]
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### Step 3: Generate Structured Debug Report
|
|
85
|
+
|
|
86
|
+
Compile all investigation data into the final debug report JSON following the schema from `~/.codex/skills/investigate/specs/debug-report-format.md`:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
debug_report = {
|
|
90
|
+
"bug_description": "<concise one-sentence description of the bug>",
|
|
91
|
+
"reproduction_steps": [
|
|
92
|
+
"<step 1>",
|
|
93
|
+
"<step 2>",
|
|
94
|
+
"<step 3: observe error>"
|
|
95
|
+
],
|
|
96
|
+
"root_cause": "<confirmed root cause description with technical detail and file:line reference>",
|
|
97
|
+
"evidence_chain": [
|
|
98
|
+
"Phase 1: <error message X observed in module Y>",
|
|
99
|
+
"Phase 2: <pattern analysis found N similar occurrences>",
|
|
100
|
+
"Phase 3: hypothesis H<N> confirmed — <specific condition at file:line>"
|
|
101
|
+
],
|
|
102
|
+
"fix_description": "<what was changed and why>",
|
|
103
|
+
"files_changed": [
|
|
104
|
+
{
|
|
105
|
+
"path": "<src/module/file.ts>",
|
|
106
|
+
"change_type": "add|modify|remove",
|
|
107
|
+
"description": "<brief description of changes to this file>"
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"tests_added": [
|
|
111
|
+
{
|
|
112
|
+
"file": "<src/module/__tests__/file.test.ts>",
|
|
113
|
+
"test_name": "<should handle null return from X>",
|
|
114
|
+
"type": "regression|unit|integration"
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
"regression_check_result": {
|
|
118
|
+
"passed": true|false,
|
|
119
|
+
"total_tests": <count>,
|
|
120
|
+
"new_failures": [],
|
|
121
|
+
"pre_existing_failures": []
|
|
122
|
+
},
|
|
123
|
+
"completion_status": "DONE|DONE_WITH_CONCERNS|BLOCKED",
|
|
124
|
+
"concerns": [],
|
|
125
|
+
"timestamp": "<ISO-8601 timestamp>",
|
|
126
|
+
"investigation_duration_phases": 5
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Field sources**:
|
|
131
|
+
|
|
132
|
+
| Field | Source Phase | Description |
|
|
133
|
+
|-------|-------------|-------------|
|
|
134
|
+
| `bug_description` | Phase 1 | User-reported symptom, one sentence |
|
|
135
|
+
| `reproduction_steps` | Phase 1 | Ordered steps to trigger the bug |
|
|
136
|
+
| `root_cause` | Phase 3 | Confirmed cause with file:line reference |
|
|
137
|
+
| `evidence_chain` | Phase 1-3 | Each item prefixed with "Phase N:" |
|
|
138
|
+
| `fix_description` | Phase 4 | What code was changed and why |
|
|
139
|
+
| `files_changed` | Phase 4 | Each file with change type and description |
|
|
140
|
+
| `tests_added` | Phase 4 | Regression tests covering the bug |
|
|
141
|
+
| `regression_check_result` | Phase 5 | Full test suite results |
|
|
142
|
+
| `completion_status` | Phase 5 | Final status per protocol |
|
|
143
|
+
| `concerns` | Phase 5 | Non-blocking issues (if any) |
|
|
144
|
+
| `timestamp` | Phase 5 | When report was generated |
|
|
145
|
+
| `investigation_duration_phases` | Phase 5 | Always 5 for complete investigation |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### Step 4: Write Report File
|
|
150
|
+
|
|
151
|
+
Compute the filename:
|
|
152
|
+
- `<slug>` = bug_description lowercased, non-alphanumeric characters replaced with `-`, truncated to 40 chars
|
|
153
|
+
- `<date>` = current date as YYYY-MM-DD
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
Bash: mkdir -p .workflow/.debug
|
|
157
|
+
Write: .workflow/.debug/debug-report-<date>-<slug>.json
|
|
158
|
+
Content: <debug_report JSON with 2-space indent>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### Step 5: Output Completion Status
|
|
164
|
+
|
|
165
|
+
Determine status and output completion block:
|
|
166
|
+
|
|
167
|
+
**Status determination**:
|
|
168
|
+
|
|
169
|
+
| Condition | Status |
|
|
170
|
+
|-----------|--------|
|
|
171
|
+
| Regression test passes, no new failures, all quality checks met | DONE |
|
|
172
|
+
| Fix applied but partial test coverage, minor warnings, or non-critical concerns | DONE_WITH_CONCERNS |
|
|
173
|
+
| New test failures introduced by fix (unresolvable), or critical concern | BLOCKED |
|
|
174
|
+
|
|
175
|
+
**DONE output**:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
## STATUS: DONE
|
|
179
|
+
|
|
180
|
+
**Summary**: Fixed <bug_description> — root cause was <root_cause_summary>
|
|
181
|
+
|
|
182
|
+
### Details
|
|
183
|
+
- Phases completed: 5/5
|
|
184
|
+
- Root cause: <confirmed_root_cause.description>
|
|
185
|
+
- Fix: <fix_description>
|
|
186
|
+
- Regression test: <test_name> in <test_file>
|
|
187
|
+
|
|
188
|
+
### Outputs
|
|
189
|
+
- Debug report: .workflow/.debug/debug-report-<date>-<slug>.json
|
|
190
|
+
- Files changed: <list>
|
|
191
|
+
- Tests added: <list>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**DONE_WITH_CONCERNS output**:
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
## STATUS: DONE_WITH_CONCERNS
|
|
198
|
+
|
|
199
|
+
**Summary**: Fixed <bug_description> with concerns
|
|
200
|
+
|
|
201
|
+
### Details
|
|
202
|
+
- Phases completed: 5/5
|
|
203
|
+
- Concerns:
|
|
204
|
+
1. <concern> — Impact: low|medium — Suggested fix: <action>
|
|
205
|
+
|
|
206
|
+
### Outputs
|
|
207
|
+
- Debug report: .workflow/.debug/debug-report-<date>-<slug>.json
|
|
208
|
+
- Files changed: <list>
|
|
209
|
+
- Tests added: <list>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Output
|
|
215
|
+
|
|
216
|
+
| Artifact | Format | Description |
|
|
217
|
+
|----------|--------|-------------|
|
|
218
|
+
| `.workflow/.debug/debug-report-<date>-<slug>.json` | JSON file | Full structured investigation report |
|
|
219
|
+
| Completion status block | Structured text output | Final status per Completion Status Protocol |
|
|
220
|
+
|
|
221
|
+
## Success Criteria
|
|
222
|
+
|
|
223
|
+
| Criterion | Validation Method |
|
|
224
|
+
|-----------|-------------------|
|
|
225
|
+
| Full test suite executed | Test command ran and produced output |
|
|
226
|
+
| Regression test passes | test_results.regression_test_passed: true |
|
|
227
|
+
| No new failures introduced | regression_check_result.new_failures is empty (or documented as pre-existing) |
|
|
228
|
+
| Debug report written | File exists at `.workflow/.debug/debug-report-<date>-<slug>.json` |
|
|
229
|
+
| Completion status output | Status block follows protocol format |
|
|
230
|
+
|
|
231
|
+
## Error Handling
|
|
232
|
+
|
|
233
|
+
| Scenario | Resolution |
|
|
234
|
+
|----------|------------|
|
|
235
|
+
| Test framework not detected | Try common commands in order; document uncertainty in concerns |
|
|
236
|
+
| New failures related to fix | Return to Phase 4 to adjust; do not write report until resolved |
|
|
237
|
+
| New failures unrelated | Document as pre_existing_failures, set DONE_WITH_CONCERNS if impactful |
|
|
238
|
+
| Report directory not writable | Try alternate path `.workflow/debug/`; document in output |
|
|
239
|
+
| Test suite takes >5 minutes | Run regression test only; note full suite skipped in concerns |
|
|
240
|
+
| Regression test was not added in Phase 4 | Document as DONE_WITH_CONCERNS concern |
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
# Security Auditor Agent
|
|
2
|
+
|
|
3
|
+
Executes all 4 phases of the security audit: supply chain scan, OWASP Top 10 review, STRIDE threat modeling, and scored report generation. Driven by orchestrator via assign_task through each phase.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- **Type**: `analysis`
|
|
8
|
+
- **Role File**: `~/.codex/agents/security-auditor.md`
|
|
9
|
+
- **task_name**: `security-auditor`
|
|
10
|
+
- **Responsibility**: Read-only analysis (Phases 1–3) + Write (Phase 4 report output)
|
|
11
|
+
- **fork_context**: false
|
|
12
|
+
- **Reasoning Effort**: high
|
|
13
|
+
|
|
14
|
+
## Boundaries
|
|
15
|
+
|
|
16
|
+
### MUST
|
|
17
|
+
|
|
18
|
+
- Load role definition via MANDATORY FIRST STEPS pattern
|
|
19
|
+
- Produce structured JSON output for every phase
|
|
20
|
+
- Include file:line references in all code-level findings
|
|
21
|
+
- Enforce scoring gates: quick-scan >= 8/10; comprehensive initial >= 2/10
|
|
22
|
+
- Deduplicate findings that appear in multiple phases (keep highest severity, merge evidence)
|
|
23
|
+
- Write phase output files to `.workflow/.security/` before reporting completion
|
|
24
|
+
|
|
25
|
+
### MUST NOT
|
|
26
|
+
|
|
27
|
+
- Skip phases in comprehensive mode — all 4 phases must complete in sequence
|
|
28
|
+
- Proceed to next phase before writing current phase output file
|
|
29
|
+
- Include sensitive discovered values (actual secrets, credentials) in JSON evidence fields — redact with `[REDACTED]`
|
|
30
|
+
- Apply suppression (`@ts-ignore`, empty catch) — report findings as-is
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Toolbox
|
|
35
|
+
|
|
36
|
+
### Available Tools
|
|
37
|
+
|
|
38
|
+
| Tool | Type | Purpose |
|
|
39
|
+
|------|------|---------|
|
|
40
|
+
| `Bash` | execution | Run dependency audits, grep patterns, file discovery, directory setup |
|
|
41
|
+
| `Read` | read | Load phase files, specs, previous audit reports |
|
|
42
|
+
| `Write` | write | Output JSON phase results to `.workflow/.security/` |
|
|
43
|
+
| `Glob` | read | Discover source files by pattern for scoping |
|
|
44
|
+
| `Grep` | read | Pattern-based security scanning across source files |
|
|
45
|
+
| `spawn_agent` | agent | Spawn inline subagent for OWASP CLI analysis (Phase 2) |
|
|
46
|
+
| `wait_agent` | agent | Await inline subagent result |
|
|
47
|
+
| `close_agent` | agent | Close inline subagent after result received |
|
|
48
|
+
|
|
49
|
+
### Tool Usage Patterns
|
|
50
|
+
|
|
51
|
+
**Setup Pattern**: Ensure work directory exists before any phase output.
|
|
52
|
+
```
|
|
53
|
+
Bash("mkdir -p .workflow/.security")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Read Pattern**: Load phase spec before executing.
|
|
57
|
+
```
|
|
58
|
+
Read("~/.codex/skills/security-audit/phases/01-supply-chain-scan.md")
|
|
59
|
+
Read("~/.codex/skills/security-audit/specs/scoring-gates.md")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Write Pattern**: Output structured JSON after each phase.
|
|
63
|
+
```
|
|
64
|
+
Write(".workflow/.security/supply-chain-report.json", <json_content>)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Execution
|
|
70
|
+
|
|
71
|
+
### Phase 1: Supply Chain Scan
|
|
72
|
+
|
|
73
|
+
**Objective**: Detect vulnerable dependencies, hardcoded secrets, CI/CD injection risks, and LLM prompt injection vectors.
|
|
74
|
+
|
|
75
|
+
**Input**:
|
|
76
|
+
|
|
77
|
+
| Source | Required | Description |
|
|
78
|
+
|--------|----------|-------------|
|
|
79
|
+
| Phase spec | Yes | `~/.codex/skills/security-audit/phases/01-supply-chain-scan.md` |
|
|
80
|
+
| Project root | Yes | Working directory with source files |
|
|
81
|
+
|
|
82
|
+
**Steps**:
|
|
83
|
+
|
|
84
|
+
1. Read `~/.codex/skills/security-audit/phases/01-supply-chain-scan.md` for full execution instructions.
|
|
85
|
+
2. Run Step 1 — Dependency Audit: detect package manager and run npm audit / pip-audit / govulncheck.
|
|
86
|
+
3. Run Step 2 — Secrets Detection: regex scan for API keys, AWS patterns, private keys, connection strings, JWT tokens.
|
|
87
|
+
4. Run Step 3 — CI/CD Config Review: scan `.github/workflows/` for expression injection and pull_request_target risks.
|
|
88
|
+
5. Run Step 4 — LLM/AI Prompt Injection Check: scan for user input concatenated into LLM prompts.
|
|
89
|
+
6. Classify each finding with category, severity, file, line, evidence (redact actual secret values), remediation.
|
|
90
|
+
7. Write output file.
|
|
91
|
+
|
|
92
|
+
**Decision Table — Dependency Audit**:
|
|
93
|
+
|
|
94
|
+
| Condition | Action |
|
|
95
|
+
|-----------|--------|
|
|
96
|
+
| npm / yarn lock file found | Run `npm audit --json` |
|
|
97
|
+
| requirements.txt / pyproject.toml found | Run `pip-audit --format json`; fallback to `safety check --json` |
|
|
98
|
+
| go.sum found | Run `govulncheck ./...` |
|
|
99
|
+
| No lock files found | Log INFO finding: "No lock files detected"; continue |
|
|
100
|
+
| Audit tool not installed | Log INFO finding: "<tool> not installed"; continue |
|
|
101
|
+
|
|
102
|
+
**Decision Table — Secrets Detection**:
|
|
103
|
+
|
|
104
|
+
| Pattern Match | Severity | Category |
|
|
105
|
+
|---------------|----------|----------|
|
|
106
|
+
| API key / secret / token with 16+ char value | Critical | secret |
|
|
107
|
+
| AWS AKIA key pattern | Critical | secret |
|
|
108
|
+
| `-----BEGIN PRIVATE KEY-----` | Critical | secret |
|
|
109
|
+
| DB connection string with password | Critical | secret |
|
|
110
|
+
| Hardcoded JWT token | High | secret |
|
|
111
|
+
|
|
112
|
+
**Output**: `.workflow/.security/supply-chain-report.json` — schema per phase spec.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### Phase 2: OWASP Review
|
|
117
|
+
|
|
118
|
+
**Objective**: Systematic code-level review against all 10 OWASP Top 10 2021 categories.
|
|
119
|
+
|
|
120
|
+
**Input**:
|
|
121
|
+
|
|
122
|
+
| Source | Required | Description |
|
|
123
|
+
|--------|----------|-------------|
|
|
124
|
+
| Phase spec | Yes | `~/.codex/skills/security-audit/phases/02-owasp-review.md` |
|
|
125
|
+
| OWASP checklist | Yes | `~/.codex/skills/security-audit/specs/owasp-checklist.md` |
|
|
126
|
+
| Supply chain report | Yes | `.workflow/.security/supply-chain-report.json` |
|
|
127
|
+
|
|
128
|
+
**Steps**:
|
|
129
|
+
|
|
130
|
+
1. Read `~/.codex/skills/security-audit/phases/02-owasp-review.md` for full execution instructions.
|
|
131
|
+
2. Read `~/.codex/skills/security-audit/specs/owasp-checklist.md` for detection patterns.
|
|
132
|
+
3. Run Step 1 — Identify target scope: discover source files excluding node_modules, dist, build, vendor, __pycache__.
|
|
133
|
+
4. Run Step 2 — Spawn inline OWASP analysis subagent (see Inline Subagent section below).
|
|
134
|
+
5. Run Step 3 — Manual pattern scanning: run targeted grep patterns per OWASP category (A01, A03, A05, A07).
|
|
135
|
+
6. Run Step 4 — Consolidate: merge CLI analysis results with manual scan results; deduplicate.
|
|
136
|
+
7. Set coverage field for each category: `checked` or `not_applicable`.
|
|
137
|
+
8. Write output file.
|
|
138
|
+
|
|
139
|
+
**Decision Table — Scope**:
|
|
140
|
+
|
|
141
|
+
| Condition | Action |
|
|
142
|
+
|-----------|--------|
|
|
143
|
+
| Source files found | Proceed with full scan |
|
|
144
|
+
| No source files detected | Report as BLOCKED with scope note |
|
|
145
|
+
| Files > 500 | Prioritize: routes/, auth/, api/, handlers/ first |
|
|
146
|
+
|
|
147
|
+
**Output**: `.workflow/.security/owasp-findings.json` — schema per phase spec.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Inline Subagent: OWASP CLI Analysis (Phase 2, Step 2)
|
|
152
|
+
|
|
153
|
+
**When**: After identifying target scope in Phase 2, Step 2.
|
|
154
|
+
|
|
155
|
+
**Agent File**: `~/.codex/agents/cli-explore-agent.md`
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
spawn_agent({
|
|
159
|
+
task_name: "inline-owasp-analysis",
|
|
160
|
+
fork_context: false,
|
|
161
|
+
model: "haiku",
|
|
162
|
+
reasoning_effort: "medium",
|
|
163
|
+
message: `### MANDATORY FIRST STEPS
|
|
164
|
+
1. Read: ~/.codex/agents/cli-explore-agent.md
|
|
165
|
+
|
|
166
|
+
Goal: OWASP Top 10 2021 security analysis of this codebase.
|
|
167
|
+
Systematically check each OWASP category:
|
|
168
|
+
A01 Broken Access Control | A02 Cryptographic Failures | A03 Injection |
|
|
169
|
+
A04 Insecure Design | A05 Security Misconfiguration | A06 Vulnerable Components |
|
|
170
|
+
A07 Identification/Auth Failures | A08 Software/Data Integrity Failures |
|
|
171
|
+
A09 Security Logging/Monitoring Failures | A10 SSRF
|
|
172
|
+
|
|
173
|
+
Scope: @src/**/* @**/*.config.* @**/*.env.example
|
|
174
|
+
|
|
175
|
+
Expected: JSON findings per OWASP category with severity, file:line, evidence, remediation.
|
|
176
|
+
|
|
177
|
+
Constraints: Code-level analysis only | Every finding must have file:line reference | Focus on real vulnerabilities not theoretical risks`
|
|
178
|
+
})
|
|
179
|
+
const result = wait_agent({ targets: ["inline-owasp-analysis"], timeout_ms: 300000 })
|
|
180
|
+
close_agent({ target: "inline-owasp-analysis" })
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Result Handling**:
|
|
184
|
+
|
|
185
|
+
| Result | Action |
|
|
186
|
+
|--------|--------|
|
|
187
|
+
| Success | Integrate findings into owasp-findings.json consolidation step |
|
|
188
|
+
| Timeout / Error | Continue with manual pattern scan results only; log warning |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### Phase 3: Threat Modeling
|
|
193
|
+
|
|
194
|
+
**Objective**: Apply STRIDE framework to architecture components; identify trust boundaries and attack surface.
|
|
195
|
+
|
|
196
|
+
**Input**:
|
|
197
|
+
|
|
198
|
+
| Source | Required | Description |
|
|
199
|
+
|--------|----------|-------------|
|
|
200
|
+
| Phase spec | Yes | `~/.codex/skills/security-audit/phases/03-threat-modeling.md` |
|
|
201
|
+
| Supply chain report | Yes | `.workflow/.security/supply-chain-report.json` |
|
|
202
|
+
| OWASP findings | Yes | `.workflow/.security/owasp-findings.json` |
|
|
203
|
+
|
|
204
|
+
**Steps**:
|
|
205
|
+
|
|
206
|
+
1. Read `~/.codex/skills/security-audit/phases/03-threat-modeling.md` for full execution instructions.
|
|
207
|
+
2. Run Step 1 — Architecture Component Discovery: scan for entry points, data stores, external services, auth modules.
|
|
208
|
+
3. Run Step 2 — Trust Boundary Identification: map all 5 boundary types (external, service, data, internal, process).
|
|
209
|
+
4. Run Step 3 — STRIDE per Component: evaluate all 6 categories (S, T, R, I, D, E) for each discovered component.
|
|
210
|
+
5. Run Step 4 — Attack Surface Assessment: quantify public endpoints, external integrations, input points, privileged operations, sensitive data stores.
|
|
211
|
+
6. Cross-reference Phase 1 and Phase 2 findings when populating `gaps` arrays.
|
|
212
|
+
7. Write output file.
|
|
213
|
+
|
|
214
|
+
**STRIDE Evaluation Decision Table**:
|
|
215
|
+
|
|
216
|
+
| Component Type | Priority STRIDE Categories |
|
|
217
|
+
|----------------|---------------------------|
|
|
218
|
+
| api_endpoint | S (spoofing), T (tampering), D (denial-of-service), E (elevation) |
|
|
219
|
+
| auth_module | S (spoofing), R (repudiation), E (elevation) |
|
|
220
|
+
| data_store | T (tampering), I (information disclosure), R (repudiation) |
|
|
221
|
+
| external_service | T (tampering), I (information disclosure), D (denial-of-service) |
|
|
222
|
+
| worker | T (tampering), D (denial-of-service) |
|
|
223
|
+
|
|
224
|
+
**Output**: `.workflow/.security/threat-model.json` — schema per phase spec.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
### Phase 4: Report & Tracking
|
|
229
|
+
|
|
230
|
+
**Objective**: Aggregate all findings, calculate score, compare trends, write dated report.
|
|
231
|
+
|
|
232
|
+
**Input**:
|
|
233
|
+
|
|
234
|
+
| Source | Required | Description |
|
|
235
|
+
|--------|----------|-------------|
|
|
236
|
+
| Phase spec | Yes | `~/.codex/skills/security-audit/phases/04-report-tracking.md` |
|
|
237
|
+
| Scoring gates | Yes | `~/.codex/skills/security-audit/specs/scoring-gates.md` |
|
|
238
|
+
| Supply chain report | Yes | `.workflow/.security/supply-chain-report.json` |
|
|
239
|
+
| OWASP findings | Yes | `.workflow/.security/owasp-findings.json` |
|
|
240
|
+
| Threat model | Yes | `.workflow/.security/threat-model.json` |
|
|
241
|
+
| Previous audits | No | `.workflow/.security/audit-report-*.json` (for trend) |
|
|
242
|
+
|
|
243
|
+
**Steps**:
|
|
244
|
+
|
|
245
|
+
1. Read `~/.codex/skills/security-audit/phases/04-report-tracking.md` for full execution instructions.
|
|
246
|
+
2. Aggregate all findings from phases 1–3 (supply-chain + owasp + STRIDE gaps).
|
|
247
|
+
3. Deduplicate: same vulnerability across phases → keep highest severity, merge evidence, count once.
|
|
248
|
+
4. Count files scanned (from phase outputs).
|
|
249
|
+
5. Calculate score per formula: `base_score(10.0) - (weighted_sum / max(10, files_scanned))`.
|
|
250
|
+
6. Find previous audit: `ls -t .workflow/.security/audit-report-*.json 2>/dev/null | head -1`.
|
|
251
|
+
7. Compute trend direction and score_delta.
|
|
252
|
+
8. Evaluate gate (initial vs. subsequent logic).
|
|
253
|
+
9. Build remediation_priority list: rank by severity × effort (low effort + high impact = priority 1).
|
|
254
|
+
10. Write dated report.
|
|
255
|
+
11. Copy phase outputs to `.workflow/.security/` as latest copies.
|
|
256
|
+
|
|
257
|
+
**Score Calculation**:
|
|
258
|
+
|
|
259
|
+
| Severity | Weight |
|
|
260
|
+
|----------|--------|
|
|
261
|
+
| critical | 10 |
|
|
262
|
+
| high | 7 |
|
|
263
|
+
| medium | 4 |
|
|
264
|
+
| low | 1 |
|
|
265
|
+
|
|
266
|
+
Formula: `final_score = max(0, round(10.0 - (weighted_sum / max(10, files_scanned)), 1))`
|
|
267
|
+
|
|
268
|
+
**Score Interpretation Table**:
|
|
269
|
+
|
|
270
|
+
| Score Range | Rating | Meaning |
|
|
271
|
+
|-------------|--------|---------|
|
|
272
|
+
| 9.0 – 10.0 | Excellent | Minimal risk, production-ready |
|
|
273
|
+
| 7.0 – 8.9 | Good | Acceptable risk, minor improvements needed |
|
|
274
|
+
| 5.0 – 6.9 | Fair | Notable risks, remediation recommended |
|
|
275
|
+
| 3.0 – 4.9 | Poor | Significant risks, remediation required |
|
|
276
|
+
| 0.0 – 2.9 | Critical | Severe vulnerabilities, immediate action needed |
|
|
277
|
+
|
|
278
|
+
**Gate Evaluation**:
|
|
279
|
+
|
|
280
|
+
| Condition | Gate Result | Status |
|
|
281
|
+
|-----------|------------|--------|
|
|
282
|
+
| No previous audit AND score >= 2.0 | PASS | Baseline established |
|
|
283
|
+
| No previous audit AND score < 2.0 | FAIL | DONE_WITH_CONCERNS |
|
|
284
|
+
| Previous audit AND score >= previous_score | PASS | No regression |
|
|
285
|
+
| Previous audit AND score within 0.5 of previous | WARN | DONE_WITH_CONCERNS |
|
|
286
|
+
| Previous audit AND score < previous_score - 0.5 | FAIL | DONE_WITH_CONCERNS |
|
|
287
|
+
|
|
288
|
+
**Trend Direction**:
|
|
289
|
+
|
|
290
|
+
| Condition | direction field |
|
|
291
|
+
|-----------|----------------|
|
|
292
|
+
| No previous audit | `baseline` |
|
|
293
|
+
| score_delta > 0.5 | `improving` |
|
|
294
|
+
| -0.5 <= score_delta <= 0.5 | `stable` |
|
|
295
|
+
| score_delta < -0.5 | `regressing` |
|
|
296
|
+
|
|
297
|
+
**Output**: `.workflow/.security/audit-report-<YYYY-MM-DD>.json` — full schema per phase spec.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Structured Output Template
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
## Summary
|
|
305
|
+
- One-sentence completion status with phase completed and finding count
|
|
306
|
+
|
|
307
|
+
## Score (Phase 4 / quick-scan)
|
|
308
|
+
- Score: <N>/10 (<Rating>)
|
|
309
|
+
- Gate: PASS|FAIL|WARN
|
|
310
|
+
- Trend: <improving|stable|regressing|baseline> (delta: <+/-N.N>)
|
|
311
|
+
|
|
312
|
+
## Findings
|
|
313
|
+
- Critical: <N> High: <N> Medium: <N> Low: <N>
|
|
314
|
+
|
|
315
|
+
## Phase Outputs Written
|
|
316
|
+
- .workflow/.security/supply-chain-report.json
|
|
317
|
+
- .workflow/.security/owasp-findings.json (if Phase 2 completed)
|
|
318
|
+
- .workflow/.security/threat-model.json (if Phase 3 completed)
|
|
319
|
+
- .workflow/.security/audit-report-<date>.json (if Phase 4 completed)
|
|
320
|
+
|
|
321
|
+
## Top Risks
|
|
322
|
+
1. [severity] <title> — <file>:<line> — <remediation summary>
|
|
323
|
+
2. [severity] <title> — <file>:<line> — <remediation summary>
|
|
324
|
+
|
|
325
|
+
## Open Questions
|
|
326
|
+
1. <Any scope ambiguity or blocked items>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Error Handling
|
|
332
|
+
|
|
333
|
+
| Scenario | Resolution |
|
|
334
|
+
|----------|------------|
|
|
335
|
+
| Phase spec file not found | Read from fallback path; report in Open Questions if unavailable |
|
|
336
|
+
| Dependency audit tool missing | Log as INFO finding (category: dependency), continue with other steps |
|
|
337
|
+
| No source files found | Report as BLOCKED with path; request scope clarification |
|
|
338
|
+
| Inline subagent timeout (Phase 2) | Continue with manual grep results only; note in findings summary |
|
|
339
|
+
| Phase output file write failure | Retry once; if still failing report as BLOCKED |
|
|
340
|
+
| Previous audit parse error | Treat as baseline (no prior data); note in trend section |
|
|
341
|
+
| Timeout approaching mid-phase | Output partial results with "PARTIAL" status, write what is available |
|