Above here there's the public API `markDirty()`, which sets the `_indexListDirty` flag but does nothing else.  That means if a scan is already in progress when markDirty() is called, it _won't_ be aborted right away.  If no one else requests an index while it's running, it'll actually complete and notify its promise with the stale data.

I think the only cases where this could cause bugs are when some operation (and its UI) is still pending across a major boundary like switch-project... which iirc we already agreed is a larger problem anyway that can't be solved purely by FIM.  So perhaps nothing needs to change here for now?  Just wanted to raise it for your thoughts though...