Files
ci/opencode/ci/workflows/ship.md
T
CI e4bb3a9970 fix(P02): mandatory releases for every phase and milestone — correct versioning
---ci---
phase: 2
milestone: v0.2
status: execute
decisions:
  - id: D-016
    decision: Every ship creates a release — phases get patch, milestones get minor/major
    rationale: Releases are not optional. Every phase must be tagged and released. Milestone completion also gets a release. Major for schema changes, Minor for milestones, Patch for phases.
    confidence: 0.99
    alternatives: [optional releases, phase-only releases]
---/ci---

- ship.md: rewritten with mandatory release flow and versioning table (Major/Minor/Patch)
- run.md: COMPLETE stage now includes tag + release as mandatory steps
- branch-strategy.md: added Versioning and Releases section with merge→tag→release examples
2026-05-29 13:35:51 +00:00

3.8 KiB

description
description
Ship CI phase or milestone — test, tag, release. Every phase gets a patch release. Every milestone gets a minor (or major) release. Full autopilot.

CI Ship

Ship a CI phase or milestone. Every ship creates a release — no exceptions.

Versioning rule:

  • Major (X.0.0): Project-level refactor or schema changes
  • Minor (0.X.0): Every milestone completion
  • Patch (0.0.X): Every phase completion

Usage: ci-ship [phase_number|milestone]

Step 1: Pre-Flight

git log --max-count=10
git branch -a

Determine what is being shipped: a single phase (patch release) or an entire milestone (minor/major release).

Read .ci/ROADMAP.md to determine:

  • Current milestone version (e.g., v0.2)
  • Phase number within the milestone
  • Whether this is the last phase in the milestone

Read .ci/config.json for autonomy level.

Step 2: Run Tests

npm test
npm run typecheck
npm run build

If any fail: iterate autonomously until tests pass. Do NOT ask the user for guidance — debug and fix.

Step 3: Compute Version

Determine the release version from what is being shipped:

What's shipping Version bump Tag format Example
Single phase Patch vX.Y.Z v0.2.3 (3rd phase in milestone v0.2)
Milestone completion Minor vX.Y.0 v0.3.0 (milestone v0.3 complete)
Project refactor/schema change Major vX.0.0 v1.0.0 (breaking schema)

Count completed phases in the current milestone to determine the patch number. If this is the last phase in the milestone, the version bumps to minor instead of patch.

Step 4: Merge Branch

Phase ship (patch release)

git checkout main
git merge --squash phase/NN-slug
git commit -m "docs(P##): complete [phase-name] phase

---ci---
phase: [N]
milestone: [vX.Y]
status: complete
requirements:
  covered: [REQ-01, REQ-02]
  partial: []
---/ci---"

Milestone ship (minor/major release)

git checkout main
git merge --squash milestone/vX.Y-slug
git commit -m "docs(milestone): complete [milestone-name]

---ci---
phase: 0
milestone: [vX.Y]
status: complete
---/ci---"

Step 5: Tag and Push

git tag -a vX.Y.Z -m "vX.Y.Z: [phase-name or milestone-name]"
git push origin main --tags

Step 6: Create Release

Every ship creates a Gitea release. No exceptions.

Generate release notes from git log:

git log v[previous_tag]..vX.Y.Z --oneline

Create the release via Gitea API:

curl -X POST "https://git.cloudinit.dev/api/v1/repos/continuous-intelligence/ci/releases" \
  -H "Authorization: token $GITEA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"tag_name":"vX.Y.Z","name":"vX.Y.Z","body":"[release notes from git log]"}'

For milestone releases, include a summary of all phases completed and requirements covered.

Step 7: Update .ci/ Files

  • Update .ci/REQUIREMENTS.md — mark shipped requirements as complete
  • Update .ci/ROADMAP.md — mark shipped phase as complete

Commit the file updates.

Step 8: Report

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 CI ► SHIPPED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Phase [N]: [name]
Milestone: [vX.Y]
Version: vX.Y.Z
Release: https://git.cloudinit.dev/continuous-intelligence/ci/releases/tag/vX.Y.Z
Status: complete

Tests: PASS
Typecheck: PASS
Build: PASS

Requirements covered: [N]
Commits: [N]

[If milestone complete:]
All phases in milestone v0.2 complete. Milestone released.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━