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>
10 lines
792 B
Markdown
10 lines
792 B
Markdown
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.
|