From 350b8b1298816d6a49ce41bb8b2605078a3cbb4d Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 21 Sep 2026 16:51:43 -0700 Subject: [PATCH 1/5] Vendor pgstencil from a clean revision with kysely as a Hosted peer pgstencil now shares kysely and hono with the application as peers instead of pinning its own copies, so Hosted declares kysely and Renovate updates the one copy both sides use. The refresh also brings in pgstencil's Microsoft signing-key fix and quieter expected-rejection diagnostics. The sync script packs a committed revision in a temporary worktree, so the recorded provenance is clean and production preflight accepts it; --working-tree packs an unfinished checkout for local experiments. Co-Authored-By: Claude Opus 5 (1M context) --- docs/specs/hosted.md | 2 + hosted/README.md | 23 ++++--- hosted/package.json | 1 + pnpm-lock.yaml | 30 +++++---- scripts/spec-word-budgets.json | 2 +- scripts/sync-pgstencil.mjs | 108 ++++++++++++++++++++------------ vendor/build.json | 8 +-- vendor/pgstencil-0.1.0.tgz | Bin 15793 -> 15798 bytes vendor/pgstencil-auth-0.1.0.tgz | Bin 34378 -> 34680 bytes 9 files changed, 105 insertions(+), 69 deletions(-) diff --git a/docs/specs/hosted.md b/docs/specs/hosted.md index d44143bc1..f26c38ace 100644 --- a/docs/specs/hosted.md +++ b/docs/specs/hosted.md @@ -11,6 +11,8 @@ **Must pin locally packed core/auth packages through root pnpm overrides and commit archives, provenance, and lockfile together.** `vendor/build.json` records the source commit, dirty state, and archive hashes. No runtime import depends on a sibling checkout. The auth migrations remain owned by the package. +**Must declare pgstencil's peer dependencies (`kysely`, `hono`) in `hosted/package.json`**, so the archives share Hosted's copy and Renovate updates it. + Source of truth: `auth` in `hosted/server/worker.ts`; `workerApp` in `hosted/server/worker-app.ts`; `migrations` in `hosted/server/migrations.ts`; `scripts/sync-pgstencil.mjs`. Pinned by `hosted/server/tests/artifacts.test.ts`. ## Identity and login diff --git a/hosted/README.md b/hosted/README.md index f3f16dd1d..a6ef6e6da 100644 --- a/hosted/README.md +++ b/hosted/README.md @@ -38,18 +38,21 @@ does not deploy. ## Refresh private packages ```sh -node scripts/sync-pgstencil.mjs /path/to/pgstencil +node scripts/sync-pgstencil.mjs /path/to/pgstencil [revision] ``` -This runs `pnpm packages:pack` in pgstencil, vendors core/auth, records source -commit/dirty state and SHA-256 hashes in `vendor/build.json`, and installs. The -direct Node command also works before the archives exist (pnpm may otherwise -auto-install first). See `docs/specs/hosted.md` -> "Application boundary" for -what has to be committed together. - -Re-run integration tests after every refresh. The initial vendored pgstencil -manifest is dirty; production preflight rejects it until it is refreshed from an -accepted clean revision with matching archive hashes. +This checks out the pgstencil revision (default `HEAD`) in a temporary clean +worktree, runs `pnpm packages:pack` there, vendors core/auth, records the commit, +`dirty: false` and SHA-256 hashes in `vendor/build.json`, and installs. To try +uncommitted pgstencil changes, pass `--working-tree` instead of a revision; it +packs the checkout as it stands and records whether it was dirty, which +production preflight rejects. The direct Node command also works before the +archives exist (pnpm may otherwise auto-install first). See +`docs/specs/hosted.md` -> "Application boundary" for what has to be committed +together. + +Re-run integration tests after every refresh. Vendor an accepted pgstencil +revision before a production release. ## Resource inventory diff --git a/hosted/package.json b/hosted/package.json index 90e6a5bde..a979c5aaf 100644 --- a/hosted/package.json +++ b/hosted/package.json @@ -20,6 +20,7 @@ "dependencies": { "@pgstencil/auth": "file:../vendor/pgstencil-auth-0.1.0.tgz", "pgstencil": "file:../vendor/pgstencil-0.1.0.tgz", + "kysely": "^0.29.5", "hono": "^4.13.8", "@hono/node-server": "^2.0.10", "react": "^19.2.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa9a231ce..1d9fd670d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,13 +98,16 @@ importers: version: 2.1.1(hono@4.13.8) '@pgstencil/auth': specifier: file:../vendor/pgstencil-auth-0.1.0.tgz - version: file:vendor/pgstencil-auth-0.1.0.tgz(pg@8.23.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(supports-color@10.2.2)(vitest@4.1.11(@types/node@24.13.6)(jsdom@29.1.1(@noble/hashes@2.4.0))(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))) + version: file:vendor/pgstencil-auth-0.1.0.tgz(hono@4.13.8)(kysely@0.29.5)(pg@8.23.0)(pgstencil@file:vendor/pgstencil-0.1.0.tgz(kysely@0.29.5)(supports-color@10.2.2))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vitest@4.1.11(@types/node@24.13.6)(jsdom@29.1.1(@noble/hashes@2.4.0))(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))) hono: specifier: ^4.13.8 version: 4.13.8 + kysely: + specifier: ^0.29.5 + version: 0.29.5 pgstencil: specifier: file:../vendor/pgstencil-0.1.0.tgz - version: file:vendor/pgstencil-0.1.0.tgz(supports-color@10.2.2) + version: file:vendor/pgstencil-0.1.0.tgz(kysely@0.29.5)(supports-color@10.2.2) react: specifier: ^19.2.6 version: 19.3.0 @@ -2383,9 +2386,13 @@ packages: os: [win32] '@pgstencil/auth@file:vendor/pgstencil-auth-0.1.0.tgz': - resolution: {integrity: sha512-sEnEGu+U9nLtJeV9qP39SIGf1D8gtgiQpC6apTjnHy+2LwaSxgqLKG4bgURw3mqVaNf4DYm6D8Y6xi+Iy5q+Lw==, tarball: file:vendor/pgstencil-auth-0.1.0.tgz} + resolution: {integrity: sha512-gfnfb5HOlYS7anaPCD3890fLvlloczS7gvb3+Fh6mXldrYNoK0HjtDVit68pQb9kbPivyUSduuoKS/2jAoeHgw==, tarball: file:vendor/pgstencil-auth-0.1.0.tgz} version: 0.1.0 engines: {node: '>=24'} + peerDependencies: + hono: ^4.13.7 + kysely: ^0.29.5 + pgstencil: ^0.1.0 '@phosphor-icons/react@2.1.10': resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} @@ -5197,9 +5204,11 @@ packages: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} pgstencil@file:vendor/pgstencil-0.1.0.tgz: - resolution: {integrity: sha512-I9a0Ohlz62aKqvCiVaoyWQOcx0vl5S9y15g7NvfJKyw7DUM9Xp5vW81wCsuVboe4h8F2wAPq1YCakel5ssPxcA==, tarball: file:vendor/pgstencil-0.1.0.tgz} + resolution: {integrity: sha512-tJncl/ELHO09guw0Mm1kBDC9de8gNOMQLv96MLCoWqDFW7oyHyfNxO/2A8Jy7EeVh/K1PELawu507Ohs3WSXMQ==, tarball: file:vendor/pgstencil-0.1.0.tgz} version: 0.1.0 engines: {node: '>=24'} + peerDependencies: + kysely: ^0.29.5 picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -7670,13 +7679,14 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.21.2': optional: true - '@pgstencil/auth@file:vendor/pgstencil-auth-0.1.0.tgz(pg@8.23.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(supports-color@10.2.2)(vitest@4.1.11(@types/node@24.13.6)(jsdom@29.1.1(@noble/hashes@2.4.0))(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))': + '@pgstencil/auth@file:vendor/pgstencil-auth-0.1.0.tgz(hono@4.13.8)(kysely@0.29.5)(pg@8.23.0)(pgstencil@file:vendor/pgstencil-0.1.0.tgz(kysely@0.29.5)(supports-color@10.2.2))(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vitest@4.1.11(@types/node@24.13.6)(jsdom@29.1.1(@noble/hashes@2.4.0))(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))': dependencies: better-auth: 1.7.3(pg@8.23.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(vitest@4.1.11(@types/node@24.13.6)(jsdom@29.1.1(@noble/hashes@2.4.0))(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))) hono: 4.13.8 + jose: 6.2.12 kysely: 0.29.5 openid-client: 6.8.8 - pgstencil: file:vendor/pgstencil-0.1.0.tgz(supports-color@10.2.2) + pgstencil: file:vendor/pgstencil-0.1.0.tgz(kysely@0.29.5)(supports-color@10.2.2) transitivePeerDependencies: - '@cloudflare/workers-types' - '@lynx-js/react' @@ -7685,9 +7695,6 @@ snapshots: - '@sveltejs/kit' - '@tanstack/react-start' - '@tanstack/solid-start' - - '@types/pg' - - bare-abort-controller - - bare-buffer - better-sqlite3 - drizzle-kit - drizzle-orm @@ -7695,13 +7702,10 @@ snapshots: - mysql2 - next - pg - - pg-native - prisma - react - react-dom - - react-native-b4a - solid-js - - supports-color - svelte - vitest - vue @@ -10556,7 +10560,7 @@ snapshots: dependencies: split2: 4.2.0 - pgstencil@file:vendor/pgstencil-0.1.0.tgz(supports-color@10.2.2): + pgstencil@file:vendor/pgstencil-0.1.0.tgz(kysely@0.29.5)(supports-color@10.2.2): dependencies: cheerio: 1.2.0 kysely: 0.29.5 diff --git a/scripts/spec-word-budgets.json b/scripts/spec-word-budgets.json index 9695d7096..ff885e533 100644 --- a/scripts/spec-word-budgets.json +++ b/scripts/spec-word-budgets.json @@ -9,7 +9,7 @@ "docs/specs/dor-cli.md": 5900, "docs/specs/dor-tool.md": 4100, "docs/specs/glossary.md": 2950, - "docs/specs/hosted.md": 1050, + "docs/specs/hosted.md": 1100, "docs/specs/layout.md": 9900, "docs/specs/mobile-terminal-ui.md": 2000, "docs/specs/mouse-and-clipboard.md": 3750, diff --git a/scripts/sync-pgstencil.mjs b/scripts/sync-pgstencil.mjs index eaeef0331..4ed3360ba 100644 --- a/scripts/sync-pgstencil.mjs +++ b/scripts/sync-pgstencil.mjs @@ -1,17 +1,29 @@ import { execFileSync } from "node:child_process"; -import { mkdirSync, readFileSync, writeFileSync, copyFileSync } from "node:fs"; -import { resolve } from "node:path"; +import { + mkdirSync, + mkdtempSync, + readFileSync, + writeFileSync, + copyFileSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import { join, resolve } from "node:path"; import { createHash } from "node:crypto"; import { fileURLToPath } from "node:url"; const root = fileURLToPath(new URL("../", import.meta.url)); -const source = process.argv[2]; +const [source, ...options] = process.argv.slice(2); if (!source) - throw new Error("Usage: pnpm pgstencil:sync /path/to/pgstencil [--packed]"); + throw new Error( + "Usage: pnpm pgstencil:sync /path/to/pgstencil [ | --working-tree]", + ); const repository = resolve(source); -const run = (command, args, cwd = repository) => - execFileSync(command, args, { cwd, stdio: "inherit" }); -if (!process.argv.includes("--packed")) run("pnpm", ["packages:pack"]); +const workingTree = options.includes("--working-tree"); +const revision = options.find((option) => !option.startsWith("--")) ?? "HEAD"; +const run = (command, args, cwd, env = process.env) => + execFileSync(command, args, { cwd, stdio: "inherit", env }); +const git = (...args) => + execFileSync("git", args, { cwd: repository, encoding: "utf8" }).trim(); const manifest = JSON.parse( readFileSync(resolve(root, "hosted/package.json"), "utf8"), ); @@ -28,45 +40,59 @@ const overrides = new Map( return entry ? [[entry[1], entry[2]]] : []; }), ); -mkdirSync(resolve(root, "vendor"), { recursive: true }); +// Pack a committed revision in a temporary worktree, so nothing uncommitted or +// untracked in the pgstencil checkout (a stray migration, editor settings) can +// reach an archive, and build.json truthfully records `dirty: false`. +// --working-tree packs the checkout as it stands, for trying unfinished +// pgstencil changes; production preflight refuses that dirty result. +const commit = git( + "rev-parse", + "--verify", + `${workingTree ? "HEAD" : revision}^{commit}`, +); +const dirty = workingTree && !!git("status", "--porcelain"); +const checkout = workingTree + ? repository + : mkdtempSync(join(tmpdir(), "pgstencil-sync-")); +// pgstencil's scripts locate their project from this variable before the cwd. +const pgstencil = { ...process.env, PGSTENCIL_PROJECT_ROOT: checkout }; +if (!workingTree) git("worktree", "add", "--detach", checkout, commit); const files = []; -for (const [directory, name] of [ - ["pgstencil", "pgstencil"], - ["auth", "@pgstencil/auth"], -]) { - const pkg = JSON.parse( - readFileSync( - resolve(repository, `packages/${directory}/package.json`), - "utf8", - ), - ); - const filename = `${name.replace("@", "").replace("/", "-")}-${pkg.version}.tgz`; - if (manifest.dependencies[name] !== `file:../vendor/${filename}`) - throw new Error(`Update hosted/package.json for ${filename}`); - if (overrides.get(name) !== `file:vendor/${filename}`) - throw new Error( - `Update the pnpm-workspace.yaml override for ${name} to file:vendor/${filename}`, +try { + if (!workingTree) + run("pnpm", ["install", "--frozen-lockfile"], checkout, pgstencil); + run("pnpm", ["packages:pack"], checkout, pgstencil); + mkdirSync(resolve(root, "vendor"), { recursive: true }); + for (const [directory, name] of [ + ["pgstencil", "pgstencil"], + ["auth", "@pgstencil/auth"], + ]) { + const pkg = JSON.parse( + readFileSync( + resolve(checkout, `packages/${directory}/package.json`), + "utf8", + ), ); - const target = resolve(root, "vendor", filename); - copyFileSync(resolve(repository, "dist/packages", filename), target); - files.push({ - filename, - sha256: createHash("sha256").update(readFileSync(target)).digest("hex"), - }); + const filename = `${name.replace("@", "").replace("/", "-")}-${pkg.version}.tgz`; + if (manifest.dependencies[name] !== `file:../vendor/${filename}`) + throw new Error(`Update hosted/package.json for ${filename}`); + if (overrides.get(name) !== `file:vendor/${filename}`) + throw new Error( + `Update the pnpm-workspace.yaml override for ${name} to file:vendor/${filename}`, + ); + const target = resolve(root, "vendor", filename); + copyFileSync(resolve(checkout, "dist/packages", filename), target); + files.push({ + filename, + sha256: createHash("sha256").update(readFileSync(target)).digest("hex"), + }); + } +} finally { + if (!workingTree) git("worktree", "remove", "--force", checkout); } -const git = (...args) => - execFileSync("git", args, { cwd: repository, encoding: "utf8" }).trim(); writeFileSync( resolve(root, "vendor/build.json"), - JSON.stringify( - { - commit: git("rev-parse", "HEAD"), - dirty: !!git("status", "--porcelain"), - files, - }, - null, - 2, - ) + "\n", + JSON.stringify({ commit, dirty, files }, null, 2) + "\n", ); // A changed tarball integrity is resolved by a normal install. --force also // installs foreign-platform optional binaries and distorts dependency disclosure. diff --git a/vendor/build.json b/vendor/build.json index caf4bfb2c..60423f2fa 100644 --- a/vendor/build.json +++ b/vendor/build.json @@ -1,14 +1,14 @@ { - "commit": "c14097cabbbef8d670234354014e41ae4fc9470a", - "dirty": true, + "commit": "297edf6590e61200857b199d69160f0567bbb3c8", + "dirty": false, "files": [ { "filename": "pgstencil-0.1.0.tgz", - "sha256": "88601626740565b3ad8660ebdf8ec06f3d5f553288ec7ea5549f6d3e7c8a293d" + "sha256": "5ed674d0c62619a2eaa09c40ea447b730670b92ba3e32ae784755b70ed8f2c7e" }, { "filename": "pgstencil-auth-0.1.0.tgz", - "sha256": "111892277b8bd4a6ff5b758ccb0e1bce3997ccf5493c8f9fdb98fedf7f6eab5a" + "sha256": "7ada0c3d2031b3d06bec00c623c4f339d4045fd63b1f7a7fe371bd40ca7b7baa" } ] } diff --git a/vendor/pgstencil-0.1.0.tgz b/vendor/pgstencil-0.1.0.tgz index 6a31b152b651a96644d3a42a01166c6ce1beebf7..6bd1f73e56eb0d6aa32490e935117c1ecc61e031 100644 GIT binary patch literal 15798 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 A0RR91 literal 15793 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�spTqU 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 amzcH7unfzv49oE4;r{@F%|)01r~&|&VuE!5 From 558a108c6fd72a81e7af423b8d84daffe6e3dede Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 21 Sep 2026 16:59:18 -0700 Subject: [PATCH 2/5] Fail installs on unmet peer dependencies A Renovate bump that leaves pgstencil's kysely or hono peer out of range now goes red in its own PR instead of installing with a warning. The workspace has no peer issues today; deliberate widenings stay in peerDependencyRules. Co-Authored-By: Claude Opus 5 (1M context) --- pnpm-workspace.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 175666701..e70ea5fb0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -21,6 +21,10 @@ allowBuilds: keytar: false node-pty: true sharp: true +# An unmet peer fails the install instead of warning, so a bump that leaves a +# shared library outside a dependent's range (pgstencil's kysely/hono, the +# @hono adapters) goes red in its own PR. Widen deliberately below, with a reason. +strictPeerDependencies: true peerDependencyRules: allowedVersions: "react-helmet-async>react": ^19.0.0 From c7c8081239e3267751b73457cdf478ae37a13b65 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 21 Sep 2026 17:09:33 -0700 Subject: [PATCH 3/5] Pin Hosted's pgstencil peer declarations and reject unknown sync flags strictPeerDependencies only rejects an out-of-range peer; pnpm resolves an undeclared one itself. The artifacts test now requires every peer of each vendored archive in hosted/package.json. A mistyped sync flag used to fall back to a clean sync of HEAD and overwrite the archives; it now prints the usage instead. Co-Authored-By: Claude Opus 5 (1M context) --- hosted/server/tests/artifacts.test.ts | 23 +++++++++++++++++++++++ scripts/sync-pgstencil.mjs | 21 +++++++++++++++------ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/hosted/server/tests/artifacts.test.ts b/hosted/server/tests/artifacts.test.ts index 6d749fc42..440063272 100644 --- a/hosted/server/tests/artifacts.test.ts +++ b/hosted/server/tests/artifacts.test.ts @@ -56,3 +56,26 @@ test("both pinned specifiers name the recorded archives", () => { expect(override).toBe(`file:vendor/${filename}`); } }); + +// strictPeerDependencies only rejects an out-of-range peer. pnpm resolves an +// undeclared one itself, where Renovate never sees it and Hosted's own imports +// can get a second copy. +test("Hosted declares every peer of the pinned archives", () => { + const { dependencies } = JSON.parse( + readFileSync("package.json", "utf8"), + ) as { dependencies: Record }; + for (const archive of ["pgstencil-0.1.0.tgz", "pgstencil-auth-0.1.0.tgz"]) { + const manifest = execFileSync( + "tar", + ["-xOf", "../vendor/" + archive, "package/package.json"], + { encoding: "utf8" }, + ); + const { peerDependencies = {} } = JSON.parse(manifest) as { + peerDependencies?: Record; + }; + for (const peer of Object.keys(peerDependencies)) + expect(Object.keys(dependencies), `${archive} peers on ${peer}`).toContain( + peer, + ); + } +}); diff --git a/scripts/sync-pgstencil.mjs b/scripts/sync-pgstencil.mjs index 4ed3360ba..4de9dec5d 100644 --- a/scripts/sync-pgstencil.mjs +++ b/scripts/sync-pgstencil.mjs @@ -12,14 +12,23 @@ import { createHash } from "node:crypto"; import { fileURLToPath } from "node:url"; const root = fileURLToPath(new URL("../", import.meta.url)); +const usage = + "Usage: pnpm pgstencil:sync /path/to/pgstencil [ | --working-tree]"; const [source, ...options] = process.argv.slice(2); -if (!source) - throw new Error( - "Usage: pnpm pgstencil:sync /path/to/pgstencil [ | --working-tree]", - ); -const repository = resolve(source); +const revisions = options.filter((option) => !option.startsWith("--")); const workingTree = options.includes("--working-tree"); -const revision = options.find((option) => !option.startsWith("--")) ?? "HEAD"; +// A mistyped flag must not fall back to a clean sync of HEAD, which would +// overwrite the archives with something other than what was asked for. +if ( + !source || + options.some( + (option) => option.startsWith("--") && option !== "--working-tree", + ) || + revisions.length > (workingTree ? 0 : 1) +) + throw new Error(usage); +const repository = resolve(source); +const revision = revisions[0] ?? "HEAD"; const run = (command, args, cwd, env = process.env) => execFileSync(command, args, { cwd, stdio: "inherit", env }); const git = (...args) => From 8e06b6120b12354425aafc6ada120d6e47845239 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 21 Sep 2026 17:20:58 -0700 Subject: [PATCH 4/5] Check sync pins before installing and always mark working-tree builds dirty The version and override checks now read pgstencil's manifests from the requested commit before the temporary install, so a forgotten bump fails at once and cannot leave one archive replaced. A --working-tree build depends on the local install and ignored build output even when git status is clean, so it is always recorded dirty and production preflight refuses it. The spec rule names every archive peer instead of listing them, since the artifacts test derives the list. Co-Authored-By: Claude Opus 5 (1M context) --- docs/specs/hosted.md | 2 +- hosted/README.md | 4 +-- scripts/sync-pgstencil.mjs | 63 +++++++++++++++++++++----------------- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/docs/specs/hosted.md b/docs/specs/hosted.md index f26c38ace..523888d8a 100644 --- a/docs/specs/hosted.md +++ b/docs/specs/hosted.md @@ -11,7 +11,7 @@ **Must pin locally packed core/auth packages through root pnpm overrides and commit archives, provenance, and lockfile together.** `vendor/build.json` records the source commit, dirty state, and archive hashes. No runtime import depends on a sibling checkout. The auth migrations remain owned by the package. -**Must declare pgstencil's peer dependencies (`kysely`, `hono`) in `hosted/package.json`**, so the archives share Hosted's copy and Renovate updates it. +**Must declare every peer dependency of the pinned archives in `hosted/package.json`**, so they share Hosted's copy and Renovate updates them. Source of truth: `auth` in `hosted/server/worker.ts`; `workerApp` in `hosted/server/worker-app.ts`; `migrations` in `hosted/server/migrations.ts`; `scripts/sync-pgstencil.mjs`. Pinned by `hosted/server/tests/artifacts.test.ts`. diff --git a/hosted/README.md b/hosted/README.md index a6ef6e6da..8f70818c4 100644 --- a/hosted/README.md +++ b/hosted/README.md @@ -45,8 +45,8 @@ This checks out the pgstencil revision (default `HEAD`) in a temporary clean worktree, runs `pnpm packages:pack` there, vendors core/auth, records the commit, `dirty: false` and SHA-256 hashes in `vendor/build.json`, and installs. To try uncommitted pgstencil changes, pass `--working-tree` instead of a revision; it -packs the checkout as it stands and records whether it was dirty, which -production preflight rejects. The direct Node command also works before the +packs the checkout as it stands against its local install and always records +`dirty: true`, which production preflight rejects. The direct Node command also works before the archives exist (pnpm may otherwise auto-install first). See `docs/specs/hosted.md` -> "Application boundary" for what has to be committed together. diff --git a/scripts/sync-pgstencil.mjs b/scripts/sync-pgstencil.mjs index 4de9dec5d..c99642d2d 100644 --- a/scripts/sync-pgstencil.mjs +++ b/scripts/sync-pgstencil.mjs @@ -49,56 +49,63 @@ const overrides = new Map( return entry ? [[entry[1], entry[2]]] : []; }), ); -// Pack a committed revision in a temporary worktree, so nothing uncommitted or -// untracked in the pgstencil checkout (a stray migration, editor settings) can +// Pack a committed revision in a temporary worktree after a frozen install, so +// nothing uncommitted, untracked or ignored in the pgstencil checkout (a stray +// migration, editor settings, stale build output, a local node_modules) can // reach an archive, and build.json truthfully records `dirty: false`. // --working-tree packs the checkout as it stands, for trying unfinished -// pgstencil changes; production preflight refuses that dirty result. +// pgstencil changes. That result depends on local state even when git status is +// clean, so it is always recorded dirty and production preflight refuses it. const commit = git( "rev-parse", "--verify", `${workingTree ? "HEAD" : revision}^{commit}`, ); -const dirty = workingTree && !!git("status", "--porcelain"); +const dirty = workingTree; +// Check the pins before the slow install and before any archive is replaced. +const read = (path) => + workingTree + ? readFileSync(resolve(repository, path), "utf8") + : git("show", `${commit}:${path}`); +const archives = [ + ["pgstencil", "pgstencil"], + ["auth", "@pgstencil/auth"], +].map(([directory, name]) => { + const { version } = JSON.parse(read(`packages/${directory}/package.json`)); + const filename = `${name.replace("@", "").replace("/", "-")}-${version}.tgz`; + if (manifest.dependencies[name] !== `file:../vendor/${filename}`) + throw new Error(`Update hosted/package.json for ${filename}`); + if (overrides.get(name) !== `file:vendor/${filename}`) + throw new Error( + `Update the pnpm-workspace.yaml override for ${name} to file:vendor/${filename}`, + ); + return filename; +}); const checkout = workingTree ? repository : mkdtempSync(join(tmpdir(), "pgstencil-sync-")); // pgstencil's scripts locate their project from this variable before the cwd. const pgstencil = { ...process.env, PGSTENCIL_PROJECT_ROOT: checkout }; if (!workingTree) git("worktree", "add", "--detach", checkout, commit); -const files = []; try { if (!workingTree) run("pnpm", ["install", "--frozen-lockfile"], checkout, pgstencil); run("pnpm", ["packages:pack"], checkout, pgstencil); mkdirSync(resolve(root, "vendor"), { recursive: true }); - for (const [directory, name] of [ - ["pgstencil", "pgstencil"], - ["auth", "@pgstencil/auth"], - ]) { - const pkg = JSON.parse( - readFileSync( - resolve(checkout, `packages/${directory}/package.json`), - "utf8", - ), + for (const filename of archives) + copyFileSync( + resolve(checkout, "dist/packages", filename), + resolve(root, "vendor", filename), ); - const filename = `${name.replace("@", "").replace("/", "-")}-${pkg.version}.tgz`; - if (manifest.dependencies[name] !== `file:../vendor/${filename}`) - throw new Error(`Update hosted/package.json for ${filename}`); - if (overrides.get(name) !== `file:vendor/${filename}`) - throw new Error( - `Update the pnpm-workspace.yaml override for ${name} to file:vendor/${filename}`, - ); - const target = resolve(root, "vendor", filename); - copyFileSync(resolve(checkout, "dist/packages", filename), target); - files.push({ - filename, - sha256: createHash("sha256").update(readFileSync(target)).digest("hex"), - }); - } } finally { if (!workingTree) git("worktree", "remove", "--force", checkout); } +const files = archives.map((filename) => ({ + filename, + sha256: createHash("sha256") + .update(readFileSync(resolve(root, "vendor", filename))) + .digest("hex"), +})); writeFileSync( resolve(root, "vendor/build.json"), JSON.stringify({ commit, dirty, files }, null, 2) + "\n", From 9e95f832271e632c69b73bb6cb333321da551fef Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 21 Sep 2026 17:28:30 -0700 Subject: [PATCH 5/5] Describe what vendor/build.json's dirty flag now means in the Hosted spec Co-Authored-By: Claude Opus 5 (1M context) --- docs/specs/hosted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/specs/hosted.md b/docs/specs/hosted.md index 523888d8a..df00f3c26 100644 --- a/docs/specs/hosted.md +++ b/docs/specs/hosted.md @@ -9,7 +9,7 @@ **Must run committed Better Auth migrations before deploying code that needs them, never during a Worker request.** Postgres is reached through an uncached Hyperdrive binding. The runtime creates and closes its database pool within each request. -**Must pin locally packed core/auth packages through root pnpm overrides and commit archives, provenance, and lockfile together.** `vendor/build.json` records the source commit, dirty state, and archive hashes. No runtime import depends on a sibling checkout. The auth migrations remain owned by the package. +**Must pin locally packed core/auth packages through root pnpm overrides and commit archives, provenance, and lockfile together.** `vendor/build.json` records the source commit, archive hashes, and `dirty` — true for every `--working-tree` build, which production preflight refuses. No runtime import depends on a sibling checkout. The auth migrations remain owned by the package. **Must declare every peer dependency of the pinned archives in `hosted/package.json`**, so they share Hosted's copy and Renovate updates them.