The full Debug no-GIL corpus gate reports api/thread-lifecycle.js failing with:
Error: continuation cannot run while the lock is held: expected 0 but got 1This reproduces 10/10 times with a Debug runner built from 80e4595, before the #1103 fixture correction. All recorded threads finish and settle their joins. It is a functional assertion failure, not a sanitizer report or timeout.
The fixture creates the asyncHold worker before main enters lock.hold. Execute a controlled startup-order probe to establish whether the callback acquired the previously free lock before main's hold. Then preserve the intended dead-registrant pending-ticket contract with a registration edge that works under independent no-GIL scheduling.
Acceptance: retain all four async-lifecycle oracles and exact side-effect counts; verify the ticket survives registrant exit, settles after release, and respects async settlement ordering. Serialized/no-GIL Debug, ReleaseSafe and unsuppressed TSan must pass. Keep the upstream reference immutable and audit any owned fixture. No sleeps, exclusions, weaker counts, runtime scheduling changes or increased watchdog.