# Compatibility boundary The package's canonical APIs use named `EventMetadata` fields and the version 1 checkpoint schema. Compatibility is explicit and one-way: old artifacts are adapted into the new representation and are never rewritten implicitly. | Artifact or behavior | Supported | Boundary | Notes | | --- | :---: | --- | --- | | New checkpoint (`schema_version: 1`) | yes | `CheckpointManager` | Full model/lifecycle resume when state is present | | Legacy `model_epoch_N.pt` checkpoint | yes | `gnn4colliders.compat.load_legacy_checkpoint` | Model state and active early-stop fields are adapted | | Legacy DDP/compiled prefixes | yes | `normalize_legacy_state_dict_keys` | Supports `module.` and `_orig_mod.` | | Legacy ROOT-GNN classifier name | yes | `map_legacy_edge_network_state_dict` | Maps `classify` to `classifier` | | Legacy optimizer state | partial | legacy checkpoint adapter | Loaded when present; scheduler state is not available in the historical format | | Legacy scheduler state | no | — | Historical checkpoints do not carry a supported scheduler state | | Positional tracking rows | yes, at ingestion boundary | `EventMetadata.from_legacy_tracking` | Exactly `tracking[0] = fold`, `tracking[1] = weight`; shorter rows fail | | Generic/unknown tracking layouts | no | — | The package does not guess historical column meanings | | Modern NPZ output | yes | `inference.write_npz` | Named fields: `sample_id`, `logits`, `scores`, `predictions`, and available metadata | | Historical `tracking_info` NPZ output | no | — | No active consumer remains; positional output is intentionally unsupported | | Legacy YAML `module`/`class`/`args` | compatibility only | configuration boundary | Accepted only where the semantic factory can safely interpret it; new configs use semantic model names | The frozen parity fixtures and `root-gnn-parity-baseline` tag preserve the historical observations for parity tests and investigation. Production modules do not import executable historical model code.