Async sibling of applyFixes. Same dispatch semantics —
one strategy per matching issue, outcomes bucketed into
fixed / skipped / errors — but yields to the main thread
every YIELD_EVERY issues so the UI can repaint, and
honours ApplyFixesParams.signal + onProgress for
cancel + progress UX.
On cancel, throws an AbortError (a DOMException with
name === "AbortError"). The SceneModel keeps any mutations
that landed before the abort, so a re-inspect after
cancellation reflects post-abort state truthfully. Outcomes
collected before the abort are discarded — the caller gets
either a complete result or an exception, not a partial result.
Yield granularity is per-batch, not per-issue, because some
fixes (e.g. splitDenseGeometry) take milliseconds
each and yielding between every one would be unnecessary
scheduling overhead. Eight issues / yield strikes a reasonable
balance.
Async sibling of applyFixes. Same dispatch semantics — one strategy per matching issue, outcomes bucketed into
fixed/skipped/errors— but yields to the main thread every YIELD_EVERY issues so the UI can repaint, and honours ApplyFixesParams.signal +onProgressfor cancel + progress UX.On cancel, throws an
AbortError(aDOMExceptionwithname === "AbortError"). The SceneModel keeps any mutations that landed before the abort, so a re-inspect after cancellation reflects post-abort state truthfully. Outcomes collected before the abort are discarded — the caller gets either a complete result or an exception, not a partial result.Yield granularity is per-batch, not per-issue, because some fixes (e.g. splitDenseGeometry) take milliseconds each and yielding between every one would be unnecessary scheduling overhead. Eight issues / yield strikes a reasonable balance.