From 16d7d1a06c9677a711540d2079dab26a1abf7b5d Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 22 Jan 2026 15:42:08 +0100 Subject: [PATCH 1/7] feat(attributes): Add deprecated `cls` attribute --- generated/attributes/all.md | 4 +- generated/attributes/browser.md | 13 ++++ generated/attributes/general.md | 15 ++++ .../sentry-conventions/src/attributes.ts | 77 +++++++++++++++++++ .../browser__web_vital__cls__value.json | 12 +++ model/attributes/cls.json | 17 ++++ python/src/sentry_conventions/attributes.py | 51 ++++++++++++ shared/deprecated_attributes.json | 17 ++++ 8 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 model/attributes/browser/browser__web_vital__cls__value.json create mode 100644 model/attributes/cls.json diff --git a/generated/attributes/all.md b/generated/attributes/all.md index 42516ff1..1bee0ca6 100644 --- a/generated/attributes/all.md +++ b/generated/attributes/all.md @@ -4,7 +4,7 @@ This page lists all available attributes across all categories. -Total attributes: 422 +Total attributes: 424 ## Stable Attributes @@ -31,6 +31,7 @@ Total attributes: 422 | [`browser.script.invoker_type`](./browser.md#browserscriptinvoker_type) | Browser script entry point type. | | [`browser.script.source_char_position`](./browser.md#browserscriptsource_char_position) | A number representing the script character position of the script. | | [`browser.version`](./browser.md#browserversion) | The version of the browser. | +| [`browser.web_vital.cls.value`](./browser.md#browserweb_vitalclsvalue) | The value of the recorded Cumulative Layout Shift (CLS) web vital | | [`cache.hit`](./cache.md#cachehit) | If the cache was hit during this span. | | [`cache.item_size`](./cache.md#cacheitem_size) | The size of the requested item in the cache. In bytes. | | [`cache.key`](./cache.md#cachekey) | The key of the cache accessed. | @@ -379,6 +380,7 @@ Total attributes: 422 | [`ai.top_k`](./ai.md#aitop_k) | [`gen_ai.request.top_k`](./gen_ai.md#gen_airequesttop_k) | | [`ai.top_p`](./ai.md#aitop_p) | [`gen_ai.request.top_p`](./gen_ai.md#gen_airequesttop_p) | | [`ai.total_tokens.used`](./ai.md#aitotal_tokensused) | [`gen_ai.usage.total_tokens`](./gen_ai.md#gen_aiusagetotal_tokens) | +| [`cls`](./general.md#cls) | [`browser.web_vital.cls.value`](./browser.md#browserweb_vitalclsvalue) | | [`code.filepath`](./code.md#codefilepath) | [`code.file.path`](./code.md#codefilepath) | | [`code.function`](./code.md#codefunction) | [`code.function.name`](./code.md#codefunctionname) | | [`code.lineno`](./code.md#codelineno) | [`code.line.number`](./code.md#codelinenumber) | diff --git a/generated/attributes/browser.md b/generated/attributes/browser.md index 2295102b..d9f74879 100644 --- a/generated/attributes/browser.md +++ b/generated/attributes/browser.md @@ -9,6 +9,7 @@ - [browser.script.invoker_type](#browserscriptinvoker_type) - [browser.script.source_char_position](#browserscriptsource_char_position) - [browser.version](#browserversion) + - [browser.web_vital.cls.value](#browserweb_vitalclsvalue) ## Stable Attributes @@ -80,3 +81,15 @@ The version of the browser. | Example | `120.0.6099.130` | | Aliases | `sentry.browser.version` | +### browser.web_vital.cls.value + +The value of the recorded Cumulative Layout Shift (CLS) web vital + +| Property | Value | +| --- | --- | +| Type | `double` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `0.2361` | +| Aliases | `cls` | + diff --git a/generated/attributes/general.md b/generated/attributes/general.md index 5cb5944f..ff95dc52 100644 --- a/generated/attributes/general.md +++ b/generated/attributes/general.md @@ -10,6 +10,7 @@ - [previous_route](#previous_route) - [type](#type) - [Deprecated Attributes](#deprecated-attributes) + - [cls](#cls) - [environment](#environment) - [fs_error](#fs_error) - [method](#method) @@ -92,6 +93,20 @@ More granular type of the operation happening. These attributes are deprecated and will be removed in a future version. Please use the recommended replacements. +### cls + +The value of the recorded Cumulative Layout Shift (CLS) web vital + +| Property | Value | +| --- | --- | +| Type | `double` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `0.2361` | +| Deprecated | Yes, use `browser.web_vital.cls.value` instead | +| Deprecation Reason | The CLS web vital is now recorded as a browser.web_vital.cls.value attribute. | +| Aliases | `browser.web_vital.cls.value` | + ### environment The sentry environment. diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 7a5c8756..f598e81f 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -878,6 +878,28 @@ export const BROWSER_VERSION = 'browser.version'; */ export type BROWSER_VERSION_TYPE = string; +// Path: model/attributes/browser/browser__web_vital__cls__value.json + +/** + * The value of the recorded Cumulative Layout Shift (CLS) web vital `browser.web_vital.cls.value` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_CLS_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * Aliases: {@link CLS} `cls` + * + * @example 0.2361 + */ +export const BROWSER_WEB_VITAL_CLS_VALUE = 'browser.web_vital.cls.value'; + +/** + * Type for {@link BROWSER_WEB_VITAL_CLS_VALUE} browser.web_vital.cls.value + */ +export type BROWSER_WEB_VITAL_CLS_VALUE_TYPE = number; + // Path: model/attributes/cache/cache__hit.json /** @@ -1100,6 +1122,29 @@ export const CLOUDFLARE_D1_ROWS_WRITTEN = 'cloudflare.d1.rows_written'; */ export type CLOUDFLARE_D1_ROWS_WRITTEN_TYPE = number; +// Path: model/attributes/cls.json + +/** + * The value of the recorded Cumulative Layout Shift (CLS) web vital `cls` + * + * Attribute Value Type: `number` {@link CLS_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * Aliases: {@link BROWSER_WEB_VITAL_CLS_VALUE} `browser.web_vital.cls.value` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_CLS_VALUE} (browser.web_vital.cls.value) instead - The CLS web vital is now recorded as a browser.web_vital.cls.value attribute. + * @example 0.2361 + */ +export const CLS = 'cls'; + +/** + * Type for {@link CLS} cls + */ +export type CLS_TYPE = number; + // Path: model/attributes/code/code__filepath.json /** @@ -8849,6 +8894,7 @@ export const ATTRIBUTE_TYPE: Record = { [BROWSER_SCRIPT_INVOKER_TYPE]: 'string', [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]: 'integer', [BROWSER_VERSION]: 'string', + [BROWSER_WEB_VITAL_CLS_VALUE]: 'double', [CACHE_HIT]: 'boolean', [CACHE_ITEM_SIZE]: 'integer', [CACHE_KEY]: 'string[]', @@ -8860,6 +8906,7 @@ export const ATTRIBUTE_TYPE: Record = { [CLOUDFLARE_D1_DURATION]: 'integer', [CLOUDFLARE_D1_ROWS_READ]: 'integer', [CLOUDFLARE_D1_ROWS_WRITTEN]: 'integer', + [CLS]: 'double', [CODE_FILEPATH]: 'string', [CODE_FILE_PATH]: 'string', [CODE_FUNCTION]: 'string', @@ -9274,6 +9321,7 @@ export type AttributeName = | typeof BROWSER_SCRIPT_INVOKER_TYPE | typeof BROWSER_SCRIPT_SOURCE_CHAR_POSITION | typeof BROWSER_VERSION + | typeof BROWSER_WEB_VITAL_CLS_VALUE | typeof CACHE_HIT | typeof CACHE_ITEM_SIZE | typeof CACHE_KEY @@ -9285,6 +9333,7 @@ export type AttributeName = | typeof CLOUDFLARE_D1_DURATION | typeof CLOUDFLARE_D1_ROWS_READ | typeof CLOUDFLARE_D1_ROWS_WRITTEN + | typeof CLS | typeof CODE_FILEPATH | typeof CODE_FILE_PATH | typeof CODE_FUNCTION @@ -10122,6 +10171,17 @@ export const ATTRIBUTE_METADATA: Record = { example: '120.0.6099.130', aliases: [SENTRY_BROWSER_VERSION], }, + [BROWSER_WEB_VITAL_CLS_VALUE]: { + brief: 'The value of the recorded Cumulative Layout Shift (CLS) web vital', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 0.2361, + aliases: [CLS], + sdks: ['javascript-browser'], + }, [CACHE_HIT]: { brief: 'If the cache was hit during this span.', type: 'boolean', @@ -10231,6 +10291,21 @@ export const ATTRIBUTE_METADATA: Record = { example: 12, sdks: ['javascript-cloudflare'], }, + [CLS]: { + brief: 'The value of the recorded Cumulative Layout Shift (CLS) web vital', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 0.2361, + deprecation: { + replacement: 'browser.web_vital.cls.value', + reason: 'The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.', + }, + aliases: [BROWSER_WEB_VITAL_CLS_VALUE], + sdks: ['javascript-browser'], + }, [CODE_FILEPATH]: { brief: 'The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).', @@ -14026,6 +14101,7 @@ export type Attributes = { [BROWSER_SCRIPT_INVOKER_TYPE]?: BROWSER_SCRIPT_INVOKER_TYPE_TYPE; [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]?: BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE; [BROWSER_VERSION]?: BROWSER_VERSION_TYPE; + [BROWSER_WEB_VITAL_CLS_VALUE]?: BROWSER_WEB_VITAL_CLS_VALUE_TYPE; [CACHE_HIT]?: CACHE_HIT_TYPE; [CACHE_ITEM_SIZE]?: CACHE_ITEM_SIZE_TYPE; [CACHE_KEY]?: CACHE_KEY_TYPE; @@ -14037,6 +14113,7 @@ export type Attributes = { [CLOUDFLARE_D1_DURATION]?: CLOUDFLARE_D1_DURATION_TYPE; [CLOUDFLARE_D1_ROWS_READ]?: CLOUDFLARE_D1_ROWS_READ_TYPE; [CLOUDFLARE_D1_ROWS_WRITTEN]?: CLOUDFLARE_D1_ROWS_WRITTEN_TYPE; + [CLS]?: CLS_TYPE; [CODE_FILEPATH]?: CODE_FILEPATH_TYPE; [CODE_FILE_PATH]?: CODE_FILE_PATH_TYPE; [CODE_FUNCTION]?: CODE_FUNCTION_TYPE; diff --git a/model/attributes/browser/browser__web_vital__cls__value.json b/model/attributes/browser/browser__web_vital__cls__value.json new file mode 100644 index 00000000..875384eb --- /dev/null +++ b/model/attributes/browser/browser__web_vital__cls__value.json @@ -0,0 +1,12 @@ +{ + "key": "browser.web_vital.cls.value", + "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 0.2361, + "sdks": ["javascript-browser"], + "alias": ["cls"] +} diff --git a/model/attributes/cls.json b/model/attributes/cls.json new file mode 100644 index 00000000..f83429da --- /dev/null +++ b/model/attributes/cls.json @@ -0,0 +1,17 @@ +{ + "key": "cls", + "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 0.2361, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.cls.value", + "reason": "The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.cls.value"] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index a1678932..02855150 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -105,6 +105,7 @@ class _AttributeNamesMeta(type): "AI_TOP_K", "AI_TOP_P", "AI_TOTAL_TOKENS_USED", + "CLS", "CODE_FILEPATH", "CODE_FUNCTION", "CODE_LINENO", @@ -635,6 +636,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "120.0.6099.130" """ + # Path: model/attributes/browser/browser__web_vital__cls__value.json + BROWSER_WEB_VITAL_CLS_VALUE: Literal["browser.web_vital.cls.value"] = ( + "browser.web_vital.cls.value" + ) + """The value of the recorded Cumulative Layout Shift (CLS) web vital + + Type: float + Contains PII: false + Defined in OTEL: No + Aliases: cls + Example: 0.2361 + """ + # Path: model/attributes/cache/cache__hit.json CACHE_HIT: Literal["cache.hit"] = "cache.hit" """If the cache was hit during this span. @@ -750,6 +764,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 12 """ + # Path: model/attributes/cls.json + CLS: Literal["cls"] = "cls" + """The value of the recorded Cumulative Layout Shift (CLS) web vital + + Type: float + Contains PII: false + Defined in OTEL: No + Aliases: browser.web_vital.cls.value + DEPRECATED: Use browser.web_vital.cls.value instead - The CLS web vital is now recorded as a browser.web_vital.cls.value attribute. + Example: 0.2361 + """ + # Path: model/attributes/code/code__file__path.json CODE_FILE_PATH: Literal["code.file.path"] = "code.file.path" """The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). @@ -5155,6 +5181,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example="120.0.6099.130", aliases=["sentry.browser.version"], ), + "browser.web_vital.cls.value": AttributeMetadata( + brief="The value of the recorded Cumulative Layout Shift (CLS) web vital", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=0.2361, + aliases=["cls"], + sdks=["javascript-browser"], + ), "cache.hit": AttributeMetadata( brief="If the cache was hit during this span.", type=AttributeType.BOOLEAN, @@ -5241,6 +5276,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=12, sdks=["javascript-cloudflare"], ), + "cls": AttributeMetadata( + brief="The value of the recorded Cumulative Layout Shift (CLS) web vital", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=0.2361, + deprecation=DeprecationInfo( + replacement="browser.web_vital.cls.value", + reason="The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.cls.value"], + sdks=["javascript-browser"], + ), "code.file.path": AttributeMetadata( brief="The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).", type=AttributeType.STRING, @@ -8156,6 +8205,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.script.invoker_type": str, "browser.script.source_char_position": int, "browser.version": str, + "browser.web_vital.cls.value": float, "cache.hit": bool, "cache.item_size": int, "cache.key": List[str], @@ -8167,6 +8217,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "cloudflare.d1.duration": int, "cloudflare.d1.rows_read": int, "cloudflare.d1.rows_written": int, + "cls": float, "code.file.path": str, "code.filepath": str, "code.function": str, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index f02695e3..7fde0dea 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -1,6 +1,23 @@ { "_generated": "This file is generated. Do not modify it directly. See scripts/generate_deprecated_attributes_json.ts", "attributes": [ + { + "key": "cls", + "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 0.2361, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.cls.value", + "reason": "The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.cls.value"] + }, { "key": "environment", "brief": "The sentry environment.", From 9efaf012ba620b9a6dc4e689c3b8c1672f4c3499 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 22 Jan 2026 15:46:12 +0100 Subject: [PATCH 2/7] feat(attributes): Add `browser.web_vital.lcp.value` --- .../browser/browser__web_vital__lcp__value.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 model/attributes/browser/browser__web_vital__lcp__value.json diff --git a/model/attributes/browser/browser__web_vital__lcp__value.json b/model/attributes/browser/browser__web_vital__lcp__value.json new file mode 100644 index 00000000..9fbe8497 --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__value.json @@ -0,0 +1,12 @@ +{ + "key": "browser.web_vital.lcp.value", + "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 2500.0, + "sdks": ["javascript-browser"], + "alias": ["lcp"] +} From 739a0e514653f82f49440067b9c48362069db64c Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 22 Jan 2026 15:46:22 +0100 Subject: [PATCH 3/7] feat(attributes): Add deprecated `lcp` attribute --- model/attributes/lcp.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 model/attributes/lcp.json diff --git a/model/attributes/lcp.json b/model/attributes/lcp.json new file mode 100644 index 00000000..fe4b0688 --- /dev/null +++ b/model/attributes/lcp.json @@ -0,0 +1,17 @@ +{ + "key": "lcp", + "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 2500.0, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.lcp.value", + "reason": "The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.value"] +} From 43bba2e01a25299fe06c68254b2602a653bc35b2 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 22 Jan 2026 15:55:56 +0100 Subject: [PATCH 4/7] generate --- generated/attributes/all.md | 4 +- generated/attributes/browser.md | 13 ++++ generated/attributes/general.md | 15 ++++ .../sentry-conventions/src/attributes.ts | 77 +++++++++++++++++++ python/src/sentry_conventions/attributes.py | 51 ++++++++++++ shared/deprecated_attributes.json | 17 ++++ 6 files changed, 176 insertions(+), 1 deletion(-) diff --git a/generated/attributes/all.md b/generated/attributes/all.md index 1bee0ca6..834e056c 100644 --- a/generated/attributes/all.md +++ b/generated/attributes/all.md @@ -4,7 +4,7 @@ This page lists all available attributes across all categories. -Total attributes: 424 +Total attributes: 426 ## Stable Attributes @@ -32,6 +32,7 @@ Total attributes: 424 | [`browser.script.source_char_position`](./browser.md#browserscriptsource_char_position) | A number representing the script character position of the script. | | [`browser.version`](./browser.md#browserversion) | The version of the browser. | | [`browser.web_vital.cls.value`](./browser.md#browserweb_vitalclsvalue) | The value of the recorded Cumulative Layout Shift (CLS) web vital | +| [`browser.web_vital.lcp.value`](./browser.md#browserweb_vitallcpvalue) | The value of the recorded Largest Contentful Paint (LCP) web vital | | [`cache.hit`](./cache.md#cachehit) | If the cache was hit during this span. | | [`cache.item_size`](./cache.md#cacheitem_size) | The size of the requested item in the cache. In bytes. | | [`cache.key`](./cache.md#cachekey) | The key of the cache accessed. | @@ -412,6 +413,7 @@ Total attributes: 424 | [`http.target`](./http.md#httptarget) | [`url.path`](./url.md#urlpath) | | [`http.url`](./http.md#httpurl) | [`url.full`](./url.md#urlfull) | | [`http.user_agent`](./http.md#httpuser_agent) | [`user_agent.original`](./user_agent.md#user_agentoriginal) | +| [`lcp`](./general.md#lcp) | [`browser.web_vital.lcp.value`](./browser.md#browserweb_vitallcpvalue) | | [`method`](./general.md#method) | [`http.request.method`](./http.md#httprequestmethod) | | [`net.host.ip`](./net.md#nethostip) | [`network.local.address`](./network.md#networklocaladdress) | | [`net.host.name`](./net.md#nethostname) | [`server.address`](./server.md#serveraddress) | diff --git a/generated/attributes/browser.md b/generated/attributes/browser.md index d9f74879..16d9be4f 100644 --- a/generated/attributes/browser.md +++ b/generated/attributes/browser.md @@ -10,6 +10,7 @@ - [browser.script.source_char_position](#browserscriptsource_char_position) - [browser.version](#browserversion) - [browser.web_vital.cls.value](#browserweb_vitalclsvalue) + - [browser.web_vital.lcp.value](#browserweb_vitallcpvalue) ## Stable Attributes @@ -93,3 +94,15 @@ The value of the recorded Cumulative Layout Shift (CLS) web vital | Example | `0.2361` | | Aliases | `cls` | +### browser.web_vital.lcp.value + +The value of the recorded Largest Contentful Paint (LCP) web vital + +| Property | Value | +| --- | --- | +| Type | `double` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `2500` | +| Aliases | `lcp` | + diff --git a/generated/attributes/general.md b/generated/attributes/general.md index ff95dc52..e17f9ea2 100644 --- a/generated/attributes/general.md +++ b/generated/attributes/general.md @@ -13,6 +13,7 @@ - [cls](#cls) - [environment](#environment) - [fs_error](#fs_error) + - [lcp](#lcp) - [method](#method) - [profile_id](#profile_id) - [release](#release) @@ -133,6 +134,20 @@ The error message of a file system error. | Deprecated | Yes, use `error.type` instead | | Deprecation Reason | This attribute is not part of the OpenTelemetry specification and error.type fits much better. | +### lcp + +The value of the recorded Largest Contentful Paint (LCP) web vital + +| Property | Value | +| --- | --- | +| Type | `double` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `2500` | +| Deprecated | Yes, use `browser.web_vital.lcp.value` instead | +| Deprecation Reason | The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute. | +| Aliases | `browser.web_vital.lcp.value` | + ### method The HTTP method used. diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index f598e81f..4e8b29b3 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -900,6 +900,28 @@ export const BROWSER_WEB_VITAL_CLS_VALUE = 'browser.web_vital.cls.value'; */ export type BROWSER_WEB_VITAL_CLS_VALUE_TYPE = number; +// Path: model/attributes/browser/browser__web_vital__lcp__value.json + +/** + * The value of the recorded Largest Contentful Paint (LCP) web vital `browser.web_vital.lcp.value` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP} `lcp` + * + * @example 2500 + */ +export const BROWSER_WEB_VITAL_LCP_VALUE = 'browser.web_vital.lcp.value'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_VALUE} browser.web_vital.lcp.value + */ +export type BROWSER_WEB_VITAL_LCP_VALUE_TYPE = number; + // Path: model/attributes/cache/cache__hit.json /** @@ -4086,6 +4108,29 @@ export const JVM_THREAD_STATE = 'jvm.thread.state'; */ export type JVM_THREAD_STATE_TYPE = string; +// Path: model/attributes/lcp.json + +/** + * The value of the recorded Largest Contentful Paint (LCP) web vital `lcp` + * + * Attribute Value Type: `number` {@link LCP_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_VALUE} `browser.web_vital.lcp.value` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_VALUE} (browser.web_vital.lcp.value) instead - The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute. + * @example 2500 + */ +export const LCP = 'lcp'; + +/** + * Type for {@link LCP} lcp + */ +export type LCP_TYPE = number; + // Path: model/attributes/lcp/lcp__element.json /** @@ -8895,6 +8940,7 @@ export const ATTRIBUTE_TYPE: Record = { [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]: 'integer', [BROWSER_VERSION]: 'string', [BROWSER_WEB_VITAL_CLS_VALUE]: 'double', + [BROWSER_WEB_VITAL_LCP_VALUE]: 'double', [CACHE_HIT]: 'boolean', [CACHE_ITEM_SIZE]: 'integer', [CACHE_KEY]: 'string[]', @@ -9047,6 +9093,7 @@ export const ATTRIBUTE_TYPE: Record = { [JVM_MEMORY_TYPE]: 'string', [JVM_THREAD_DAEMON]: 'boolean', [JVM_THREAD_STATE]: 'string', + [LCP]: 'double', [LCP_ELEMENT]: 'string', [LCP_ID]: 'string', [LCP_SIZE]: 'integer', @@ -9322,6 +9369,7 @@ export type AttributeName = | typeof BROWSER_SCRIPT_SOURCE_CHAR_POSITION | typeof BROWSER_VERSION | typeof BROWSER_WEB_VITAL_CLS_VALUE + | typeof BROWSER_WEB_VITAL_LCP_VALUE | typeof CACHE_HIT | typeof CACHE_ITEM_SIZE | typeof CACHE_KEY @@ -9474,6 +9522,7 @@ export type AttributeName = | typeof JVM_MEMORY_TYPE | typeof JVM_THREAD_DAEMON | typeof JVM_THREAD_STATE + | typeof LCP | typeof LCP_ELEMENT | typeof LCP_ID | typeof LCP_SIZE @@ -10182,6 +10231,17 @@ export const ATTRIBUTE_METADATA: Record = { aliases: [CLS], sdks: ['javascript-browser'], }, + [BROWSER_WEB_VITAL_LCP_VALUE]: { + brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 2500, + aliases: [LCP], + sdks: ['javascript-browser'], + }, [CACHE_HIT]: { brief: 'If the cache was hit during this span.', type: 'boolean', @@ -11791,6 +11851,21 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: true, example: 'blocked', }, + [LCP]: { + brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 2500, + deprecation: { + replacement: 'browser.web_vital.lcp.value', + reason: 'The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_VALUE], + sdks: ['javascript-browser'], + }, [LCP_ELEMENT]: { brief: 'The dom element responsible for the largest contentful paint.', type: 'string', @@ -14102,6 +14177,7 @@ export type Attributes = { [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]?: BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE; [BROWSER_VERSION]?: BROWSER_VERSION_TYPE; [BROWSER_WEB_VITAL_CLS_VALUE]?: BROWSER_WEB_VITAL_CLS_VALUE_TYPE; + [BROWSER_WEB_VITAL_LCP_VALUE]?: BROWSER_WEB_VITAL_LCP_VALUE_TYPE; [CACHE_HIT]?: CACHE_HIT_TYPE; [CACHE_ITEM_SIZE]?: CACHE_ITEM_SIZE_TYPE; [CACHE_KEY]?: CACHE_KEY_TYPE; @@ -14254,6 +14330,7 @@ export type Attributes = { [JVM_MEMORY_TYPE]?: JVM_MEMORY_TYPE_TYPE; [JVM_THREAD_DAEMON]?: JVM_THREAD_DAEMON_TYPE; [JVM_THREAD_STATE]?: JVM_THREAD_STATE_TYPE; + [LCP]?: LCP_TYPE; [LCP_ELEMENT]?: LCP_ELEMENT_TYPE; [LCP_ID]?: LCP_ID_TYPE; [LCP_SIZE]?: LCP_SIZE_TYPE; diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 02855150..9df49c3a 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -137,6 +137,7 @@ class _AttributeNamesMeta(type): "HTTP_TARGET", "HTTP_URL", "HTTP_USER_AGENT", + "LCP", "METHOD", "NET_HOST_IP", "NET_HOST_NAME", @@ -649,6 +650,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 0.2361 """ + # Path: model/attributes/browser/browser__web_vital__lcp__value.json + BROWSER_WEB_VITAL_LCP_VALUE: Literal["browser.web_vital.lcp.value"] = ( + "browser.web_vital.lcp.value" + ) + """The value of the recorded Largest Contentful Paint (LCP) web vital + + Type: float + Contains PII: false + Defined in OTEL: No + Aliases: lcp + Example: 2500 + """ + # Path: model/attributes/cache/cache__hit.json CACHE_HIT: Literal["cache.hit"] = "cache.hit" """If the cache was hit during this span. @@ -2404,6 +2418,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "https://example.com" """ + # Path: model/attributes/lcp.json + LCP: Literal["lcp"] = "lcp" + """The value of the recorded Largest Contentful Paint (LCP) web vital + + Type: float + Contains PII: false + Defined in OTEL: No + Aliases: browser.web_vital.lcp.value + DEPRECATED: Use browser.web_vital.lcp.value instead - The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute. + Example: 2500 + """ + # Path: model/attributes/logger/logger__name.json LOGGER_NAME: Literal["logger.name"] = "logger.name" """The name of the logger that generated this event. @@ -5190,6 +5216,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): aliases=["cls"], sdks=["javascript-browser"], ), + "browser.web_vital.lcp.value": AttributeMetadata( + brief="The value of the recorded Largest Contentful Paint (LCP) web vital", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=2500, + aliases=["lcp"], + sdks=["javascript-browser"], + ), "cache.hit": AttributeMetadata( brief="If the cache was hit during this span.", type=AttributeType.BOOLEAN, @@ -6438,6 +6473,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example="https://example.com", ), + "lcp": AttributeMetadata( + brief="The value of the recorded Largest Contentful Paint (LCP) web vital", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=2500, + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.value", + reason="The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.value"], + sdks=["javascript-browser"], + ), "logger.name": AttributeMetadata( brief="The name of the logger that generated this event.", type=AttributeType.STRING, @@ -8206,6 +8255,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.script.source_char_position": int, "browser.version": str, "browser.web_vital.cls.value": float, + "browser.web_vital.lcp.value": float, "cache.hit": bool, "cache.item_size": int, "cache.key": List[str], @@ -8362,6 +8412,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "lcp.id": str, "lcp.size": int, "lcp.url": str, + "lcp": float, "logger.name": str, "mcp.cancelled.reason": str, "mcp.cancelled.request_id": str, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 7fde0dea..1212dd2a 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -49,6 +49,23 @@ "example": "ENOENT: no such file or directory", "sdks": ["javascript-node"] }, + { + "key": "lcp", + "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 2500, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.lcp.value", + "reason": "The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.value"] + }, { "key": "method", "brief": "The HTTP method used.", From cfca5d1fd03b434757fe734ab6cb5a87fa3dbd65 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 22 Jan 2026 15:57:25 +0100 Subject: [PATCH 5/7] feat(attributes): Add `browser.web_vital.inp.value` --- generated/attributes/all.md | 3 +- generated/attributes/browser.md | 13 +++++++ .../sentry-conventions/src/attributes.ts | 36 +++++++++++++++++++ .../browser__web_vital__inp__value.json | 12 +++++++ python/src/sentry_conventions/attributes.py | 23 ++++++++++++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 model/attributes/browser/browser__web_vital__inp__value.json diff --git a/generated/attributes/all.md b/generated/attributes/all.md index 834e056c..8758f5aa 100644 --- a/generated/attributes/all.md +++ b/generated/attributes/all.md @@ -4,7 +4,7 @@ This page lists all available attributes across all categories. -Total attributes: 426 +Total attributes: 427 ## Stable Attributes @@ -32,6 +32,7 @@ Total attributes: 426 | [`browser.script.source_char_position`](./browser.md#browserscriptsource_char_position) | A number representing the script character position of the script. | | [`browser.version`](./browser.md#browserversion) | The version of the browser. | | [`browser.web_vital.cls.value`](./browser.md#browserweb_vitalclsvalue) | The value of the recorded Cumulative Layout Shift (CLS) web vital | +| [`browser.web_vital.inp.value`](./browser.md#browserweb_vitalinpvalue) | The value of the recorded Interaction to Next Paint (INP) web vital | | [`browser.web_vital.lcp.value`](./browser.md#browserweb_vitallcpvalue) | The value of the recorded Largest Contentful Paint (LCP) web vital | | [`cache.hit`](./cache.md#cachehit) | If the cache was hit during this span. | | [`cache.item_size`](./cache.md#cacheitem_size) | The size of the requested item in the cache. In bytes. | diff --git a/generated/attributes/browser.md b/generated/attributes/browser.md index 16d9be4f..52b6d0d4 100644 --- a/generated/attributes/browser.md +++ b/generated/attributes/browser.md @@ -10,6 +10,7 @@ - [browser.script.source_char_position](#browserscriptsource_char_position) - [browser.version](#browserversion) - [browser.web_vital.cls.value](#browserweb_vitalclsvalue) + - [browser.web_vital.inp.value](#browserweb_vitalinpvalue) - [browser.web_vital.lcp.value](#browserweb_vitallcpvalue) ## Stable Attributes @@ -94,6 +95,18 @@ The value of the recorded Cumulative Layout Shift (CLS) web vital | Example | `0.2361` | | Aliases | `cls` | +### browser.web_vital.inp.value + +The value of the recorded Interaction to Next Paint (INP) web vital + +| Property | Value | +| --- | --- | +| Type | `double` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `200` | +| Aliases | `inp` | + ### browser.web_vital.lcp.value The value of the recorded Largest Contentful Paint (LCP) web vital diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 4e8b29b3..cb576bf4 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -900,6 +900,28 @@ export const BROWSER_WEB_VITAL_CLS_VALUE = 'browser.web_vital.cls.value'; */ export type BROWSER_WEB_VITAL_CLS_VALUE_TYPE = number; +// Path: model/attributes/browser/browser__web_vital__inp__value.json + +/** + * The value of the recorded Interaction to Next Paint (INP) web vital `browser.web_vital.inp.value` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_INP_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * Aliases: {@link INP} `inp` + * + * @example 200 + */ +export const BROWSER_WEB_VITAL_INP_VALUE = 'browser.web_vital.inp.value'; + +/** + * Type for {@link BROWSER_WEB_VITAL_INP_VALUE} browser.web_vital.inp.value + */ +export type BROWSER_WEB_VITAL_INP_VALUE_TYPE = number; + // Path: model/attributes/browser/browser__web_vital__lcp__value.json /** @@ -8940,6 +8962,7 @@ export const ATTRIBUTE_TYPE: Record = { [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]: 'integer', [BROWSER_VERSION]: 'string', [BROWSER_WEB_VITAL_CLS_VALUE]: 'double', + [BROWSER_WEB_VITAL_INP_VALUE]: 'double', [BROWSER_WEB_VITAL_LCP_VALUE]: 'double', [CACHE_HIT]: 'boolean', [CACHE_ITEM_SIZE]: 'integer', @@ -9369,6 +9392,7 @@ export type AttributeName = | typeof BROWSER_SCRIPT_SOURCE_CHAR_POSITION | typeof BROWSER_VERSION | typeof BROWSER_WEB_VITAL_CLS_VALUE + | typeof BROWSER_WEB_VITAL_INP_VALUE | typeof BROWSER_WEB_VITAL_LCP_VALUE | typeof CACHE_HIT | typeof CACHE_ITEM_SIZE @@ -10231,6 +10255,17 @@ export const ATTRIBUTE_METADATA: Record = { aliases: [CLS], sdks: ['javascript-browser'], }, + [BROWSER_WEB_VITAL_INP_VALUE]: { + brief: 'The value of the recorded Interaction to Next Paint (INP) web vital', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 200, + aliases: [], + sdks: ['javascript-browser'], + }, [BROWSER_WEB_VITAL_LCP_VALUE]: { brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital', type: 'double', @@ -14177,6 +14212,7 @@ export type Attributes = { [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]?: BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE; [BROWSER_VERSION]?: BROWSER_VERSION_TYPE; [BROWSER_WEB_VITAL_CLS_VALUE]?: BROWSER_WEB_VITAL_CLS_VALUE_TYPE; + [BROWSER_WEB_VITAL_INP_VALUE]?: BROWSER_WEB_VITAL_INP_VALUE_TYPE; [BROWSER_WEB_VITAL_LCP_VALUE]?: BROWSER_WEB_VITAL_LCP_VALUE_TYPE; [CACHE_HIT]?: CACHE_HIT_TYPE; [CACHE_ITEM_SIZE]?: CACHE_ITEM_SIZE_TYPE; diff --git a/model/attributes/browser/browser__web_vital__inp__value.json b/model/attributes/browser/browser__web_vital__inp__value.json new file mode 100644 index 00000000..ec68c68f --- /dev/null +++ b/model/attributes/browser/browser__web_vital__inp__value.json @@ -0,0 +1,12 @@ +{ + "key": "browser.web_vital.inp.value", + "brief": "The value of the recorded Interaction to Next Paint (INP) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 200.0, + "sdks": ["javascript-browser"], + "alias": ["inp"] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 9df49c3a..0fd51811 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -650,6 +650,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 0.2361 """ + # Path: model/attributes/browser/browser__web_vital__inp__value.json + BROWSER_WEB_VITAL_INP_VALUE: Literal["browser.web_vital.inp.value"] = ( + "browser.web_vital.inp.value" + ) + """The value of the recorded Interaction to Next Paint (INP) web vital + + Type: float + Contains PII: false + Defined in OTEL: No + Aliases: inp + Example: 200 + """ + # Path: model/attributes/browser/browser__web_vital__lcp__value.json BROWSER_WEB_VITAL_LCP_VALUE: Literal["browser.web_vital.lcp.value"] = ( "browser.web_vital.lcp.value" @@ -5216,6 +5229,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): aliases=["cls"], sdks=["javascript-browser"], ), + "browser.web_vital.inp.value": AttributeMetadata( + brief="The value of the recorded Interaction to Next Paint (INP) web vital", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=200, + aliases=["inp"], + sdks=["javascript-browser"], + ), "browser.web_vital.lcp.value": AttributeMetadata( brief="The value of the recorded Largest Contentful Paint (LCP) web vital", type=AttributeType.DOUBLE, @@ -8255,6 +8277,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.script.source_char_position": int, "browser.version": str, "browser.web_vital.cls.value": float, + "browser.web_vital.inp.value": float, "browser.web_vital.lcp.value": float, "cache.hit": bool, "cache.item_size": int, From cc4bd198face5713333d0d4ef3c1ac922065eac3 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 22 Jan 2026 15:57:42 +0100 Subject: [PATCH 6/7] feat(attributes): Add deprecated `inp` attribute --- generated/attributes/all.md | 3 +- generated/attributes/general.md | 15 +++++++ .../sentry-conventions/src/attributes.ts | 43 ++++++++++++++++++- model/attributes/inp.json | 17 ++++++++ python/src/sentry_conventions/attributes.py | 28 ++++++++++++ shared/deprecated_attributes.json | 17 ++++++++ 6 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 model/attributes/inp.json diff --git a/generated/attributes/all.md b/generated/attributes/all.md index 8758f5aa..8173de87 100644 --- a/generated/attributes/all.md +++ b/generated/attributes/all.md @@ -4,7 +4,7 @@ This page lists all available attributes across all categories. -Total attributes: 427 +Total attributes: 428 ## Stable Attributes @@ -414,6 +414,7 @@ Total attributes: 427 | [`http.target`](./http.md#httptarget) | [`url.path`](./url.md#urlpath) | | [`http.url`](./http.md#httpurl) | [`url.full`](./url.md#urlfull) | | [`http.user_agent`](./http.md#httpuser_agent) | [`user_agent.original`](./user_agent.md#user_agentoriginal) | +| [`inp`](./general.md#inp) | [`browser.web_vital.inp.value`](./browser.md#browserweb_vitalinpvalue) | | [`lcp`](./general.md#lcp) | [`browser.web_vital.lcp.value`](./browser.md#browserweb_vitallcpvalue) | | [`method`](./general.md#method) | [`http.request.method`](./http.md#httprequestmethod) | | [`net.host.ip`](./net.md#nethostip) | [`network.local.address`](./network.md#networklocaladdress) | diff --git a/generated/attributes/general.md b/generated/attributes/general.md index e17f9ea2..f4195065 100644 --- a/generated/attributes/general.md +++ b/generated/attributes/general.md @@ -13,6 +13,7 @@ - [cls](#cls) - [environment](#environment) - [fs_error](#fs_error) + - [inp](#inp) - [lcp](#lcp) - [method](#method) - [profile_id](#profile_id) @@ -134,6 +135,20 @@ The error message of a file system error. | Deprecated | Yes, use `error.type` instead | | Deprecation Reason | This attribute is not part of the OpenTelemetry specification and error.type fits much better. | +### inp + +The value of the recorded Interaction to Next Paint (INP) web vital + +| Property | Value | +| --- | --- | +| Type | `double` | +| Has PII | false | +| Exists in OpenTelemetry | No | +| Example | `200` | +| Deprecated | Yes, use `browser.web_vital.inp.value` instead | +| Deprecation Reason | The INP web vital is now recorded as a browser.web_vital.inp.value attribute. | +| Aliases | `browser.web_vital.inp.value` | + ### lcp The value of the recorded Largest Contentful Paint (LCP) web vital diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index cb576bf4..ea2ae251 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -4010,6 +4010,29 @@ export const ID = 'id'; */ export type ID_TYPE = string; +// Path: model/attributes/inp.json + +/** + * The value of the recorded Interaction to Next Paint (INP) web vital `inp` + * + * Attribute Value Type: `number` {@link INP_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * Aliases: {@link BROWSER_WEB_VITAL_INP_VALUE} `browser.web_vital.inp.value` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_INP_VALUE} (browser.web_vital.inp.value) instead - The INP web vital is now recorded as a browser.web_vital.inp.value attribute. + * @example 200 + */ +export const INP = 'inp'; + +/** + * Type for {@link INP} inp + */ +export type INP_TYPE = number; + // Path: model/attributes/jvm/jvm__gc__action.json /** @@ -9110,6 +9133,7 @@ export const ATTRIBUTE_TYPE: Record = { [HTTP_URL]: 'string', [HTTP_USER_AGENT]: 'string', [ID]: 'string', + [INP]: 'double', [JVM_GC_ACTION]: 'string', [JVM_GC_NAME]: 'string', [JVM_MEMORY_POOL_NAME]: 'string', @@ -9540,6 +9564,7 @@ export type AttributeName = | typeof HTTP_URL | typeof HTTP_USER_AGENT | typeof ID + | typeof INP | typeof JVM_GC_ACTION | typeof JVM_GC_NAME | typeof JVM_MEMORY_POOL_NAME @@ -10263,7 +10288,7 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 200, - aliases: [], + aliases: [INP], sdks: ['javascript-browser'], }, [BROWSER_WEB_VITAL_LCP_VALUE]: { @@ -11832,6 +11857,21 @@ export const ATTRIBUTE_METADATA: Record = { example: 'f47ac10b58cc4372a5670e02b2c3d479', sdks: ['php-laravel'], }, + [INP]: { + brief: 'The value of the recorded Interaction to Next Paint (INP) web vital', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 200, + deprecation: { + replacement: 'browser.web_vital.inp.value', + reason: 'The INP web vital is now recorded as a browser.web_vital.inp.value attribute.', + }, + aliases: [BROWSER_WEB_VITAL_INP_VALUE], + sdks: ['javascript-browser'], + }, [JVM_GC_ACTION]: { brief: 'Name of the garbage collector action.', type: 'string', @@ -14360,6 +14400,7 @@ export type Attributes = { [HTTP_URL]?: HTTP_URL_TYPE; [HTTP_USER_AGENT]?: HTTP_USER_AGENT_TYPE; [ID]?: ID_TYPE; + [INP]?: INP_TYPE; [JVM_GC_ACTION]?: JVM_GC_ACTION_TYPE; [JVM_GC_NAME]?: JVM_GC_NAME_TYPE; [JVM_MEMORY_POOL_NAME]?: JVM_MEMORY_POOL_NAME_TYPE; diff --git a/model/attributes/inp.json b/model/attributes/inp.json new file mode 100644 index 00000000..e8e821c8 --- /dev/null +++ b/model/attributes/inp.json @@ -0,0 +1,17 @@ +{ + "key": "inp", + "brief": "The value of the recorded Interaction to Next Paint (INP) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 200.0, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.inp.value", + "reason": "The INP web vital is now recorded as a browser.web_vital.inp.value attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.inp.value"] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 0fd51811..cf59d479 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -137,6 +137,7 @@ class _AttributeNamesMeta(type): "HTTP_TARGET", "HTTP_URL", "HTTP_USER_AGENT", + "INP", "LCP", "METHOD", "NET_HOST_IP", @@ -2331,6 +2332,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "f47ac10b58cc4372a5670e02b2c3d479" """ + # Path: model/attributes/inp.json + INP: Literal["inp"] = "inp" + """The value of the recorded Interaction to Next Paint (INP) web vital + + Type: float + Contains PII: false + Defined in OTEL: No + Aliases: browser.web_vital.inp.value + DEPRECATED: Use browser.web_vital.inp.value instead - The INP web vital is now recorded as a browser.web_vital.inp.value attribute. + Example: 200 + """ + # Path: model/attributes/jvm/jvm__gc__action.json JVM_GC_ACTION: Literal["jvm.gc.action"] = "jvm.gc.action" """Name of the garbage collector action. @@ -6425,6 +6438,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example="f47ac10b58cc4372a5670e02b2c3d479", sdks=["php-laravel"], ), + "inp": AttributeMetadata( + brief="The value of the recorded Interaction to Next Paint (INP) web vital", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=200, + deprecation=DeprecationInfo( + replacement="browser.web_vital.inp.value", + reason="The INP web vital is now recorded as a browser.web_vital.inp.value attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.inp.value"], + sdks=["javascript-browser"], + ), "jvm.gc.action": AttributeMetadata( brief="Name of the garbage collector action.", type=AttributeType.STRING, @@ -8425,6 +8452,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "http.url": str, "http.user_agent": str, "id": str, + "inp": float, "jvm.gc.action": str, "jvm.gc.name": str, "jvm.memory.pool.name": str, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 1212dd2a..e74ce019 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -49,6 +49,23 @@ "example": "ENOENT: no such file or directory", "sdks": ["javascript-node"] }, + { + "key": "inp", + "brief": "The value of the recorded Interaction to Next Paint (INP) web vital", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 200, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.inp.value", + "reason": "The INP web vital is now recorded as a browser.web_vital.inp.value attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.inp.value"] + }, { "key": "lcp", "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", From 18ea0e68c91404f83c32f176dd1b505aafa701d5 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Fri, 23 Jan 2026 10:54:01 +0100 Subject: [PATCH 7/7] set pii maybe for numeric value attributes --- generated/attributes/browser.md | 6 ++--- generated/attributes/general.md | 6 ++--- .../sentry-conventions/src/attributes.ts | 24 +++++++++---------- .../browser__web_vital__cls__value.json | 2 +- .../browser__web_vital__inp__value.json | 2 +- .../browser__web_vital__lcp__value.json | 2 +- model/attributes/cls.json | 2 +- model/attributes/inp.json | 2 +- model/attributes/lcp.json | 2 +- python/src/sentry_conventions/attributes.py | 24 +++++++++---------- shared/deprecated_attributes.json | 6 ++--- 11 files changed, 39 insertions(+), 39 deletions(-) diff --git a/generated/attributes/browser.md b/generated/attributes/browser.md index 52b6d0d4..ef0834c7 100644 --- a/generated/attributes/browser.md +++ b/generated/attributes/browser.md @@ -90,7 +90,7 @@ The value of the recorded Cumulative Layout Shift (CLS) web vital | Property | Value | | --- | --- | | Type | `double` | -| Has PII | false | +| Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `0.2361` | | Aliases | `cls` | @@ -102,7 +102,7 @@ The value of the recorded Interaction to Next Paint (INP) web vital | Property | Value | | --- | --- | | Type | `double` | -| Has PII | false | +| Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `200` | | Aliases | `inp` | @@ -114,7 +114,7 @@ The value of the recorded Largest Contentful Paint (LCP) web vital | Property | Value | | --- | --- | | Type | `double` | -| Has PII | false | +| Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `2500` | | Aliases | `lcp` | diff --git a/generated/attributes/general.md b/generated/attributes/general.md index f4195065..429fc1ad 100644 --- a/generated/attributes/general.md +++ b/generated/attributes/general.md @@ -102,7 +102,7 @@ The value of the recorded Cumulative Layout Shift (CLS) web vital | Property | Value | | --- | --- | | Type | `double` | -| Has PII | false | +| Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `0.2361` | | Deprecated | Yes, use `browser.web_vital.cls.value` instead | @@ -142,7 +142,7 @@ The value of the recorded Interaction to Next Paint (INP) web vital | Property | Value | | --- | --- | | Type | `double` | -| Has PII | false | +| Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `200` | | Deprecated | Yes, use `browser.web_vital.inp.value` instead | @@ -156,7 +156,7 @@ The value of the recorded Largest Contentful Paint (LCP) web vital | Property | Value | | --- | --- | | Type | `double` | -| Has PII | false | +| Has PII | maybe | | Exists in OpenTelemetry | No | | Example | `2500` | | Deprecated | Yes, use `browser.web_vital.lcp.value` instead | diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index ea2ae251..dc2903de 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -885,7 +885,7 @@ export type BROWSER_VERSION_TYPE = string; * * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_CLS_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -907,7 +907,7 @@ export type BROWSER_WEB_VITAL_CLS_VALUE_TYPE = number; * * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_INP_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -929,7 +929,7 @@ export type BROWSER_WEB_VITAL_INP_VALUE_TYPE = number; * * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -1173,7 +1173,7 @@ export type CLOUDFLARE_D1_ROWS_WRITTEN_TYPE = number; * * Attribute Value Type: `number` {@link CLS_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -4017,7 +4017,7 @@ export type ID_TYPE = string; * * Attribute Value Type: `number` {@link INP_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -4160,7 +4160,7 @@ export type JVM_THREAD_STATE_TYPE = string; * * Attribute Value Type: `number` {@link LCP_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -10273,7 +10273,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The value of the recorded Cumulative Layout Shift (CLS) web vital', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 0.2361, @@ -10284,7 +10284,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The value of the recorded Interaction to Next Paint (INP) web vital', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 200, @@ -10295,7 +10295,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 2500, @@ -10415,7 +10415,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The value of the recorded Cumulative Layout Shift (CLS) web vital', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 0.2361, @@ -11861,7 +11861,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The value of the recorded Interaction to Next Paint (INP) web vital', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 200, @@ -11930,7 +11930,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 2500, diff --git a/model/attributes/browser/browser__web_vital__cls__value.json b/model/attributes/browser/browser__web_vital__cls__value.json index 875384eb..9799abb0 100644 --- a/model/attributes/browser/browser__web_vital__cls__value.json +++ b/model/attributes/browser/browser__web_vital__cls__value.json @@ -3,7 +3,7 @@ "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 0.2361, diff --git a/model/attributes/browser/browser__web_vital__inp__value.json b/model/attributes/browser/browser__web_vital__inp__value.json index ec68c68f..d8ce0600 100644 --- a/model/attributes/browser/browser__web_vital__inp__value.json +++ b/model/attributes/browser/browser__web_vital__inp__value.json @@ -3,7 +3,7 @@ "brief": "The value of the recorded Interaction to Next Paint (INP) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 200.0, diff --git a/model/attributes/browser/browser__web_vital__lcp__value.json b/model/attributes/browser/browser__web_vital__lcp__value.json index 9fbe8497..78888df4 100644 --- a/model/attributes/browser/browser__web_vital__lcp__value.json +++ b/model/attributes/browser/browser__web_vital__lcp__value.json @@ -3,7 +3,7 @@ "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 2500.0, diff --git a/model/attributes/cls.json b/model/attributes/cls.json index f83429da..fd82a5d1 100644 --- a/model/attributes/cls.json +++ b/model/attributes/cls.json @@ -3,7 +3,7 @@ "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 0.2361, diff --git a/model/attributes/inp.json b/model/attributes/inp.json index e8e821c8..b01f930c 100644 --- a/model/attributes/inp.json +++ b/model/attributes/inp.json @@ -3,7 +3,7 @@ "brief": "The value of the recorded Interaction to Next Paint (INP) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 200.0, diff --git a/model/attributes/lcp.json b/model/attributes/lcp.json index fe4b0688..68590150 100644 --- a/model/attributes/lcp.json +++ b/model/attributes/lcp.json @@ -3,7 +3,7 @@ "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 2500.0, diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index cf59d479..061835a6 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -645,7 +645,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The value of the recorded Cumulative Layout Shift (CLS) web vital Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Aliases: cls Example: 0.2361 @@ -658,7 +658,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The value of the recorded Interaction to Next Paint (INP) web vital Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Aliases: inp Example: 200 @@ -671,7 +671,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The value of the recorded Largest Contentful Paint (LCP) web vital Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Aliases: lcp Example: 2500 @@ -797,7 +797,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The value of the recorded Cumulative Layout Shift (CLS) web vital Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Aliases: browser.web_vital.cls.value DEPRECATED: Use browser.web_vital.cls.value instead - The CLS web vital is now recorded as a browser.web_vital.cls.value attribute. @@ -2337,7 +2337,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The value of the recorded Interaction to Next Paint (INP) web vital Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Aliases: browser.web_vital.inp.value DEPRECATED: Use browser.web_vital.inp.value instead - The INP web vital is now recorded as a browser.web_vital.inp.value attribute. @@ -2449,7 +2449,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The value of the recorded Largest Contentful Paint (LCP) web vital Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Aliases: browser.web_vital.lcp.value DEPRECATED: Use browser.web_vital.lcp.value instead - The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute. @@ -5236,7 +5236,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.web_vital.cls.value": AttributeMetadata( brief="The value of the recorded Cumulative Layout Shift (CLS) web vital", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=0.2361, aliases=["cls"], @@ -5245,7 +5245,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.web_vital.inp.value": AttributeMetadata( brief="The value of the recorded Interaction to Next Paint (INP) web vital", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=200, aliases=["inp"], @@ -5254,7 +5254,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.web_vital.lcp.value": AttributeMetadata( brief="The value of the recorded Largest Contentful Paint (LCP) web vital", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=2500, aliases=["lcp"], @@ -5349,7 +5349,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "cls": AttributeMetadata( brief="The value of the recorded Cumulative Layout Shift (CLS) web vital", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=0.2361, deprecation=DeprecationInfo( @@ -6441,7 +6441,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "inp": AttributeMetadata( brief="The value of the recorded Interaction to Next Paint (INP) web vital", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=200, deprecation=DeprecationInfo( @@ -6525,7 +6525,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "lcp": AttributeMetadata( brief="The value of the recorded Largest Contentful Paint (LCP) web vital", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=2500, deprecation=DeprecationInfo( diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index e74ce019..74878801 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -6,7 +6,7 @@ "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 0.2361, @@ -54,7 +54,7 @@ "brief": "The value of the recorded Interaction to Next Paint (INP) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 200, @@ -71,7 +71,7 @@ "brief": "The value of the recorded Largest Contentful Paint (LCP) web vital", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 2500,