Untested column drop

No evidence
The experiment ran, but the previous application version's tests did not exercise every risk-bearing change, so compatibility is not established.

Drops customers.legacy_notes. No v1 test touches it, yet v1 admin code still does.

Recorded example: genuine engine output generated Sat, 24 Oct 2026 18:29:58 GMT from the committed fixture. Run it again live below.

Baseline schema
Proposed schema
Previous versionshop-v1
2/2 test files passno database errors
2/2 test files passno database errors, identical in all 2 runs
Current versionD-no-evidence
Not needed: ordinary CI covers this
Not configured

The outlined cell is the compatibility question. The verdict comes only from it, compared against the cell to its left.

Why

  1. Untested risk-bearing change: customers.legacy_notes (column_removed).

Next step

Add old-application tests that exercise the untested changes, or have a human reviewer explicitly accept the risk.

Starts a throwaway PostgreSQL and runs the full experiment, usually in under 15 seconds.

Schema changes

0 of 1 risk-bearing schema change(s) were exercised by the old application's tests in the control run.

ChangeRisk to old statementsExercised by previous version
Column customers.legacy_notes (text) removedbreakingNo

Runs

Proposed migration: 002_drop_legacy_notes.sql · PostgreSQL 16.15 (Debian 16.15-1.pgdg12+2) · gate blocks the pipeline (exit 3)

RunMigrationsTest filesDatabase errorsStatements logged
control (old app × baseline schema)1/12/2 pass07
candidate #1 (old app × proposed schema)2/22/2 pass07
candidate #2 (old app × proposed schema)2/22/2 pass07

Download this report: JSONMarkdownJUnit XML

What this result does not cover
  • Current application × proposed schema (no current app configured).
  • Performance / lock-time analysis (out of scope).
  • Skewcheck only observes code paths that the old application's tests execute; untested paths are reported as coverage gaps, not as safe.
  • Coverage is identifier-level: a statement "touches" a changed object when it names the table (and column, or uses *). It is not a SQL parser.
  • Correlation between an error and a schema change uses a fixed set of deterministic rules (R1–R6). Anything else is reported as ADVISORY, never UNSAFE.
  • Performance, locking and migration runtime on production-sized data are not evaluated.
  • Test files of one run share a database and run sequentially; ordering effects are identical across runs but are not isolated.
  • Data-only migration effects are detected only when a test asserts on the affected data.