# Instructions for AI Agents
## What is This Codebase?
This is a Rust library that parses and manipulates [`.tool-versions` files](https://asdf-vm.com/manage/configuration.html),
with optional `serde` support.
## Build System
All the standard Cargo commands apply but with one important detail: make sure to add `--all-features` so that
both the default and optional features are built, tested, linted, and so on.
* `cargo build --all-features` to build
* `cargo nextest run --all-features` to run tests
* `cargo clippy --all-features` to lint
* `cargo fmt` to reformat
* `cargo publish` to publish the crate
Always run `cargo check --all-features` before making changes to verify the codebase compiles cleanly.
If compilation fails, investigate and fix compilation errors before proceeding with any modifications.
## Key Files
* `src/tool_versions.rs`: key functionality of the library
* Error types: `src/errors.rs`
## Test Suite Layout
* `tests/serde_tests.rs`: `serde` integration tests
* `tests/tool_versions_proptests.rs`: property-based tests
* `tests/tool_versions_tests.rs`: unit and integration tests
Use `cargo nextest run --profile default --all-features '--' --exact [test module name]` to run
all tests in a specific module.
### Property-based Tests
Property-based tests are written using [proptest](https://docs.rs/proptest/latest/proptest/).
## Rust Code Style
* Place `use` statements at the top of the module, never inside individual functions
* Avoid fully qualified type paths (e.g., `std::fmt::Display`) unless needed to resolve ambiguity
* Do not add inline tests (`#[cfg(test)]` modules) in `src/` files; place all tests in `tests/`
## Change Log
If asked to perform change log updates, consult and modify `ChangeLog.md` and stick to its
existing writing style.
## Git Commits
* Do not commit changes automatically without an explicit permission to do so
* Never add yourself as a git commit coauthor
* Never mention yourself in commit messages in any way (no "Generated by", no AI tool links, etc)