Skip to main content

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'],