1 legacy compatibility and migration register
forgejo-actions edited this page 2026-07-13 19:45:35 +00:00

Legacy Compatibility And Migration Register

This register keeps legacy persistence and protocol paths explicit. Persistence migrations are one-way upgrade paths and can be removed after their release window. Wire compatibility is part of the network protocol contract and remains until a protocol-major migration intentionally drops it.

Temporary persistence entries must name the date the retention window was reviewed and the release event that closes the window. If the project later assigns cleanup issue IDs, add them to the same retention cell instead of replacing the date and release anchor.

Area Module Compatibility Retention
Local game-state bootstrap cache src/local_game_state.rs::migration Versionless/v0 bootstrap caches upgrade to v1 with boundary metadata and default loadout fields. Reviewed 2026-06-11. Eligible after the first tagged release containing split offline-save/bootstrap-cache files; retain through that release and remove during the following cleanup pass.
Input profiles src/input/profiles.rs::migration Versionless/v0 profiles gain metadata; the v1 open_inventory default moves from key_b to key_i. Reviewed 2026-06-11. Eligible after the first tagged release storing input profiles under local_config; retain through that release and remove during the following cleanup pass.
UI layouts src/ui_layout/io.rs::compat JSON decoding falls back to legacy bincode UI-layout documents. Reviewed 2026-06-11. Eligible after the first tagged release shipping authored UI layouts only as JSON; retain through that release and remove during the following cleanup pass.
UI skin profiles and aliases src/game_ui/skin/manifest.rs::compat Legacy base/key_overrides profiles convert to explicit assignments; missing built-in catalog keys resolve through preserved aliases. Reviewed 2026-06-11. Eligible after the first tagged release writing explicit assignments and shipping complete built-in catalog keys; retain through that release and remove during the following cleanup pass.
Gameplay protocol-version JSON crates/common-proto/src/protocol.rs::compat Major-only protocol versions decode as major.0. Permanent wire/config compatibility until a protocol-major migration intentionally drops it.
Realtime protobuf packets crates/common-proto/src/realtime_wire/compat.rs Captured legacy envelopes and datagrams without newer fields remain decodable. Permanent wire compatibility for the current protocol major.

Maintenance Rules

  • Add a row whenever compatibility code accepts an older persisted or wire format.
  • Link compatibility comments in source to this register.
  • Review temporary rows at release boundaries; do not remove them merely because current files have migrated locally.
  • Treat wire rows as permanent inside the current protocol major unless the rollout plan upgrades every supported peer.
  • Remove a row in the same change that removes its compatibility implementation and focused regression tests.