# Retained exchange relocation sites

Committed as f654f00b on main. Final workspace all-target check and formatting/whitespace checks passed.

The phase encoder returns EncodedRow with instruction words and compact send, receive-pointer and outgoing-base sites. Send sites retain the caller's pending-transfer identity, byte offset within the message and address-field item width. Both fields of inline SENDPICP are accounted for. Incremental checkpoints reuse/truncate metadata and words together; staged trials include transfer identity in their input.

Repeat relocation uses those identities directly, including paired restarts, and no longer matches decoded groups to activity ordering. Base fallback replaces the retained base operands and updates their metadata. Replay normalization and cross-phase row sharing use the same recorded address fields. The sharing union still restores zero/base-relative addresses. The independent decoders moved into exchange diagnostics and remain available for imported/SDK rows and validation. No scheduling or timing policy changed.

Validation:

- Workspace release suite: 427 passed, 0 failed, 8 ignored.
- Final focused exchange suite: 54 passed, 0 failed, 2 ignored. Randomized ordinary/paired/full-duplex rows, arbitrary source/destination addresses, and prefix reuse compare all retained sites with independent decoding. The new identity test changes a staged message without changing its words and inserts a message before an already cached send.
- Final codegen exchange suite: 31 passed, 0 failed, 2 ignored. The Repeat regression checks both base relocation and fallback patches, verifies updated base-site metadata, and relocates successfully without activity records.
- Shared-row zero-address regression passed after the final borrowing change.
- SDK-enabled saved_search_preserves_budget_aliases_and_order passed using actual package construction and checkpoint replay.
- FP16 MLP Repeat 3 and FP8 ViT Repeat 3 hardware PASS; both packages byte-identical to target-abi.
- Real-weight SigLIP So400m, 27 layers, BS1, six real images: hardware PASS; package and all six device outputs byte-identical to target-abi. Minimum cosine against FP32 remains 0.994567066. Build plus verification took 98.363 seconds.
- Baseline and new build-only packages are also byte-identical. With identical options and RAYON_NUM_THREADS=8, peak host RSS was 4,193,544 KiB before and 4,441,440 KiB after. Elapsed times were 91.113 and 108.298 seconds, respectively. Other host compilation ran concurrently, so these single samples do not establish a timing regression or improvement. Retaining the sites costs host memory; device memory/work is unchanged.

Commands, build timings, hardware comparisons and logs are adjacent. Test logs are /tmp/ipu-relocation-workspace-tests.log, /tmp/ipu-relocation-exchange-tests-final.log, /tmp/ipu-relocation-codegen-tests-final.log, /tmp/ipu-relocation-row-sharing-test.log and /tmp/ipu-relocation-replay-test.log. The final post-hardware source edits only rename the private emission-sink trait, move decoder tests beside their owner, strengthen tests and update documentation.

This completes the retained-relocation requirement. Scoped Recipe choices, mixed storage/access contracts, local-copy binding, cache consolidation and the overall completion/code-size audit remain open. No overall source-size reduction is claimed for this stage.
