evaluate
Evaluate every proposition against diff.
Implementations must be idempotent: a proposition already quarantined by a prior sweep (one whose status is PropositionStatus.QUARANTINED) must keep its original reason. Those come back unchanged as QuarantineDecision.AlreadyQuarantined. Calling them conforming would report them as clean. Release one to force it back through evaluation.
That classification does not depend on diff. Being already quarantined is a fact about the proposition, so an empty or purely additive diff must still sort those into QuarantineResult.alreadyQuarantined rather than short-circuiting the whole input into QuarantineResult.conforming. Drift checks run on a schedule and most runs find nothing, so short-circuiting would report quarantined records as conforming on those runs.
A pinned proposition a lossy change would otherwise catch must never be flipped to QUARANTINED. Implementations report it as QuarantineResult.protected and leave the proposition itself untouched. This holds even for one an earlier sweep already quarantined before it was pinned; that one is QuarantineResult.alreadyQuarantined, since idempotency (above) takes priority over the pin.
Return
One decision per input proposition.
Parameters
What changed between the old and new schema.
The propositions to evaluate. Any Iterable will do: a list, a repository page, a lazy sequence.