Release Operations¶
A release is an identity-preserving transition from a reviewed source candidate to reconciled public artifacts. A tag is credible only when source requirements, generated release policy, tested behavior, package inventory, compatibility notes, and every published identity resolve to that candidate.
Visible maintainer command ownership remains governed by
contracts/foundation/maintainer_command_surface.v1.json.
Release Workflow Rules¶
- only tag commits with green required gates
- use the workspace
rust-versionas the source-owned compiler requirement - require synchronized CI, release, and package-policy inputs to match the workspace before recommending a tag
- include compatibility notes for CLI and DAG changes
- ensure docs navigation and links are valid before publishing
- verify post-release health and rollback readiness
Generated workflow and release-policy files are managed by bijux-std. A
downstream mismatch is a release blocker to resolve upstream and refresh
through the governed standards process. Do not hand-edit synchronized files or
describe a failing alignment contract as release ready.
Current Publication Policy¶
Canonical package status and publish order are defined by
contracts/foundation/workspace_package_boundary.v1.json and
Package Boundary.
v0.4.0publishesbijux-clito crates.io and PyPI.v0.4.0publishes the DAG Rust crates to crates.io in dependency order:bijux-dag-core,bijux-dag-artifacts,bijux-dag-runtime,bijux-dag-app, andbijux-dag-cli.- GitHub Releases and GHCR publish two stamped release families: the
bijux-clidistribution bundle and thebijux-dagbinary tarball. bijux-dag-testkit,bijux-dev, andbijux-cli-pythonremain repository-internal support crates and are not published to crates.io.- The canonical repository for both products is
https://github.com/bijux/bijux-core.
Required Release Proof¶
| Control | Accepted evidence | Failure consequence |
|---|---|---|
| release validation | required gates and release suite pass from the clean candidate revision | candidate remains blocked |
| generated-policy alignment | toolchain, package allowlist, build matrices, and shared standard match repository ownership | refresh the governed source before tagging |
| compatibility and docs review | public behavior changes, migration needs, and release lanes are explicit | release claim is incomplete |
| tag creation | immutable tag resolves to the reviewed candidate commit | stop publication and repair identity |
| publication | each registry, release asset, and image reports the expected version, checksum, or digest | enter partial-publication reconciliation |
| post-release monitoring | packages, assets, images, docs, and health checks agree with the publication inventory | contain the incident and reconcile or supersede |
stateDiagram-v2
[*] --> Candidate
Candidate --> Validated: required gates and release validation pass
Candidate --> Blocked: any required proof fails or is missing
Validated --> Reviewed: compatibility, docs, inventory, and owners agree
Reviewed --> Tagged: immutable source identity created
Tagged --> Published: required packages and assets uploaded
Published --> Reconciled: registries, images, docs, and checks agree
Published --> Rollback: identity, health, or inventory mismatch
Reconciled --> [*]
Blocked --> Candidate: owner repairs source or governed input
Rollback --> Candidate: incident contained and new candidate prepared
There is no valid transition from Candidate directly to Tagged or
Published. An upload that bypasses validation and review is an incident to
reconcile or roll back, not a release success.
Partial Publication Reconciliation¶
| Observed state | Safe action |
|---|---|
| no external destination accepted an artifact | repair the candidate and restart only after release validation |
| one or more registries accepted immutable artifacts | freeze further mutation, record accepted identities, and classify every remaining destination |
| tag identity differs from an accepted package or asset | treat the release as compromised; do not overwrite or reuse the version |
| packages agree but image, release assets, or docs differ | preserve accepted identities, repair the missing surface from the same candidate when policy permits, then reconcile again |
| credentials or provenance may be compromised | revoke credentials, preserve audit evidence, and follow incident response before any retry |
Independent registries do not provide an atomic transaction. A retry is safe only after the accepted external state is known and the remaining operation cannot overwrite, contradict, or detach artifacts from the reviewed identity.
Preflight Checklist¶
- required release-lane tests and maintainer verification commands are green
- release ownership contracts confirm the synchronized Rust toolchain, publishable package allowlist, and CLI/DAG build matrices match repository policy
make release-validate-rsis green before any release recommendationmake test-release-rsis green before any release recommendationmake test-all-rsis green whenever DAG experimental or internal ignored coverage changed or ignored-test governance changedbijux-dev-cli maintenance ignored-dag-testsreportsintegrity_status: okwhenever ignored-test governance, quarantined portfolios, or source-level DAG test helpers changed- compatibility notes are prepared for changed public behavior
- documentation tree and MkDocs navigation are synchronized
- the candidate worktree is clean and every cited result identifies its full source commit
- release owner and rollback owner are explicitly assigned
Postflight Checklist¶
- published artifacts match tagged commit identity
- package registries, GitHub release assets, images, and deployed docs are reconciled against the expected publication inventory
- docs site builds and serves expected handbook routes
- no new unresolved failures in release-monitoring workflows
Postflight reconciliation must compare immutable identities, not names alone: the tag target, package checksums, image digest, release assets, and deployed documentation revision must all resolve to the reviewed candidate.
Standard Commands¶
make release-validate-rs
make test-release-rs
make test-all-rs
cargo run -q -p bijux-dev --bin bijux-dev-cli -- maintenance ignored-dag-tests
cargo run -q -p bijux-dev --bin bijux-dev-cli -- docs write-dag-cli-reference
cargo run -q -p bijux-dev --bin bijux-dev-cli -- quickcheck --format json --no-pretty
cargo run -q -p bijux-dev --bin bijux-dev-cli -- release verify
make docs-check
Release Validation Suite¶
Use Release Validation Suite for the canonical
release-candidate gate. That page owns the exact command inventory, execution
model, artifact outputs, and failure ownership for make release-validate-rs,
make gh-release-validate, and cargo run -q -p bijux-dev --bin bijux-dev-cli -- release verify.
At the release-operations level, the important rule is sequence: release validation happens before tag creation and before any publish command is trusted as release evidence.
Broken Sequence¶
If a tag, artifact, or release note gets ahead of release validation and compatibility review, the repository has already broken sequence even if the publish technically succeeds. The same is true when generated release policy does not match workspace ownership: a successful individual upload is not proof that the intended release family was validated or published.
Code Anchors¶
crates/bijux-dev/src/commands/cli_release_command.rscrates/bijux-dev/src/suites/release.rscrates/bijux-cli/tests/architecture/ownership/release_contracts.rscontracts/foundation/workspace_package_boundary.v1.json.github/standards/repo-config.manifest.json.github/workflows/