Diagnostics

FLUSH_IN_EFFECT_CALLBACK

flush() from an effect callback (no-op; the drain is already running).


What you saw

  • Kind: lifecycle
  • Severity: warn (code that works but is structurally wrong or expensive)

The console report opens with [FLUSH_IN_EFFECT_CALLBACK] and the message, then an in line naming the owners that enclose the subject, root first, and an at line with the source location when the code was compiled with one. In a captured artifact the same finding is an event with code: "FLUSH_IN_EFFECT_CALLBACK", ownerPath, and loc. Diagnostics explains each line.


Why it fires

flush() was called inside an effect callback, where it is a no-op (the flush running effects is already in progress). Writes made there are handled in the same flush's continuation.


How to fix it

If you truly need a drain afterwards, defer it: queueMicrotask(() => flush()). Usually the right fix is deleting the call.


In tests

captureArtifact from @solidjs/diagnostics runs a scenario with the diagnostics channel open and returns the events it saw. expectNoDiagnostics(artifact) fails while FLUSH_IN_EFFECT_CALLBACK is among them, with the events as evidence; after the fix, the code is gone from artifact.diagnostics. Check for regressions in tests shows the loop and the Vitest matcher form.


Learn more

Last updated: 10/15/26, 10:07 PMEdit this pageReport an issue with this page