Convergence contract

check never mutates; after a successful apply a re-check must return AlreadyConfigured.

The convergence contract is the core rule every resource script obeys: - check must never mutate. It only reports status. - apply must converge so that a re-check returns AlreadyConfigured — and it must converge across processes too, not just within the running one.

Cross-process idempotence

apply must converge so the re-check passes even in a fresh process. The testlab's third run catches state that only exists in-process — see Cross-process idempotence.

How the contract plays out per step is the step lifecycle; how the testlab proves it is the three-run protocol.