Two workers can each read the same counter and then overwrite one another's increment. A shared interpreter lock doesn't turn that multi-step business operation into an atomic transaction. You need an explicit invariant and a synchronization plan.
These exercises replay supplied interleavings and lock dependencies. They don't start operating-system threads, which the browser runtime doesn't provide. The workload rule distinguishes ordinary GIL-enabled CPython from free-threaded builds, and distinguishes CPU computation from waiting for I/O. Keep those assumptions in the answer. A correct trace model explains a possible failure without claiming it measured a real scheduler. You also check the circular lock dependencies that can leave workers waiting forever.