Files
m2pack-secure/docs/migration.md
2026-04-14 12:34:07 +02:00

1.8 KiB

Migration from legacy packs

This project is meant to replace legacy .pck or EterPack-style content delivery gradually, not through a single risky cutover.

Target state

  • Linux builds produce .m2p
  • the client loads .m2p first
  • runtime master key delivery is required
  • silent fallback to legacy packs is disabled in production

Suggested migration phases

Phase 1: parallel loader

  • keep the legacy loader in the client
  • add .m2p support beside it
  • verify the new loader against real content sets
  • keep fallback only in development if needed

Phase 2: pipeline validation

  • build .m2p from the same source tree as legacy packs
  • run verify for every archive
  • run diff between the source tree and .m2p
  • compare in-game behavior between legacy and .m2p

Phase 3: runtime delivery

  • stop embedding a real content key in the client
  • deliver the runtime key through launcher, environment, or mapping
  • verify startup failure behavior when the runtime key is missing

Phase 4: production cutover

  • package only .m2p for release clients
  • disable silent fallback to legacy packs
  • remove stale pack generation from release CI
  • keep extract/debug tools only for internal use
  • duplicate normalized paths
  • invalid relative paths
  • case-collision problems on Windows
  • decompression failures
  • manifest signature failures
  • key mismatch by key_id

Practical migration loop

  1. Pick one legacy pack group.
  2. Rebuild it as .m2p.
  3. Verify it.
  4. Diff it against the source tree.
  5. Boot the client with runtime keys.
  6. Validate asset loads in logs and in-game.
  7. Move to the next pack group.

Risk notes

  • Do not mix silent fallback with production security claims.
  • Do not ship a client that accepts .m2p without runtime key enforcement.
  • Do not keep real secret keys inside the repository.