claude-code-workflow 7.2.27 → 7.2.29
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/brainstorm/SKILL.md +3 -3
- package/.codex/skills/clean/SKILL.md +3 -3
- 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/issue-discover/SKILL.md +13 -13
- package/.codex/skills/issue-discover/phases/02-discover.md +4 -4
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +3 -3
- package/.codex/skills/parallel-dev-cycle/SKILL.md +4 -4
- package/.codex/skills/parallel-dev-cycle/phases/02-agent-execution.md +6 -6
- package/.codex/skills/parallel-dev-cycle/phases/03-result-aggregation.md +10 -10
- package/.codex/skills/review-cycle/SKILL.md +10 -10
- package/.codex/skills/review-cycle/phases/02-parallel-review.md +6 -6
- package/.codex/skills/review-cycle/phases/04-iterative-deep-dive.md +4 -4
- package/.codex/skills/review-cycle/phases/07-fix-parallel-planning.md +4 -4
- package/.codex/skills/review-cycle/phases/08-fix-execution.md +2 -2
- package/.codex/skills/roadmap-with-file/SKILL.md +14 -14
- 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/spec-generator/README.md +1 -1
- package/.codex/skills/spec-generator/SKILL.md +184 -88
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +4 -7
- package/.codex/skills/spec-generator/phases/01-discovery.md +30 -11
- package/.codex/skills/spec-generator/phases/02-product-brief.md +2 -5
- package/.codex/skills/spec-generator/phases/03-requirements.md +4 -6
- package/.codex/skills/spec-generator/phases/04-architecture.md +4 -6
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +4 -6
- package/.codex/skills/spec-generator/phases/06-5-auto-fix.md +4 -5
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +8 -8
- package/.codex/skills/spec-generator/phases/07-issue-export.md +2 -2
- package/.codex/skills/spec-setup/SKILL.md +4 -4
- 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/.codex/skills/workflow-plan/SKILL.md +6 -6
- package/.codex/skills/workflow-tdd-plan/SKILL.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +19 -19
- package/.codex/skills/workflow-test-fix-cycle/phases/01-test-fix-gen.md +5 -5
- package/.codex/skills/workflow-test-fix-cycle/phases/02-test-cycle-execute.md +5 -5
- 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-exlTDW81.js} +3 -3
- package/ccw/frontend/dist/assets/{AlertDialog-Bf1jdqax.js.map → AlertDialog-exlTDW81.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js → AnalysisPage-cgV9LfAI.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-C8niKdp4.js.map → AnalysisPage-cgV9LfAI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js → ApiSettingsPage-Dk5jJdWt.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-BL2c3UNS.js.map → ApiSettingsPage-Dk5jJdWt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js → CliModeToggle-Be9xsPiv.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-BePBFynD.js.map → CliModeToggle-Be9xsPiv.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js → CliSessionSharePage-Bh9jBtPI.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-7cYtX6FT.js.map → CliSessionSharePage-Bh9jBtPI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js → CliViewerPage-BrE-oyEq.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-CBwg1mPL.js.map → CliViewerPage-BrE-oyEq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js → CodexLensPage-Cd3nrC93.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensPage-Bt74xORP.js.map → CodexLensPage-Cd3nrC93.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js → Collapsible-DXFl3VKF.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Wrs87QT7.js.map → Collapsible-DXFl3VKF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js → CommandsManagerPage-IV8zpjgX.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-ChQjmPWZ.js.map → CommandsManagerPage-IV8zpjgX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js → DeepWikiPage-CpDxtmRX.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-dEO5wi6X.js.map → DeepWikiPage-CpDxtmRX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js → EndpointsPage-BchjWe7s.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-4zq269xY.js.map → EndpointsPage-BchjWe7s.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js → ExplorerPage-CbWvaJ0y.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-B0YTENhA.js.map → ExplorerPage-CbWvaJ0y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js → FixSessionPage-YMjVRiCk.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-CwGs6dhz.js.map → FixSessionPage-YMjVRiCk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js → FloatingFileBrowser-JW2ehYY_.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-COZRBslc.js.map → FloatingFileBrowser-JW2ehYY_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js → FloatingPanel-BtqzqDVq.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-DYvgQZRD.js.map → FloatingPanel-BtqzqDVq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js → GraphExplorerPage-BsJL_W4d.js} +3 -3
- package/ccw/frontend/dist/assets/{GraphExplorerPage-ewMHQGem.js.map → GraphExplorerPage-BsJL_W4d.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js → HistoryPage-BuWpQ7k5.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-BMeR0PrK.js.map → HistoryPage-BuWpQ7k5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js → HookManagerPage-D0BtMIWy.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DBW2LnRm.js.map → HookManagerPage-D0BtMIWy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js → InstallationsPage-C7dwsAKG.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage--pMj0QEH.js.map → InstallationsPage-C7dwsAKG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js → IssueHubPage-D0nCNaeB.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-C_QMpQSR.js.map → IssueHubPage-D0nCNaeB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js → LiteTasksPage-B5c2Kb9r.js} +3 -3
- package/ccw/frontend/dist/assets/{LiteTasksPage-CSWFdQ2-.js.map → LiteTasksPage-B5c2Kb9r.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js → McpManagerPage-C-S5CehM.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-Dvv8NtGy.js.map → McpManagerPage-C-S5CehM.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js → MemoryPage-P_B0JVUQ.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-YO8WZzZO.js.map → MemoryPage-P_B0JVUQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js → NotFoundPage-S4Jn9LUE.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-quUJw0CD.js.map → NotFoundPage-S4Jn9LUE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js → OrchestratorPage-C2Zlr7AC.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-tuThWPID.js.map → OrchestratorPage-C2Zlr7AC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js → ProjectOverviewPage-CMVfz8s5.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-shTilwiT.js.map → ProjectOverviewPage-CMVfz8s5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js → PromptHistoryPage-YEMjFARX.js} +3 -3
- package/ccw/frontend/dist/assets/{PromptHistoryPage-6rQnsI8l.js.map → PromptHistoryPage-YEMjFARX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js → ReviewSessionPage-DnTm55nG.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-JOmzjVbT.js.map → ReviewSessionPage-DnTm55nG.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js → RulesManagerPage-CUwebtO2.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Cayfywqi.js.map → RulesManagerPage-CUwebtO2.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js → SessionDetailPage-0qyH1Z5P.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-iMn0k84i.js.map → SessionDetailPage-0qyH1Z5P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js → SessionsPage-BpgP4087.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-Ciqjy9kz.js.map → SessionsPage-BpgP4087.js.map} +1 -1
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js +150 -0
- package/ccw/frontend/dist/assets/SettingsPage-C3SJajeT.js.map +1 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js +7 -0
- package/ccw/frontend/dist/assets/SkillsManagerPage-vD9PTsmy.js.map +1 -0
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js → SpecsSettingsPage-DT-yTVkD.js} +4 -4
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-BpkJctzo.js.map → SpecsSettingsPage-DT-yTVkD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js → Switch-CYSPdqWk.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-BpB9h__9.js.map → Switch-CYSPdqWk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js → TabsNavigation-CPh6Zor1.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-BGsKy7DO.js.map → TabsNavigation-CPh6Zor1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js → TaskDrawer-Ds-8830B.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-bYIlbM0Q.js.map → TaskDrawer-Ds-8830B.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js → TeamPage-CJODUxBk.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-CihtQ6LQ.js.map → TeamPage-CJODUxBk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js → TerminalDashboardPage-Cn3fGUuO.js} +3 -3
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-BDnNF_ud.js.map → TerminalDashboardPage-Cn3fGUuO.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js → archive-CjwVpw6k.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CQJ86bQp.js.map → archive-CjwVpw6k.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js → archive-restore-2vZa9Ic3.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-BhTfDbPU.js.map → archive-restore-2vZa9Ic3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js → arrow-right-CUU5XDgT.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-eUAZnT9C.js.map → arrow-right-CUU5XDgT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js → bookmark-plus-Cc3nKRZ5.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-ilF5-V-k.js.map → bookmark-plus-Cc3nKRZ5.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js → bot-BwpSRDUa.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BLkaQscs.js.map → bot-BwpSRDUa.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js → braces-DBzUW1XC.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D9HdgsO6.js.map → braces-DBzUW1XC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js → circle-stop-CGNNsjvE.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-C3ZF1okQ.js.map → circle-stop-CGNNsjvE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js → cpu-D27G86Ul.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-B-QjaSjm.js.map → cpu-D27G86Ul.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js → ellipsis-vertical-C1Ij47Yz.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-CbNlw2gS.js.map → ellipsis-vertical-C1Ij47Yz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js → eye-C6MOB7Au.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-yAy69Cnn.js.map → eye-C6MOB7Au.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js → eye-off-BxfBlZ26.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-D5uzLZyP.js.map → eye-off-BxfBlZ26.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js → file-json-NI237wA-.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-rwo1NowL.js.map → file-json-NI237wA-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js → file-text-Byn2_2v6.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-DRkrjie9.js.map → file-text-Byn2_2v6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js → filter-D-7PhZjx.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-BOe-OTu1.js.map → filter-D-7PhZjx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js → folder-BoAsK_FL.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BaWZWn_r.js.map → folder-BoAsK_FL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js → gauge-DCSxJIS4.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-kazFexTr.js.map → gauge-DCSxJIS4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js → globe-CHS3prza.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-BuHeEjxd.js.map → globe-CHS3prza.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js → grid-3x3-D7K35U7S.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-DbhuUu4V.js.map → grid-3x3-D7K35U7S.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js → hard-drive-eq9xE07G.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-AoLGL0z4.js.map → hard-drive-eq9xE07G.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js → hash-C1DMpBua.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-Dpo1exMB.js.map → hash-C1DMpBua.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js → history-Di5SBCY-.js} +2 -2
- package/ccw/frontend/dist/assets/{history-ujQnmMC9.js.map → history-Di5SBCY-.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js → index--_R7COnA.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C_Yf5fZ4.js.map → index--_R7COnA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js → index-BUol9HDD.js} +3 -3
- package/ccw/frontend/dist/assets/{index-Dff4bg3u.js.map → index-BUol9HDD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-B76AGix5.js → index-CT9oykfw.js} +2 -2
- package/ccw/frontend/dist/assets/{index-B76AGix5.js.map → index-CT9oykfw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js → index-Ddwvf87H.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CxzXz6o1.js.map → index-Ddwvf87H.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js → layout-grid-LiX0qZbN.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-CBdE4K8h.js.map → layout-grid-LiX0qZbN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js → lightbulb-CL3DVEwb.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-B9K6ZgRp.js.map → lightbulb-CL3DVEwb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js → link-2-CC5cFeq6.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Oea4xHJl.js.map → link-2-CC5cFeq6.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js → link-ngFQ9bs0.js} +2 -2
- package/ccw/frontend/dist/assets/{link-5yXdZBch.js.map → link-ngFQ9bs0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js → list-BEU6I0KK.js} +2 -2
- package/ccw/frontend/dist/assets/{list-9lHhC_U_.js.map → list-BEU6I0KK.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js → map-pin-BWZdLA6y.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B6Io5kmB.js.map → map-pin-BWZdLA6y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js → messages-square-K6_Chm7n.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-BT000aD3.js.map → messages-square-K6_Chm7n.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js → minimize-2-CWkphauf.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-DO-zbT3a.js.map → minimize-2-CWkphauf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js → package-DrNgkamn.js} +2 -2
- package/ccw/frontend/dist/assets/{package-BjOw1ldU.js.map → package-DrNgkamn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js → plug-CMo3sw5_.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-9dAARpE1.js.map → plug-CMo3sw5_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js → power-DppNTW5e.js} +2 -2
- package/ccw/frontend/dist/assets/{power-K2S39x7f.js.map → power-DppNTW5e.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js → save-CD8aPMbZ.js} +2 -2
- package/ccw/frontend/dist/assets/{save-D9-CoT3x.js.map → save-CD8aPMbZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js → send-B4z90fQD.js} +2 -2
- package/ccw/frontend/dist/assets/{send-Bunw9NtC.js.map → send-B4z90fQD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js → settings-2-CAKRU_QC.js} +2 -2
- package/ccw/frontend/dist/assets/{settings-2-osl4EXFf.js.map → settings-2-CAKRU_QC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js → square-check-big-KhI3HrzX.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-Dl5gYkjR.js.map → square-check-big-KhI3HrzX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js → square-pen-BtdGIpuq.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-Bue1chJR.js.map → square-pen-BtdGIpuq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js → star-ZoBUkXoD.js} +2 -2
- package/ccw/frontend/dist/assets/{star-Bk7EC7FB.js.map → star-ZoBUkXoD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js → style-CltxQP-P.js} +2 -2
- package/ccw/frontend/dist/assets/{style-BbREPmRj.js.map → style-CltxQP-P.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js → target-C32OUSGf.js} +2 -2
- package/ccw/frontend/dist/assets/{target-CElrCVhR.js.map → target-C32OUSGf.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js → test-tube-0IxoyAVZ.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-wciJaoas.js.map → test-tube-0IxoyAVZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js → upload-4eKCkyBn.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-BD1F07wG.js.map → upload-4eKCkyBn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js → useApiSettings-zLTUWqhi.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-D23HVEt8.js.map → useApiSettings-zLTUWqhi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js → useCli-BtN2vpOX.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-BGDd_lXD.js.map → useCli-BtN2vpOX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js → useCommands-_spj49qL.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-B-m_HxPB.js.map → useCommands-_spj49qL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js → useDebounce-Bm9KFZvd.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-Z18-PHZr.js.map → useDebounce-Bm9KFZvd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js → useFileExplorer-DOmpm6v9.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-D4gPp-LB.js.map → useFileExplorer-DOmpm6v9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js → useLocale-D2rj4rea.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-DJ62jjFa.js.map → useLocale-D2rj4rea.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js → useSkills-OskEpomF.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-B8NPs9__.js.map → useSkills-OskEpomF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js → useSystemSettings-BjMgsNSF.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-CVi7nKGJ.js.map → useSystemSettings-BjMgsNSF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js → wand-sparkles-CLhyYWa7.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-CLjPiU5w.js.map → wand-sparkles-CLhyYWa7.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 +0 -150
- package/ccw/frontend/dist/assets/SettingsPage-BPDbXPSM.js.map +0 -1
- package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js +0 -7
- package/ccw/frontend/dist/assets/SkillsManagerPage-D3LzbpJY.js.map +0 -1
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Phase 4: Report & Tracking
|
|
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
|
+
Generate scored audit report, compare with previous audits, and track security trends.
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
- Calculate security score from all phase findings
|
|
10
|
+
- Compare with previous audit results (if available)
|
|
11
|
+
- Generate date-stamped report in `.workflow/.security/`
|
|
12
|
+
- Track improvement or regression trends
|
|
13
|
+
|
|
14
|
+
## Input
|
|
15
|
+
|
|
16
|
+
| Source | Required | Description |
|
|
17
|
+
|--------|----------|-------------|
|
|
18
|
+
| `.workflow/.security/supply-chain-report.json` | Yes | Phase 1 findings |
|
|
19
|
+
| `.workflow/.security/owasp-findings.json` | Yes | Phase 2 findings |
|
|
20
|
+
| `.workflow/.security/threat-model.json` | Yes | Phase 3 findings (STRIDE gaps) |
|
|
21
|
+
| `.workflow/.security/audit-report-*.json` | No | Previous audit reports for trend comparison |
|
|
22
|
+
| `~/.codex/skills/security-audit/specs/scoring-gates.md` | Yes | Scoring formula and gate thresholds |
|
|
23
|
+
|
|
24
|
+
## Execution Steps
|
|
25
|
+
|
|
26
|
+
### Step 1: Aggregate Findings
|
|
27
|
+
|
|
28
|
+
Collect all findings from phases 1–3 and classify by severity.
|
|
29
|
+
|
|
30
|
+
**Aggregation Formula**:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
All findings =
|
|
34
|
+
supply-chain-report.findings
|
|
35
|
+
+ owasp-findings.findings
|
|
36
|
+
+ threat-model threats (where gaps array is non-empty)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Deduplication Rule**:
|
|
40
|
+
|
|
41
|
+
| Condition | Action |
|
|
42
|
+
|-----------|--------|
|
|
43
|
+
| Same vulnerability appears in multiple phases | Keep highest-severity classification; merge evidence; count as single finding |
|
|
44
|
+
| Same file:line in different categories | Merge into one finding; note all phases that detected it |
|
|
45
|
+
| Unique finding per phase | Include as-is |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Step 2: Calculate Score
|
|
50
|
+
|
|
51
|
+
Apply scoring formula from `~/.codex/skills/security-audit/specs/scoring-gates.md`.
|
|
52
|
+
|
|
53
|
+
**Scoring Formula**:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Base score = 10.0
|
|
57
|
+
|
|
58
|
+
For each finding:
|
|
59
|
+
penalty = severity_weight / total_files_scanned
|
|
60
|
+
- Critical: weight = 10 (each critical finding has outsized impact)
|
|
61
|
+
- High: weight = 7
|
|
62
|
+
- Medium: weight = 4
|
|
63
|
+
- Low: weight = 1
|
|
64
|
+
|
|
65
|
+
Weighted penalty = SUM(finding_weight * count_per_severity) / normalization_factor
|
|
66
|
+
Final score = max(0, 10.0 - weighted_penalty)
|
|
67
|
+
|
|
68
|
+
Normalization factor = max(10, total_files_scanned)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Severity Weights**:
|
|
72
|
+
|
|
73
|
+
| Severity | Weight | Criteria | Examples |
|
|
74
|
+
|----------|--------|----------|----------|
|
|
75
|
+
| Critical | 10 | Exploitable with high impact, no user interaction needed | RCE, SQL injection with data access, leaked production credentials, auth bypass |
|
|
76
|
+
| High | 7 | Exploitable with significant impact, may need user interaction | Broken authentication, SSRF, privilege escalation, XSS with session theft |
|
|
77
|
+
| Medium | 4 | Limited exploitability or moderate impact | Reflected XSS, CSRF, verbose error messages, missing security headers |
|
|
78
|
+
| Low | 1 | Informational or minimal impact | Missing best-practice headers, minor info disclosure, deprecated dependencies without known exploit |
|
|
79
|
+
|
|
80
|
+
**Score Interpretation**:
|
|
81
|
+
|
|
82
|
+
| Score | Rating | Meaning |
|
|
83
|
+
|-------|--------|---------|
|
|
84
|
+
| 9.0–10.0 | Excellent | Minimal risk, production-ready |
|
|
85
|
+
| 7.0–8.9 | Good | Acceptable risk, minor improvements needed |
|
|
86
|
+
| 5.0–6.9 | Fair | Notable risks, remediation recommended |
|
|
87
|
+
| 3.0–4.9 | Poor | Significant risks, remediation required |
|
|
88
|
+
| 0.0–2.9 | Critical | Severe vulnerabilities, immediate action needed |
|
|
89
|
+
|
|
90
|
+
**Example Score Calculations**:
|
|
91
|
+
|
|
92
|
+
| Findings | Files Scanned | Weighted Sum | Penalty | Score |
|
|
93
|
+
|----------|--------------|--------------|---------|-------|
|
|
94
|
+
| 1 critical | 50 | 10 | 0.2 | 9.8 |
|
|
95
|
+
| 2 critical, 3 high | 50 | 41 | 0.82 | 9.2 |
|
|
96
|
+
| 5 critical, 10 high | 50 | 120 | 2.4 | 7.6 |
|
|
97
|
+
| 10 critical, 20 high, 15 medium | 100 | 300 | 3.0 | 7.0 |
|
|
98
|
+
| 20 critical | 20 | 200 | 10.0 | 0.0 |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### Step 3: Gate Evaluation
|
|
103
|
+
|
|
104
|
+
**Daily quick-scan gate** (Phase 1 only):
|
|
105
|
+
|
|
106
|
+
| Result | Condition | Action |
|
|
107
|
+
|--------|-----------|--------|
|
|
108
|
+
| PASS | score >= 8.0 | Continue. No blocking issues. |
|
|
109
|
+
| WARN | 6.0 <= score < 8.0 | Log warning. Review findings before deploy. |
|
|
110
|
+
| FAIL | score < 6.0 | Block deployment. Remediate critical/high findings. |
|
|
111
|
+
|
|
112
|
+
**Comprehensive audit gate** (all phases):
|
|
113
|
+
|
|
114
|
+
Initial/baseline audit (no previous audit exists):
|
|
115
|
+
|
|
116
|
+
| Result | Condition | Action |
|
|
117
|
+
|--------|-----------|--------|
|
|
118
|
+
| PASS | score >= 2.0 | Baseline established. Plan remediation. |
|
|
119
|
+
| FAIL | score < 2.0 | Critical exposure. Immediate triage required. |
|
|
120
|
+
|
|
121
|
+
Subsequent audits (previous audit exists):
|
|
122
|
+
|
|
123
|
+
| Result | Condition | Action |
|
|
124
|
+
|--------|-----------|--------|
|
|
125
|
+
| PASS | score >= previous_score | No regression. Continue improvement. |
|
|
126
|
+
| WARN | score within 0.5 of previous | Marginal change. Review new findings. |
|
|
127
|
+
| FAIL | score < previous_score - 0.5 | Regression detected. Investigate new findings. |
|
|
128
|
+
|
|
129
|
+
Production readiness target: score >= 7.0
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Step 4: Trend Comparison
|
|
134
|
+
|
|
135
|
+
Find and compare with previous audit reports.
|
|
136
|
+
|
|
137
|
+
**Execution**:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Find previous audit reports
|
|
141
|
+
ls -t .workflow/.security/audit-report-*.json 2>/dev/null | head -5
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Trend Direction Decision Table**:
|
|
145
|
+
|
|
146
|
+
| Condition | direction |
|
|
147
|
+
|-----------|-----------|
|
|
148
|
+
| No previous audit file found | `baseline` |
|
|
149
|
+
| score_delta > 0.5 | `improving` |
|
|
150
|
+
| -0.5 <= score_delta <= 0.5 | `stable` |
|
|
151
|
+
| score_delta < -0.5 | `regressing` |
|
|
152
|
+
|
|
153
|
+
Compare current vs. previous:
|
|
154
|
+
- Delta per OWASP category (new findings vs. resolved findings)
|
|
155
|
+
- Delta per STRIDE category
|
|
156
|
+
- New findings vs. resolved findings (by title/file comparison)
|
|
157
|
+
- Overall score trend
|
|
158
|
+
|
|
159
|
+
**Trend JSON Format**:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"trend": {
|
|
164
|
+
"current_date": "2026-03-29",
|
|
165
|
+
"current_score": 7.5,
|
|
166
|
+
"previous_date": "2026-03-22",
|
|
167
|
+
"previous_score": 6.8,
|
|
168
|
+
"score_delta": 0.7,
|
|
169
|
+
"new_findings": 2,
|
|
170
|
+
"resolved_findings": 5,
|
|
171
|
+
"direction": "improving",
|
|
172
|
+
"history": [
|
|
173
|
+
{ "date": "2026-03-15", "score": 5.2, "total_findings": 45 },
|
|
174
|
+
{ "date": "2026-03-22", "score": 6.8, "total_findings": 32 },
|
|
175
|
+
{ "date": "2026-03-29", "score": 7.5, "total_findings": 29 }
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
### Step 5: Generate Report
|
|
184
|
+
|
|
185
|
+
Assemble and write the final scored report.
|
|
186
|
+
|
|
187
|
+
**Execution**:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# Ensure directory exists
|
|
191
|
+
mkdir -p .workflow/.security
|
|
192
|
+
|
|
193
|
+
# Write report with date stamp
|
|
194
|
+
DATE=$(date +%Y-%m-%d)
|
|
195
|
+
cp "${WORK_DIR}/audit-report.json" ".workflow/.security/audit-report-${DATE}.json"
|
|
196
|
+
|
|
197
|
+
# Also maintain latest copies of phase outputs
|
|
198
|
+
cp "${WORK_DIR}/supply-chain-report.json" ".workflow/.security/" 2>/dev/null || true
|
|
199
|
+
cp "${WORK_DIR}/owasp-findings.json" ".workflow/.security/" 2>/dev/null || true
|
|
200
|
+
cp "${WORK_DIR}/threat-model.json" ".workflow/.security/" 2>/dev/null || true
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Build `remediation_priority` list: rank by severity weight × inverse effort (low effort + high impact = priority 1).
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Output
|
|
208
|
+
|
|
209
|
+
| Artifact | Format | Description |
|
|
210
|
+
|----------|--------|-------------|
|
|
211
|
+
| `.workflow/.security/audit-report-<YYYY-MM-DD>.json` | JSON | Full scored report with trend, top risks, remediation priority |
|
|
212
|
+
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"report": "security-audit",
|
|
216
|
+
"version": "1.0",
|
|
217
|
+
"timestamp": "ISO-8601",
|
|
218
|
+
"date": "YYYY-MM-DD",
|
|
219
|
+
"mode": "comprehensive|quick-scan",
|
|
220
|
+
"score": {
|
|
221
|
+
"overall": 7.5,
|
|
222
|
+
"rating": "Good",
|
|
223
|
+
"gate": "PASS|FAIL",
|
|
224
|
+
"gate_threshold": 8
|
|
225
|
+
},
|
|
226
|
+
"findings_summary": {
|
|
227
|
+
"total": 0,
|
|
228
|
+
"by_severity": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
|
|
229
|
+
"by_phase": {
|
|
230
|
+
"supply_chain": 0,
|
|
231
|
+
"owasp": 0,
|
|
232
|
+
"stride": 0
|
|
233
|
+
},
|
|
234
|
+
"by_owasp": {
|
|
235
|
+
"A01": 0, "A02": 0, "A03": 0, "A04": 0, "A05": 0,
|
|
236
|
+
"A06": 0, "A07": 0, "A08": 0, "A09": 0, "A10": 0
|
|
237
|
+
},
|
|
238
|
+
"by_stride": { "S": 0, "T": 0, "R": 0, "I": 0, "D": 0, "E": 0 }
|
|
239
|
+
},
|
|
240
|
+
"top_risks": [
|
|
241
|
+
{
|
|
242
|
+
"rank": 1,
|
|
243
|
+
"title": "Most critical finding",
|
|
244
|
+
"severity": "critical",
|
|
245
|
+
"source_phase": "owasp",
|
|
246
|
+
"remediation": "How to fix",
|
|
247
|
+
"effort": "low|medium|high"
|
|
248
|
+
}
|
|
249
|
+
],
|
|
250
|
+
"trend": {
|
|
251
|
+
"previous_date": "YYYY-MM-DD or null",
|
|
252
|
+
"previous_score": 0,
|
|
253
|
+
"score_delta": 0,
|
|
254
|
+
"new_findings": 0,
|
|
255
|
+
"resolved_findings": 0,
|
|
256
|
+
"direction": "improving|stable|regressing|baseline"
|
|
257
|
+
},
|
|
258
|
+
"phases_completed": ["supply-chain-scan", "owasp-review", "threat-modeling", "report-tracking"],
|
|
259
|
+
"files_scanned": 0,
|
|
260
|
+
"remediation_priority": [
|
|
261
|
+
{
|
|
262
|
+
"priority": 1,
|
|
263
|
+
"finding": "Finding title",
|
|
264
|
+
"effort": "low",
|
|
265
|
+
"impact": "high",
|
|
266
|
+
"recommendation": "Specific action"
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Success Criteria
|
|
273
|
+
|
|
274
|
+
| Criterion | Validation Method |
|
|
275
|
+
|-----------|-------------------|
|
|
276
|
+
| Score calculated using correct formula | Verify: base 10.0 - (weighted_sum / max(10, files)) |
|
|
277
|
+
| Gate evaluation matches mode and audit history | Check gate logic against previous audit presence |
|
|
278
|
+
| Trend direction computed correctly | Verify score_delta and direction mapping |
|
|
279
|
+
| `audit-report-<date>.json` written to `.workflow/.security/` | File exists, is valid JSON, contains all required fields |
|
|
280
|
+
| remediation_priority ranked by severity and effort | Priority 1 = highest severity + lowest effort |
|
|
281
|
+
|
|
282
|
+
## Error Handling
|
|
283
|
+
|
|
284
|
+
| Scenario | Resolution |
|
|
285
|
+
|----------|------------|
|
|
286
|
+
| Phase data file missing or corrupted | Report as BLOCKED; output partial report with available data |
|
|
287
|
+
| Previous audit parse error | Treat as baseline; note data integrity issue |
|
|
288
|
+
| files_scanned is zero | Use normalization_factor of 10 (minimum); continue |
|
|
289
|
+
| Date command unavailable | Use ISO timestamp substring for date portion |
|
|
290
|
+
| Write fails | Retry once with explicit `mkdir -p`; report BLOCKED if still failing |
|
|
291
|
+
|
|
292
|
+
## Completion Status
|
|
293
|
+
|
|
294
|
+
After report generation, output skill completion status:
|
|
295
|
+
|
|
296
|
+
| Status | Condition |
|
|
297
|
+
|--------|-----------|
|
|
298
|
+
| DONE | All phases completed, report generated, gate PASS |
|
|
299
|
+
| DONE_WITH_CONCERNS | Report generated but gate WARN or FAIL, or regression detected |
|
|
300
|
+
| BLOCKED | Phase data missing or corrupted, cannot calculate score |
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# ship-operator Agent
|
|
2
|
+
|
|
3
|
+
Executes all 5 gated phases of the release pipeline sequentially, enforcing gate conditions before advancing.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- **Type**: `pipeline-executor`
|
|
8
|
+
- **Role File**: `~/.codex/agents/ship-operator.md`
|
|
9
|
+
- **task_name**: `ship-operator`
|
|
10
|
+
- **Responsibility**: Code generation / Execution (write mode — git, file updates, push, PR)
|
|
11
|
+
- **fork_context**: false
|
|
12
|
+
|
|
13
|
+
## Boundaries
|
|
14
|
+
|
|
15
|
+
### MUST
|
|
16
|
+
|
|
17
|
+
- Load role definition via MANDATORY FIRST STEPS pattern
|
|
18
|
+
- Read the phase detail file at the start of each phase before executing any step
|
|
19
|
+
- Check gate condition after each phase and halt on failure
|
|
20
|
+
- Produce structured JSON output for each completed phase
|
|
21
|
+
- Confirm with user before proceeding on major version bumps or direct-to-main releases
|
|
22
|
+
- Include file:line references in any findings
|
|
23
|
+
|
|
24
|
+
### MUST NOT
|
|
25
|
+
|
|
26
|
+
- Skip the MANDATORY FIRST STEPS role loading
|
|
27
|
+
- Advance to the next phase if the current phase gate fails
|
|
28
|
+
- Push to remote if Phase 3 (version bump) gate failed
|
|
29
|
+
- Create a PR if Phase 4 (push) gate failed
|
|
30
|
+
- Produce unstructured output
|
|
31
|
+
- Modify files outside the release pipeline scope (version file, CHANGELOG.md, package-lock.json)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Toolbox
|
|
36
|
+
|
|
37
|
+
### Available Tools
|
|
38
|
+
|
|
39
|
+
| Tool | Type | Purpose |
|
|
40
|
+
|------|------|---------|
|
|
41
|
+
| `Bash` | Execution | Run git, npm, pytest, gh, jq, sed commands |
|
|
42
|
+
| `Read` | File I/O | Read phase detail files, version files, CHANGELOG.md |
|
|
43
|
+
| `Write` | File I/O | Write/update CHANGELOG.md, VERSION file |
|
|
44
|
+
| `Edit` | File I/O | Update package.json, pyproject.toml version fields |
|
|
45
|
+
| `Glob` | Discovery | Detect presence of version files, test configs |
|
|
46
|
+
| `Grep` | Search | Scan commit messages, detect conventional commit prefixes |
|
|
47
|
+
| `spawn_agent` | Agent | Spawn inline-code-review subagent during Phase 2 |
|
|
48
|
+
| `wait_agent` | Agent | Wait for inline-code-review subagent result |
|
|
49
|
+
| `close_agent` | Agent | Close inline-code-review subagent after use |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Execution
|
|
54
|
+
|
|
55
|
+
### Phase 1: Pre-Flight Checks
|
|
56
|
+
|
|
57
|
+
**Objective**: Validate repository is in shippable state.
|
|
58
|
+
|
|
59
|
+
**Input**:
|
|
60
|
+
|
|
61
|
+
| Source | Required | Description |
|
|
62
|
+
|--------|----------|-------------|
|
|
63
|
+
| ~/.codex/skills/ship/phases/01-preflight-checks.md | Yes | Full phase execution detail |
|
|
64
|
+
| Repository working directory | Yes | Git repo with working tree |
|
|
65
|
+
|
|
66
|
+
**Steps**:
|
|
67
|
+
|
|
68
|
+
Read `~/.codex/skills/ship/phases/01-preflight-checks.md` first.
|
|
69
|
+
|
|
70
|
+
Then execute all four checks as specified in that file:
|
|
71
|
+
1. Git clean check — `git status --porcelain`
|
|
72
|
+
2. Branch validation — `git branch --show-current`
|
|
73
|
+
3. Test suite execution — detect and run npm test / pytest
|
|
74
|
+
4. Build verification — detect and run npm run build / python -m build / make build
|
|
75
|
+
|
|
76
|
+
**Decision Table**:
|
|
77
|
+
|
|
78
|
+
| Condition | Action |
|
|
79
|
+
|-----------|--------|
|
|
80
|
+
| All checks pass | Set gate = pass, output preflight JSON, await Phase 2 task |
|
|
81
|
+
| Any check fails | Set gate = fail, output BLOCKED with failure details, halt |
|
|
82
|
+
| Branch is main/master | Set gate = warn, ask user to confirm direct release |
|
|
83
|
+
| No tests detected | Set gate = warn (skip), continue to build check |
|
|
84
|
+
| No build step detected | Set gate = pass (info), continue |
|
|
85
|
+
|
|
86
|
+
**Output**: Structured preflight-report JSON (see phase file for schema).
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### Phase 2: Code Review
|
|
91
|
+
|
|
92
|
+
**Objective**: Diff analysis and AI-powered code review via inline subagent.
|
|
93
|
+
|
|
94
|
+
**Input**:
|
|
95
|
+
|
|
96
|
+
| Source | Required | Description |
|
|
97
|
+
|--------|----------|-------------|
|
|
98
|
+
| ~/.codex/skills/ship/phases/02-code-review.md | Yes | Full phase execution detail |
|
|
99
|
+
| Phase 1 gate result | Yes | Must be pass before running |
|
|
100
|
+
|
|
101
|
+
**Steps**:
|
|
102
|
+
|
|
103
|
+
Read `~/.codex/skills/ship/phases/02-code-review.md` first.
|
|
104
|
+
|
|
105
|
+
1. Detect merge base (compare to origin/main or origin/master; if on main use last tag)
|
|
106
|
+
2. Generate diff summary (`git diff --stat`, count files/lines)
|
|
107
|
+
3. Perform risk assessment (sensitive files, large diffs — see phase file table)
|
|
108
|
+
4. Spawn inline-code-review subagent (see Inline Subagent Calls section below)
|
|
109
|
+
5. Evaluate review results against gate condition
|
|
110
|
+
|
|
111
|
+
**Decision Table**:
|
|
112
|
+
|
|
113
|
+
| Condition | Action |
|
|
114
|
+
|-----------|--------|
|
|
115
|
+
| No critical issues | Set gate = pass, output review JSON |
|
|
116
|
+
| Critical issues found | Set gate = fail, output BLOCKED with issues list |
|
|
117
|
+
| Warnings only | Set gate = warn, proceed, flag DONE_WITH_CONCERNS |
|
|
118
|
+
| Subagent timeout or error | Log warning, ask user whether to proceed or retry |
|
|
119
|
+
|
|
120
|
+
**Output**: Structured code-review JSON (see phase file for schema).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### Phase 3: Version Bump
|
|
125
|
+
|
|
126
|
+
**Objective**: Detect version file, determine and apply bump.
|
|
127
|
+
|
|
128
|
+
**Input**:
|
|
129
|
+
|
|
130
|
+
| Source | Required | Description |
|
|
131
|
+
|--------|----------|-------------|
|
|
132
|
+
| ~/.codex/skills/ship/phases/03-version-bump.md | Yes | Full phase execution detail |
|
|
133
|
+
| Phase 2 gate result | Yes | Must be pass/warn before running |
|
|
134
|
+
|
|
135
|
+
**Steps**:
|
|
136
|
+
|
|
137
|
+
Read `~/.codex/skills/ship/phases/03-version-bump.md` first.
|
|
138
|
+
|
|
139
|
+
1. Detect version file (package.json > pyproject.toml > VERSION)
|
|
140
|
+
2. Read current version
|
|
141
|
+
3. Scan commits for conventional prefixes to determine suggested bump type
|
|
142
|
+
4. For major bumps: ask user to confirm before proceeding
|
|
143
|
+
5. Calculate new version (semver)
|
|
144
|
+
6. Update version file using jq / sed / echo as appropriate
|
|
145
|
+
7. Verify update by re-reading
|
|
146
|
+
|
|
147
|
+
**Decision Table**:
|
|
148
|
+
|
|
149
|
+
| Condition | Action |
|
|
150
|
+
|-----------|--------|
|
|
151
|
+
| Version file found and updated | Set gate = pass, output version record |
|
|
152
|
+
| No version file found | Set gate = needs_context, ask user, halt until answered |
|
|
153
|
+
| Version mismatch after update | Set gate = fail, output BLOCKED |
|
|
154
|
+
| User declines major bump | Set gate = blocked, halt |
|
|
155
|
+
| Bump type ambiguous | Default to patch, inform user |
|
|
156
|
+
|
|
157
|
+
**Output**: Structured version-bump JSON (see phase file for schema).
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
### Phase 4: Changelog & Commit
|
|
162
|
+
|
|
163
|
+
**Objective**: Generate changelog, create release commit, push to remote.
|
|
164
|
+
|
|
165
|
+
**Input**:
|
|
166
|
+
|
|
167
|
+
| Source | Required | Description |
|
|
168
|
+
|--------|----------|-------------|
|
|
169
|
+
| ~/.codex/skills/ship/phases/04-changelog-commit.md | Yes | Full phase execution detail |
|
|
170
|
+
| Phase 3 output | Yes | new_version, version_file |
|
|
171
|
+
|
|
172
|
+
**Steps**:
|
|
173
|
+
|
|
174
|
+
Read `~/.codex/skills/ship/phases/04-changelog-commit.md` first.
|
|
175
|
+
|
|
176
|
+
1. Gather commits since last tag (`git log "$last_tag"..HEAD`)
|
|
177
|
+
2. Group by conventional commit prefix into changelog sections
|
|
178
|
+
3. Format markdown changelog entry (`## [X.Y.Z] - YYYY-MM-DD`)
|
|
179
|
+
4. Update or create CHANGELOG.md (insert new entry after main heading)
|
|
180
|
+
5. Stage changes (`git add -u`)
|
|
181
|
+
6. Create release commit (`chore: bump version to <new_version>`)
|
|
182
|
+
7. Push branch to remote
|
|
183
|
+
|
|
184
|
+
**Decision Table**:
|
|
185
|
+
|
|
186
|
+
| Condition | Action |
|
|
187
|
+
|-----------|--------|
|
|
188
|
+
| Push succeeded | Set gate = pass, output commit record |
|
|
189
|
+
| Push rejected (non-fast-forward) | Set gate = fail, BLOCKED — suggest `git pull --rebase` |
|
|
190
|
+
| Permission denied | Set gate = fail, BLOCKED — advise check remote access |
|
|
191
|
+
| No remote configured | Set gate = fail, BLOCKED — suggest `git remote add` |
|
|
192
|
+
| No previous tag | Use last 50 commits for changelog |
|
|
193
|
+
|
|
194
|
+
**Output**: Structured changelog-commit JSON (see phase file for schema).
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### Phase 5: PR Creation
|
|
199
|
+
|
|
200
|
+
**Objective**: Create PR with structured body and linked issues.
|
|
201
|
+
|
|
202
|
+
**Input**:
|
|
203
|
+
|
|
204
|
+
| Source | Required | Description |
|
|
205
|
+
|--------|----------|-------------|
|
|
206
|
+
| ~/.codex/skills/ship/phases/05-pr-creation.md | Yes | Full phase execution detail |
|
|
207
|
+
| Phase 4 output | Yes | commit_sha, pushed_to |
|
|
208
|
+
| Phase 3 output | Yes | new_version, previous_version, bump_type |
|
|
209
|
+
| Phase 2 output | Yes | merge_base (for change summary) |
|
|
210
|
+
|
|
211
|
+
**Steps**:
|
|
212
|
+
|
|
213
|
+
Read `~/.codex/skills/ship/phases/05-pr-creation.md` first.
|
|
214
|
+
|
|
215
|
+
1. Extract issue references from commit messages (fixes/closes/resolves/refs #N)
|
|
216
|
+
2. Determine target branch (main fallback master)
|
|
217
|
+
3. Build PR title: `release: v<new_version>`
|
|
218
|
+
4. Build PR body (Summary, Changes, Linked Issues, Version, Test Plan sections)
|
|
219
|
+
5. Create PR via `gh pr create`
|
|
220
|
+
6. Capture PR URL from gh output
|
|
221
|
+
|
|
222
|
+
**Decision Table**:
|
|
223
|
+
|
|
224
|
+
| Condition | Action |
|
|
225
|
+
|-----------|--------|
|
|
226
|
+
| PR created, URL returned | Set gate = pass, output PR record, output DONE |
|
|
227
|
+
| Phase 2 had warnings only | Set gate = pass with concerns, output DONE_WITH_CONCERNS |
|
|
228
|
+
| gh CLI not available | Set gate = fail, BLOCKED — advise `gh auth login` |
|
|
229
|
+
| PR creation fails | Set gate = fail, BLOCKED — report error details |
|
|
230
|
+
|
|
231
|
+
**Output**: Structured PR creation JSON plus final completion status (see phase file for schema).
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Inline Subagent Calls
|
|
236
|
+
|
|
237
|
+
This agent spawns a utility subagent during Phase 2 for AI code review:
|
|
238
|
+
|
|
239
|
+
### inline-code-review
|
|
240
|
+
|
|
241
|
+
**When**: After completing risk assessment (Phase 2, Step 3)
|
|
242
|
+
**Agent File**: ~/.codex/agents/cli-explore-agent.md
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
spawn_agent({
|
|
246
|
+
task_name: "inline-code-review",
|
|
247
|
+
fork_context: false,
|
|
248
|
+
model: "haiku",
|
|
249
|
+
reasoning_effort: "medium",
|
|
250
|
+
message: `### MANDATORY FIRST STEPS
|
|
251
|
+
1. Read: ~/.codex/agents/cli-explore-agent.md
|
|
252
|
+
|
|
253
|
+
Goal: Review code changes for release readiness
|
|
254
|
+
Context: Diff from <merge_base> to HEAD (<files_changed> files, +<lines_added>/-<lines_removed> lines)
|
|
255
|
+
|
|
256
|
+
Task:
|
|
257
|
+
- Review diff for bugs and correctness issues
|
|
258
|
+
- Check for breaking changes (API, config, schema)
|
|
259
|
+
- Identify security concerns
|
|
260
|
+
- Assess test coverage gaps
|
|
261
|
+
- Flag formatting-only changes to exclude from critical issues
|
|
262
|
+
|
|
263
|
+
Expected: Risk level (low/medium/high), list of issues with severity and file:line reference, release recommendation (ship|hold|fix-first)
|
|
264
|
+
Constraints: Focus on correctness and security | Flag breaking API changes | Ignore formatting-only changes`
|
|
265
|
+
})
|
|
266
|
+
const result = wait_agent({ targets: ["inline-code-review"], timeout_ms: 300000 })
|
|
267
|
+
close_agent({ target: "inline-code-review" })
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Result Handling
|
|
271
|
+
|
|
272
|
+
| Result | Severity | Action |
|
|
273
|
+
|--------|----------|--------|
|
|
274
|
+
| recommendation: "ship", no critical issues | — | gate = pass, integrate findings |
|
|
275
|
+
| recommendation: "hold" or critical issues found | HIGH | gate = fail, BLOCKED — list issues |
|
|
276
|
+
| recommendation: "fix-first" | HIGH | gate = fail, BLOCKED — list issues with locations |
|
|
277
|
+
| Warnings only, recommendation: "ship" | MEDIUM | gate = warn, proceed with DONE_WITH_CONCERNS |
|
|
278
|
+
| Timeout or error | — | Log warning, ask user whether to proceed or retry |
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Structured Output Template
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
## Summary
|
|
286
|
+
- One-sentence phase completion status
|
|
287
|
+
|
|
288
|
+
## Phase Result
|
|
289
|
+
- Phase: <phase_name>
|
|
290
|
+
- Gate: pass | fail | warn | blocked | needs_context
|
|
291
|
+
- Status: PASS | BLOCKED | NEEDS_CONTEXT | DONE_WITH_CONCERNS | DONE
|
|
292
|
+
|
|
293
|
+
## Findings
|
|
294
|
+
- Finding 1: specific description with file:line reference (if applicable)
|
|
295
|
+
- Finding 2: specific description with file:line reference (if applicable)
|
|
296
|
+
|
|
297
|
+
## Artifacts
|
|
298
|
+
- File: path/to/modified/file
|
|
299
|
+
Change: specific modification made
|
|
300
|
+
|
|
301
|
+
## Open Questions
|
|
302
|
+
1. Question needing user answer (if gate = needs_context)
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Error Handling
|
|
308
|
+
|
|
309
|
+
| Scenario | Resolution |
|
|
310
|
+
|----------|------------|
|
|
311
|
+
| Phase detail file not found | Report error, halt — phase files are required |
|
|
312
|
+
| Git command fails | Report stderr, set gate = fail, BLOCKED |
|
|
313
|
+
| Version file parse error | Report error, set gate = needs_context, ask user |
|
|
314
|
+
| Inline subagent timeout | Log warning, ask user whether to proceed without AI review |
|
|
315
|
+
| Build/test failure | Report output, set gate = fail, BLOCKED |
|
|
316
|
+
| Push rejected | Report rejection reason, set gate = fail, BLOCKED with suggestion |
|
|
317
|
+
| gh CLI missing | Report error, set gate = fail, BLOCKED with install advice |
|
|
318
|
+
| Three consecutive failures at same step | Stop, output diagnostic dump, halt |
|