Problem: vim.cmd.redraw() (without bang) is a no-op when the screen is
not dirty. After invalidate_cache() sets tick=-1, Neovim has no reason
to redraw, so the decoration provider is never called, on_buf never
reparses, and the deferred syntax pass bails on the stale tick mismatch.
Solution: use vim.cmd('redraw!') which forces a full screen redraw
regardless of dirty state, ensuring on_buf fires, the cache is reparsed
with did_filetype()=0 resolved filetypes, and the deferred syntax pass
completes with a valid tick.