markDirty

Idempotently mark the document dirty. No-op when already dirty (no spurious StateFlow emission). Hosts fan their own side effects (e.g. an editedSinceLastRun flag flip, validation refresh, last-result clearing) off this call; this method only flips the dirty flag.