The three stacks that use a floating provider constraint do not resolve to
the same thing on the two engines this repository drives, because
registry.terraform.io and registry.opentofu.org do not index in step.
Measured 2026-09-14, reading both registries and applying each stack's own
constraint:
| provider |
constraint here |
terraform init -upgrade takes |
tofu init -upgrade takes |
exoscale/exoscale |
>= 0.71.0 |
0.72.0 (85 stable versions listed) |
0.71.0 (84 listed) |
outscale/outscale |
~> 1.7 |
1.8.0 |
1.8.0 |
scaleway/scaleway |
2.82.0, exact |
2.82.0 |
2.82.0 |
The Exoscale row is two different pieces of software driving the same pack,
and nothing says so. The terraform leg and the opentofu leg both report
"the Exoscale provider passes" while running v0.72.0 and v0.71.0 respectively.
docs/clients.md already says a constraint's resolved version "is not knowable
here"; this is a step further — it is not the same on both legs.
The Outscale row agrees today by luck, not by construction. The same divergence
window applies to it whenever outscale/outscale publishes.
Why this is more than untidiness, for Exoscale specifically
terraformProviderFloor is v0.71.0 (internal/providers/exoscale/pack.go),
and the reason is recorded: below it, the provider honours
EXOSCALE_API_ENDPOINT for only half of its calls and the rest reach a paying
account — 57 requests, measured in #525.
So the opentofu leg currently resolves to exactly the floor, with no margin
at all. It is not below it, and guardSplitClients would refuse a client that
were. But the distance between "safe" and "the case the floor exists for" is
currently zero, and it is held there by a registry's indexing schedule rather
than by anything in this repository.
What is not being claimed
What would settle it
Some way for a run to state which version answered, rather than leaving it
to be reconstructed from a registry days later. The conformance score already
records which client drove each operation; the provider version is the piece it
does not carry. At minimum, the Exoscale stack could pin at or above the floor
rather than floating from it, so the safety margin stops depending on indexing
latency.
Measurement scripts used are throwaway; the numbers above are reproducible by
reading /v1/providers/<ns>/<name>/versions on both registries and applying the
constraint written in each stack.
The three stacks that use a floating provider constraint do not resolve to
the same thing on the two engines this repository drives, because
registry.terraform.ioandregistry.opentofu.orgdo not index in step.Measured 2026-09-14, reading both registries and applying each stack's own
constraint:
terraform init -upgradetakestofu init -upgradetakesexoscale/exoscale>= 0.71.0outscale/outscale~> 1.7scaleway/scaleway2.82.0, exactThe Exoscale row is two different pieces of software driving the same pack,
and nothing says so. The
terraformleg and theopentofuleg both report"the Exoscale provider passes" while running v0.72.0 and v0.71.0 respectively.
docs/clients.mdalready says a constraint's resolved version "is not knowablehere"; this is a step further — it is not the same on both legs.
The Outscale row agrees today by luck, not by construction. The same divergence
window applies to it whenever
outscale/outscalepublishes.Why this is more than untidiness, for Exoscale specifically
terraformProviderFloorisv0.71.0(internal/providers/exoscale/pack.go),and the reason is recorded: below it, the provider honours
EXOSCALE_API_ENDPOINTfor only half of its calls and the rest reach a payingaccount — 57 requests, measured in #525.
So the
opentofuleg currently resolves to exactly the floor, with no marginat all. It is not below it, and
guardSplitClientswould refuse a client thatwere. But the distance between "safe" and "the case the floor exists for" is
currently zero, and it is held there by a registry's indexing schedule rather
than by anything in this repository.
What is not being claimed
Scaleway fixture is exact for a stated reason (The Scaleway Terraform provider moved half a product to instance/v2alpha1, four hours before it broke every apply #257) and the others are
floating for a stated one.
What would settle it
Some way for a run to state which version answered, rather than leaving it
to be reconstructed from a registry days later. The conformance score already
records which client drove each operation; the provider version is the piece it
does not carry. At minimum, the Exoscale stack could pin at or above the floor
rather than floating from it, so the safety margin stops depending on indexing
latency.
Measurement scripts used are throwaway; the numbers above are reproducible by
reading
/v1/providers/<ns>/<name>/versionson both registries and applying theconstraint written in each stack.