Release all exact-path tags and restore path safeguards - #175
Conversation
|
@codex review Please independently review the exact current head |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Independent review evidence for exact head |
|
Independent exact-head review completed against Result: no actionable findings. The reviewer confirmed exact-path all-tag release, restored path safeguards, atomic exact-path deletion, and passing workspace tests/clippy. 🤖 Posted by Codex |
Closes #111
Scope
Make unfiltered non-recursive
trop releaseselect every tagged and untagged reservation at the exact resolved path while preserving descendants. Restore the standard unrelated-path guard for exact and recursive release, honor the explicit flag and effective configuration permission, and keep exact-path planning plus deletion in one transaction. Document selector, idempotency, safeguard, and atomicity behavior.The root cause was that the CLI represented an omitted tag filter as the untagged reservation key and hardcoded
allow_unrelated_pathwhile building release plans.Stack
73371b359651dc9733fd4f23c2b9d15078706a44Red-before-fix evidence
cargo test -p trop-cli --test release_command test_release_path_without_filter_removes_all_exact_path_tags_only -- --exact— failed because the taggedwebrow remained.cargo test -p trop-cli --test release_command test_release_unrelated_path_is_rejected_without_partial_mutation -- --exact— failed because the unrelated release unexpectedly succeeded and mutated the target.cargo test -p trop-cli --test release_command test_release_allow_unrelated_path_releases_target -- --exact— failed because--allow-unrelated-pathwas not a recognized release argument.30309991480failed both Windows test profiles intest_release_nonexistent_path: the target used a canonical verbatim path while the process CWD used the equivalent short-name spelling, and the nonexistent suffix prevented the physical fallback from recognizing the relationship.cargo test -p trop database::operations::tests::test_validate_path_relationship_canonical_nonexistent_descendant --all-features -- --exact— failed before the correction withPathRelationshipViolationfor a nonexistent descendant reached through a symlink to the current directory.Validation
cargo test -p trop database::operations::tests::test_validate_path_relationship_canonical_nonexistent_descendant --all-features -- --exact— passed.cargo test -p trop-cli --test release_command --all-features— 30 passed.cargo test -p trop operations::release --all-features— 16 passed.cargo test --workspace --all-targets --all-features --locked— passed, including tests and benchmark smoke execution.cargo clippy --workspace --all-targets --all-features --locked -- -D warnings— passed.cargo fmt --all -- --check— passed.cargo build --release --workspace --all-targets --all-features --locked— passed.RUSTDOCFLAGS="-D warnings" cargo doc --workspace --all-features --no-deps --locked— passed.just test-production-readiness-selector— 61 passed.agentic-navigation-guide check— passed.agentic-navigation-guide verify— passed.Acceptance criteria
--tagand--untagged-onlyremain precise, mutually exclusive, documented, and idempotent when no row matches: covered by focused selector and no-match tests.--allow-unrelated-path, effective configuration, and--forceremain explicit overrides: covered for exact and recursive roots, including no-mutation assertions.Residual risks
Recursive release transactionality and component-aware traversal remain intentionally scoped to #112; this PR restores its requested-root safeguard without absorbing that follow-up.