Repository navigation
Description
[agent] Split out of #1088. The maintainer's 2026-10-09 triage narrowed #1088's v5 scope to "a bare scan/get keeps the project's mode" (PR #1317). The other two questions from #1088 are not release requirements, so they are tracked here, without v5-blocker.
Q1, option 3: new command model (next major)
| New | Replaces |
|---|---|
read-only scan |
today's scan --dry-run |
fix [TARGET…] [--mode M] |
scan (write) and get |
undo [TARGET…] |
rollback, remove and vendor --revert |
sync |
apply, repair and scan --prune |
check |
apply --check and vendor --check |
The old verbs would stay as aliases for one major. This is blocked by the C11/C12 engine split (#843, #894). See #1088 for the full rationale (register C34).
Q2: "nothing to undo" exits differently per command (register C74)
On a project with no patch state (a fresh project, or one that a full rollback just emptied), list, apply and vendor --revert exit 0, but rollback and repair exit 1 (manifest_not_found, and rollback uses the legacy {"status":"error","error":"Manifest not found"} shape). So a second rollback exits 1. #1088 has the per-command table and repro.
The proposal (#1088 option A):
rollbackon an empty project returnsstatus: successwith zero counts.repairon an empty project matchesapply(noManifest, exit 0).remove <target>with no match keeps exit 1 (not_found).
Tests that pin today's exit 1: in_process_rollback_hosted.rs, mode_migration_vlt.rs, e2e_redirect_vlt_build.rs (L1185-1210) and the covgap rollback/repair suites.
Both parts need a maintainer decision before implementation.
Activity
mikolalysenko commentedon Oct 9, 2026
I think we need to keep
scan, notfixbecausesocket fixis a separate product that updates dependencies, and this will cause confusion. I'm open to picking a different name here, the other semantic updates seem reasonable.mikolalysenko commentedon Oct 9, 2026
We could keep
scanandgetas-is, since this is consistent with the existing usage and keep the--dry-runoption. The other changes are reasonable.