Skip to content

Add an update path from 0.1.1 to stable - #22

Merged
jnasbyupgrade merged 20 commits into
masterfrom
real-update-path
Aug 11, 2026
Merged

Add an update path from 0.1.1 to stable#22
jnasbyupgrade merged 20 commits into
masterfrom
real-update-path

Conversation

@jnasbyupgrade

@jnasbyupgrade jnasbyupgrade commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Adds an ALTER EXTENSION UPDATE path for extension_drop, from 0.1.1 -- the only version ever published to PGXN (2017) -- to stable: sql/extension_drop--0.1.1.sql and sql/extension_drop--0.1.1--stable.sql, with TEST_UPDATE_FROM defaulting to 0.1.1.

bin/test_update_path.sh installs 0.1.1, plants the dependency guard, runs ALTER EXTENSION UPDATE, re-proves the guard survives, and asserts the landed version dynamically against extension_drop.control. It runs as extra steps inside the existing test job's matrix legs rather than a separate job, since this leg needs no isolation of its own. Those steps are gated to PG11+: cat_tools.routine__parse_arg_types_text() (called unconditionally by extension_drop's install script, in both 0.1.1 and current) transitively hits a hardcoded DROP ROUTINE that doesn't exist before PG11 -- tracked at #44, since it also affects a fresh install on PG9.3-10.

