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.