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,121 @@
|
|
|
1
|
+
# Phase 1: Pre-Flight Checks
|
|
2
|
+
|
|
3
|
+
Validate that the repository is in a shippable state before proceeding with the release pipeline.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Confirm working tree is clean (no uncommitted changes)
|
|
8
|
+
- Validate current branch is appropriate for release
|
|
9
|
+
- Run test suite and confirm all tests pass
|
|
10
|
+
- Verify build succeeds
|
|
11
|
+
|
|
12
|
+
## Gate Condition
|
|
13
|
+
|
|
14
|
+
ALL four checks must pass. If any check fails, stop the pipeline and report BLOCKED status with the specific failure.
|
|
15
|
+
|
|
16
|
+
## Execution Steps
|
|
17
|
+
|
|
18
|
+
### Step 1: Git Clean Check
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git_status=$(git status --porcelain)
|
|
22
|
+
if [ -n "$git_status" ]; then
|
|
23
|
+
echo "FAIL: Working tree is dirty"
|
|
24
|
+
echo "$git_status"
|
|
25
|
+
# Gate: BLOCKED — commit or stash changes first
|
|
26
|
+
else
|
|
27
|
+
echo "PASS: Working tree is clean"
|
|
28
|
+
fi
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Pass condition**: `git status --porcelain` produces empty output.
|
|
32
|
+
**On failure**: Report dirty files and suggest `git stash` or `git commit`.
|
|
33
|
+
|
|
34
|
+
### Step 2: Branch Validation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
current_branch=$(git branch --show-current)
|
|
38
|
+
if [ "$current_branch" = "main" ] || [ "$current_branch" = "master" ]; then
|
|
39
|
+
echo "WARN: Currently on $current_branch — direct push to main/master is risky"
|
|
40
|
+
# Ask user for confirmation before proceeding
|
|
41
|
+
else
|
|
42
|
+
echo "PASS: On branch $current_branch"
|
|
43
|
+
fi
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Pass condition**: Not on main/master, OR user explicitly confirms direct-to-main release.
|
|
47
|
+
**On warning**: Ask user to confirm they intend to release from main/master directly.
|
|
48
|
+
|
|
49
|
+
### Step 3: Test Suite Execution
|
|
50
|
+
|
|
51
|
+
Detect and run the project's test suite:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Detection priority:
|
|
55
|
+
# 1. package.json with "test" script → npm test
|
|
56
|
+
# 2. pytest available and tests exist → pytest
|
|
57
|
+
# 3. No tests found → WARN and continue
|
|
58
|
+
|
|
59
|
+
if [ -f "package.json" ] && grep -q '"test"' package.json; then
|
|
60
|
+
npm test
|
|
61
|
+
elif command -v pytest &>/dev/null && [ -d "tests" -o -d "test" ]; then
|
|
62
|
+
pytest
|
|
63
|
+
elif [ -f "pyproject.toml" ] && grep -q 'pytest' pyproject.toml; then
|
|
64
|
+
pytest
|
|
65
|
+
else
|
|
66
|
+
echo "WARN: No test suite detected — skipping test check"
|
|
67
|
+
fi
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Pass condition**: Test command exits with code 0, or no tests detected (warn).
|
|
71
|
+
**On failure**: Report test failures and stop the pipeline.
|
|
72
|
+
|
|
73
|
+
### Step 4: Build Verification
|
|
74
|
+
|
|
75
|
+
Detect and run the project's build step:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Detection priority:
|
|
79
|
+
# 1. package.json with "build" script → npm run build
|
|
80
|
+
# 2. pyproject.toml → python -m build (if build module available)
|
|
81
|
+
# 3. Makefile with build target → make build
|
|
82
|
+
# 4. No build step → PASS (not all projects need a build)
|
|
83
|
+
|
|
84
|
+
if [ -f "package.json" ] && grep -q '"build"' package.json; then
|
|
85
|
+
npm run build
|
|
86
|
+
elif [ -f "pyproject.toml" ] && python -m build --help &>/dev/null; then
|
|
87
|
+
python -m build
|
|
88
|
+
elif [ -f "Makefile" ] && grep -q '^build:' Makefile; then
|
|
89
|
+
make build
|
|
90
|
+
else
|
|
91
|
+
echo "INFO: No build step detected — skipping build check"
|
|
92
|
+
fi
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Pass condition**: Build command exits with code 0, or no build step detected.
|
|
96
|
+
**On failure**: Report build errors and stop the pipeline.
|
|
97
|
+
|
|
98
|
+
## Output
|
|
99
|
+
|
|
100
|
+
- **Format**: JSON object with pass/fail per check
|
|
101
|
+
- **Structure**:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"phase": "preflight",
|
|
106
|
+
"timestamp": "ISO-8601",
|
|
107
|
+
"checks": {
|
|
108
|
+
"git_clean": { "status": "pass|fail", "details": "" },
|
|
109
|
+
"branch": { "status": "pass|warn", "current": "branch-name", "details": "" },
|
|
110
|
+
"tests": { "status": "pass|fail|skip", "details": "" },
|
|
111
|
+
"build": { "status": "pass|fail|skip", "details": "" }
|
|
112
|
+
},
|
|
113
|
+
"overall": "pass|fail",
|
|
114
|
+
"blockers": []
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Next Phase
|
|
119
|
+
|
|
120
|
+
If all checks pass, proceed to [Phase 2: Code Review](02-code-review.md).
|
|
121
|
+
If any check fails, report BLOCKED status with the preflight report.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Phase 2: Code Review
|
|
2
|
+
|
|
3
|
+
Automated AI-powered code review of changes since the base branch, with risk assessment.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Detect the merge base between current branch and target branch
|
|
8
|
+
- Generate diff for review
|
|
9
|
+
- Run AI-powered code review via CCW CLI
|
|
10
|
+
- Flag high-risk changes (large diffs, sensitive files, breaking changes)
|
|
11
|
+
|
|
12
|
+
## Gate Condition
|
|
13
|
+
|
|
14
|
+
No critical issues flagged by the review. Warnings are reported but do not block.
|
|
15
|
+
|
|
16
|
+
## Execution Steps
|
|
17
|
+
|
|
18
|
+
### Step 1: Detect Merge Base
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Determine target branch (default: main, fallback: master)
|
|
22
|
+
target_branch="main"
|
|
23
|
+
if ! git rev-parse --verify "origin/$target_branch" &>/dev/null; then
|
|
24
|
+
target_branch="master"
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Find merge base
|
|
28
|
+
merge_base=$(git merge-base "origin/$target_branch" HEAD)
|
|
29
|
+
echo "Merge base: $merge_base"
|
|
30
|
+
|
|
31
|
+
# If on main/master directly, compare against last tag
|
|
32
|
+
current_branch=$(git branch --show-current)
|
|
33
|
+
if [ "$current_branch" = "main" ] || [ "$current_branch" = "master" ]; then
|
|
34
|
+
last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
35
|
+
if [ -n "$last_tag" ]; then
|
|
36
|
+
merge_base="$last_tag"
|
|
37
|
+
echo "On main — using last tag as base: $last_tag"
|
|
38
|
+
else
|
|
39
|
+
# Use first commit if no tags exist
|
|
40
|
+
merge_base=$(git rev-list --max-parents=0 HEAD | head -1)
|
|
41
|
+
echo "No tags found — using initial commit as base"
|
|
42
|
+
fi
|
|
43
|
+
fi
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Step 2: Generate Diff Summary
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# File-level summary
|
|
50
|
+
git diff --stat "$merge_base"...HEAD
|
|
51
|
+
|
|
52
|
+
# Full diff for review
|
|
53
|
+
git diff "$merge_base"...HEAD > /tmp/ship-review-diff.txt
|
|
54
|
+
|
|
55
|
+
# Count changes for risk assessment
|
|
56
|
+
files_changed=$(git diff --name-only "$merge_base"...HEAD | wc -l)
|
|
57
|
+
lines_added=$(git diff --numstat "$merge_base"...HEAD | awk '{s+=$1} END {print s}')
|
|
58
|
+
lines_removed=$(git diff --numstat "$merge_base"...HEAD | awk '{s+=$2} END {print s}')
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Step 3: Risk Assessment
|
|
62
|
+
|
|
63
|
+
Flag high-risk indicators before AI review:
|
|
64
|
+
|
|
65
|
+
| Risk Factor | Threshold | Risk Level |
|
|
66
|
+
|-------------|-----------|------------|
|
|
67
|
+
| Files changed | > 50 | High |
|
|
68
|
+
| Lines changed | > 1000 | High |
|
|
69
|
+
| Sensitive files modified | Any of: `.env*`, `*secret*`, `*credential*`, `*auth*`, `*.key`, `*.pem` | High |
|
|
70
|
+
| Config files modified | `package.json`, `pyproject.toml`, `tsconfig.json`, `Dockerfile` | Medium |
|
|
71
|
+
| Migration files | `*migration*`, `*migrate*` | Medium |
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Check for sensitive file changes
|
|
75
|
+
sensitive_files=$(git diff --name-only "$merge_base"...HEAD | grep -iE '\.(env|key|pem)|secret|credential' || true)
|
|
76
|
+
if [ -n "$sensitive_files" ]; then
|
|
77
|
+
echo "HIGH RISK: Sensitive files modified:"
|
|
78
|
+
echo "$sensitive_files"
|
|
79
|
+
fi
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Step 4: AI Code Review
|
|
83
|
+
|
|
84
|
+
Use CCW CLI for automated analysis:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
ccw cli -p "PURPOSE: Review code changes for release readiness; success = all critical issues identified with file:line references
|
|
88
|
+
TASK: Review diff for bugs | Check for breaking changes | Identify security concerns | Assess test coverage gaps
|
|
89
|
+
MODE: analysis
|
|
90
|
+
CONTEXT: @**/* | Reviewing diff from $merge_base to HEAD ($files_changed files, +$lines_added/-$lines_removed lines)
|
|
91
|
+
EXPECTED: Risk assessment (low/medium/high), list of issues with severity and file:line, release recommendation (ship/hold/fix-first)
|
|
92
|
+
CONSTRAINTS: Focus on correctness and security | Flag breaking API changes | Ignore formatting-only changes
|
|
93
|
+
" --tool gemini --mode analysis
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Note**: Wait for the CLI analysis to complete before proceeding. Do not proceed to Phase 3 while review is running.
|
|
97
|
+
|
|
98
|
+
### Step 5: Evaluate Review Results
|
|
99
|
+
|
|
100
|
+
Based on the AI review output:
|
|
101
|
+
|
|
102
|
+
| Review Result | Action |
|
|
103
|
+
|---------------|--------|
|
|
104
|
+
| No critical issues | Proceed to Phase 3 |
|
|
105
|
+
| Critical issues found | Report BLOCKED, list issues |
|
|
106
|
+
| Warnings only | Proceed with DONE_WITH_CONCERNS note |
|
|
107
|
+
| Review failed/timeout | Ask user whether to proceed or retry |
|
|
108
|
+
|
|
109
|
+
## Output
|
|
110
|
+
|
|
111
|
+
- **Format**: Review summary with risk assessment
|
|
112
|
+
- **Structure**:
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"phase": "code-review",
|
|
117
|
+
"merge_base": "commit-sha",
|
|
118
|
+
"stats": {
|
|
119
|
+
"files_changed": 0,
|
|
120
|
+
"lines_added": 0,
|
|
121
|
+
"lines_removed": 0
|
|
122
|
+
},
|
|
123
|
+
"risk_level": "low|medium|high",
|
|
124
|
+
"risk_factors": [],
|
|
125
|
+
"ai_review": {
|
|
126
|
+
"recommendation": "ship|hold|fix-first",
|
|
127
|
+
"critical_issues": [],
|
|
128
|
+
"warnings": []
|
|
129
|
+
},
|
|
130
|
+
"overall": "pass|fail|warn"
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Next Phase
|
|
135
|
+
|
|
136
|
+
If review passes (no critical issues), proceed to [Phase 3: Version Bump](03-version-bump.md).
|
|
137
|
+
If critical issues found, report BLOCKED status with review summary.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Phase 3: Version Bump
|
|
2
|
+
|
|
3
|
+
Detect the current version, determine the bump type, and update the version file.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Detect which version file the project uses
|
|
8
|
+
- Read the current version
|
|
9
|
+
- Determine bump type (patch/minor/major) from commit messages or user input
|
|
10
|
+
- Update the version file
|
|
11
|
+
- Record the version change
|
|
12
|
+
|
|
13
|
+
## Gate Condition
|
|
14
|
+
|
|
15
|
+
Version file updated successfully with the new version.
|
|
16
|
+
|
|
17
|
+
## Execution Steps
|
|
18
|
+
|
|
19
|
+
### Step 1: Detect Version File
|
|
20
|
+
|
|
21
|
+
Detection priority order:
|
|
22
|
+
|
|
23
|
+
| Priority | File | Read Method |
|
|
24
|
+
|----------|------|-------------|
|
|
25
|
+
| 1 | `package.json` | `jq -r .version package.json` |
|
|
26
|
+
| 2 | `pyproject.toml` | `grep -oP 'version\s*=\s*"\K[^"]+' pyproject.toml` |
|
|
27
|
+
| 3 | `VERSION` | `cat VERSION` |
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
if [ -f "package.json" ]; then
|
|
31
|
+
version_file="package.json"
|
|
32
|
+
current_version=$(node -p "require('./package.json').version" 2>/dev/null || jq -r .version package.json)
|
|
33
|
+
elif [ -f "pyproject.toml" ]; then
|
|
34
|
+
version_file="pyproject.toml"
|
|
35
|
+
current_version=$(grep -oP 'version\s*=\s*"\K[^"]+' pyproject.toml | head -1)
|
|
36
|
+
elif [ -f "VERSION" ]; then
|
|
37
|
+
version_file="VERSION"
|
|
38
|
+
current_version=$(cat VERSION | tr -d '[:space:]')
|
|
39
|
+
else
|
|
40
|
+
echo "NEEDS_CONTEXT: No version file found"
|
|
41
|
+
echo "Expected one of: package.json, pyproject.toml, VERSION"
|
|
42
|
+
# Ask user which file to use or create
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
echo "Version file: $version_file"
|
|
46
|
+
echo "Current version: $current_version"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Step 2: Determine Bump Type
|
|
50
|
+
|
|
51
|
+
**Auto-detection from commit messages** (conventional commits):
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Get commits since last tag
|
|
55
|
+
last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
56
|
+
if [ -n "$last_tag" ]; then
|
|
57
|
+
commits=$(git log "$last_tag"..HEAD --oneline)
|
|
58
|
+
else
|
|
59
|
+
commits=$(git log --oneline -20)
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Scan for conventional commit prefixes
|
|
63
|
+
has_breaking=$(echo "$commits" | grep -iE '(BREAKING CHANGE|!:)' || true)
|
|
64
|
+
has_feat=$(echo "$commits" | grep -iE '^[a-f0-9]+ feat' || true)
|
|
65
|
+
has_fix=$(echo "$commits" | grep -iE '^[a-f0-9]+ fix' || true)
|
|
66
|
+
|
|
67
|
+
if [ -n "$has_breaking" ]; then
|
|
68
|
+
suggested_bump="major"
|
|
69
|
+
elif [ -n "$has_feat" ]; then
|
|
70
|
+
suggested_bump="minor"
|
|
71
|
+
else
|
|
72
|
+
suggested_bump="patch"
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
echo "Suggested bump: $suggested_bump"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**User confirmation**:
|
|
79
|
+
- For `patch` and `minor`: proceed with suggested bump, inform user
|
|
80
|
+
- For `major`: always ask user to confirm before proceeding (major bumps have significant implications)
|
|
81
|
+
- User can override the suggestion with an explicit bump type
|
|
82
|
+
|
|
83
|
+
### Step 3: Calculate New Version
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Parse semver components
|
|
87
|
+
IFS='.' read -r major minor patch <<< "$current_version"
|
|
88
|
+
|
|
89
|
+
case "$bump_type" in
|
|
90
|
+
major)
|
|
91
|
+
new_version="$((major + 1)).0.0"
|
|
92
|
+
;;
|
|
93
|
+
minor)
|
|
94
|
+
new_version="${major}.$((minor + 1)).0"
|
|
95
|
+
;;
|
|
96
|
+
patch)
|
|
97
|
+
new_version="${major}.${minor}.$((patch + 1))"
|
|
98
|
+
;;
|
|
99
|
+
esac
|
|
100
|
+
|
|
101
|
+
echo "Version bump: $current_version -> $new_version"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Step 4: Update Version File
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
case "$version_file" in
|
|
108
|
+
package.json)
|
|
109
|
+
# Use node/jq for safe JSON update
|
|
110
|
+
jq --arg v "$new_version" '.version = $v' package.json > tmp.json && mv tmp.json package.json
|
|
111
|
+
# Also update package-lock.json if it exists
|
|
112
|
+
if [ -f "package-lock.json" ]; then
|
|
113
|
+
jq --arg v "$new_version" '.version = $v | .packages[""].version = $v' package-lock.json > tmp.json && mv tmp.json package-lock.json
|
|
114
|
+
fi
|
|
115
|
+
;;
|
|
116
|
+
pyproject.toml)
|
|
117
|
+
# Use sed for TOML update (version line in [project] or [tool.poetry])
|
|
118
|
+
sed -i "s/^version\s*=\s*\".*\"/version = \"$new_version\"/" pyproject.toml
|
|
119
|
+
;;
|
|
120
|
+
VERSION)
|
|
121
|
+
echo "$new_version" > VERSION
|
|
122
|
+
;;
|
|
123
|
+
esac
|
|
124
|
+
|
|
125
|
+
echo "Updated $version_file: $current_version -> $new_version"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 5: Verify Update
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Re-read to confirm
|
|
132
|
+
case "$version_file" in
|
|
133
|
+
package.json)
|
|
134
|
+
verified=$(node -p "require('./package.json').version" 2>/dev/null || jq -r .version package.json)
|
|
135
|
+
;;
|
|
136
|
+
pyproject.toml)
|
|
137
|
+
verified=$(grep -oP 'version\s*=\s*"\K[^"]+' pyproject.toml | head -1)
|
|
138
|
+
;;
|
|
139
|
+
VERSION)
|
|
140
|
+
verified=$(cat VERSION | tr -d '[:space:]')
|
|
141
|
+
;;
|
|
142
|
+
esac
|
|
143
|
+
|
|
144
|
+
if [ "$verified" = "$new_version" ]; then
|
|
145
|
+
echo "PASS: Version verified as $new_version"
|
|
146
|
+
else
|
|
147
|
+
echo "FAIL: Version mismatch — expected $new_version, got $verified"
|
|
148
|
+
fi
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Output
|
|
152
|
+
|
|
153
|
+
- **Format**: Version change record
|
|
154
|
+
- **Structure**:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"phase": "version-bump",
|
|
159
|
+
"version_file": "package.json",
|
|
160
|
+
"previous_version": "1.2.3",
|
|
161
|
+
"new_version": "1.3.0",
|
|
162
|
+
"bump_type": "minor",
|
|
163
|
+
"bump_source": "auto-detected|user-specified",
|
|
164
|
+
"overall": "pass|fail"
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Next Phase
|
|
169
|
+
|
|
170
|
+
If version updated successfully, proceed to [Phase 4: Changelog & Commit](04-changelog-commit.md).
|
|
171
|
+
If version update fails, report BLOCKED status.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Phase 4: Changelog & Commit
|
|
2
|
+
|
|
3
|
+
Generate changelog entry from git history, update CHANGELOG.md, create release commit, and push to remote.
|
|
4
|
+
|
|
5
|
+
## Objective
|
|
6
|
+
|
|
7
|
+
- Parse git log since last tag into grouped changelog entry
|
|
8
|
+
- Update or create CHANGELOG.md
|
|
9
|
+
- Create a release commit with version in the message
|
|
10
|
+
- Push the branch to remote
|
|
11
|
+
|
|
12
|
+
## Gate Condition
|
|
13
|
+
|
|
14
|
+
Release commit created and pushed to remote successfully.
|
|
15
|
+
|
|
16
|
+
## Execution Steps
|
|
17
|
+
|
|
18
|
+
### Step 1: Gather Commits Since Last Tag
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
22
|
+
|
|
23
|
+
if [ -n "$last_tag" ]; then
|
|
24
|
+
echo "Generating changelog since tag: $last_tag"
|
|
25
|
+
git log "$last_tag"..HEAD --pretty=format:"%h %s" --no-merges
|
|
26
|
+
else
|
|
27
|
+
echo "No previous tag found — using last 50 commits"
|
|
28
|
+
git log --pretty=format:"%h %s" --no-merges -50
|
|
29
|
+
fi
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 2: Group Commits by Conventional Commit Type
|
|
33
|
+
|
|
34
|
+
Parse commit messages and group into categories:
|
|
35
|
+
|
|
36
|
+
| Prefix | Category | Changelog Section |
|
|
37
|
+
|--------|----------|-------------------|
|
|
38
|
+
| `feat:` / `feat(*):`| Features | **Features** |
|
|
39
|
+
| `fix:` / `fix(*):`| Bug Fixes | **Bug Fixes** |
|
|
40
|
+
| `perf:` | Performance | **Performance** |
|
|
41
|
+
| `docs:` | Documentation | **Documentation** |
|
|
42
|
+
| `refactor:` | Refactoring | **Refactoring** |
|
|
43
|
+
| `chore:` | Maintenance | **Maintenance** |
|
|
44
|
+
| `test:` | Testing | *(omitted from changelog)* |
|
|
45
|
+
| Other | Miscellaneous | **Other Changes** |
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Example grouping logic (executed by the agent, not a literal script):
|
|
49
|
+
# 1. Read all commits since last tag
|
|
50
|
+
# 2. Parse prefix from each commit message
|
|
51
|
+
# 3. Group into categories
|
|
52
|
+
# 4. Format as markdown sections
|
|
53
|
+
# 5. Omit empty categories
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Step 3: Format Changelog Entry
|
|
57
|
+
|
|
58
|
+
Generate a markdown changelog entry:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
## [X.Y.Z] - YYYY-MM-DD
|
|
62
|
+
|
|
63
|
+
### Features
|
|
64
|
+
- feat: description (sha)
|
|
65
|
+
- feat(scope): description (sha)
|
|
66
|
+
|
|
67
|
+
### Bug Fixes
|
|
68
|
+
- fix: description (sha)
|
|
69
|
+
|
|
70
|
+
### Performance
|
|
71
|
+
- perf: description (sha)
|
|
72
|
+
|
|
73
|
+
### Other Changes
|
|
74
|
+
- chore: description (sha)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Rules:
|
|
78
|
+
- Date format: YYYY-MM-DD (ISO 8601)
|
|
79
|
+
- Each entry includes the short SHA for traceability
|
|
80
|
+
- Empty categories are omitted
|
|
81
|
+
- Entries are listed in chronological order within each category
|
|
82
|
+
|
|
83
|
+
### Step 4: Update CHANGELOG.md
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
if [ -f "CHANGELOG.md" ]; then
|
|
87
|
+
# Insert new entry after the first heading line (# Changelog)
|
|
88
|
+
# The new entry goes between the main heading and the previous version entry
|
|
89
|
+
# Use Write tool to insert the new section at the correct position
|
|
90
|
+
echo "Updating existing CHANGELOG.md"
|
|
91
|
+
else
|
|
92
|
+
# Create new CHANGELOG.md with header
|
|
93
|
+
echo "Creating new CHANGELOG.md"
|
|
94
|
+
fi
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**CHANGELOG.md structure**:
|
|
98
|
+
```markdown
|
|
99
|
+
# Changelog
|
|
100
|
+
|
|
101
|
+
## [X.Y.Z] - YYYY-MM-DD
|
|
102
|
+
(new entry here)
|
|
103
|
+
|
|
104
|
+
## [X.Y.Z-1] - YYYY-MM-DD
|
|
105
|
+
(previous entry)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Step 5: Create Release Commit
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Stage version file and changelog
|
|
112
|
+
git add package.json package-lock.json pyproject.toml VERSION CHANGELOG.md 2>/dev/null
|
|
113
|
+
|
|
114
|
+
# Only stage files that actually exist and are modified
|
|
115
|
+
git add -u
|
|
116
|
+
|
|
117
|
+
# Create release commit
|
|
118
|
+
git commit -m "$(cat <<'EOF'
|
|
119
|
+
chore: bump version to X.Y.Z
|
|
120
|
+
|
|
121
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
122
|
+
EOF
|
|
123
|
+
)"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Commit message format**: `chore: bump version to X.Y.Z`
|
|
127
|
+
- Follows conventional commit format
|
|
128
|
+
- Includes Co-Authored-By trailer
|
|
129
|
+
|
|
130
|
+
### Step 6: Push to Remote
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
current_branch=$(git branch --show-current)
|
|
134
|
+
|
|
135
|
+
# Check if remote tracking branch exists
|
|
136
|
+
if git rev-parse --verify "origin/$current_branch" &>/dev/null; then
|
|
137
|
+
git push origin "$current_branch"
|
|
138
|
+
else
|
|
139
|
+
git push -u origin "$current_branch"
|
|
140
|
+
fi
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**On push failure**:
|
|
144
|
+
- If rejected (non-fast-forward): Report BLOCKED, suggest `git pull --rebase`
|
|
145
|
+
- If permission denied: Report BLOCKED, check remote access
|
|
146
|
+
- If no remote configured: Report BLOCKED, suggest `git remote add`
|
|
147
|
+
|
|
148
|
+
## Output
|
|
149
|
+
|
|
150
|
+
- **Format**: Commit and push record
|
|
151
|
+
- **Structure**:
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"phase": "changelog-commit",
|
|
156
|
+
"changelog_entry": "## [X.Y.Z] - YYYY-MM-DD ...",
|
|
157
|
+
"commit_sha": "abc1234",
|
|
158
|
+
"commit_message": "chore: bump version to X.Y.Z",
|
|
159
|
+
"pushed_to": "origin/branch-name",
|
|
160
|
+
"overall": "pass|fail"
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Next Phase
|
|
165
|
+
|
|
166
|
+
If commit and push succeed, proceed to [Phase 5: PR Creation](05-pr-creation.md).
|
|
167
|
+
If push fails, report BLOCKED status with error details.
|