From 7bd01a6d884a08e376033204a76a33ef7bd64527 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 17:55:45 +0000 Subject: [PATCH] fix(changeset): the two unreleased /packages-door notes enumerate all three filters that door reads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `GET /api/v1/packages` reads three query filters — `status`, `type` and `enabled` (`readEnabledFilter`, `packages/runtime/src/domains/packages.ts`). Two pending changesets still enumerate two of them, and both publish into the same release that carries the correction of that same sentence. Incomplete, not wrong, and only the enumeration moves: the load-bearing claim — no page was ever withheld and no continuation token was ever minted — stays true, because `enabled` filters rows and does not paginate. The surrounding argument is byte-identical. Claude-Session: https://claude.ai/code/session_01AmH9bKvGoLjiY86Q4Z3og2 Co-authored-by: Claude --- .changeset/17667-packages-query-contract.md | 4 ++-- .changeset/scoped-packages-dispatcher-door.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.changeset/17667-packages-query-contract.md b/.changeset/17667-packages-query-contract.md index 7f55924ddbf..12b83dd2072 100644 --- a/.changeset/17667-packages-query-contract.md +++ b/.changeset/17667-packages-query-contract.md @@ -12,8 +12,8 @@ with the reads, per the maintainer-approved ruling of 2026-09-13 (decision batch **BREAKING** — `limit` and `cursor` no longer parse on `ListInstalledPackagesRequestSchema`, and `limit`'s `.default(50)` is gone with them. Both were declared here and read by nothing: the serving door filters on -`status` / `type` and then returns every remaining row, so no page was ever -withheld and no continuation token was ever minted. The response half's +`status` / `type` / `enabled` and then returns every remaining row, so no page +was ever withheld and no continuation token was ever minted. The response half's `nextCursor` has never been emitted, so a caller looping "until the cursor runs out" re-read the first and only page forever, with no error and no `400`. diff --git a/.changeset/scoped-packages-dispatcher-door.md b/.changeset/scoped-packages-dispatcher-door.md index 2036027c131..9091ec92833 100644 --- a/.changeset/scoped-packages-dispatcher-door.md +++ b/.changeset/scoped-packages-dispatcher-door.md @@ -10,7 +10,7 @@ fix(runtime): mount the scoped `/api/v1/environments/:id/packages*` door, and re **The wire.** Two responses gained the key their own declared schema requires (contract review of #16628, finding F2). Both additions are **additive** — no key left either payload: -- `GET /packages` now sends **`hasMore`** (`ListInstalledPackagesResponseSchema`). It is `false`: this door applies its `status` / `type` filters and returns every remaining row, reading no `limit` and no `cursor`, so there is no next page to announce. +- `GET /packages` now sends **`hasMore`** (`ListInstalledPackagesResponseSchema`). It is `false`: this door applies its `status` / `type` / `enabled` filters and returns every remaining row, reading no `limit` and no `cursor`, so there is no next page to announce. - `DELETE /packages/:id` now sends **`packageId`** (`UninstallPackageApiResponseSchema`). `registryRemoved` and `persisted` stay on the wire unchanged. A client that reads only the keys it read before is unaffected; a client parsing either payload against the published schema stops being refused.