Skip to content

fix(cli): Send the API params the endpoints accept - #2075

Merged
BYK merged 1 commit into
ref/cli-sentry-api-operationsfrom
fix/cli-api-params-match-endpoints
Nov 7, 2026
Merged

BYK merged 1 commit into
ref/cli-sentry-api-operationsfrom
fix/cli-api-params-match-endpoints

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

Stacked on #2073. That PR moves the CLI onto the generated @sentry/api operations. This one fixes the cases where the CLI, not the API docs, was wrong. The full list is in getsentry/sentry#130351. Where the 1.44.0 operation now matches, the call moves onto it here too.

Each fix was checked against the getsentry/sentry endpoint code.

Moved onto generated operations

Area Fix Operation
alert issues list/view Filter workflows by project (the endpoint ignores projectSlug) and send id as a number listOrganizationWorkflows (×2)
code-mappings upload Send the bulk body in snake_case: default_branch, stack_root, source_root bulkUpsertOrganizationCodeMappings
explore, dashboard view tables Type dataset as a public Events dataset. Explore still falls back to errors, and unmapped widget types still render as unsupported listOrganizationEvents (×2)
issue view and other org-scoped issue lookups Send only the collapse values the details endpoint reads (release, stats, tags). It ignored lifetime/filtered/unhandled, and the detail response keeps those fields either way. The short-ID endpoint still gets every value getOrganizationIssue
issue view replay lookup Send data_source=errors. events isn't a value the endpoint accepts getOrganizationReplayCount
issue explain/plan Drop mode=explorer, which the autofix endpoint never reads startOrganizationIssueAutofix (×2), getOrganizationIssueAutofixState

Fixed, but still on the helper

Kept on purpose

  • replay list keeps requesting info_ids and warning_ids. The server computes them and replay list --json prints them, so dropping them would change the output. fetchReplayPage stays on the helper, and a comment says why.

Behavior notes

  • On the moved calls, errors use the SDK wording already used by the moved calls in ref(cli): Move API calls with generated operations onto @sentry/api #2073 and by the metric alert path, e.g. Failed to list issue alert rules: 403 Forbidden. They no longer start with API request failed:, and they no longer have an Endpoint: line. Status codes and the 401/403 enrichment are unchanged.
  • Existing bug, not fixed here: trace view org/project/<id> prints "Filtered to project", but the trace endpoint has returned spans from every project since feat(traec): add errors to trace sentry#87314.
  • Docs gap: with returnIds=true, the replay-count response maps each issue ID to a list of replay IDs. The documented schema describes counts. The CLI keeps validating that response with its own schema.

Verification

  • pnpm run tsc and pnpm run lint pass.
  • CLI tests: 12884 pass and 5 fail. All 5 are the sandbox-only permission tests that fail on main too (completions ×2, upgrade acquireLock, db/resilient readonly, dsn/code-scanner).
  • Unit tests were updated or added for each changed request shape, including the new test/lib/api/code-mappings.test.ts.
  • API discovery no longer lists the moved call sites.

via @BYK.

--

View Session [Sentry]

Make the CLI send what each endpoint reads, and move the calls whose
generated @sentry/api 1.44.0 operation now matches onto it.

- Issue alerts: filter workflows by `project` and numeric `id`
  (listOrganizationWorkflows).
- Code mappings: send a snake_case bulk body
  (bulkUpsertOrganizationCodeMappings).
- Explore and dashboard widgets: type `dataset` as a public Events
  dataset. Explore still defaults to `errors` and unmapped widget
  types still render as unsupported. Event tables use
  listOrganizationEvents.
- Issue details: send only the `collapse` values the endpoint reads
  (release, stats, tags) and use getOrganizationIssue.
- Issue merge: send `{merge: true}`. Stays on the helper until
  getsentry/sentry#130348 lands.
- Replay count: send `data_source=errors` (getOrganizationReplayCount).
- Seer autofix: drop the unread `mode=explorer` param and use
  startOrganizationIssueAutofix / getOrganizationIssueAutofixState.
- Trace details: drop the unread `project` and `limit` params. Stays on
  the helper until getsentry/sentry#130349 documents `timestamp`.

Replay list keeps requesting `info_ids` and `warning_ids`, because
`replay list --json` prints them.

Co-Authored-By: BYK <[email protected]>
@sentry-junior
sentry-junior Bot added this pull request to stack #2076 November 7, 2026 01:59
@vercel

vercel Bot commented Nov 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
sentry-local Skipped Skipped Nov 7, 2026 1:59am UTC

Request Review

@github-actions github-actions Bot added the risk: medium PR risk score: medium label Nov 7, 2026
@BYK
BYK enabled stacked auto-merge (squash) November 7, 2026 02:11
@BYK
BYK merged commit cf2d9b0 into main Nov 7, 2026
27 checks passed
@BYK
BYK deleted the fix/cli-api-params-match-endpoints branch November 7, 2026 02:12
BYK pushed a commit that referenced this pull request Nov 7, 2026
…2078)

