Releases & Mirroring
ContextUnity is developed in the monorepo. Open packages are mirrored to standalone GitHub repositories and published to PyPI per service, each with its own version.
Sync vs release
| Layer | Trigger | Result |
|---|---|---|
| Sync | push to main | Mirror changed packages to public repos with path-filtered commit messages |
| Release | per-service tag | CI gate → PyPI publish → GitHub Release in the mirror repo |
A single merge may touch several services. Release only the packages that are ready.
Mirror mapping
| Monorepo path | Mirror repo | PyPI package | Release tag |
|---|---|---|---|
packages/core/ | contextcore | contextunity-core | contextcore-v* |
services/brain/ | contextbrain | contextunity-brain | contextbrain-v* |
services/router/ | contextrouter | contextunity-router | contextrouter-v* |
services/worker/ | contextworker | contextunity-worker | contextworker-v* |
packages/cli/ | — | contextunity-cli | contextunity-cli-v* |
Mirror commit messages list only commits in the push that touched that service (and packages/core/ when the service depends on core).
Prefer conventional commits with scope: fix(router):, feat(brain):, fix(core):.
Release one service
- Bump
versionin the packagepyproject.toml. - Merge to
main(mirror runs after CI). - Tag and push:
git tag -a contextrouter-v0.20.1 -m "fix(router): federated skip handling"git push origin contextrouter-v0.20.1CI checks the tag against pyproject.toml, runs tests, publishes to PyPI, and opens v0.20.1 in the mirror repo.
Same merge, multiple releases
git tag -a contextrouter-v0.20.1 -m "fix(router): ..."git push origin contextrouter-v0.20.1
git tag -a contextbrain-v0.15.3 -m "feat(brain): ..."git push origin contextbrain-v0.15.3Both tags can point to the same commit.
Tag format
- Pattern:
<service-prefix>-v<semver>(e.g.contextrouter-v0.20.1) - Version must match the package
pyproject.toml - Use annotated tags (
-a) so the message becomes release notes