From 439fd8df57f871cc13339311e3c37b0750576ac4 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 3 Sep 2026 14:45:34 +0200 Subject: [PATCH 1/2] feat(op): Deprecate framework-specific `ui.*` span ops Deprecate the framework-specific UI ops (`ui.react`, `ui.react.mount`, `ui.react.render`, `ui.react.update`, `ui.vue`, `ui.svelte`, `ui.angular`, `ui.ember`, `ui.livewire`) in favour of the framework-agnostic `ui`, `ui.mount`, `ui.render` and `ui.update` ops. Framework-specific ops split the same kind of work across one op per framework, which makes the data harder to query and to document. The constants are still generated, now marked as deprecated for SDKs. Refs GH-619 Co-Authored-By: Claude --- javascript/sentry-conventions/src/op.ts | 27 +++++++++++++ model/op/browser.json | 54 ++++++++++++++++++++----- rust/src/op.rs | 9 +++++ 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/javascript/sentry-conventions/src/op.ts b/javascript/sentry-conventions/src/op.ts index e66c39fd..357ff610 100644 --- a/javascript/sentry-conventions/src/op.ts +++ b/javascript/sentry-conventions/src/op.ts @@ -197,22 +197,49 @@ export const UI_ACTION = 'ui.action'; export const UI_ACTION_CLICK = 'ui.action.click'; +/** + * @deprecated Use {@link UI} (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_REACT = 'ui.react'; +/** + * @deprecated Use {@link UI_MOUNT} (ui.mount) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_REACT_MOUNT = 'ui.react.mount'; +/** + * @deprecated Use {@link UI_RENDER} (ui.render) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_REACT_RENDER = 'ui.react.render'; +/** + * @deprecated Use {@link UI_UPDATE} (ui.update) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_REACT_UPDATE = 'ui.react.update'; +/** + * @deprecated Use {@link UI} (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_VUE = 'ui.vue'; +/** + * @deprecated Use {@link UI} (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_SVELTE = 'ui.svelte'; +/** + * @deprecated Use {@link UI} (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_ANGULAR = 'ui.angular'; +/** + * @deprecated Use {@link UI} (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_EMBER = 'ui.ember'; +/** + * @deprecated Use {@link UI} (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones. + */ export const UI_LIVEWIRE = 'ui.livewire'; // Path: model/op/database.json diff --git a/model/op/browser.json b/model/op/browser.json index 94c6b78a..0f3865be 100644 --- a/model/op/browser.json +++ b/model/op/browser.json @@ -175,31 +175,67 @@ "name": "ui.action.click" }, { - "name": "ui.react" + "name": "ui.react", + "deprecation": { + "replacement": "ui", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.react.mount" + "name": "ui.react.mount", + "deprecation": { + "replacement": "ui.mount", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.react.render" + "name": "ui.react.render", + "deprecation": { + "replacement": "ui.render", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.react.update" + "name": "ui.react.update", + "deprecation": { + "replacement": "ui.update", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.vue" + "name": "ui.vue", + "deprecation": { + "replacement": "ui", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.svelte" + "name": "ui.svelte", + "deprecation": { + "replacement": "ui", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.angular" + "name": "ui.angular", + "deprecation": { + "replacement": "ui", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.ember" + "name": "ui.ember", + "deprecation": { + "replacement": "ui", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } }, { - "name": "ui.livewire" + "name": "ui.livewire", + "deprecation": { + "replacement": "ui", + "reason": "Framework-specific UI ops are replaced by framework-agnostic ones." + } } ] } diff --git a/rust/src/op.rs b/rust/src/op.rs index b66f5b61..76a5bca3 100644 --- a/rust/src/op.rs +++ b/rust/src/op.rs @@ -129,22 +129,31 @@ pub const UI_ACTION: &str = "ui.action"; pub const UI_ACTION_CLICK: &str = "ui.action.click"; +#[deprecated(note = "Use `UI` (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_REACT: &str = "ui.react"; +#[deprecated(note = "Use `UI_MOUNT` (ui.mount) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_REACT_MOUNT: &str = "ui.react.mount"; +#[deprecated(note = "Use `UI_RENDER` (ui.render) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_REACT_RENDER: &str = "ui.react.render"; +#[deprecated(note = "Use `UI_UPDATE` (ui.update) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_REACT_UPDATE: &str = "ui.react.update"; +#[deprecated(note = "Use `UI` (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_VUE: &str = "ui.vue"; +#[deprecated(note = "Use `UI` (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_SVELTE: &str = "ui.svelte"; +#[deprecated(note = "Use `UI` (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_ANGULAR: &str = "ui.angular"; +#[deprecated(note = "Use `UI` (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_EMBER: &str = "ui.ember"; +#[deprecated(note = "Use `UI` (ui) instead - Framework-specific UI ops are replaced by framework-agnostic ones.")] pub const UI_LIVEWIRE: &str = "ui.livewire"; // Path: model/op/database.json From 4e22a89c00b67b7e73aa47348460176c4dbbecfa Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 3 Sep 2026 15:27:02 +0200 Subject: [PATCH 2/2] feat(op): Deprecate `function.nextjs` and `function.remix` span ops Same rationale as the framework-specific `ui.*` ops: one op per framework splits the same kind of work across several ops. Both are replaced by the generic `function` op. Refs GH-619 Co-Authored-By: Claude --- javascript/sentry-conventions/src/op.ts | 6 ++++++ model/op/web_server.json | 16 ++++++++++++---- rust/src/op.rs | 2 ++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/javascript/sentry-conventions/src/op.ts b/javascript/sentry-conventions/src/op.ts index 357ff610..fbe69402 100644 --- a/javascript/sentry-conventions/src/op.ts +++ b/javascript/sentry-conventions/src/op.ts @@ -545,8 +545,14 @@ export const VIEW = 'view'; export const TEMPLATE = 'template'; +/** + * @deprecated Use {@link FUNCTION} (function) instead - Framework-specific function ops are replaced by framework-agnostic ones. + */ export const FUNCTION_REMIX = 'function.remix'; +/** + * @deprecated Use {@link FUNCTION} (function) instead - Framework-specific function ops are replaced by framework-agnostic ones. + */ export const FUNCTION_NEXTJS = 'function.nextjs'; export const CONSOLE = 'console'; diff --git a/model/op/web_server.json b/model/op/web_server.json index 03d17eed..77098e71 100644 --- a/model/op/web_server.json +++ b/model/op/web_server.json @@ -48,10 +48,18 @@ "name": "function" }, { - "name": "function.remix" - }, - { - "name": "function.nextjs" + "name": "function.remix", + "deprecation": { + "replacement": "function", + "reason": "Framework-specific function ops are replaced by framework-agnostic ones." + } + }, + { + "name": "function.nextjs", + "deprecation": { + "replacement": "function", + "reason": "Framework-specific function ops are replaced by framework-agnostic ones." + } }, { "name": "serialize" diff --git a/rust/src/op.rs b/rust/src/op.rs index 76a5bca3..51bf8d2f 100644 --- a/rust/src/op.rs +++ b/rust/src/op.rs @@ -366,8 +366,10 @@ pub const VIEW: &str = "view"; pub const TEMPLATE: &str = "template"; +#[deprecated(note = "Use `FUNCTION` (function) instead - Framework-specific function ops are replaced by framework-agnostic ones.")] pub const FUNCTION_REMIX: &str = "function.remix"; +#[deprecated(note = "Use `FUNCTION` (function) instead - Framework-specific function ops are replaced by framework-agnostic ones.")] pub const FUNCTION_NEXTJS: &str = "function.nextjs"; pub const CONSOLE: &str = "console"; \ No newline at end of file