Skip to content

Commit 05a23f5

Browse files
committed
spec: fold PG domain research into why-upgrade spec (v0.2.0)
Deepens the specification with findings from a dedicated PostgreSQL release-note research pass, several of which change the design rather than merely add detail. The justification, sharpened: upstream's migration sections chain a single back-pointer per release, and that chain is provably lossy. A user upgrading 17.4 -> 17.11 who follows the official docs correctly lands on 17.6 and 17.11 and silently misses 17.5 entirely, including its self-referential-FK corruption item and its BRIN bloom data-loss item. Design changes: - A single fixed_in interval is insufficient. Four semantics now modeled: transient, residual (depends on what the cluster EVER ran, not on `from`), creation-time (a cluster made on 18.1 stays broken on 18.6 until catalog surgery, invisible to interval logic), and peer-version (the standard standbys-first rollout is itself the trigger window). - Never invent introduced_in. Backpatch-through says where the fix went, not where the bug started; guessing yields confidently-wrong suppression, the same failure class as a false NOT_EXPOSED. - Managed services get feature probing rather than version arithmetic, since vendors both backport onto frozen minors and lag community. - Detection SQL is curated and regression-tested, never generated at runtime: a hand-rolled partition-FK check produced four false positives during research where upstream's shipped query was correct. - Per-database blindness (pg_proc/pg_constraint/pg_extension) designed in. Ingest hardening: parse from git rather than the rendered HTML, which drops the cross-branch fan-out; take the assigned CVE from the closing attribution paragraph rather than first-match; treat commits as first-class, including the Security: trailer as a commit->CVE join key absent from the notes. Also: the phantom 18.5 (stamped, never released) is already propagating through upstream security metadata and third-party tooling, so wrap-number and shipped-number are distinct fields; observability changes get their own output bucket; extension ALTER EXTENSION UPDATE detection; and a full licensing, attribution and trademark posture. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CX9ZzGyfwfiY1BKmeqP5ic
1 parent e5cae6a commit 05a23f5

4 files changed

Lines changed: 624 additions & 46 deletions

File tree

0 commit comments

Comments
 (0)