Convergence contract

Generated Markdown for references/concept_convergence_contract.md.

Open book page Back to the skill graph

# 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.


> [!WARNING]
> **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]../references/concept_idempotence.md.

How the contract plays out per step is the [step lifecycle]../references/concept_step_lifecycle.md; how the testlab proves it is the [three-run protocol]../references/concept_three_run_protocol.md.

## Related

- [Step lifecycle]../references/concept_step_lifecycle.md

- [Cross-process idempotence]../references/concept_idempotence.md

- [Resource]../references/concept_resource.md

- [Three-run protocol]../references/concept_three_run_protocol.md

[← Back to SKILL.md]../SKILL.md