retain policy shows what the brain in front of you permits. The profile lives in vitruvio.toml, so every clone
removes under the same rules.
Plan before you drop
drop computes and prints the plan itself; --yes skips the prompt, never
the plan.
If the plan reports rederivable, --rederive-against <NEWER_BLOCK> is usually the better move: re-derive the
dependents from newer evidence instead of losing them.
--reason is recorded in provenance. An unexplained removal is one nobody can audit later, including you.
Blocks are not mutated
A drop rebuilds the module’s Merkle DAG over the survivors and produces a new root. The old blocks still exist; the composition changed. Consumers of the old root are unaffected until they pull, which is what makes distribution and retention compose at all.Refusals are answers
- Exit 6 — the policy refused. Episodic memory is append-only by protocol: what happened cannot stop having
happened. Canonical drops need
canonical_drop_allowed. There is no flag to force it;supersedeis the path. - Exit 10 — the cascade exceeded the policy’s review threshold. Stop and ask a person. Answering on their behalf defeats the mechanism.
Supersede is usually the right answer
Dropping by producer
--producer-version: --version belongs to vitruvio itself.
Redaction is different in kind
inspect resolvability reports it as
tombstoned rather than missing, so a lawful erasure is never mistaken for a corrupt store.
Refused by default: the policy must name redactable_media_types. It is for personal data, credentials, or licensed
material that must disappear from retained history. Wrong or obsolete knowledge is dropped.
Two limits, worth stating to whoever asked:
- A hash of low-entropy content is not anonymous: confirming a guess may still be possible while the block id is kept.
- Erasure does not propagate to copies already pulled. A revocation can be published; a distributed brain can only signal.