## Summary
## Type of change
- [ ] Bug fix
- [ ] New feature
- [ ] Refactor / code quality
- [ ] Documentation
- [ ] CI / build
- [ ] Security fix
- [ ] Breaking change
## Checklist
### Code quality
- [ ] `cargo fmt --all` passes locally
- [ ] `cargo clippy --all-targets --all-features -- -D warnings` passes locally
- [ ] `cargo test --all-targets` passes locally (Linux + Windows if possible)
- [ ] No `unwrap()` / `expect()` in production paths - errors are propagated with `anyhow`
- [ ] No `unsafe` blocks (or justified with a comment if unavoidable)
### Shell integration
- [ ] If shell profile injection changed: verified idempotency (re-running `gvsn setup` is safe)
- [ ] If `inject_profile` / `remove_gvsn_lines` changed: existing tests updated
- [ ] If a new shell is added: all four implementations (bash, zsh, fish, powershell) updated
### Release impact
- [ ] Commit message follows [Conventional Commits](https://www.conventionalcommits.org/) so auto-versioning works correctly
- `feat:` → minor bump, `fix:`/`perf:` → patch bump, `feat!:` → major bump
- [ ] If `upgrade.rs` or artifact naming changed: `release_binary_name()` updated to match
### Security
- [ ] No secrets, credentials, or API keys committed
- [ ] No new network calls without timeout handling
- [ ] External input (user args, file paths) is validated at the boundary
## Testing notes
## Related issues