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.