Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Development

Branching And Releases

main is the stable release branch. Use dev for ongoing integration work. Create feature branches from dev and open pull requests back into dev.

When dev is ready to release, open a pull request from dev to main. Merging that pull request runs the version bump workflow, promotes CHANGELOG.md entries from [Unreleased], and creates the GitHub release. Add version:minor or version:major to the dev -> main pull request when the release should be larger than a patch bump.

The bump moves the version in Cargo.toml, Cargo.lock and pixi.toml together. Merge the release pull request with a merge commit rather than a squash, so dev and main do not diverge. The repository deletes merged head branches automatically; a Keep dev repository ruleset blocks deleting dev, so it survives the release merge.

Workspace Checks

Without ROS 2:

cargo check -p talos-common -p talos-cli -p talos-tui

With the ROS 2 Lyrical environment (provided by Pixi):

pixi install
pixi run check          # or: pixi shell, then cargo check --workspace

With QUIC:

cargo check --workspace --features quic

Tests

cargo test --workspace
cargo test -p talos-common
cargo test -p talos-agent --test integration
cargo test -p talos-agent --test integration --features quic
cargo test -p talos-agent --test bridge_live

bridge_live is the only test that exercises a real ROS 2 topic: it publishes on one and asserts the bridge forwards the message to the router. The integration tests drive the IPC protocol with synthetic responses, so they stay green even if the bridge delivers nothing. Run it inside the Pixi environment.

Lints

CI enforces both of these, so run them before pushing:

cargo fmt --all --check
cargo clippy --workspace --all-targets --features quic -- -D warnings

The talos-agent job builds and tests inside the Pixi ROS 2 environment on both x86-64 and aarch64 Linux runners.

Coverage

The Coverage workflow reports LCOV output for the non-ROS crates (talos-common, talos-cli, and talos-tui) with the quic feature enabled. Pull requests compare that coverage against the base branch and fail if line coverage decreases.

Install cargo-llvm-cov before running the local coverage command:

cargo install cargo-llvm-cov --locked

cargo llvm-cov -p talos-common -p talos-cli -p talos-tui \
  --features quic \
  --lcov \
  --output-path coverage/lcov.info

python3 .github/scripts/coverage_report.py summarize coverage/lcov.info

On machines without the Pixi environment, temporarily remove talos-agent from the workspace members before running non-ROS coverage; the CI workflow does this because these packages do not need ROS 2.

Rustdoc

Rustdoc is API reference and stays separate from this book:

cargo doc --workspace --no-deps

Use this mdBook for concepts, workflows, architecture, and contributor guidance. Use Rustdoc for item-level API details.

Changelog

User-facing code, behavior, documentation, CI, or configuration changes should be recorded under [Unreleased] in CHANGELOG.md.