Conflict policy — frozen as lastWriteWins, and DECLARED rather than defaulted.
This is what the code already does, but by accident: every strategy fell through to a
forced overwrite. The change is not the outcome, it is that the conflict becomes
detectable and logged, because the push now carries baseVersion.
The rationale is the field: an operator is the authority on what they have just
observed, and a blocking dialog raised offline, alone on site, gets clicked at random.
Conflict policy — frozen as
lastWriteWins, and DECLARED rather than defaulted.This is what the code already does, but by accident: every strategy fell through to a forced overwrite. The change is not the outcome, it is that the conflict becomes detectable and logged, because the push now carries
baseVersion.The rationale is the field: an operator is the authority on what they have just observed, and a blocking dialog raised offline, alone on site, gets clicked at random.