CAP.L0.ASSUMED_VERSION_SKEW — the pinned version and the real server disagree
- Category: safety
- Level: 0
- Stability: stable
- Suites: audit
assume_server_version pins the version the rules reason about, so a lint run over migration files
produces the same result on every machine. This run also reached a real server, and the two versions
do not match.
Why the pin exists at all
A lint run reads files. Without a pin it would reason about whatever server happened to be reachable — so the same migration could be judged differently on a developer's machine and in CI, and the difference would look like a rule being flaky.
Why the skew is reported
Because the pin is only useful while it describes where you actually deploy. Pinned to a version older than production, the run silences rules production needs. Pinned to a newer one, it applies rules the real server cannot support. Both produce a clean-looking report.
The audit itself is not gated on the pin — against a live instance the instance is the authority. The pin governs the lint suite; this notice is where the two meet.
What to do
Move the pin to the version you deploy to, and change it when you upgrade. It belongs in config rather than in a flag, so CI and a developer's machine cannot disagree about it:
// config/sqlens.php
'assume_server_version' => ['pgsql' => '18.0', 'mysql' => '8.4'],
Related
- The lint suite — why a reproducible run pins a version
- Rule withheld by version