1. Catalog identity and read boundaries
- [x] 1.1 Add stable-ID resolution helpers while preserving existing catalog method signatures and return shapes.
- [x] 1.2 Track active level by
${packId}:${localId}and define replacement, removal, and empty-catalog fallback behavior. - [x] 1.3 Replace repeated full-catalog work for single-level and active-level reads with direct normalized-record lookup and safe boundary cloning.
- [x] 1.4 Add cache/generation invalidation for register, replace, and remove; prove summaries and level counts never remain stale.
2. Application handoffs and progress
- [x] 2.1 Migrate level loading, continue navigation, progress marking, and win promotion to stable IDs while retaining numeric selection compatibility.
- [x] 2.2 Handle pack replacement/removal during delayed win and gift/workshop handoffs without promoting a stale level.
- [x] 2.3 Verify solved progress remains keyed by pack and local level IDs after registration order changes.
3. Regression and verification
- [x] 3.1 Add catalog tests for replace, remove, active fallback, clone safety, direct reads, and cache invalidation.
- [x] 3.2 Add application tests for progress and delayed Win handoffs across replacement/removal and reused local IDs.
- [x] 3.3 Run the focused catalog/application tests, full Node suite, production build, and browser pack import/share flows.
- [x] 3.4 Run strict OpenSpec validation and record the measured catalog read improvement before archiving the change.