remove is the inverse of add: the require line leaves package.ludic; the lock keeps exactly what the
remaining requires still reach, read from the store's copy of each locked package.ludic (no
network), so a package another still requires stays locked and what only the removed one brought in
leaves with it; each leaving package loses the ludic_modules/ symlink add made, never the shared
store entry. Refused (exit 1) when package.ludic does not require the module; source still
importing a removed package is a warning. With no store copy to read, only the named module leaves.
get --json diffs the lock before and after in memory and prints {added, removed, changed,
unchanged} on stdout (an entry as the lock records it: name, version, hash, kind, provides; a change
as name, from, to, from_hash, to_hash), the resolver's lines on stderr. Cases added to test-pkg,
not run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
792 B
bump: minor
type: feat
ludic remove <module> and ludic get --json. remove is the inverse of add: the require
leaves package.ludic, the lock keeps what the remaining requires still reach (read from the store's
copies of each package's manifest, no network), and each package leaving the lock loses the
ludic_modules/ link add made - never the shared store entry. A module that is not required is
refused; source still importing a removed package is a warning. ludic get --json prints what the run
changed in the lock as one JSON object on stdout - {"added", "removed", "changed", "unchanged"}, an
entry as the lock records it (name, version, hash, kind, provides), a change as {name, from, to, from_hash, to_hash} - with the resolver's own lines on stderr.