mutated × shared — the answer changes between runs

Nondeterminism

When an entropy source from mutated state meets an observation gap from shared state, the outcome depends on interleaving, not logic. The hallmark: you cannot reproduce it on demand.

A value that varies, observed across actors without synchronization, lets timing pick the result instead of your code.

01in the wild

In the wild

Temporal Interleaving

The schedule, not the logic, picks the result.

TOCTOU Race (Check-Then-Act)

The gap between checking a resource and using it is a window another actor can slip through — so the bug only fires when the interleaving lines up.

Read the defect
Lost Update (Read-Modify-Write Race)

Incrementing shared state is three steps — read, add, write — and without a lock two actors overwrite each other's result.

Read the defect
Out-of-Order Async Completion

Two requests write one variable; whichever resolves last wins — and completion order isn't the order you asked in.

Read the defect
Concurrent Modification During Iteration

One actor mutates a shared collection while another walks it — the loop sometimes throws, sometimes silently skips.

Read the defect
Pool-Exhaustion Heisenbug

Whether a request succeeds or stalls depends on how many others hold the pool right now -- so the same call passes alone and fails under load.

Read the defect

Observational Staleness

You act on a value that has already moved.

Stale-Cache Heisenbug

Caching a result that depends on hidden mutable state serves the old answer forever — nobody invalidated it.

Read the defect
Use-After-Free / Dangling Read

A freed allocation is still reachable through a second name; the stale read returns whatever reused the slot.

Read the defect
Pooled-Resource Heisenbug

A pooled connection carries un-reset state from a prior borrower, so your result depends on who held it before you.

Read the defect
Lazy-Init Visibility Race (Double-Checked Locking)

A thread sees the singleton's reference published before its fields are -- so it reads a half-built object, but only on the rare interleaving.

Read the defect
Stale Read From a Lagging Async Replica

You write to the primary, then read back from a replica that hasn't caught up -- so you act on a value that has already moved, but only when replication lag outruns your round-trip.

Read the defect

Entropic Divergence

A hidden random or identity source makes runs differ.

Temp-File Check-Then-Use Race

A predictable temp path plus a gap between checking and opening it is a window another actor can slip a symlink through -- so the write lands elsewhere only when the timing lines up.

Read the defect
Concurrent Singleton Mutation

One shared object with mutable per-call state, hit by many threads, lets one request's data bleed into another's.

Read the defect
Hash-Seed Serialization Divergence

A cache key built by iterating an unordered set differs each process, because the hash seed is randomized -- so the cache never hits and 'it works on my machine.'

Read the defect
Plugin Registration / Dispatch-Order Divergence

Handlers auto-register via a decorator whose effective order depends on import/await timing -- so when two claim the same route, which one wins changes run to run.

Read the defect