ADR-006. The emulator is a proof, not the proof of the real cloud
Status: accepted, 4 September 2026. Still in force.
Context
feint is a local emulator of the Scaleway API. It lets every playbook in this
repository run on every pull request, with no credentials and no spend, and it
is what makes SCW_API_URL honoured end to end worth having.
It is also the most dangerous artefact in the repository, for exactly that reason: a green run against an emulator reads identically to a green run against the cloud, and it is not the same claim.
Decision
The emulator proves the shape of a run: that the module builds its request,
that a second pass returns changed=false, that the inventory joins its
addresses, that a playbook resolves by its fully qualified name. It never proves
the cloud.
What it does not apply is written down rather than assumed: quotas, per-zone
availability, propagation delays, error bodies on conflicting states, the real
400 on a reused IP. Each of those has cost a diagnosis at least once.
So a change that touches a module, a plugin or an inventory option is not
finished until it has run against the real account, framed by the residue
check: mise run example:reel, then mise run example:residu. The zero-residue
rule is not politeness, it is what makes the next real run mean something.
Consequences
Four stages of proof exist and none is a substitute for another: classified,
carried by a module, called by the example, played against a target. The first
three are computable offline and belong in the README’s derived blocks; the
fourth depends on a run and does not, which is why mise run coverage:example
publishes it separately, and says “no run recorded” rather than “0 %” when
there is none. Nothing was measured is not nothing worked.
What this record does not decide
Which operations get a module at all. That is ADR-002.