Phase D acceptance ledger
Tracking: Issue #14
Contract: design/phase-d-migration.md
Requirement-to-evidence map
| Requirement | Implementation evidence | Executable evidence |
|---|---|---|
| Mobility contract | Mobility::{Pinned,Reconstructible,Migratable}, MobileObject, mobile builder registration and handshake fingerprint |
pinned rejection and registry tests |
| Versioned segmented snapshot | MigrationPacket preserves Segments; per-snapshot version/schema and byte/segment bounds |
malformed packet, limit, and 1 MiB+ snapshot tests |
| Freeze and admission close | freeze is a write admitted behind prior object work; lifecycle rejects later admission without blocking a Rayon worker | migration, rollback, and repeated race tests |
| Prepare/commit/activate | inactive prepared state, checked epoch increment, authority commit, destination activation | local/remote and repeated migration tests |
| Authority and lifetime | stable creator authority; migration future retains a locality lease; roots/leases remain at authority | transfer/import, root, repeated migration, collection tests |
| Redirect/retry | structured Moved wire response; resolver refresh; same RequestId retry; redirect release from dedup |
stale-handle retry and request-counter test |
| Pre-commit rollback | source admission reopens and prepared destination is discarded | destination restore-failure test |
| Post-commit boundary | activation/retirement failure marks the runtime failed with MigrationCommittedFailure |
state-machine error branches and shutdown tests |
| Forwarding/retirement | bounded forwarding state; authority queues remote retirement after final lifetime release | migration collection reaches zero on both localities |
| Reconstructible resources | RestoreContext supplies destination Place; only logical snapshot is transmitted |
destination-provider reconstruction test |
| Same-locality fast path | domain-to-domain migration shares the runtime object service and avoids transport | same-locality domain migration test |
| Observability/bounds | migration/prepared/forwarding/snapshot limits and active/completed/rollback/failure/byte counters | saturation, stats, and clean-shutdown assertions |
| Production backends | migration uses runtime actions and logical places only | TCP smoke and MPI world sizes 1, 2, and 4 |
Validation command
scripts/check-phase-d-migration.shThe lane runs formatting, default/MPI tests, clippy -D warnings, rustdoc, Rust 1.85 checks, TCP migration/reuse, and MPI migration/reuse at world sizes 1, 2, and 4. Every backend process uses the watchdog policy in AGENTS.md.
Boundary
Phase D implements explicit caller-driven migration. Automatic migration, replication, process-failure recovery, direct transport-to-transport snapshot streaming, GPU/provider adapters, object-aware pmap, collectives, and the public Phase E facade remain unimplemented.