Skip to content

v0.19.0

Choose a tag to compare

@apotema apotema released this 22 Feb 13:20
· 7 commits to main since this release

What's Changed

Deferred evaluation (#83, #84, #86)

Handlers no longer call evaluateTransports(), tryAssignWorkers(), or evaluateDanglingItems() synchronously inline. Instead, dirty flags are set and evaluations are batched at the end of handle() via processDeferredEvaluations().

This prevents cascading hook dispatch where a single game call (e.g., storeCompleted) could trigger multiple hooks before returning — most notably the bug where a worker was immediately reassigned to transport from the same EOS it just stored to.

Priority order is preserved: dangling items > worker assignment > transports.

Suppress transport_cancelled on entity destruction (#85, #87)

cancelWorkerTransport now accepts a skip_hooks parameter. When called from handleWorkerRemoved, hooks are suppressed since the entity is being destroyed and game-side listeners cannot safely mutate it. All state cleanup (reservations, transport tracking) still occurs.

Full Changelog

  • fix: defer evaluation calls using dirty flag batching (#86)
  • fix: suppress transport_cancelled hook on worker removal (#87)