Skip to content

ref(cli): Derive replay explore fields from the @sentry/api schema - #1617

Merged
BYK merged 1 commit into
mainfrom
fix/cli-replay-fields-from-api-schema
Oct 23, 2026
Merged

BYK merged 1 commit into
mainfrom
fix/cli-replay-fields-from-api-schema

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

This is a follow-up to #1605. sentry explore --dataset replays checked --field against a hand-written resolver table, plus a switch that mapped each nested field to its API root. Every new replay field meant another CLI change.

The field list now comes from @sentry/api/valibot:

  • API fields: every dotted path in a vListReplays row whose root appears in the field= enum of vListOrganizationReplaysData.
  • Request root: the first segment of the path.
  • Value: read from the replay row by path.

The CLI keeps only its own aliases and convenience columns: url, release, user/user.display, count_traces, screens, seen_by_me, and similar.

Behavior changes

  • No longer accepted, because the published schema doesn't offer them:
    • device.model_id was never in the response, so it always resolved to empty.
    • info_id(s) and warning_id(s) are withheld from the public response as internal UI fields.
  • Newly accepted: user.display_name, clicks, segment_names, tags.
  • ota_updates.* and replay_type become available once @sentry/api moves past 0.356, where the index started accepting them. At that point, flip the replay_type assertion in test/lib/replay-search.test.ts and test/commands/explore.test.ts.

Related: getsentry/sentry#128639 removes info_ids/warning_ids from the public field enum, so request and response agree. This PR doesn't depend on it, because response paths are already filtered by the enum.

Checks

  • Pass: pnpm run typecheck and pnpm run lint.
  • Pass: vitest run for test/lib/replay-search.test.ts, test/commands/explore.test.ts, and test/commands/replay.
  • The full test/lib + test/commands run had 7 failures in permission and daemon tests unrelated to replays. The sandbox doesn't enforce chmod, so those tests can't pass there.

via BYK.

--

View Junior Session [Sentry]

The replay explore field list was a hand-maintained resolver table plus a
switch mapping each nested field to its API root. Build it from @sentry/api
instead: every dotted path in a vListReplays row whose root the index
endpoint accepts in `field=`. Values are read by path, and the request root
is the path's first segment.

The CLI now owns only its aliases and convenience columns (url, release,
user.display, count_traces, ...).

Fields the published schema does not offer are no longer accepted:
device.model_id (never in the response) and info_id(s)/warning_id(s)
(withheld from the public schema as internal). Fields newly accepted from the schema include user.display_name,
clicks, segment_names and tags; ota_updates.* and replay_type follow once
@sentry/api is bumped past 0.356.

Co-Authored-By: Burak Yigit Kaya <[email protected]>
@vercel

vercel Bot commented Oct 23, 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 Oct 23, 2026 11:46am UTC

Request Review

@github-actions github-actions Bot added the risk: medium PR risk score: medium label Oct 23, 2026
@BYK
BYK merged commit b405b20 into main Oct 23, 2026
26 checks passed
@BYK
BYK deleted the fix/cli-replay-fields-from-api-schema branch October 23, 2026 12:21
BYK added a commit that referenced this pull request Oct 23, 2026
Upgrades the CLI's `@sentry/api` dependency from `^0.399.0` (#1643) to
`^0.400.0`, the first release with getsentry/sentry#128639. That change
withholds `info_ids` and `warning_ids` from the public replay `field`
enum. The 0.400.0 types differ from 0.399.0 only in that enum, on the
replay index and details endpoints.

The lockfile change only covers `@sentry/api`. `pnpm-workspace.yaml`
moves the `minimumReleaseAgeExclude` entry to 0.400.0, because it was
published today.

Since #1617, replay explore builds its fields from the schema. New
assertions in `test/lib/replay-search.test.ts` check that:
- `replay_type` and `ota_updates.channel` are supported.
- `info_ids` and `warning_ids` are neither supported fields nor
requestable roots.

Verification: typecheck and lint pass, and a frozen-lockfile install
passes. The replay, explore, and issue-app-links tests pass (149 tests).
I didn't rerun the full suite, because the schema change is limited to
that enum.

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

<!-- junior-session-footer:start -->
<!-- junior-conversation-id:slack%3AC010884QHLG%3A1792754298.933159 -->

--

[View Junior
Session](https://junior-prod.sentry.dev/conversations/slack%3AC010884QHLG%3A1792754298.933159)
[[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC010884QHLG%3A1792754298.933159/?project=4510944073809921)

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

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

This branch was previously deployed

1 inactive deployment
Preview — 696568b1 Deployed Oct 23, 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