Cross-file types still live in independent type pools, string interners, and HIRs (#480/#487; tracker #416). Metadata ownership is retained by #488, but numeric TypeIds and declaration-node IDs from another Compilation are not interchangeable with local IDs.
Add a general bulk type-graph relocation primitive that preserves all represented payload columns, shared edges, cycles, generic parameter identity, signature/index slots, enum-literal metadata, and declaration origins through explicit mapping. Preserve reserved primitive IDs; do not substitute any or rebuild shallow named shapes. Reject missing/invalid mappings and restore unpublished destination lengths on failure. Test overlapping numeric IDs, existing destination contents, cyclic/shared graphs, invalid inputs, and allocation failures.
This low-level primitive must not enable imported types in program checking until checked semantic metadata and real source-node provenance are relocated with it. Full source/file ownership, scoped lookup, cross-file merging and cycles remain under #480/#487. No benchmark readmission or timing claim from the primitive alone.