Next step after #2073 and #2075, which moved the CLI onto the generated
`@sentry/api` operations. `@sentry/api` 1.46.0 includes the API docs
fixes from getsentry/sentry#130348, #130349 and #130350, so six more
call sites now match their generated operation. This PR bumps the
package and moves them.

### Moved onto generated operations
| Command(s) | Call | Operation | Unblocked by |
| --- | --- | --- | --- |
| `issue resolve/unresolve/archive`, `feedback resolve/spam/…`
(org-scoped) | `updateIssueStatus` | `updateOrganizationIssue` |
sentry#130348 (body fields no longer all required) |
| `issue merge` | `mergeIssues` | `updateOrganizationIssues` with
numeric `id`s and `{merge: true}` | sentry#130348 |
| `dashboard view` chart widgets | `queryWidgetTimeseries` |
`listOrganizationEventsTimeseries` | sentry#130349 (`yAxis` array,
`interval` int or duration) |
| `explore` time series | `queryEventsTimeSeries` |
`listOrganizationEventsTimeseries` | sentry#130349 |
| `agent-conversation list` | `listConversations` |
`listOrganizationAiConversations` with `sort` | sentry#130350 |
| `trace view`, `span view`, `log view` | `getDetailedTrace` |
`getOrganizationTrace` with `timestamp` | sentry#130349 |

Trace meta already used `getOrganizationTraceMeta` and doesn't send
`timestamp`, so nothing changes there.

### Behavior notes
- Responses are validated exactly as before:
`EventsTimeseriesResponseSchema` for widgets and
`ConversationListItemSchema` for conversations. The explore time series
and trace detail responses were not validated before and still aren't.
- `issue merge` still turns a 204 (no matching issues) into the same
friendly error, and still clears each affected issue's cross-origin
cache.
- `agent-conversation list --sort` is now typed with the endpoint's sort
enum. The command's sort values are a subset of it.
- Errors on the moved calls use the SDK wording, as in #2073 and #2075,
e.g. `Failed to update issue: 403 Forbidden`. Status codes and the
401/403 enrichment are unchanged.
- The 1.46.0 regen also changes `uniqueValues`/`key`/`name` descriptions
in the generated `issue` skill reference, which is committed here.
Typecheck is otherwise unaffected.

### Remaining `apiRequest*` call sites and raw fetches
Details for each are in getsentry/sentry#130351.

**Not in the public schema** (needs a getsentry/sentry API docs
decision):
- `organizations.ts:66`, `projects.ts:576/591`: region lookups
- `users.ts:21`: current user
- `trials.ts:30/70`: trials list/start
- `org-auth-tokens.ts:77`: delete org auth token
- `dashboards.ts:201/235`: dashboard revisions/restore
- `issues.ts:329`: unscoped `GET /issues/{id}/`
- `issues.ts:632`: legacy unscoped `PUT /issues/{id}/`
- `logs.ts:486`: logs query
- `traces.ts:225`: trace-items detail (experimental)
- `releases.ts:425`: release set-commits
- `preprod-artifacts.ts:283/449`: build/snapshot upload
- Raw fetches: `getSharedIssue` (`issues.ts`) and `openSnapshotArchive`
(`preprod-artifacts.ts`)

**Dynamic request identity / transport:**
- `auth.ts:17`
- `org-auth-tokens.ts:37/59`
- `preprod-artifacts.ts:508/526`: snapshot downloads

**Kept on purpose:**
- `replays.ts:201`: `replay list` keeps requesting
`info_ids`/`warning_ids` because `--json` prints them (see #2075).

The Oxlint rule that bans the helpers comes last, after these are
resolved.

### Verification
- `pnpm install --frozen-lockfile` passes with the committed lockfile.
- `pnpm run tsc` and `pnpm run lint` pass.
- CLI tests: 12919 pass and 5 fail. All 5 are the sandbox-only
permission tests that also fail on `main` (`completions` ×2, `upgrade`
acquireLock, `db/resilient` readonly, `dsn/code-scanner`).
- The dashboard time series tests now mock
`listOrganizationEventsTimeseries`. I added an org-scoped
`updateIssueStatus` test. The conversation, explore and trace tests run
at the fetch layer and pass unchanged.
- API discovery no longer lists the moved call sites.

<!-- junior-request-attribution:start -->
via @BYK.
<!-- junior-request-attribution:end -->

<!-- junior-session-footer:start -->
<!-- junior-conversation-id:agent%3A80220b9d4c297e2a971f05dcb03af515 -->

--

[View
Session](https://junior-prod.sentry.dev/conversations/agent%3A80220b9d4c297e2a971f05dcb03af515)
[[Sentry]](https://sentry.sentry.io/explore/conversations/agent%3A80220b9d4c297e2a971f05dcb03af515/?project=4510944073809921)

<!-- junior-session-footer:end -->

Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com>

This branch was previously deployed

1 inactive deployment
Preview — a9bcbdff Deployed Nov 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: medium PR risk score: medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant