vendor add gains --exclude a,b,c (all mode minus those ids) as the mirror
of --include, for taking the majority of a source while dropping a few
items. Mutual exclusion with --include is a hard error, unknown ids fail
naming the available ones (generalized checkIDEntries).
vendor add and vendor select gain --types (allow-list) and --exclude-types
(deny-list) over the four content types. The filter is stored as the
optional, v2-compatible Selection.exclude_types field and survives vendor
update: new upstream items of an excluded type never enter the work
repository (unlike id expansion, which would silently re-admit them).
--types/--exclude-types replace the filter on select, absent flags keep
it, and --mode all clears it along with include/exclude.
Also fixes materializeTree to create the staging directory for an empty
selection — previously select-to-zero failed at the staging rename.
vendor select <name> --add/--remove/--mode all changes what a source
contributes without advancing the pinned rev: ids are validated against
the pinned upstream (typos abort listing available ids), collisions
re-run, renames from the lockfile are honored, and the external area is
rewritten via the same staging-swap as update. include mode grows and
shrinks the include list; all mode --remove moves ids onto exclude;
--mode all resets to everything. Failed selects mutate nothing.
Closes beads: agent-lib-cd3
- update advances the pinned rev, rewrites the external area via staging+swap,
reports added/changed/removed per type; include mode holds its selection,
vanished include entries abort loudly with the tree untouched
- all mode pulls new upstream items automatically; collision checks re-run on
every update and honor the rename map
- diff is strictly read-only (temp dir outside the repo) and surfaces new
upstream items as available-but-not-selected
- remove deletes external area + lockfile entry and prunes empty external root
- update --all reports per source and surfaces every failure
- flat per-type deployed namespace enforced across own items and all sources
- own-vs-vendored and vendored-vs-vendored collisions abort with both parties named
- --rename upstream=deployed resolves collisions; on-disk folder always equals
deployed name; rename targets are validated against new collisions
- checks run before any tree mutation; validate re-checks the namespace offline
- validate: offline hard rules (all+include, exclude-without-all, orphaned
include entries vs pinned inventory) and lockfile/external-area divergence
- vendor list: name/url/ref/rev/mode/item counts, human + json
- vendor inspect: per-type inventory with frontmatter metadata and recorded
warnings read from the external area, human + json
- exit code 1 on invalid state for headless drift checks