Let this view say what it does not know
Commit

Five ways the record view asserted more than it had read, found by review.
A repo whose provisioning FAILED has no placement either, so the empty
table explained it away as a read that arrived too early — sending the
reader back to wait for something never coming, and repo create's own
recovery hint sends them here. The row now carries the repo's own
lifecycle word, which is what tells the two apart. It is carried in
--json as state besides, where the placement reshaping had dropped it:
status speaks the placement vocabulary (active there is ready
here), so neither field can stand in for the other and both are kept.
An absent visibility rendered Public. That is a new assertion this
branch introduced — the old view made no visibility claim at all — and
its default was the permissive one, on the question an operator asks to
confirm a repo is restricted before widening a grant. Private is now a
pointer: unknown prints -, omits the JSON key, and matches neither
--private nor --private=false.
A dash was baked into the status FIELD rather than the rendering, so
--json handed "-" to jq, and the shared fold turned a healthy repo
whose state merely could not be read into "mixed" — which the table then
paints as part-degraded. Only orDash dashes now, at the point of print.
The authoritative read is issued on every native invocation, and any
failure but a cancellation or the two the flag handles fell off the end
of the switch: a core outage downgraded every repo view to a table
asserting nothing was wrong, at exit 0. It is disclosed on stderr now,
the way fetchRepoDirCatalog refuses the same trade two hundred lines
away. The test that pinned the silence now pins the disclosure.
Finally, the recovery hint told readers to wait until the command
"reports active", a word primaryPlacementStatus makes it incapable of
printing, and repo mirror get left without an entry in the deprecation
ledger that stops a help string advertising it again.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com Entire-Checkpoint: 01M375H6M27GN8XREKH49X9C2W