Skip to content

Git Workflow & Versioning

ChronosVector uses Git Flow with two long-lived branches:

BranchFromMerges toPurpose
mainProduction. Every commit is a tagged release.
developmainIntegration. All features merge here. Always buildable.
feat/<name>developdevelopNew functionality
fix/<name>developdevelopBug fixes
docs/<name>developdevelopDocumentation only
refactor/<name>developdevelopCode restructuring
perf/<name>developdevelopPerformance improvements
test/<name>developdevelopTest additions
release/vX.Y.Zdevelopmain + developRelease preparation
hotfix/vX.Y.Zmainmain + developCritical production fix

The prefix matches the conventional commit type:

feat/hnsw-temporal-decay
fix/delta-encoding-precision
docs/stochastic-analytics
perf/simd-cosine-avx512
release/v0.2.0
hotfix/v0.1.1

Every commit follows Conventional Commits. Enforced by:

  • Local: .githooks/commit-msg hook
  • CI: committed linter on PRs
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
TypeDescriptionVersion Bump
featNew functionalityMINOR
fixBug fixPATCH
perfPerformance improvementPATCH
docsDocumentation only
styleFormatting
refactorCode restructuring
testTest changes
buildBuild system, deps
ciCI configuration
choreMaintenance
revertRevert previous commit

Use the crate name without cvx- prefix:

feat(core): add TemporalPoint serialization
fix(index): correct HNSW entry point selection
perf(index): optimize cosine distance with pulp
test(storage): add proptest for key encoding
docs(api): update REST endpoint documentation
feat(core)!: change timestamp from i64 to u64
BREAKING CHANGE: TemporalPoint.timestamp is now u64.

Breaking changes bump MAJOR (or MINOR during 0.x).


Following SemVer 2.0.0. Currently in v0.x (pre-stable).

VersionLayerMilestone
v0.1.0L0-L1Core types, distance kernels, in-memory store
v0.2.0L2HNSW (snapshot kNN works)
v0.3.0L3RocksDB + delta encoding
v0.4.0L4Temporal index (ST-HNSW)
v0.5.0L5Concurrency + WAL
v0.6.0L6REST + gRPC API
v0.7.0L7-L7.5Analytics + interpretability + stochastic
v0.8.0L8PELT + BOCPD + regime detection
v0.9.0L9-L10Tiered storage + Neural ODE/SDE
v0.10.0L10.5-L11Temporal ML + index optimizations
v1.0.0L12Production-ready, stable API
  • MAJOR: breaking API changes (rare, deprecated first)
  • MINOR: new features, endpoints, analytics
  • PATCH: bug fixes, performance

Runs on every push to develop/main and all PRs:

JobTriggerWhat it checks
checkAll pushes + PRscargo fmt --check + cargo clippy
buildAfter check passescargo build + cargo test + cargo doc
docs-siteParallelStarlight site builds without errors
commitsPR onlyConventional commit format

Triggered by pushing a tag v*:

  1. Cross-compiles cvx-server for 3 targets
  2. Generates changelog via git-cliff from conventional commits
  3. Creates GitHub Release with binaries + changelog

On push to main when docs/** changes — builds Starlight site and deploys to GitHub Pages (when repository is public).


The release workflow is manual: create a release branch, bump version in Cargo.toml, update changelog, tag, push. This is fine for early development with few releases.

Future: Automated with release-plz (~v0.3.0+)

Section titled “Future: Automated with release-plz (~v0.3.0+)”

release-plz will automate the release cycle by analyzing conventional commits:

How it works:

  1. On every push to main, release-plz creates a Release PR with version bumps and changelog
  2. The PR accumulates changes until you decide to release
  3. Merge the Release PR — the only manual step
  4. release-plz creates the tag, which triggers the existing release workflow
ToolRust workspace supportCI-firstcrates.io publish
release-plzYes (dependency order)YesYes
release-please (Google)NoYesNo
semantic-releaseNoYesNo (Node.js)
cargo-releaseYesNo (CLI tool)Yes
WhenWhat
v0.1.0–v0.2.0Manual releases (learning the workflow)
~v0.3.0Add release-plz: automated Release PRs, version bumps, tags
~v1.0.0Enable crates.io publishing via release-plz
Post-v1.0.0Add maturin publish for PyPI

Binary releases only. Users download pre-built cvx-server.

PhaseChannelWhatWhen
2Docker (ghcr.io)Container image with cvx-serverAfter v0.6.0 (API ready)
3crates.ioRust crates (cvx-core → cvx-server, published leaf-first)After v1.0.0
4PyPIchronos-vector Python package (PyO3 + maturin)After v1.0.0
5conda-forgeConda package from PyPI sdistAfter PyPI publication

Dependencies must be published before dependents:

1. cvx-core (no workspace deps)
2. cvx-index (depends on cvx-core)
3. cvx-storage (depends on cvx-core)
4. cvx-analytics (depends on cvx-core, cvx-storage)
5. cvx-ingest (depends on cvx-core, cvx-index, cvx-storage)
6. cvx-query (depends on cvx-core, cvx-index, cvx-storage, cvx-analytics)
7. cvx-explain (depends on cvx-core, cvx-analytics, cvx-query, cvx-storage)
8. cvx-api (depends on cvx-core, cvx-query, cvx-ingest, cvx-explain)
9. cvx-server (depends on cvx-api)

Automated via cargo-release or release-plz in CI.

Terminal window
pip install chronos-vector

Provides:

  • CvxClient — REST/gRPC client
  • cvx.temporal_features() — differentiable features via tch-rs (PyTorch-compatible autograd)

Built with maturin, published on release tags.


Terminal window
# Clone and setup
git clone https://github.com/manucouto1/chronos-vector.git
cd chronos-vector
git checkout develop
# Enable commit hooks
git config core.hooksPath .githooks
# Verify everything works
cargo build --workspace
cargo test --workspace
cargo fmt --all --check
cargo clippy --workspace
# Docs site
cd docs && npm ci && npm run build