Also switches LINT_TARGETS to derive from pgxntool's EXTENSION_SQL_FILES instead of hardcoding sql/extension_drop.sql, so it keeps working if this distribution ever gains a second extension.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5221a71d-1a39-48b3-89c9-e70ec7f39a0a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@jnasbyupgrade
jnasbyupgrade changed the base branch from test-install-foundation to rename-1.0.0-to-stable August 4, 2026 22:53
@jnasbyupgrade jnasbyupgrade changed the title Real update path: recover 0.1.1, author 0.1.1→stable diff, rename 1.0.0→stable Real update path: recover 0.1.1, author 0.1.1→stable diff (depends on #26 for the stable rename) Aug 4, 2026
@jnasbyupgrade
jnasbyupgrade force-pushed the rename-1.0.0-to-stable branch from cc387bd to d0c0fe2 Compare August 6, 2026 17:18
@jnasbyupgrade
jnasbyupgrade force-pushed the rename-1.0.0-to-stable branch from d0c0fe2 to 7c306dd Compare August 6, 2026 21:07
@jnasbyupgrade
jnasbyupgrade changed the base branch from rename-1.0.0-to-stable to test-install-foundation August 6, 2026 23:08
@jnasbyupgrade
jnasbyupgrade force-pushed the test-install-foundation branch 3 times, most recently from 2925fca to 03b0355 Compare August 7, 2026 22:14
@jnasbyupgrade
jnasbyupgrade changed the base branch from test-install-foundation to relandstable-rename August 9, 2026 18:00
@jnasbyupgrade

Copy link
Copy Markdown
Contributor Author

Rebased onto #40 (`relandstable-rename`) instead of `master`: this branch needs the `default_version = 'stable'` rename to exist first (its own tree assumes `sql/extension_drop--stable.sql` and the `0.1.1` -> `stable` update path), and that rename hasn't actually reached `master` yet — see #40's description for why.

Two of this branch's own commits (a local "Rename default_version from 1.0.0 to stable" + a follow-up "Strip invented commentary..." fixup) turned out to be an independent, slightly different reimplementation of the same rename that #26/#40 already covers, so they were dropped as duplicates during the rebase rather than replayed on top.

Base is set to `relandstable-rename` for now, not `master`. Once #40 merges, this should be rebased again onto `master` and the base switched back.

Verified post-rebase with `make test`, `make test-update`, `bin/test_update_path.sh`, and `make lint` — all green.

@jnasbyupgrade
jnasbyupgrade changed the base branch from relandstable-rename to master August 10, 2026 18:39
jnasbyupgrade and others added 7 commits August 10, 2026 13:43
…, quoting-requiring schema test

Builds the U&U (update & upgrade) test infrastructure that doesn't require a
real second extension_drop version or pg_upgrade CI to already exist:

- PGXNTOOL_ENABLE_TEST_INSTALL = yes, with test/install/load.sql as the
  committed-once installer for the extension (no test roles exist for this
  extension, so unlike cat_tools there's nothing role-related to add).
- TEST_LOAD_SOURCE (fresh/update/existing) GUC/make-var switch, parse-time
  validated, exported unconditionally, read in load.sql without missing_ok.
  `existing` mode is fully exercised locally (verified against a real,
  already-installed database, including the failure path when the extension
  is genuinely absent). `update` mode is wired up and structurally verified
  end-to-end, but extension_drop has no real prior released version to
  update FROM yet -- the Makefile refuses to run it without TEST_UPDATE_FROM
  set explicitly, and no CI leg exercises it in this repo today.
- Dependency guard (test/sql/dependency_guard.sql): a view depending on
  extension_drop__commands' row type blocks a non-CASCADE DROP EXTENSION;
  proven by actually attempting the drop and asserting failure, not assumed.
- test/sql/schema.sql's custom-schema test names renamed to mixed case
  (requires identifier quoting), reusing its existing coverage rather than
  adding a new schema-testing dimension.
- ci.yml: run `make test && make verify-results` instead of pg-build-test,
  so a real regression actually fails the build (pgxntool's
  .IGNORE: installcheck otherwise reports green regardless of test results,
  per RELEASE.md's existing note about PRs #6/#7).

Moving the extension's own installation into test/install/load.sql required
adapting every test file that used to install it per-test in a rolled-back
transaction (test/deps.sql, test/sql/simple.sql, test/sql/schema.sql,
test/sql/zzz_build.sql) to work against the new committed-once install
instead, since an extension name is a database-wide singleton.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…redate this branch

CI on this branch showed the switch to `make test && make verify-results`
surfacing real pgTAP failures on PostgreSQL 9.3/9.6 (cat_tools/extension_drop
never actually install there). Checked PR #10's own baseline CI
(#10, run
30665031257): PG 9.3 and 9.6 already report "3 of 3 tests failed" in the raw
job log there too, just silently reported as a passing check because
pg-build-test's underlying `make test` hits pgxntool's
`.IGNORE: installcheck` the same way. So this isn't a regression from this
PR's own changes -- it's the exact masking problem RELEASE.md already
documents, just now applying to a different, older part of the PG matrix
than the PRs (#6/#7) it originally cites. Reverting the ci.yml step back to
pg-build-test here keeps this PR scoped to test/install infrastructure;
fixing cat_tools's install path on pre-PG10 belongs to whoever owns that
dependency setup (PR #10 or a follow-up), not this PR.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
extension_drop's real 0.1.1 install script (2017) was never committed to
this repo -- only ever generated as a PGXN dist build artifact and
uploaded directly -- so no update-diff script has ever existed either,
despite a real SQL change between 0.1.1 and the current `stable` source
(removing redundant client_min_messages handling; see #24, which renamed
default_version from the never-released "1.0.0" to `stable` and is a
prerequisite for this branch). That left anyone who actually installed
0.1.1 from PGXN with no path forward at all.

- Recover the real 0.1.1 sql/extension_drop.sql from PGXN's dist archive
  (https://api.pgxn.org/dist/extension_drop/0.1.1/extension_drop-0.1.1.zip)
  and commit it as sql/extension_drop--0.1.1.sql. Add it to DATA
  explicitly (pgxntool's DATA wildcard only picks up the current version
  file and two-dash update scripts, not other historical single-version
  files -- Postgres-Extensions/pgxntool#48).
- Author sql/extension_drop--0.1.1--stable.sql: the actual delta is just
  extension_drop__event_trigger() gaining one RAISE DEBUG line (found by
  diffing recovered 0.1.1 against current source). The client_min_messages
  removal and a cat_tools function rename (function__arg_types_text ->
  routine__parse_arg_types_text) both turned out to be install-script-only
  behavior with nothing persisted to replay.
- Default TEST_UPDATE_FROM to 0.1.1 and wire up a real
  extension-update-test CI job: installs 0.1.1, plants the dependency
  guard, runs ALTER EXTENSION UPDATE, re-proves the guard survived,
  dynamically asserts the version landed at stable, then runs the pgTAP
  suite in update mode. Factored into bin/test_update_path.sh so it's
  runnable locally, not just inline CI YAML.

Verified locally against PG17: 0.1.1 install -> guard blocks non-CASCADE
drop -> ALTER EXTENSION UPDATE -> guard still blocks drop -> version
lands at 'stable' -> full pgTAP suite passes in both fresh and update
modes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
A separate extension-update-test job meant a whole extra container
boot + PostgreSQL startup for a leg that needs no isolation of its
own -- unlike pg_tle's job, which genuinely does. Runs as extra steps
in each matrix leg's already-running container instead.
CREATE EXTENSION ... CASCADE only exists from PG10 -- the script
crashed with a syntax error on the 9.3-9.6 matrix legs. Same branch
test/install/load.sql already uses for the same reason.
cat_tools.routine__parse_arg_types_text() -- called unconditionally by
extension_drop's install script, in both 0.1.1 and current -- hits
cat_tools's hardcoded DROP ROUTINE internally, which doesn't exist
before PG11. Not something to work around here: this is a real,
pre-existing incompatibility affecting a fresh install of current
extension_drop on PG9.3-10 too, just never surfaced by this repo's
non-gating CI until this leg's ON_ERROR_STOP actually failed loudly.
pgxntool 2.3.0 (which this repo now vendors) already includes
sql/extension_drop--0.1.1.sql in its own generated DATA list, since
pgxntool#48 (the gap this DATA += line worked around) was fixed
upstream. Keeping the manual line duplicated the file in DATA and
broke `make install` outright ("will not overwrite just-created ...
with ..."). Left a comment instead of deleting the context entirely,
in case a future pgxntool downgrade reintroduces the gap.
pgxntool's test-build feature needs rsync (pgxntool/run-test-build.sh),
but pg-build-test never actually exercises test-build -- it goes
through a lower-level PGXS path that bypasses this repo's own `test:`
Makefile target. A plain `make test`/`make install` does exercise it,
which is exactly what the new update-path steps (and pg-upgrade-test,
which already installs rsync) do. First real CI exercise of this path
failed with "rsync: command not found" -- confirmed locally the pgTAP
suite itself passes; only the test-build sub-step was missing this
dependency.
@jnasbyupgrade jnasbyupgrade changed the title Real update path: recover 0.1.1, author 0.1.1→stable diff (depends on #26 for the stable rename) Real update path: recover 0.1.1, author 0.1.1→stable diff Aug 10, 2026
@jnasbyupgrade
jnasbyupgrade marked this pull request as ready for review August 10, 2026 19:12
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 4m 12s —— View job


Review: real update path (0.1.1 → stable)

  • Gather context (PR description, CLAUDE.md, diff vs origin/master)
  • Read changed files in full
  • Review sql/extension_drop--0.1.1.sql (recovered artifact)
  • Review sql/extension_drop--0.1.1--stable.sql (update path)
  • Review bin/test_update_path.sh
  • Review Makefile, ci.yml, test/install/load.sql, HISTORY.asc
  • Post final review

Summary

Verified the core claim of the PR directly: diffed the recovered sql/extension_drop--0.1.1.sql against current sql/extension_drop.sql, and the only three deltas are exactly what the header comment in sql/extension_drop--0.1.1--stable.sql says — the removed client_min_messages save/restore scaffolding, the cat_tools.function__arg_types_textroutine__parse_arg_types_text rename (both transient, install-script-only), and the added RAISE DEBUG entry line in extension_drop__event_trigger(), which is the one thing the update script actually replays. sql/<ext>--<last-released-version>--stable.sql also matches the naming convention RELEASE.md documents. bin/test_update_path.sh's guard-plant/update/re-prove-guard/dynamic-version-assert sequence is sound, and the Makefile's claim that pgxntool 2.3.0 already fixes pgxntool#48 (making the manual DATA += redundant) checks out against the vendored pgxntool/HISTORY.asc.

Nothing here looks incorrect or unsafe to merge. One documentation-consistency issue worth fixing while in the area:

.github/workflows/ci.yml, lines ~11–13 (pg-upgrade-test job comment, not touched by this PR's diff) — still says: "extension_drop has only ever shipped one real version (1.0.0 -- see HISTORY.asc/RELEASE.md; the only PGXN listing, 0.1.x from 2017, predates the current SQL entirely)... there is no known pg_upgrade-unsafe old version to bridge from." This PR's own HISTORY.asc entry and test/install/load.sql comment now establish, correctly, that 0.1.1 is the real released version (not "1.0.0", which was never actually cut) and that its SQL does not predate current — it's one RAISE DEBUG line away. Since this same file (a few lines below) now asserts the corrected story for the test job's update leg, leaving the older/wrong framing in the pg-upgrade-test job's header a few lines up is an internal inconsistency in the same file. Worth a follow-up correcting that comment (and reconsidering whether pg-upgrade-test should also bridge from 0.1.1, now that a real old version exists) — low risk, doesn't block this PR.

Minor/optional nit: Makefile's LINT_TARGETS comment (pre-existing, unrelated to this PR's diff) still says "sql/extension_drop--1.0.0.sql is a frozen, already-released version file" — no such file exists; the actual frozen file this PR adds is sql/extension_drop--0.1.1.sql. Same root cause as above (stale "1.0.0" framing), fine to fold into the same follow-up.

Several comments described HOW the 0.1.1 install script got into this
repo ("recovered from PGXN's dist archive", "never previously in this
repo's git history") instead of just stating what it is now (a
byte-for-byte match of PGXN's originally published dist archive).
Also: bin/test_update_path.sh referenced advanced-extension-testing.md,
a container-local doc with no path anyone outside that session can
resolve -- reworded to explain the dependency-guard/dynamic-version
rationale inline instead. Fixed one accuracy issue found along the
way: test/install/load.sql still named a separate "extension-update-test
job" that no longer exists (folded into the main test job's matrix).
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 2m 53s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit 6ef388a landed after the prior review comment, so re-reviewing)
  • Gather CLAUDE.md files relevant to changed paths (root CLAUDE.md, test/CLAUDE.md)
  • Summarize PR changes
  • Run parallel review agents (CLAUDE.md compliance x2, bug-scan x2)
  • Validate flagged issues
  • Post findings

What changed since the last review

The only commit since the prior review (6ef388a, "Drop history-narration and a local-only doc reference from comments") is comment-wording only — no logic touched. It reworded several comments to state facts ("matches PGXN's dist archive byte-for-byte") instead of narrating how the file got here, and replaced a reference to a container-local doc (advanced-extension-testing.md) in bin/test_update_path.sh with an inline explanation. It also fixed a stale reference to a since-removed "extension-update-test job" in test/install/load.sql.

Independent verification

Re-diffed sql/extension_drop--0.1.1.sql against current sql/extension_drop.sql directly: the only deltas are exactly what sql/extension_drop--0.1.1--stable.sql's header claims — removed client_min_messages save/restore scaffolding, the cat_tools.function__arg_types_textroutine__parse_arg_types_text rename (both transient, install-script-only), and the added RAISE DEBUG entry line in extension_drop__event_trigger() (the one change the update script actually replays). Confirmed the replayed function body is byte-for-byte identical to current sql/extension_drop.sql. bin/test_update_path.sh's guard-plant/update/re-prove-guard/dynamic-version-assert sequence is sound, and test/install/load.sql's comment updates match its actual (unchanged) logic.

No CLAUDE.md violations and no new bugs found in this push.

No issues found. Checked for bugs and CLAUDE.md compliance.

For the record, the pre-existing, non-blocking follow-up noted in the prior review still stands (untouched by this PR, so not re-flagged inline): .github/workflows/ci.yml's pg-upgrade-test job header comment (~lines 11-14) still frames "1.0.0" as extension_drop's only real version and says 0.1.x "predates the current SQL entirely" — now inconsistent with this PR's own HISTORY.asc/test job comments establishing 0.1.1 as the real release, one RAISE DEBUG line away from current.

…rom comments

0.1.1 is the only version of extension_drop ever published to PGXN, not
"the last real" one in a series -- and describing it as an "actual real
compat floor" implies a deliberate compatibility boundary that isn't
there. Also drops HISTORY.asc's archaeology narration ("recovered...
never committed... uploaded directly") and ci.yml's "has never surfaced
before now" in favor of stating the current facts directly.
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 1m 29s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit 836639e landed after the prior review, so re-reviewing)
  • Diff the new commit against the previously-reviewed state
  • Verify it's comment-only (no logic/SQL/test changes)
  • Check wording accuracy of the reworded comments
  • Re-check the pre-existing follow-up noted in prior reviews
  • Post findings

What changed since the last review

The only commit since the prior review (836639e, "Drop overstated 'REAL'/compat-floor framing and discovery narration from comments") is comment-wording only, across .github/workflows/ci.yml, HISTORY.asc, Makefile, bin/test_update_path.sh, sql/extension_drop--0.1.1--stable.sql, and test/install/load.sql — no SQL, script logic, or test behavior touched. It replaces "last REAL published PGXN release" / "actual real compat floor" framing with "the only version of extension_drop published to PGXN," and drops HISTORY.asc's narration about how the 0.1.1 file was recovered (never committed, generated as a build artifact, uploaded directly) and ci.yml's "has never surfaced before now," in favor of stating the current facts plainly.

Independent verification

Confirmed via git show 836639e that every hunk is a comment/doc edit — the diff touches no executable line. The new wording is accurate: 0.1.1 genuinely is extension_drop's only PGXN release (not "the last" of several), and the dropped "actual real compat floor" phrasing was arguably overclaiming a deliberate design decision that doesn't exist. This is consistent with — and continues correcting toward — the same facts already independently verified in the prior two reviews (the 0.1.1 SQL matches current source byte-for-byte modulo three known deltas, the update script replays exactly the right one, bin/test_update_path.sh's guard/update/re-assert sequence is sound).

No CLAUDE.md violations and no new bugs in this push.

No issues found in the new commit.

The one pre-existing, non-blocking item flagged in earlier reviews still stands, untouched by this push: .github/workflows/ci.yml's pg-upgrade-test job header comment (lines ~10-14) still says extension_drop "has only ever shipped one real version (1.0.0 ...)" and that 0.1.x "predates the current SQL entirely" — now inconsistent with this PR's own corrected framing (0.1.1 is the real release, one RAISE DEBUG line away from current). Worth a follow-up, but note it lives under .github/workflows/, which is outside what this bot can edit directly — a human will need to make that change.

An update script from 0.1.1 to stable is ordinary infrastructure and
doesn't need repeated defending -- the same "matches PGXN's dist archive
byte-for-byte" justification was copy-pasted across six files. State it
plainly once (in the file it actually concerns) and just reference the
version/files elsewhere.
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 54s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit b5c860a landed after the prior review, so re-reviewing)
  • Gather CLAUDE.md context
  • Diff the new commit against the previously-reviewed state
  • Verify it's comment-only (no logic/SQL/test changes)
  • Post findings

What changed since the last review

The only commit since the prior review (b5c860a, "Trim redundant byte-for-byte provenance justification from comments") is comment/doc wording only, across .github/workflows/ci.yml, HISTORY.asc, Makefile, bin/test_update_path.sh, sql/extension_drop--0.1.1--stable.sql, and test/install/load.sql — no SQL, script logic, or test behavior touched (confirmed via git show b5c860a: every hunk is a comment/doc edit). It removes the same "matches PGXN's dist archive byte-for-byte" justification that had been copy-pasted across six files, stating it once (in sql/extension_drop--0.1.1--stable.sql, the file it actually concerns) and just referencing the version/files elsewhere.

Independent verification

Total diff stat vs origin/master is unchanged from what earlier reviews verified (533 insertions / 20 deletions across the same 7 files), confirming this commit is a pure internal rebalancing of comment text with no new or removed lines of substance. The trimmed comments remain accurate — none of the removed phrasing was load-bearing for a claim that isn't still stated somewhere in the tree (sql/extension_drop--0.1.1--stable.sql's header still explains the 0.1.1→stable delta in full). This is consistent with the facts already independently verified in prior reviews on this PR: the 0.1.1 SQL matches current source byte-for-byte modulo three known deltas, the update script replays exactly the right one, and bin/test_update_path.sh's guard/update/re-assert sequence is sound.

No CLAUDE.md violations and no new bugs in this push.

No issues found in the new commit.

The one pre-existing, non-blocking item flagged in earlier reviews still stands, untouched by this push: .github/workflows/ci.yml's pg-upgrade-test job header comment (lines ~10-14) still says extension_drop "has only ever shipped one real version (1.0.0 ...)" and that 0.1.x "predates the current SQL entirely" — inconsistent with this PR's own corrected framing (0.1.1 is the real release, one RAISE DEBUG line away from current). Worth a follow-up, but it lives under .github/workflows/, which is outside what this bot can edit directly — a human will need to make that change.

…comments

- ci.yml: point at #44 instead of
  re-explaining the incompatibility inline and promising to track it
  "separately."
- bin/test_update_path.sh: drop the "PROVEN, not assumed" framing --
  that's just what a test does.
- HISTORY.asc: a new version's update script isn't user-facing news, drop
  the entry.
- Makefile: drop the paragraph claiming base.mk's DATA wildcard won't ship
  sql/extension_drop--0.1.1.sql on its own -- false since pgxntool 2.3.0,
  which already ships it (per the NOTE immediately below, which stays).
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 1m 31s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit 61f728f landed after the prior review, so re-reviewing)
  • Diff the new commit against the previously-reviewed state
  • Verify it's comment/doc-only (no logic/SQL/test changes)
  • Check wording/link accuracy of the changed comments
  • Re-check the pre-existing follow-up noted in prior reviews
  • Post findings

What changed since the last review

The only commit since the prior review (61f728f, "Link the pre-PG11 DROP ROUTINE gap to an issue; drop stale/restating comments") touches only .github/workflows/ci.yml, HISTORY.asc, Makefile, and bin/test_update_path.sh — no SQL, script logic, or test behavior changed (7 insertions / 23 deletions, all comment/doc text). Specifically:

  • ci.yml: replaces an inline re-explanation of the pre-PG11 DROP ROUTINE incompatibility with a link to extension_tools#44, instead of promising to "track it separately."
  • bin/test_update_path.sh: drops "PROVEN, not assumed" framing as unnecessary — a test proving its assertions is a given.
  • HISTORY.asc: drops the "Add an update path from 0.1.1 to stable" entry, on the reasoning that a new version's update script isn't itself user-facing news.
  • Makefile: drops a paragraph claiming base.mk's DATA wildcard wouldn't ship sql/extension_drop--0.1.1.sql on its own — that claim is false as of pgxntool 2.3.0 (which already ships it), and the accurate NOTE just below it already covers this.

Independent verification

Confirmed via git diff b5c860a..HEAD --stat that the change is fully contained to comment/doc text in those four files, consistent with the commit's own description. The new ci.yml wording accurately reflects the incompatibility (a hardcoded DROP ROUTINE that doesn't exist before PG11, hit transitively via cat_tools) and #44 is a real, applicable tracking issue. This is consistent with the facts already independently verified in prior reviews on this PR: the 0.1.1 SQL matches current source byte-for-byte modulo three known deltas, the update script replays exactly the right one, and bin/test_update_path.sh's guard/update/re-assert sequence is sound.

No CLAUDE.md violations and no new bugs in this push.

No issues found in the new commit.

The one pre-existing, non-blocking item flagged in earlier reviews still stands, untouched by this push: .github/workflows/ci.yml's pg-upgrade-test job header comment (lines ~10-14) still says extension_drop "has only ever shipped one real version (1.0.0 ...)" and that 0.1.x "predates the current SQL entirely" — inconsistent with this PR's own corrected framing (0.1.1 is the real release, one RAISE DEBUG line away from current). That same header block also still references a container-local ~/advanced-extension-testing.md path, which a prior commit on this PR (836639e) already stopped doing elsewhere (bin/test_update_path.sh) in favor of inline explanation. Worth a follow-up, but it lives under .github/workflows/, which is outside what this bot can edit directly — a human will need to make that change.

@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 1m 35s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commits 876a899, d5a7f5c, 832f60c landed after the prior review, so re-reviewing)
  • Diff the new commits against the previously-reviewed state
  • Verify whether logic/SQL/test behavior changed
  • Re-check the pre-existing follow-up noted in prior reviews
  • Post findings

What changed since the last review

Three commits since the prior review, all comment/doc-only (confirmed via git show on each — no executable line touched):

  • 876a899 — drops a Makefile NOTE that warned against manually adding DATA += sql/extension_drop--0.1.1.sql (would duplicate what pgxntool 2.3.0's own DATA wildcard already covers and break make install).
  • d5a7f5ctest/install/load.sql: shortens the TEST_UPDATE_FROM comment, dropping the sql/extension_drop--0.1.1--stable.sql file reference and "this branch is exercised in CI" framing.
  • 832f60c — deletes the entire 27-line header comment from sql/extension_drop--0.1.1--stable.sql, which had explained why the update script replays only the RAISE DEBUG line and deliberately skips the other two known 0.1.1→stable deltas (client_min_messages scaffolding, cat_tools function rename).

Independent verification

git diff origin/master...HEAD --stat still totals the same 6 files touched; these three commits are pure subtractions (0 insertions across all three except d5a7f5c's 2-line reword), so no new logic, SQL, or test behavior was introduced. sql/extension_drop--0.1.1--stable.sql's SQL body is unchanged and still correct (I re-verified in earlier reviews that it byte-for-byte matches current sql/extension_drop.sql's function body).

Unlike the prior rounds of comment-trimming on this PR — which each removed text that was redundant with something still documented elsewhere — these three deletions remove content that isn't restated anywhere else in the tree:

  • The DATA += footgun warning (876a899) is now undocumented anywhere; pgxntool#48 isn't referenced elsewhere in this repo.
  • The removed header in sql/extension_drop--0.1.1--stable.sql (832f60c) was the only place explaining why the update script's scope stops at one line — that rationale isn't captured in HISTORY.asc or anywhere else.

Neither is a functional bug, and it's consistent with this PR's overall direction of paring comments down to just the facts — but flagging in case the loss of that rationale (particularly the update-script-scope explanation, which a future contributor extending this update path would want) wasn't intentional.

No CLAUDE.md violations and no new bugs in this push.

The one pre-existing, non-blocking item flagged in every prior review still stands, untouched by this push: .github/workflows/ci.yml's pg-upgrade-test job header comment (lines ~10-14) still says extension_drop "has only ever shipped one real version (1.0.0 ...)" and that 0.1.x "predates the current SQL entirely" — inconsistent with this PR's own corrected framing (0.1.1 is the real release, one RAISE DEBUG line away from current). It also still references a container-local ~/advanced-extension-testing.md path. Outside what this bot can edit (.github/workflows/) — a human will need to make that change. The Makefile's LINT_TARGETS comment (line 110) also still says "sql/extension_drop--1.0.0.sql is a frozen, already-released version file" — no such file exists; the actual frozen file is sql/extension_drop--0.1.1.sql.

Dropped claims contradicted elsewhere in the repo: extension_drop's
declared version is no longer "1.0.0" and 0.1.1 is exactly the real,
still-relevant release this PR adds an update path from -- not something
that "predates the current SQL entirely". The old_pg-floor-vs-9.3
tangent is moot too: META.in.json's own floor is already 12, matching
this job's, so there's no discrepancy left to explain. Also drops a
container-local doc path and a reference to a specific commit message,
neither resolvable outside this session/repo's git history. The
CAT_TOOLS_GIT_REF mechanism this paragraph re-explained is already fully
covered a few lines below (the env: block's own comment).
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 1m 6s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit 451af71 landed after the prior review, so re-reviewing)
  • Diff the new commit against the previously-reviewed state
  • Verify the factual claims in the reworded ci.yml comment
  • Re-check the pre-existing follow-ups noted in prior reviews
  • Post findings

What changed since the last review

The only commit since the prior review (451af71, "ci.yml: fix stale pg-upgrade-test header comment, trim verbosity") touches only .github/workflows/ci.yml (2 insertions / 16 deletions, comment-only). It rewrites the pg-upgrade-test job's header paragraph, dropping:

  • the stale "1.0.0 is the only real version, 0.1.1 predates the current SQL entirely" framing — exactly the inconsistency flagged in every prior review on this PR,
  • an "old_pg floor is 12, NOT extension_drop's own claimed 9.3 floor" tangent,
  • a container-local ~/advanced-extension-testing.md path reference and a reference to a specific commit message by name.

Independent verification

  • extension_drop.control declares default_version = 'stable' and HISTORY.asc documents 0.1.1 as the real prior release being promoted from — the new comment's framing ("0.1.1 is exactly the real, still-relevant release this PR adds an update path from") is now accurate and consistent with the rest of the tree.
  • The "old_pg floor" tangent is genuinely moot now: META.in.json declares "PostgreSQL": "12.0" (with its own comment noting it matches cat_tools's requirement), and the pg-upgrade-test matrix's old_pg values are 12/16/12 — so there's no discrepancy left to explain.
  • The claim that "the CAT_TOOLS_GIT_REF mechanism is already fully covered a few lines below" checks out — the env: block's own comment (lines ~19-26) explains it in full.
  • No dangling references were left behind: the removed ~/advanced-extension-testing.md mention in this paragraph was the one under pg-upgrade-test; a separate, unrelated reference to the same doc elsewhere in ci.yml (the docs-only-skip gate) is untouched by this commit and not part of this concern.

This directly resolves the one outstanding item every prior review on this PR flagged (the pg-upgrade-test header's stale "1.0.0"/pre-dates-current-SQL framing). No CLAUDE.md violations and no new bugs in this push.

No issues found in the new commit.

One pre-existing, non-blocking nit noted in earlier reviews still stands, untouched by this or any prior push: Makefile line 110's LINT_TARGETS comment still says "sql/extension_drop--1.0.0.sql is a frozen, already-released version file" — no such file exists; the actual frozen file this PR adds is sql/extension_drop--0.1.1.sql. Low risk, fine to fold into a follow-up whenever convenient.

…ARGETS comment

No such file exists -- state the general policy (frozen version files
aren't linted) instead of naming one, so it doesn't go stale again as
new versions release.
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 48s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit 88b1f8c landed after the prior review, so re-reviewing)
  • Diff the new commit against the previously-reviewed state
  • Verify whether it resolves the outstanding non-blocking follow-up
  • Post findings

What changed since the last review

The only commit since the prior review (88b1f8c, "Makefile: fix stale sql/extension_drop--1.0.0.sql reference in LINT_TARGETS comment") touches only Makefile (comment-only — the LINT_TARGETS assignment itself, line 115, is unchanged). It replaces the stale claim that sql/extension_drop--1.0.0.sql is "a frozen, already-released version file" (no such file exists) with the general policy statement — frozen, already-released version files aren't linted — without naming a specific filename, so the comment won't go stale again as new versions release.

Independent verification

Confirmed via git show 88b1f8c that the diff is a pure comment reword (5 lines changed, no executable content). LINT_TARGETS = sql/extension_drop.sql test/ is byte-identical before and after, so make lint's behavior is unaffected. This resolves the last standing nit from every prior review on this PR (the stale --1.0.0.sql reference); the other previously-flagged item (ci.yml's pg-upgrade-test header framing) was already fixed by 451af71 in the prior round.

No CLAUDE.md violations and no new bugs in this push.

No issues found. Both non-blocking follow-ups noted across earlier reviews on this PR are now resolved. Nothing else outstanding — this PR looks ready to merge from a review standpoint.

…dcoding it

pgxntool's control.mk.sh already generates EXTENSION_SQL_FILES (one
sql/<ext>.sql per .control file at the repo root) -- exactly the
hand-maintained-source scoping this needed, and it keeps working
unchanged if this distribution ever gains a second extension.
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 1m 56s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit f373378 landed after the prior review, so re-reviewing)
  • Diff the new commit against the previously-reviewed state
  • Verify whether logic/SQL/test behavior changed
  • Post findings

What changed since the last review

The only commit since the prior review (f373378, "Makefile: derive LINT_TARGETS from EXTENSION_SQL_FILES instead of hardcoding it") touches only Makefile (3 insertions / 1 net line changed, comment + one assignment). It replaces the hardcoded LINT_TARGETS = sql/extension_drop.sql test/ with LINT_TARGETS = $(EXTENSION_SQL_FILES) test/, and updates the surrounding comment to explain why.

Independent verification

  • pgxntool/control.mk.sh (vendored) generates EXTENSION_SQL_FILES += sql/${ext}.sql once per .control file found at the repo root. This repo has exactly one, extension_drop.control, so $(EXTENSION_SQL_FILES) resolves to exactly sql/extension_drop.sql — byte-identical to the value it replaces. This is a behavior-preserving refactor for the current single-extension state, and generalizes correctly if a second extension's .control file is ever added (each would get its own hand-maintained sql/<ext>.sql picked up automatically, while frozen sql/<ext>--<version>.sql files stay excluded — the property this scoping exists for, per the comment above it).
  • The variable is available in time: Makefile does include pgxntool/base.mk (line 60) before LINT_TARGETS is assigned (line 118), and base.mk (-include control.mk at line 47) is what defines EXTENSION_SQL_FILES via the generated control.mk. This is the same mechanism the build already relies on elsewhere (EXTENSION__CURRENT_VERSION__FILES feeds DATA and the all: target in base.mk), so it's a proven code path, not a new one.
  • No other file references the old hardcoded LINT_TARGETS value or assumes it's a literal string, so this is self-contained.

No CLAUDE.md violations and no bugs found in this push.

No issues found. Both non-blocking follow-ups noted in earlier rounds of review on this PR were already resolved in prior commits (451af71, 88b1f8c). This latest commit is a small, safe, behavior-preserving Makefile refactor. Nothing outstanding — this PR looks ready to merge from a review standpoint.

@jnasbyupgrade jnasbyupgrade changed the title Real update path: recover 0.1.1, author 0.1.1→stable diff Add an update path from 0.1.1 to stable Aug 10, 2026
@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

Claude finished @jnasbyupgrade's task in 1m 42s —— View job


Code review

  • Check PR eligibility (not closed/draft; new commit 5121af4 landed after the prior review, so re-reviewing)
  • Diff the new commit against the previously-reviewed state
  • Verify whether logic/SQL/test behavior changed
  • Post findings

What changed since the last review

The only new commit since the prior review (5121af4, "Merge branch 'master' into real-update-path") is a merge of origin/master into this branch — it brings in cdbf348 (#21, the pg_tle deployment smoke test), which is unrelated to this PR's own work. The merge itself is clean: it only touches .github/workflows/ci.yml (adding the new pg-tle-test job and appending it to all-checks-passed's needs: list) and adds a new bin/assert_fs_clean file — both purely additive, from master, with zero overlap or conflict against this PR's own ci.yml edits (the pg-upgrade-test header, the update-path steps inside the test job matrix).

Independent verification

  • git diff origin/master...HEAD --stat still totals exactly 493 insertions / 42 deletions across the same 6 files this PR has always touched (ci.yml, Makefile, bin/test_update_path.sh, the two new sql/extension_drop--0.1.1*.sql files, test/install/load.sql) — matching the PR's own reported additions/deletions. The merge added no new content to this PR's actual diff surface; bin/assert_fs_clean and the pg-tle-test job are already on master, not new here.
  • git show 5121af4 --stat confirms the merge changed only ci.yml (+156/-1) and added bin/assert_fs_clean (+85) — both are master's content, inserted between the end of the test job and the pre-existing all-checks-passed job, with no textual overlap with this PR's own hunks.
  • CI on the merge commit passed (run 31517013621), confirming the merge didn't break anything.

This is consistent with every fact already independently verified in prior reviews on this PR: the 0.1.1 SQL matches current source byte-for-byte modulo the three documented deltas, the update script replays exactly the right one, and bin/test_update_path.sh's guard/update/re-assert sequence is sound.

No CLAUDE.md violations and no bugs found in this push.

No issues found. This was a routine, conflict-free sync merge with master — no new logic, SQL, or test behavior to review. All previously-flagged non-blocking follow-ups were already resolved in earlier commits (451af71, 88b1f8c). Nothing outstanding — this PR looks ready to merge from a review standpoint.

@jnasbyupgrade
jnasbyupgrade merged commit 741fa1d into master Aug 11, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant