Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .changeset/17667-packages-query-contract.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.

Expand Down
2 changes: 1 addition & 1 deletion .changeset/scoped-packages-dispatcher-door.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading