Screens verified by
walkthroughs/test_rm.py (and the walkthroughs above).Reading dabs ls
ls draws what dabs owns as a tree: NODE · KIND · VOL/HELD/TMP (a dot per
space that holds files) · STATE · INFO.
box (bwrap), box (apple)). A registered server earns a heading of its own,
because knowing a server is there (and reachable, or not) is a finding.
INFO is resolved per kind: a project’s source repo and a worktree’s checkout —
the paths dabs cd prints for them — and, for a box, the dabs exec <instance> bash line that shells into it. A box has no working directory, so that cell is
a command rather than a place; dabs cd <box> gives you its node dir on the
host instead. For one node’s whole model —
location, instance, the argv appended at boot, every space, the recipe snapshot
— use dabs info <node>.
Visibility follows life: ls shows only subtrees holding a running box or
real files. Empty markers (a project record with nothing under it) hide behind
a hint —
dabs ls --inactive lists only those instead.
rm: preview first, consent always
dabs rm <node> stops the box and removes its node and spaces, cascading to
everything nested under it. Losing anything requires consent; without it, rm
previews and exits nonzero. --dry previews and removes nothing.
Four flags authorize four different losses — never collapsed into one:
--keep stops the box but keeps its node record (when its spaces still hold
something worth pointing at).
Ambiguity reaps nothing
A prefix matching several nodes is refused — with the count shown — until you opt in with--multiple:
Sweeping the empty markers
Images
dabs prune reclaims built box images (they rebuild on the next dabs build);
--dry lists them with sizes; --force removes even an image a live box still
uses.