Parent: #433\nBlocks: #429\n\nReplace whole-script invalidation waits with generation-scoped executable retirement. Invalidation must close native entry and jettison tiers before resume, while prior execution leases keep only their own generation alive. Later executions must not delay reclamation of older mappings.\n\n## Acceptance\n\n- [x] Separate compilation publication leases from native execution epochs.\n- [x] Rotate the current execution epoch when invalidation begins and retire code/metadata into the old epoch.\n- [x] Reclaim an epoch immediately after its final reader exits, without waiting for later-generation readers.\n- [x] Account live, retired, and reclaimed executable bytes and artifact counts.\n- [x] Prove stale compilers cannot publish across the rotation.\n- [x] Add reader/reset and bounded memory-steady-state normal + TSan evidence.\n
Parent: #433\nBlocks: #429\n\nReplace whole-script invalidation waits with generation-scoped executable retirement. Invalidation must close native entry and jettison tiers before resume, while prior execution leases keep only their own generation alive. Later executions must not delay reclamation of older mappings.\n\n## Acceptance\n\n- [x] Separate compilation publication leases from native execution epochs.\n- [x] Rotate the current execution epoch when invalidation begins and retire code/metadata into the old epoch.\n- [x] Reclaim an epoch immediately after its final reader exits, without waiting for later-generation readers.\n- [x] Account live, retired, and reclaimed executable bytes and artifact counts.\n- [x] Prove stale compilers cannot publish across the rotation.\n- [x] Add reader/reset and bounded memory-steady-state normal + TSan evidence.\n