Part of #96. Complete the first-party backend lifecycle needed by existing commands and books. The 26.3 target can use fresh saves but must preserve its own Age data across unload/reload and restart.
Acceptance criteria:
Refuse unsafe unload/retirement while players occupy an Age, and handle other entities safely.
Flush chunk writes and preserve Age data on unload/reload.
Reseed changes future chunks without rewriting existing chunks.
Retirement archives or removes only the exact targeted Age data and prevents its old books from recreating it.
Repeated load/unload cycles do not leak stale levels, tickets, or client registry entries.
Part of #96. Complete the first-party backend lifecycle needed by existing commands and books. The 26.3 target can use fresh saves but must preserve its own Age data across unload/reload and restart.
Acceptance criteria:
- Refuse unsafe unload/retirement while players occupy an Age, and handle other entities safely.
- Flush chunk writes and preserve Age data on unload/reload.
- Reseed changes future chunks without rewriting existing chunks.
- Retirement archives or removes only the exact targeted Age data and prevents its old books from recreating it.
- Repeated load/unload cycles do not leak stale levels, tickets, or client registry entries.
dnorberg
added this to the Dual-version support milestone 2026-10-27 00:05:41 -04:00
26.3 lifecycle progress (prototype, issue remains open): added operator-only unload/reload/reseed/retire. Unload refuses players, performs full chunk/entity save, deactivates tickets before close, and reactivates persisted/NeoForge forced tickets on load. Dedicated-server test: origin chunks retained fingerprint 2898472 after reseed 24680→13579; new chunks matched fresh 13579 control (2897795) rather than old-seed control (2863099). After restart the new seed and old origin chunks persisted. Forced chunk and armor-stand UUID persisted through repeated unload/reload and restart. An occupied Age could not unload. Retirement moved only the selected Age directory to world-retired-ages, tombstoned the ID before the move, and rejected recreation after restart. Ten successive cycles completed; open FDs remained 218 before/after (smoke check only). Both 1.21.1 and 26.3 builds pass. Remaining: normal book/definition integration, long-running leak and interruption/recovery validation. See docs/MINECRAFT_26_3_PORT.md. No release/JAR enabled.
26.3 lifecycle progress (prototype, issue remains open): added operator-only unload/reload/reseed/retire. Unload refuses players, performs full chunk/entity save, deactivates tickets before close, and reactivates persisted/NeoForge forced tickets on load. Dedicated-server test: origin chunks retained fingerprint 2898472 after reseed 24680→13579; new chunks matched fresh 13579 control (2897795) rather than old-seed control (2863099). After restart the new seed and old origin chunks persisted. Forced chunk and armor-stand UUID persisted through repeated unload/reload and restart. An occupied Age could not unload. Retirement moved only the selected Age directory to world-retired-ages, tombstoned the ID before the move, and rejected recreation after restart. Ten successive cycles completed; open FDs remained 218 before/after (smoke check only). Both 1.21.1 and 26.3 builds pass. Remaining: normal book/definition integration, long-running leak and interruption/recovery validation. See docs/MINECRAFT_26_3_PORT.md. No release/JAR enabled.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #96. Complete the first-party backend lifecycle needed by existing commands and books. The 26.3 target can use fresh saves but must preserve its own Age data across unload/reload and restart.
Acceptance criteria:
26.3 lifecycle progress (prototype, issue remains open): added operator-only unload/reload/reseed/retire. Unload refuses players, performs full chunk/entity save, deactivates tickets before close, and reactivates persisted/NeoForge forced tickets on load. Dedicated-server test: origin chunks retained fingerprint 2898472 after reseed 24680→13579; new chunks matched fresh 13579 control (2897795) rather than old-seed control (2863099). After restart the new seed and old origin chunks persisted. Forced chunk and armor-stand UUID persisted through repeated unload/reload and restart. An occupied Age could not unload. Retirement moved only the selected Age directory to world-retired-ages, tombstoned the ID before the move, and rejected recreation after restart. Ten successive cycles completed; open FDs remained 218 before/after (smoke check only). Both 1.21.1 and 26.3 builds pass. Remaining: normal book/definition integration, long-running leak and interruption/recovery validation. See docs/MINECRAFT_26_3_PORT.md. No release/JAR enabled.