brain migrate is a temporary compatibility command for recreating a brain written before the pyboltzmann 0.9
identity, catalog and authenticity rules. It is deliberately one-way: the source is opened read-only, the destination
must not exist, work happens in a temporary sibling directory, and only a completed migration is moved into place.
Keep the old brain as the immutable archive. The command preserves current accessible knowledge, not historical
authorship.
1. Prepare and back up
Copy or snapshot both the brain directory and itsvitruvio.toml using the backup mechanism you already trust. Do
not use the destination as that backup. Then select the source explicitly and verify it:
you@example.com or a
lowercase namespaced name such as openai/codex. Legacy free-form identifiers remain readable but cannot author new
blocks. Pass the replacement explicitly if the old configuration is not valid:
2. Choose the new trust root
The destination is governed by default. Load the intended Ed25519 key intossh-agent, inspect its fingerprint and
pass it explicitly:
--sign-with and use --govern-quorum for a multi-key root, or pass an audited TOML/JSON document with
--trust-root. Explicit signers sign both the governed genesis and the final migrated head. Use --no-governed only
when the new brain is intentionally unsigned; it gives up the clean genesis opportunity and is not the default.
3. Understand what carries across
The migrator re-registers accessible canonical evidence with its original registration metadata and normalization pipeline where reproducible. It recommits derived blocks in evidence dependency order, rebuilds catalog declarations, and checks that content-addressed knowledge block ids remain identical. The final report listspreserved_ids and
every skipped item.
These properties do not carry across:
- old snapshot digests or the old snapshot chain;
- old provenance block identities or cryptographic continuity with unsigned history;
- dropped, inaccessible, tombstoned or otherwise non-current content;
- index files, which are derived and should be rebuilt;
- legacy actor spellings as new authenticated identities.
--allow-partial changes that contract: it skips those blocks and records each reason. Use
it only after reviewing the dry run and accepting that the destination is incomplete.
4. Verify before publishing
Open the new path explicitly and perform all checks before changing any deployment or registry tag:dist pull --allow-rollback makes that destructive choice explicit.
Once every consumer is on the new brain and the archive retention period has passed, the compatibility command may
be removed from Vitruvio. The migration report and old brain should remain together for audit.