b114641c88
- acquire(): the discard-and-recurse path becomes one more iteration of the existing wait loop; the two inline 'with lifecycle_lock: _teardown(db)' copies reuse _teardown_generation, and the type-narrowing asserts go away with the recursion. release() reads generation.path directly. - Restore the real os.replace inode swaps in test_state_db_file_identity.py and the registry tests: those files carry no windows_only marker so they never run on Windows, and the monkeypatched predicate stopped exercising the stat->identity->halt path anywhere. - Drop the auto-archive change and its 4 tests: on main the sweep gets a bare SessionDB and db.close() already releases a registry-shared handle, so the described NameError leak only existed on this branch's earlier head. trace_upload: acquire(None) already defaults. - Trim the barrier tests to the invariant pair (retired drain must not lift a pending current teardown; replacement not published before the last close settles) plus the raising-close settlement; comments say the WHY once.