# Releasing The six crates published from this workspace use one version and must be released in dependency order. The filesystem server, terminal client, and public-API example set `publish = false` and are never uploaded. ## Preconditions 1. Work from a clean `master` whose `HEAD` matches `origin/master`. 2. Confirm the intended version in `[workspace.package]` and every internal requirement in `[workspace.dependencies]`. 3. Confirm ownership of all six names on crates.io. 4. Run the complete repository validation suite: ```console cargo fmt --all -- --check cargo check --workspace --all-targets cargo test --workspace --all-targets cargo test --workspace --doc cargo clippy --workspace --all-targets -- -D warnings RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps cargo run --package wip-public-api-example git diff --check ``` ## Publish order Before uploading anything, dry-run the exact public package set together. Cargo uses a temporary local registry for unpublished workspace dependencies during this check: ```console cargo publish --dry-run --workspace \ --exclude wip-fs-server \ --exclude wip-public-api-example \ --exclude wip-tui ``` Then dry-run and publish each layer before moving to a crate that depends on it: ```console cargo publish --dry-run --package wip-protocol cargo publish --package wip-protocol cargo publish --dry-run --package wip-interface-macros cargo publish --package wip-interface-macros ``` Wait until both versions are available from the crates.io index, then continue: ```console cargo publish --dry-run --package wip-interface cargo publish --package wip-interface cargo publish --dry-run --package wip-http cargo publish --package wip-http ``` After those versions are available from the index: ```console cargo publish --dry-run --package wip-host cargo publish --package wip-host cargo publish --dry-run --package wip-client cargo publish --package wip-client ``` Registry propagation can take time. A dependent dry-run reporting that a WIP crate is unavailable means the previous publish is not visible in the selected registry yet; do not bypass verification. ## Tag After all six uploads resolve successfully, tag the exact published commit and push the tag: ```console git tag -a v0.1.0 -m "release: 0.1.0" git push origin v0.1.0 ``` Do not move or recreate a published version or its tag. Prepare a new version for any subsequent correction.