Skip to content

Commit d2b6b20

Browse files
Unbreak the publish run: transition exceptions name the pins the families actually have (#227)
## What Every publish run on `main` since #225 fails conformance (`4 failing, 0 allowed`), so **engine 0.2.3 cannot ship** and the dev channel is stalled. **Why:** #225 bumped the engine to 0.2.3 and copied the transition exceptions with `familyPin: "0.2.0"`. But `@prisma/composer-cli@0.13.0` and `@prisma/orm-toolchain@8.0.0-rc.6` released peering **0.2.2** in between (prisma/composer#256, prisma/prisma#30111), and an exception only covers the exact triple it names — so the publish run's observed mismatch (0.2.2 → 0.2.3) goes unsuppressed. ## Changes - Committed family pins move to the current releases (`update-product-versions --channel release`): composer-cli 0.13.0, orm-toolchain 8.0.0-rc.6, composer 0.13.0 — so the PR check (committed pins) and the dev publish (rewritten pins) observe the same triple. - The transition exceptions name (0.2.2 → 0.2.3). - Composer 0.13.0 delivers the node-utils exit-hook fix upstream (alchemy 2.0.0-beta.74; the vendored patch is retired), so the isolation canary now asserts an executor import leaves **zero** signal listeners, and the deferred entry tracking that patch chain is closed. ## Not the release The committed version stays 8.0.0-rc.9 — already on npm — so merging publishes a dev build and `@prisma/cli-engine@0.2.3` only. The held rc.10 release PR (family pins already in place here; exceptions to remove once the families re-release peering 0.2.3) comes separately. ## Verification Conformance on both channels: **0 failing, 6 allowed** (the recorded transition triples). CLI suite 61 files, engine suite 35 files, all green. Lint/typecheck green. ## After merge Engine 0.2.3 publishes → composer and prisma/prisma release again peering 0.2.3 (same one-line peer move) → the rc.10 release PR pins those and empties the exception list. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: willbot <w.a.madden+machine@gmail.com> Signed-off-by: Will Madden <madden@prisma.io>
1 parent 228549f commit d2b6b20

6 files changed

Lines changed: 103 additions & 414 deletions

File tree

.drive/projects/prisma-cli-v8/deferred.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,15 @@ CLI does not do, and each restarts as engine work if wanted:
227227

228228
## Upstream, not ours to land
229229

230-
- **alchemy-run/node-utils#6** (scope exit hooks to owned locks) is
231-
open. Vendored as a pnpm patch in composer
230+
- **alchemy-run/node-utils#6** (scope exit hooks to owned locks).
231+
**Closed by composer 0.13.0 (2026-08-25):** the release chain
232+
delivered — alchemy 2.0.0-beta.74 carries the node-utils fix and
233+
composer #254 retired the vendored patch, so a `prisma` install now
234+
resolves a node-utils that registers no import-time signal listener.
235+
The canary (`packages/cli/tests/composer-isolation.test.ts`) now
236+
asserts zero listeners, so a regression in that chain says so. The
237+
original entry follows for the record.
238+
Was: open. Vendored as a pnpm patch in composer
232239
(`patches/@alchemy.run__node-utils@0.0.5.patch`, applied to both
233240
`lib/lockfile.js` and `src/lockfile.ts` because the exports map
234241
sends bun to `src/`). **Delete the patch when the release chain

packages/cli/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,19 @@
5050
"dependencies": {
5151
"@manypkg/tools": "^2.1.2",
5252
"@prisma/cli-engine": "workspace:0.2.3",
53-
"@prisma/composer-cli": "0.12.0",
53+
"@prisma/composer-cli": "0.13.0",
5454
"@prisma/compute-sdk": "0.39.0",
5555
"@prisma/credentials-store": "^7.8.0",
5656
"@prisma/management-api-sdk": "1.55.0",
57-
"@prisma/orm-toolchain": "8.0.0-rc.5",
57+
"@prisma/orm-toolchain": "8.0.0-rc.6",
5858
"@vercel/detect-agent": "^1.2.3",
5959
"better-result": "^2.9.2",
6060
"dotenv": "^17.4.2",
6161
"execa": "^9.6.1",
6262
"open": "^11.0.0"
6363
},
6464
"devDependencies": {
65-
"@prisma/composer": "0.11.0",
65+
"@prisma/composer": "0.13.0",
6666
"@repo/cli-conformance": "workspace:8.0.0-rc.9",
6767
"@repo/cli-telemetry": "workspace:8.0.0-rc.9",
6868
"@repo/tsconfig": "workspace:8.0.0-rc.9",

packages/cli/scripts/conformance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,15 @@ async function tarball(): Promise<readonly Finding[]> {
122122
exceptions: [
123123
{
124124
familyPackage: "@prisma/composer-cli",
125-
familyPin: "0.2.0",
125+
familyPin: "0.2.2",
126126
shellPin: "0.2.3",
127127
reason: "engine 0.2.3 must publish before composer-cli can peer it",
128128
removeWhen:
129129
"composer-cli releases peering 0.2.3 and the follow-up bump PR pins that release",
130130
},
131131
{
132132
familyPackage: "@prisma/orm-toolchain",
133-
familyPin: "0.2.0",
133+
familyPin: "0.2.2",
134134
shellPin: "0.2.3",
135135
reason: "engine 0.2.3 must publish before orm-toolchain can peer it",
136136
removeWhen:

packages/cli/tests/composer-isolation.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ describe("composer's family costs an unrelated command nothing", () => {
8181
expect(report.signalListeners).toEqual({ SIGINT: 0, SIGTERM: 0 });
8282
}, 120_000);
8383

84-
test("canary: the executor import a composer command makes loads the constellation, and one signal listener per signal comes with it", async () => {
84+
test("canary: the executor import a composer command makes loads the constellation, and no signal listener comes with it", async () => {
8585
const report = await runProbe("canary");
8686

8787
expect(report.constellation.length).toBeGreaterThan(0);
@@ -91,10 +91,11 @@ describe("composer's family costs an unrelated command nothing", () => {
9191
expect(report.constellation.some((id) => id.startsWith("effect/"))).toBe(
9292
true,
9393
);
94-
// The unpatched @alchemy.run/node-utils registers these at import time
95-
// and never removes them; their handlers exit 130/143 themselves. The
96-
// count is what the deferred entry on that patch reports, so it is
97-
// asserted rather than only recorded.
98-
expect(report.signalListeners).toEqual({ SIGINT: 1, SIGTERM: 1 });
94+
// Zero since composer 0.13.0: alchemy 2.0.0-beta.74 carries the
95+
// node-utils fix (alchemy-run/node-utils#6) that used to register a
96+
// SIGINT and SIGTERM listener at import time, whose handlers exited
97+
// 130/143 out from under the engine's own teardown. Asserted so a
98+
// regression in that chain reintroducing the listeners says so.
99+
expect(report.signalListeners).toEqual({ SIGINT: 0, SIGTERM: 0 });
99100
}, 120_000);
100101
});

packages/prisma/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@
5050
"dependencies": {
5151
"@manypkg/tools": "^2.1.2",
5252
"@prisma/cli-engine": "workspace:0.2.3",
53-
"@prisma/composer-cli": "0.12.0",
53+
"@prisma/composer-cli": "0.13.0",
5454
"@prisma/compute-sdk": "0.39.0",
5555
"@prisma/credentials-store": "^7.8.0",
5656
"@prisma/management-api-sdk": "1.55.0",
57-
"@prisma/orm-toolchain": "8.0.0-rc.5",
57+
"@prisma/orm-toolchain": "8.0.0-rc.6",
5858
"@vercel/detect-agent": "^1.2.3",
5959
"better-result": "^2.9.2",
6060
"dotenv": "^17.4.2",

0 commit comments

Comments
 (0)