final case class SyncResult(changes: List[Change], blocked: List[Change], applied: Boolean)
The diff, what part of it blocks an unforced apply, and whether it was executed.
applied is false both when apply was never requested and when it was refused over blocked; the caller knows which flags it passed, so the distinction is the front end's to render rather than a field's to carry.