chore(deps): postgres 18, and the data directory it now insists on - #483
Merged
Conversation
Dependabot's tag bump alone takes the profile down. From 18 the image stores its cluster in a major-version subdirectory and exits 1 — before any server line — when it finds a mount on the old `/var/lib/postgresql/data`, so the mount moves up a level with the tag.
This was referenced Aug 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Supersedes #477, which bumps the tag alone. That bump takes the
postgresprofile down, and no required check can see it: the service sits behind a profile, and nothing in CI starts it.What changed
docker/compose.yaml—postgres:16→postgres:18, and the volume mount moves from/var/lib/postgresql/dataup one level to/var/lib/postgresql, with a comment carrying the reason..agents/skills/infra/docker-dev/SKILL.md— the symptom and the way out, next to the command that produces it.Why the mount has to move with the tag
From 18 the image stores its cluster in a major-version subdirectory (
PGDATA=/var/lib/postgresql/18/docker) and declares its volume at/var/lib/postgresql. Its entrypoint refuses to start — exit 1, before a single server line — when it finds a mount on the old path. Measured here onpostgres:18(18.4), with the mount this repository had:It fires on an empty volume too, so the tag bump alone is not "breaks on upgrade" — it is "does not start", for everybody.
An existing volume is not adopted
A cluster written by 16 is unreadable to 18 wherever it is mounted; the same refusal fires with the volume moved to the new path. There is nothing to preserve — the compose file already records that this service is wired to nothing, no code reads a
DATABASE_URL— sodocker volume rm visionset_postgres-datais the documented way through, and that is what the skill now says.Test plan
Against the real compose file in this branch,
--profile postgres:docker compose configresolves topostgres:18with the single mountpostgres-data → /var/lib/postgresql.PostgreSQL 18.4 (Debian 18.4-1.pgdg13+1).restart, read it back. The cluster lands in18/dockerinsidevisionset_postgres-data.Static gates, all exit 0:
ruff check .,ruff format --check .,lint-imports(4 kept, 0 broken),mypy src/visionset(152 files).Not run locally: the pytest suites, the frontend suites, and the two browser suites. The diff is one compose file and one markdown file — no Python, no TypeScript, no generated artifact — so none of them can reach it. Full CI on this PR is the arbiter.
Found, not fixed
Two open Dependabot security alerts, both transitive in
pnpm-lock.yaml, neither with a PR:nanoid— already satisfied onmain; the lockfile carries the patched3.3.17, so the alert is stale pending a rescan.js-yaml4.3.0— dev-only, reachable only asopenapi-typescript → @redocly/openapi-core → js-yaml.openapi-typescriptis already at its latest and pins the older major, so no upstream bump resolves it; apnpm.overridesentry is the only route. Left out of this PR as unrelated scope.