|
| 1 | +# Versioning and Release Policy |
| 2 | + |
| 3 | +## Goals |
| 4 | + |
| 5 | +- Define the first release (`v0.1.0`) with a clear scope. |
| 6 | +- Keep future version bumps planned and predictable. |
| 7 | +- Enforce one rule: if this iteration must bump version, the same commit/PR must include both version number changes and changelog updates. |
| 8 | + |
| 9 | +## Versioning Model |
| 10 | + |
| 11 | +This repo uses SemVer with a `v` tag prefix (`vMAJOR.MINOR.PATCH`): |
| 12 | + |
| 13 | +- `MAJOR`: incompatible public behavior changes. |
| 14 | +- `MINOR`: planned feature iteration (preferred during `0.x` stage). |
| 15 | +- `PATCH`: bugfixes, documentation, or small safe improvements. |
| 16 | + |
| 17 | +Current workspace version is `0.1.0` (from root `Cargo.toml` `[workspace.package].version`). |
| 18 | + |
| 19 | +## First Release Plan (`v0.1.0`) |
| 20 | + |
| 21 | +Release target: |
| 22 | +- Core CLI path is runnable (`rexos init`, `rexos agent run`). |
| 23 | +- Existing multi-provider routing and harness flow are stable enough for first external users. |
| 24 | +- GitHub Release binary workflow is available (tag-triggered). |
| 25 | + |
| 26 | +Release checklist: |
| 27 | +1. Run full test suite: `cargo test`. |
| 28 | +2. Confirm release packaging script works locally: |
| 29 | + `python3 scripts/package_release.py --version v0.1.0 --target local --bin target/release/rexos --out-dir dist` |
| 30 | +3. Ensure `CHANGELOG.md` contains a `0.1.0` section. |
| 31 | +4. Create and push tag: |
| 32 | + `git tag v0.1.0 && git push origin v0.1.0` |
| 33 | + |
| 34 | +## Mandatory Rule for Version-Bump Iterations |
| 35 | + |
| 36 | +When the maintainer explicitly says this iteration needs a version bump, the delivery must include all of the following in the same change set: |
| 37 | + |
| 38 | +1. Version number update: |
| 39 | + - Root `Cargo.toml` `[workspace.package].version` |
| 40 | + - Any docs/examples that include hardcoded version text |
| 41 | +2. Changelog update: |
| 42 | + - Add or update the target version section in `CHANGELOG.md` |
| 43 | + - Include concise notes for user-visible changes |
| 44 | + |
| 45 | +If either item is missing, iteration is not considered releasable. |
| 46 | + |
| 47 | +## Planned Iteration Workflow |
| 48 | + |
| 49 | +1. Confirm iteration scope and choose target version (`MINOR` or `PATCH`). |
| 50 | +2. Implement changes normally. |
| 51 | +3. If iteration is marked "needs version bump", update version + changelog together. |
| 52 | +4. Run verification (`cargo test`, plus release packaging smoke check when release-bound). |
| 53 | +5. Merge, then cut tag (`vX.Y.Z`). |
| 54 | + |
| 55 | +## Changelog Format |
| 56 | + |
| 57 | +`CHANGELOG.md` follows this structure: |
| 58 | + |
| 59 | +- `## [Unreleased]` |
| 60 | +- `## [X.Y.Z] - YYYY-MM-DD` |
| 61 | + - `### Added` |
| 62 | + - `### Changed` |
| 63 | + - `### Fixed` |
| 64 | + |
| 65 | +Only user-visible changes should be recorded. |
0 commit comments