Migrate safely and keep an exit
A release says what the community approved. A migration run records how existing material reaches that release.
1. Plan a durable run
idiolect migrate plan \
--workspace neighborhood-archive \
--change "$PACKET" \
--total 250
The resulting file under .idiolect/migrations/ begins in planned state. If Panproto derived a published lens, add --lens at://…; a manual procedure may omit it.
2. Advance by checkpoint
RUN=neighborhood-archive/.idiolect/migrations/<run>.json
idiolect migrate advance "$RUN" \
--processed 100 \
--cursor record-100 \
--status running
If one record fails, keep the run moving and retain a bounded diagnostic sample:
idiolect migrate advance "$RUN" \
--processed 75 \
--cursor record-175 \
--failure 'at://did:plc:member/org.example.neighborhood.profile/bad=displayName is absent' \
--status running
Inspect the current totals and last checkpoint:
idiolect migrate status "$RUN"
Processed counts may only advance. Failure samples are bounded by the workspace resource policy. Terminal states are explicit: completed, failed, or rolled-back.
3. Test the ordinary exit
Choose a new, empty destination:
idiolect export \
--workspace neighborhood-archive \
--release neighborhood-archive/releases/0.1.0.json \
--out neighborhood-archive-export
The export rejects symbolic links and non-empty destinations. It copies the manifest, selected definitions, change history, migration runs, releases, and the requested current bundle, then writes export-inventory.json with the files and their digests.
Open the export without Idiolect. A participant should be able to identify the community, approved change, evidence, migration state, signed release, and exact artifacts from ordinary files. This is the ordinary exit test (OET): exit works before a conflict makes it urgent.
You have now completed the community release thread. The community workspace guide explains policy variants and automation in more depth.