From aff21223e9a6914aaef669b5c3725a9ebfe5baa8 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 16:05:38 +0100 Subject: [PATCH 1/8] feat(attributes): Add `app.*` attributes for mobile app context Add app.name, app.identifier, app.version, app.build, app.start_time, and app.in_foreground attributes for mobile app context metadata. Co-Authored-By: Claude Opus 4.6 --- .../sentry-conventions/src/attributes.ts | 204 ++++++++++++++++++ model/attributes/app/app__build.json | 17 ++ model/attributes/app/app__identifier.json | 17 ++ model/attributes/app/app__in_foreground.json | 17 ++ model/attributes/app/app__name.json | 17 ++ model/attributes/app/app__start_time.json | 17 ++ model/attributes/app/app__version.json | 17 ++ python/src/sentry_conventions/attributes.py | 168 +++++++++++++++ 8 files changed, 474 insertions(+) create mode 100644 model/attributes/app/app__build.json create mode 100644 model/attributes/app/app__identifier.json create mode 100644 model/attributes/app/app__in_foreground.json create mode 100644 model/attributes/app/app__name.json create mode 100644 model/attributes/app/app__start_time.json create mode 100644 model/attributes/app/app__version.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 61d4bbad..161757e1 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -733,6 +733,106 @@ export const AI_WARNINGS = 'ai.warnings'; */ export type AI_WARNINGS_TYPE = Array; +// Path: model/attributes/app/app__build.json + +/** + * Internal build identifier, as it appears on the platform. `app.build` + * + * Attribute Value Type: `string` {@link APP_BUILD_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "1" + */ +export const APP_BUILD = 'app.build'; + +/** + * Type for {@link APP_BUILD} app.build + */ +export type APP_BUILD_TYPE = string; + +// Path: model/attributes/app/app__identifier.json + +/** + * Version-independent application identifier, often a dotted bundle ID. `app.identifier` + * + * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "com.example.myapp" + */ +export const APP_IDENTIFIER = 'app.identifier'; + +/** + * Type for {@link APP_IDENTIFIER} app.identifier + */ +export type APP_IDENTIFIER_TYPE = string; + +// Path: model/attributes/app/app__in_foreground.json + +/** + * Whether the application is currently in the foreground. `app.in_foreground` + * + * Attribute Value Type: `boolean` {@link APP_IN_FOREGROUND_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example true + */ +export const APP_IN_FOREGROUND = 'app.in_foreground'; + +/** + * Type for {@link APP_IN_FOREGROUND} app.in_foreground + */ +export type APP_IN_FOREGROUND_TYPE = boolean; + +// Path: model/attributes/app/app__name.json + +/** + * Human readable application name, as it appears on the platform. `app.name` + * + * Attribute Value Type: `string` {@link APP_NAME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "My App" + */ +export const APP_NAME = 'app.name'; + +/** + * Type for {@link APP_NAME} app.name + */ +export type APP_NAME_TYPE = string; + +// Path: model/attributes/app/app__start_time.json + +/** + * Formatted UTC timestamp when the user started the application. `app.start_time` + * + * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "2025-01-01T00:00:00.000Z" + */ +export const APP_START_TIME = 'app.start_time'; + +/** + * Type for {@link APP_START_TIME} app.start_time + */ +export type APP_START_TIME_TYPE = string; + // Path: model/attributes/app_start_type.json /** @@ -753,6 +853,26 @@ export const APP_START_TYPE = 'app_start_type'; */ export type APP_START_TYPE_TYPE = string; +// Path: model/attributes/app/app__version.json + +/** + * Human readable application version, as it appears on the platform. `app.version` + * + * Attribute Value Type: `string` {@link APP_VERSION_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "1.0.0" + */ +export const APP_VERSION = 'app.version'; + +/** + * Type for {@link APP_VERSION} app.version + */ +export type APP_VERSION_TYPE = string; + // Path: model/attributes/blocked_main_thread.json /** @@ -9876,7 +9996,13 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_COST]: 'double', [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', + [APP_BUILD]: 'string', + [APP_IDENTIFIER]: 'string', + [APP_IN_FOREGROUND]: 'boolean', + [APP_NAME]: 'string', + [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', + [APP_VERSION]: 'string', [BLOCKED_MAIN_THREAD]: 'boolean', [BROWSER_NAME]: 'string', [BROWSER_REPORT_TYPE]: 'string', @@ -10346,7 +10472,13 @@ export type AttributeName = | typeof AI_TOTAL_COST | typeof AI_TOTAL_TOKENS_USED | typeof AI_WARNINGS + | typeof APP_BUILD + | typeof APP_IDENTIFIER + | typeof APP_IN_FOREGROUND + | typeof APP_NAME + | typeof APP_START_TIME | typeof APP_START_TYPE + | typeof APP_VERSION | typeof BLOCKED_MAIN_THREAD | typeof BROWSER_NAME | typeof BROWSER_REPORT_TYPE @@ -11283,6 +11415,61 @@ export const ATTRIBUTE_METADATA: Record = { { version: '0.1.0', prs: [55] }, ], }, + [APP_BUILD]: { + brief: 'Internal build identifier, as it appears on the platform.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: '1', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.build attribute' }], + }, + [APP_IDENTIFIER]: { + brief: 'Version-independent application identifier, often a dotted bundle ID.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'com.example.myapp', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.identifier attribute' }], + }, + [APP_IN_FOREGROUND]: { + brief: 'Whether the application is currently in the foreground.', + type: 'boolean', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: true, + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.in_foreground attribute' }], + }, + [APP_NAME]: { + brief: 'Human readable application name, as it appears on the platform.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'My App', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.name attribute' }], + }, + [APP_START_TIME]: { + brief: 'Formatted UTC timestamp when the user started the application.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: '2025-01-01T00:00:00.000Z', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.start_time attribute' }], + }, [APP_START_TYPE]: { brief: 'Mobile app start variant. Either cold or warm.', type: 'string', @@ -11293,6 +11480,17 @@ export const ATTRIBUTE_METADATA: Record = { example: 'cold', changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], }, + [APP_VERSION]: { + brief: 'Human readable application version, as it appears on the platform.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: '1.0.0', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.version attribute' }], + }, [BLOCKED_MAIN_THREAD]: { brief: 'Whether the main thread was blocked by the span.', type: 'boolean', @@ -16460,7 +16658,13 @@ export type Attributes = { [AI_TOTAL_COST]?: AI_TOTAL_COST_TYPE; [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE; [AI_WARNINGS]?: AI_WARNINGS_TYPE; + [APP_BUILD]?: APP_BUILD_TYPE; + [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE; + [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; + [APP_NAME]?: APP_NAME_TYPE; + [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; + [APP_VERSION]?: APP_VERSION_TYPE; [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE; [BROWSER_NAME]?: BROWSER_NAME_TYPE; [BROWSER_REPORT_TYPE]?: BROWSER_REPORT_TYPE_TYPE; diff --git a/model/attributes/app/app__build.json b/model/attributes/app/app__build.json new file mode 100644 index 00000000..ba56415d --- /dev/null +++ b/model/attributes/app/app__build.json @@ -0,0 +1,17 @@ +{ + "key": "app.build", + "brief": "Internal build identifier, as it appears on the platform.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "1", + "changelog": [ + { + "version": "next", + "description": "Added app.build attribute" + } + ] +} diff --git a/model/attributes/app/app__identifier.json b/model/attributes/app/app__identifier.json new file mode 100644 index 00000000..78a1c2d9 --- /dev/null +++ b/model/attributes/app/app__identifier.json @@ -0,0 +1,17 @@ +{ + "key": "app.identifier", + "brief": "Version-independent application identifier, often a dotted bundle ID.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "com.example.myapp", + "changelog": [ + { + "version": "next", + "description": "Added app.identifier attribute" + } + ] +} diff --git a/model/attributes/app/app__in_foreground.json b/model/attributes/app/app__in_foreground.json new file mode 100644 index 00000000..e6d92589 --- /dev/null +++ b/model/attributes/app/app__in_foreground.json @@ -0,0 +1,17 @@ +{ + "key": "app.in_foreground", + "brief": "Whether the application is currently in the foreground.", + "type": "boolean", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": true, + "changelog": [ + { + "version": "next", + "description": "Added app.in_foreground attribute" + } + ] +} diff --git a/model/attributes/app/app__name.json b/model/attributes/app/app__name.json new file mode 100644 index 00000000..28125fae --- /dev/null +++ b/model/attributes/app/app__name.json @@ -0,0 +1,17 @@ +{ + "key": "app.name", + "brief": "Human readable application name, as it appears on the platform.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "My App", + "changelog": [ + { + "version": "next", + "description": "Added app.name attribute" + } + ] +} diff --git a/model/attributes/app/app__start_time.json b/model/attributes/app/app__start_time.json new file mode 100644 index 00000000..97e4e3f0 --- /dev/null +++ b/model/attributes/app/app__start_time.json @@ -0,0 +1,17 @@ +{ + "key": "app.start_time", + "brief": "Formatted UTC timestamp when the user started the application.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "2025-01-01T00:00:00.000Z", + "changelog": [ + { + "version": "next", + "description": "Added app.start_time attribute" + } + ] +} diff --git a/model/attributes/app/app__version.json b/model/attributes/app/app__version.json new file mode 100644 index 00000000..513d87a3 --- /dev/null +++ b/model/attributes/app/app__version.json @@ -0,0 +1,17 @@ +{ + "key": "app.version", + "brief": "Human readable application version, as it appears on the platform.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "1.0.0", + "changelog": [ + { + "version": "next", + "description": "Added app.version attribute" + } + ] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index af0a7b3f..f18b282a 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -618,6 +618,66 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: ["Token limit exceeded"] """ + # Path: model/attributes/app/app__build.json + APP_BUILD: Literal["app.build"] = "app.build" + """Internal build identifier, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "1" + """ + + # Path: model/attributes/app/app__identifier.json + APP_IDENTIFIER: Literal["app.identifier"] = "app.identifier" + """Version-independent application identifier, often a dotted bundle ID. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "com.example.myapp" + """ + + # Path: model/attributes/app/app__in_foreground.json + APP_IN_FOREGROUND: Literal["app.in_foreground"] = "app.in_foreground" + """Whether the application is currently in the foreground. + + Type: bool + Contains PII: maybe + Defined in OTEL: No + Example: true + """ + + # Path: model/attributes/app/app__name.json + APP_NAME: Literal["app.name"] = "app.name" + """Human readable application name, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "My App" + """ + + # Path: model/attributes/app/app__start_time.json + APP_START_TIME: Literal["app.start_time"] = "app.start_time" + """Formatted UTC timestamp when the user started the application. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "2025-01-01T00:00:00.000Z" + """ + + # Path: model/attributes/app/app__version.json + APP_VERSION: Literal["app.version"] = "app.version" + """Human readable application version, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "1.0.0" + """ + # Path: model/attributes/app_start_type.json APP_START_TYPE: Literal["app_start_type"] = "app_start_type" """Mobile app start variant. Either cold or warm. @@ -5861,6 +5921,108 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.1.0", prs=[55]), ], ), + "app.build": AttributeMetadata( + brief="Internal build identifier, as it appears on the platform.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="1", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry(version="next", description="Added app.build attribute"), + ], + ), + "app.identifier": AttributeMetadata( + brief="Version-independent application identifier, often a dotted bundle ID.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="com.example.myapp", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", description="Added app.identifier attribute" + ), + ], + ), + "app.in_foreground": AttributeMetadata( + brief="Whether the application is currently in the foreground.", + type=AttributeType.BOOLEAN, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=True, + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", description="Added app.in_foreground attribute" + ), + ], + ), + "app.name": AttributeMetadata( + brief="Human readable application name, as it appears on the platform.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="My App", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry(version="next", description="Added app.name attribute"), + ], + ), + "app.start_time": AttributeMetadata( + brief="Formatted UTC timestamp when the user started the application.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="2025-01-01T00:00:00.000Z", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", description="Added app.start_time attribute" + ), + ], + ), + "app.version": AttributeMetadata( + brief="Human readable application version, as it appears on the platform.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="1.0.0", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry(version="next", description="Added app.version attribute"), + ], + ), "app_start_type": AttributeMetadata( brief="Mobile app start variant. Either cold or warm.", type=AttributeType.STRING, @@ -11025,6 +11187,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_cost": float, "ai.total_tokens.used": int, "ai.warnings": List[str], + "app.build": str, + "app.identifier": str, + "app.in_foreground": bool, + "app.name": str, + "app.start_time": str, + "app.version": str, "app_start_type": str, "blocked_main_thread": bool, "browser.name": str, From 1360e8bdd825330e95d89e3e5d488e737f2a8216 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 16:07:09 +0100 Subject: [PATCH 2/8] ref(attributes): Drop app.version, app.identifier, app.build These are redundant with sentry.release which already contains the app identifier, version, and build number. Co-Authored-By: Claude Opus 4.6 --- .../sentry-conventions/src/attributes.ts | 102 ------------------ model/attributes/app/app__build.json | 17 --- model/attributes/app/app__identifier.json | 17 --- model/attributes/app/app__version.json | 17 --- python/src/sentry_conventions/attributes.py | 83 -------------- 5 files changed, 236 deletions(-) delete mode 100644 model/attributes/app/app__build.json delete mode 100644 model/attributes/app/app__identifier.json delete mode 100644 model/attributes/app/app__version.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 161757e1..284389a9 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -733,46 +733,6 @@ export const AI_WARNINGS = 'ai.warnings'; */ export type AI_WARNINGS_TYPE = Array; -// Path: model/attributes/app/app__build.json - -/** - * Internal build identifier, as it appears on the platform. `app.build` - * - * Attribute Value Type: `string` {@link APP_BUILD_TYPE} - * - * Contains PII: maybe - * - * Attribute defined in OTEL: No - * - * @example "1" - */ -export const APP_BUILD = 'app.build'; - -/** - * Type for {@link APP_BUILD} app.build - */ -export type APP_BUILD_TYPE = string; - -// Path: model/attributes/app/app__identifier.json - -/** - * Version-independent application identifier, often a dotted bundle ID. `app.identifier` - * - * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} - * - * Contains PII: maybe - * - * Attribute defined in OTEL: No - * - * @example "com.example.myapp" - */ -export const APP_IDENTIFIER = 'app.identifier'; - -/** - * Type for {@link APP_IDENTIFIER} app.identifier - */ -export type APP_IDENTIFIER_TYPE = string; - // Path: model/attributes/app/app__in_foreground.json /** @@ -853,26 +813,6 @@ export const APP_START_TYPE = 'app_start_type'; */ export type APP_START_TYPE_TYPE = string; -// Path: model/attributes/app/app__version.json - -/** - * Human readable application version, as it appears on the platform. `app.version` - * - * Attribute Value Type: `string` {@link APP_VERSION_TYPE} - * - * Contains PII: maybe - * - * Attribute defined in OTEL: No - * - * @example "1.0.0" - */ -export const APP_VERSION = 'app.version'; - -/** - * Type for {@link APP_VERSION} app.version - */ -export type APP_VERSION_TYPE = string; - // Path: model/attributes/blocked_main_thread.json /** @@ -9996,13 +9936,10 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_COST]: 'double', [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', - [APP_BUILD]: 'string', - [APP_IDENTIFIER]: 'string', [APP_IN_FOREGROUND]: 'boolean', [APP_NAME]: 'string', [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', - [APP_VERSION]: 'string', [BLOCKED_MAIN_THREAD]: 'boolean', [BROWSER_NAME]: 'string', [BROWSER_REPORT_TYPE]: 'string', @@ -10472,13 +10409,10 @@ export type AttributeName = | typeof AI_TOTAL_COST | typeof AI_TOTAL_TOKENS_USED | typeof AI_WARNINGS - | typeof APP_BUILD - | typeof APP_IDENTIFIER | typeof APP_IN_FOREGROUND | typeof APP_NAME | typeof APP_START_TIME | typeof APP_START_TYPE - | typeof APP_VERSION | typeof BLOCKED_MAIN_THREAD | typeof BROWSER_NAME | typeof BROWSER_REPORT_TYPE @@ -11415,28 +11349,6 @@ export const ATTRIBUTE_METADATA: Record = { { version: '0.1.0', prs: [55] }, ], }, - [APP_BUILD]: { - brief: 'Internal build identifier, as it appears on the platform.', - type: 'string', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: '1', - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.build attribute' }], - }, - [APP_IDENTIFIER]: { - brief: 'Version-independent application identifier, often a dotted bundle ID.', - type: 'string', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 'com.example.myapp', - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.identifier attribute' }], - }, [APP_IN_FOREGROUND]: { brief: 'Whether the application is currently in the foreground.', type: 'boolean', @@ -11480,17 +11392,6 @@ export const ATTRIBUTE_METADATA: Record = { example: 'cold', changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], }, - [APP_VERSION]: { - brief: 'Human readable application version, as it appears on the platform.', - type: 'string', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: '1.0.0', - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.version attribute' }], - }, [BLOCKED_MAIN_THREAD]: { brief: 'Whether the main thread was blocked by the span.', type: 'boolean', @@ -16658,13 +16559,10 @@ export type Attributes = { [AI_TOTAL_COST]?: AI_TOTAL_COST_TYPE; [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE; [AI_WARNINGS]?: AI_WARNINGS_TYPE; - [APP_BUILD]?: APP_BUILD_TYPE; - [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE; [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; [APP_NAME]?: APP_NAME_TYPE; [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; - [APP_VERSION]?: APP_VERSION_TYPE; [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE; [BROWSER_NAME]?: BROWSER_NAME_TYPE; [BROWSER_REPORT_TYPE]?: BROWSER_REPORT_TYPE_TYPE; diff --git a/model/attributes/app/app__build.json b/model/attributes/app/app__build.json deleted file mode 100644 index ba56415d..00000000 --- a/model/attributes/app/app__build.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "key": "app.build", - "brief": "Internal build identifier, as it appears on the platform.", - "type": "string", - "pii": { - "key": "maybe" - }, - "is_in_otel": false, - "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "example": "1", - "changelog": [ - { - "version": "next", - "description": "Added app.build attribute" - } - ] -} diff --git a/model/attributes/app/app__identifier.json b/model/attributes/app/app__identifier.json deleted file mode 100644 index 78a1c2d9..00000000 --- a/model/attributes/app/app__identifier.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "key": "app.identifier", - "brief": "Version-independent application identifier, often a dotted bundle ID.", - "type": "string", - "pii": { - "key": "maybe" - }, - "is_in_otel": false, - "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "example": "com.example.myapp", - "changelog": [ - { - "version": "next", - "description": "Added app.identifier attribute" - } - ] -} diff --git a/model/attributes/app/app__version.json b/model/attributes/app/app__version.json deleted file mode 100644 index 513d87a3..00000000 --- a/model/attributes/app/app__version.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "key": "app.version", - "brief": "Human readable application version, as it appears on the platform.", - "type": "string", - "pii": { - "key": "maybe" - }, - "is_in_otel": false, - "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "example": "1.0.0", - "changelog": [ - { - "version": "next", - "description": "Added app.version attribute" - } - ] -} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index f18b282a..44bf1c7f 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -618,26 +618,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: ["Token limit exceeded"] """ - # Path: model/attributes/app/app__build.json - APP_BUILD: Literal["app.build"] = "app.build" - """Internal build identifier, as it appears on the platform. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "1" - """ - - # Path: model/attributes/app/app__identifier.json - APP_IDENTIFIER: Literal["app.identifier"] = "app.identifier" - """Version-independent application identifier, often a dotted bundle ID. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "com.example.myapp" - """ - # Path: model/attributes/app/app__in_foreground.json APP_IN_FOREGROUND: Literal["app.in_foreground"] = "app.in_foreground" """Whether the application is currently in the foreground. @@ -668,16 +648,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "2025-01-01T00:00:00.000Z" """ - # Path: model/attributes/app/app__version.json - APP_VERSION: Literal["app.version"] = "app.version" - """Human readable application version, as it appears on the platform. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "1.0.0" - """ - # Path: model/attributes/app_start_type.json APP_START_TYPE: Literal["app_start_type"] = "app_start_type" """Mobile app start variant. Either cold or warm. @@ -5921,40 +5891,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.1.0", prs=[55]), ], ), - "app.build": AttributeMetadata( - brief="Internal build identifier, as it appears on the platform.", - type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), - is_in_otel=False, - example="1", - sdks=[ - "sentry.cocoa", - "sentry.java.android", - "sentry.javascript.react-native", - "sentry.dart.flutter", - ], - changelog=[ - ChangelogEntry(version="next", description="Added app.build attribute"), - ], - ), - "app.identifier": AttributeMetadata( - brief="Version-independent application identifier, often a dotted bundle ID.", - type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), - is_in_otel=False, - example="com.example.myapp", - sdks=[ - "sentry.cocoa", - "sentry.java.android", - "sentry.javascript.react-native", - "sentry.dart.flutter", - ], - changelog=[ - ChangelogEntry( - version="next", description="Added app.identifier attribute" - ), - ], - ), "app.in_foreground": AttributeMetadata( brief="Whether the application is currently in the foreground.", type=AttributeType.BOOLEAN, @@ -6007,22 +5943,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), - "app.version": AttributeMetadata( - brief="Human readable application version, as it appears on the platform.", - type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), - is_in_otel=False, - example="1.0.0", - sdks=[ - "sentry.cocoa", - "sentry.java.android", - "sentry.javascript.react-native", - "sentry.dart.flutter", - ], - changelog=[ - ChangelogEntry(version="next", description="Added app.version attribute"), - ], - ), "app_start_type": AttributeMetadata( brief="Mobile app start variant. Either cold or warm.", type=AttributeType.STRING, @@ -11187,12 +11107,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_cost": float, "ai.total_tokens.used": int, "ai.warnings": List[str], - "app.build": str, - "app.identifier": str, "app.in_foreground": bool, "app.name": str, "app.start_time": str, - "app.version": str, "app_start_type": str, "blocked_main_thread": bool, "browser.name": str, From d554af4e2f03326ce96590051cd610bb4669e4ee Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 16:08:13 +0100 Subject: [PATCH 3/8] ref(attributes): Drop app.name Also derivable from existing context and sentry.release. Co-Authored-By: Claude Opus 4.6 --- .../sentry-conventions/src/attributes.ts | 34 ------------------- model/attributes/app/app__name.json | 17 ---------- python/src/sentry_conventions/attributes.py | 27 --------------- 3 files changed, 78 deletions(-) delete mode 100644 model/attributes/app/app__name.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 284389a9..90b3edc3 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -753,26 +753,6 @@ export const APP_IN_FOREGROUND = 'app.in_foreground'; */ export type APP_IN_FOREGROUND_TYPE = boolean; -// Path: model/attributes/app/app__name.json - -/** - * Human readable application name, as it appears on the platform. `app.name` - * - * Attribute Value Type: `string` {@link APP_NAME_TYPE} - * - * Contains PII: maybe - * - * Attribute defined in OTEL: No - * - * @example "My App" - */ -export const APP_NAME = 'app.name'; - -/** - * Type for {@link APP_NAME} app.name - */ -export type APP_NAME_TYPE = string; - // Path: model/attributes/app/app__start_time.json /** @@ -9937,7 +9917,6 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', [APP_IN_FOREGROUND]: 'boolean', - [APP_NAME]: 'string', [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', [BLOCKED_MAIN_THREAD]: 'boolean', @@ -10410,7 +10389,6 @@ export type AttributeName = | typeof AI_TOTAL_TOKENS_USED | typeof AI_WARNINGS | typeof APP_IN_FOREGROUND - | typeof APP_NAME | typeof APP_START_TIME | typeof APP_START_TYPE | typeof BLOCKED_MAIN_THREAD @@ -11360,17 +11338,6 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', description: 'Added app.in_foreground attribute' }], }, - [APP_NAME]: { - brief: 'Human readable application name, as it appears on the platform.', - type: 'string', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 'My App', - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.name attribute' }], - }, [APP_START_TIME]: { brief: 'Formatted UTC timestamp when the user started the application.', type: 'string', @@ -16560,7 +16527,6 @@ export type Attributes = { [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE; [AI_WARNINGS]?: AI_WARNINGS_TYPE; [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; - [APP_NAME]?: APP_NAME_TYPE; [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE; diff --git a/model/attributes/app/app__name.json b/model/attributes/app/app__name.json deleted file mode 100644 index 28125fae..00000000 --- a/model/attributes/app/app__name.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "key": "app.name", - "brief": "Human readable application name, as it appears on the platform.", - "type": "string", - "pii": { - "key": "maybe" - }, - "is_in_otel": false, - "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "example": "My App", - "changelog": [ - { - "version": "next", - "description": "Added app.name attribute" - } - ] -} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 44bf1c7f..cb9fd181 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -628,16 +628,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: true """ - # Path: model/attributes/app/app__name.json - APP_NAME: Literal["app.name"] = "app.name" - """Human readable application name, as it appears on the platform. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "My App" - """ - # Path: model/attributes/app/app__start_time.json APP_START_TIME: Literal["app.start_time"] = "app.start_time" """Formatted UTC timestamp when the user started the application. @@ -5909,22 +5899,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), - "app.name": AttributeMetadata( - brief="Human readable application name, as it appears on the platform.", - type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), - is_in_otel=False, - example="My App", - sdks=[ - "sentry.cocoa", - "sentry.java.android", - "sentry.javascript.react-native", - "sentry.dart.flutter", - ], - changelog=[ - ChangelogEntry(version="next", description="Added app.name attribute"), - ], - ), "app.start_time": AttributeMetadata( brief="Formatted UTC timestamp when the user started the application.", type=AttributeType.STRING, @@ -11108,7 +11082,6 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_tokens.used": int, "ai.warnings": List[str], "app.in_foreground": bool, - "app.name": str, "app.start_time": str, "app_start_type": str, "blocked_main_thread": bool, From 04c04a41ff4183c1db4ee181cb069a3beeaba8a2 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 16:13:22 +0100 Subject: [PATCH 4/8] feat(attributes): Re-add app.name, app.version, app.identifier, app.build These provide standalone structured values independent of how sentry.release is formatted by the user. Co-Authored-By: Claude Opus 4.6 --- .../sentry-conventions/src/attributes.ts | 136 ++++++++++++++++++ model/attributes/app/app__build.json | 17 +++ model/attributes/app/app__identifier.json | 17 +++ model/attributes/app/app__name.json | 17 +++ model/attributes/app/app__version.json | 17 +++ python/src/sentry_conventions/attributes.py | 110 ++++++++++++++ 6 files changed, 314 insertions(+) create mode 100644 model/attributes/app/app__build.json create mode 100644 model/attributes/app/app__identifier.json create mode 100644 model/attributes/app/app__name.json create mode 100644 model/attributes/app/app__version.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 90b3edc3..161757e1 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -733,6 +733,46 @@ export const AI_WARNINGS = 'ai.warnings'; */ export type AI_WARNINGS_TYPE = Array; +// Path: model/attributes/app/app__build.json + +/** + * Internal build identifier, as it appears on the platform. `app.build` + * + * Attribute Value Type: `string` {@link APP_BUILD_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "1" + */ +export const APP_BUILD = 'app.build'; + +/** + * Type for {@link APP_BUILD} app.build + */ +export type APP_BUILD_TYPE = string; + +// Path: model/attributes/app/app__identifier.json + +/** + * Version-independent application identifier, often a dotted bundle ID. `app.identifier` + * + * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "com.example.myapp" + */ +export const APP_IDENTIFIER = 'app.identifier'; + +/** + * Type for {@link APP_IDENTIFIER} app.identifier + */ +export type APP_IDENTIFIER_TYPE = string; + // Path: model/attributes/app/app__in_foreground.json /** @@ -753,6 +793,26 @@ export const APP_IN_FOREGROUND = 'app.in_foreground'; */ export type APP_IN_FOREGROUND_TYPE = boolean; +// Path: model/attributes/app/app__name.json + +/** + * Human readable application name, as it appears on the platform. `app.name` + * + * Attribute Value Type: `string` {@link APP_NAME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "My App" + */ +export const APP_NAME = 'app.name'; + +/** + * Type for {@link APP_NAME} app.name + */ +export type APP_NAME_TYPE = string; + // Path: model/attributes/app/app__start_time.json /** @@ -793,6 +853,26 @@ export const APP_START_TYPE = 'app_start_type'; */ export type APP_START_TYPE_TYPE = string; +// Path: model/attributes/app/app__version.json + +/** + * Human readable application version, as it appears on the platform. `app.version` + * + * Attribute Value Type: `string` {@link APP_VERSION_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "1.0.0" + */ +export const APP_VERSION = 'app.version'; + +/** + * Type for {@link APP_VERSION} app.version + */ +export type APP_VERSION_TYPE = string; + // Path: model/attributes/blocked_main_thread.json /** @@ -9916,9 +9996,13 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_COST]: 'double', [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', + [APP_BUILD]: 'string', + [APP_IDENTIFIER]: 'string', [APP_IN_FOREGROUND]: 'boolean', + [APP_NAME]: 'string', [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', + [APP_VERSION]: 'string', [BLOCKED_MAIN_THREAD]: 'boolean', [BROWSER_NAME]: 'string', [BROWSER_REPORT_TYPE]: 'string', @@ -10388,9 +10472,13 @@ export type AttributeName = | typeof AI_TOTAL_COST | typeof AI_TOTAL_TOKENS_USED | typeof AI_WARNINGS + | typeof APP_BUILD + | typeof APP_IDENTIFIER | typeof APP_IN_FOREGROUND + | typeof APP_NAME | typeof APP_START_TIME | typeof APP_START_TYPE + | typeof APP_VERSION | typeof BLOCKED_MAIN_THREAD | typeof BROWSER_NAME | typeof BROWSER_REPORT_TYPE @@ -11327,6 +11415,28 @@ export const ATTRIBUTE_METADATA: Record = { { version: '0.1.0', prs: [55] }, ], }, + [APP_BUILD]: { + brief: 'Internal build identifier, as it appears on the platform.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: '1', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.build attribute' }], + }, + [APP_IDENTIFIER]: { + brief: 'Version-independent application identifier, often a dotted bundle ID.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'com.example.myapp', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.identifier attribute' }], + }, [APP_IN_FOREGROUND]: { brief: 'Whether the application is currently in the foreground.', type: 'boolean', @@ -11338,6 +11448,17 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', description: 'Added app.in_foreground attribute' }], }, + [APP_NAME]: { + brief: 'Human readable application name, as it appears on the platform.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'My App', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.name attribute' }], + }, [APP_START_TIME]: { brief: 'Formatted UTC timestamp when the user started the application.', type: 'string', @@ -11359,6 +11480,17 @@ export const ATTRIBUTE_METADATA: Record = { example: 'cold', changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], }, + [APP_VERSION]: { + brief: 'Human readable application version, as it appears on the platform.', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: '1.0.0', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', description: 'Added app.version attribute' }], + }, [BLOCKED_MAIN_THREAD]: { brief: 'Whether the main thread was blocked by the span.', type: 'boolean', @@ -16526,9 +16658,13 @@ export type Attributes = { [AI_TOTAL_COST]?: AI_TOTAL_COST_TYPE; [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE; [AI_WARNINGS]?: AI_WARNINGS_TYPE; + [APP_BUILD]?: APP_BUILD_TYPE; + [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE; [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; + [APP_NAME]?: APP_NAME_TYPE; [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; + [APP_VERSION]?: APP_VERSION_TYPE; [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE; [BROWSER_NAME]?: BROWSER_NAME_TYPE; [BROWSER_REPORT_TYPE]?: BROWSER_REPORT_TYPE_TYPE; diff --git a/model/attributes/app/app__build.json b/model/attributes/app/app__build.json new file mode 100644 index 00000000..ba56415d --- /dev/null +++ b/model/attributes/app/app__build.json @@ -0,0 +1,17 @@ +{ + "key": "app.build", + "brief": "Internal build identifier, as it appears on the platform.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "1", + "changelog": [ + { + "version": "next", + "description": "Added app.build attribute" + } + ] +} diff --git a/model/attributes/app/app__identifier.json b/model/attributes/app/app__identifier.json new file mode 100644 index 00000000..78a1c2d9 --- /dev/null +++ b/model/attributes/app/app__identifier.json @@ -0,0 +1,17 @@ +{ + "key": "app.identifier", + "brief": "Version-independent application identifier, often a dotted bundle ID.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "com.example.myapp", + "changelog": [ + { + "version": "next", + "description": "Added app.identifier attribute" + } + ] +} diff --git a/model/attributes/app/app__name.json b/model/attributes/app/app__name.json new file mode 100644 index 00000000..28125fae --- /dev/null +++ b/model/attributes/app/app__name.json @@ -0,0 +1,17 @@ +{ + "key": "app.name", + "brief": "Human readable application name, as it appears on the platform.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "My App", + "changelog": [ + { + "version": "next", + "description": "Added app.name attribute" + } + ] +} diff --git a/model/attributes/app/app__version.json b/model/attributes/app/app__version.json new file mode 100644 index 00000000..513d87a3 --- /dev/null +++ b/model/attributes/app/app__version.json @@ -0,0 +1,17 @@ +{ + "key": "app.version", + "brief": "Human readable application version, as it appears on the platform.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "1.0.0", + "changelog": [ + { + "version": "next", + "description": "Added app.version attribute" + } + ] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index cb9fd181..f18b282a 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -618,6 +618,26 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: ["Token limit exceeded"] """ + # Path: model/attributes/app/app__build.json + APP_BUILD: Literal["app.build"] = "app.build" + """Internal build identifier, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "1" + """ + + # Path: model/attributes/app/app__identifier.json + APP_IDENTIFIER: Literal["app.identifier"] = "app.identifier" + """Version-independent application identifier, often a dotted bundle ID. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "com.example.myapp" + """ + # Path: model/attributes/app/app__in_foreground.json APP_IN_FOREGROUND: Literal["app.in_foreground"] = "app.in_foreground" """Whether the application is currently in the foreground. @@ -628,6 +648,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: true """ + # Path: model/attributes/app/app__name.json + APP_NAME: Literal["app.name"] = "app.name" + """Human readable application name, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "My App" + """ + # Path: model/attributes/app/app__start_time.json APP_START_TIME: Literal["app.start_time"] = "app.start_time" """Formatted UTC timestamp when the user started the application. @@ -638,6 +668,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "2025-01-01T00:00:00.000Z" """ + # Path: model/attributes/app/app__version.json + APP_VERSION: Literal["app.version"] = "app.version" + """Human readable application version, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "1.0.0" + """ + # Path: model/attributes/app_start_type.json APP_START_TYPE: Literal["app_start_type"] = "app_start_type" """Mobile app start variant. Either cold or warm. @@ -5881,6 +5921,40 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.1.0", prs=[55]), ], ), + "app.build": AttributeMetadata( + brief="Internal build identifier, as it appears on the platform.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="1", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry(version="next", description="Added app.build attribute"), + ], + ), + "app.identifier": AttributeMetadata( + brief="Version-independent application identifier, often a dotted bundle ID.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="com.example.myapp", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", description="Added app.identifier attribute" + ), + ], + ), "app.in_foreground": AttributeMetadata( brief="Whether the application is currently in the foreground.", type=AttributeType.BOOLEAN, @@ -5899,6 +5973,22 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), + "app.name": AttributeMetadata( + brief="Human readable application name, as it appears on the platform.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="My App", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry(version="next", description="Added app.name attribute"), + ], + ), "app.start_time": AttributeMetadata( brief="Formatted UTC timestamp when the user started the application.", type=AttributeType.STRING, @@ -5917,6 +6007,22 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), + "app.version": AttributeMetadata( + brief="Human readable application version, as it appears on the platform.", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="1.0.0", + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry(version="next", description="Added app.version attribute"), + ], + ), "app_start_type": AttributeMetadata( brief="Mobile app start variant. Either cold or warm.", type=AttributeType.STRING, @@ -11081,8 +11187,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_cost": float, "ai.total_tokens.used": int, "ai.warnings": List[str], + "app.build": str, + "app.identifier": str, "app.in_foreground": bool, + "app.name": str, "app.start_time": str, + "app.version": str, "app_start_type": str, "blocked_main_thread": bool, "browser.name": str, From a70ee7512408c48a989e7bb3f2521fe45569a897 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 16:33:26 +0100 Subject: [PATCH 5/8] fix(attributes): Set app.in_foreground pii to false A boolean value cannot contain personal data. Co-Authored-By: Claude Opus 4.6 --- javascript/sentry-conventions/src/attributes.ts | 4 ++-- model/attributes/app/app__in_foreground.json | 2 +- python/src/sentry_conventions/attributes.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 161757e1..0a970ace 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -780,7 +780,7 @@ export type APP_IDENTIFIER_TYPE = string; * * Attribute Value Type: `boolean` {@link APP_IN_FOREGROUND_TYPE} * - * Contains PII: maybe + * Contains PII: false * * Attribute defined in OTEL: No * @@ -11441,7 +11441,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Whether the application is currently in the foreground.', type: 'boolean', pii: { - isPii: 'maybe', + isPii: 'false', }, isInOtel: false, example: true, diff --git a/model/attributes/app/app__in_foreground.json b/model/attributes/app/app__in_foreground.json index e6d92589..9d0d30ee 100644 --- a/model/attributes/app/app__in_foreground.json +++ b/model/attributes/app/app__in_foreground.json @@ -3,7 +3,7 @@ "brief": "Whether the application is currently in the foreground.", "type": "boolean", "pii": { - "key": "maybe" + "key": "false" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index f18b282a..88d7585e 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -643,7 +643,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Whether the application is currently in the foreground. Type: bool - Contains PII: maybe + Contains PII: false Defined in OTEL: No Example: true """ @@ -5958,7 +5958,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.in_foreground": AttributeMetadata( brief="Whether the application is currently in the foreground.", type=AttributeType.BOOLEAN, - pii=PiiInfo(isPii=IsPii.MAYBE), + pii=PiiInfo(isPii=IsPii.FALSE), is_in_otel=False, example=True, sdks=[ From efd0eb89a019c39edfad29eefa0f6342b923fe82 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 16:54:45 +0100 Subject: [PATCH 6/8] fix(attributes): Set pii to false for non-PII app attributes app.start_time, app.version, app.identifier, and app.build cannot contain personal data. app.name remains maybe. Co-Authored-By: Claude Opus 4.6 --- javascript/sentry-conventions/src/attributes.ts | 16 ++++++++-------- model/attributes/app/app__build.json | 2 +- model/attributes/app/app__identifier.json | 2 +- model/attributes/app/app__start_time.json | 2 +- model/attributes/app/app__version.json | 2 +- python/src/sentry_conventions/attributes.py | 16 ++++++++-------- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 0a970ace..979d0243 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -740,7 +740,7 @@ export type AI_WARNINGS_TYPE = Array; * * Attribute Value Type: `string` {@link APP_BUILD_TYPE} * - * Contains PII: maybe + * Contains PII: false * * Attribute defined in OTEL: No * @@ -760,7 +760,7 @@ export type APP_BUILD_TYPE = string; * * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} * - * Contains PII: maybe + * Contains PII: false * * Attribute defined in OTEL: No * @@ -820,7 +820,7 @@ export type APP_NAME_TYPE = string; * * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} * - * Contains PII: maybe + * Contains PII: false * * Attribute defined in OTEL: No * @@ -860,7 +860,7 @@ export type APP_START_TYPE_TYPE = string; * * Attribute Value Type: `string` {@link APP_VERSION_TYPE} * - * Contains PII: maybe + * Contains PII: false * * Attribute defined in OTEL: No * @@ -11419,7 +11419,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Internal build identifier, as it appears on the platform.', type: 'string', pii: { - isPii: 'maybe', + isPii: 'false', }, isInOtel: false, example: '1', @@ -11430,7 +11430,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Version-independent application identifier, often a dotted bundle ID.', type: 'string', pii: { - isPii: 'maybe', + isPii: 'false', }, isInOtel: false, example: 'com.example.myapp', @@ -11463,7 +11463,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Formatted UTC timestamp when the user started the application.', type: 'string', pii: { - isPii: 'maybe', + isPii: 'false', }, isInOtel: false, example: '2025-01-01T00:00:00.000Z', @@ -11484,7 +11484,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Human readable application version, as it appears on the platform.', type: 'string', pii: { - isPii: 'maybe', + isPii: 'false', }, isInOtel: false, example: '1.0.0', diff --git a/model/attributes/app/app__build.json b/model/attributes/app/app__build.json index ba56415d..a2049f1c 100644 --- a/model/attributes/app/app__build.json +++ b/model/attributes/app/app__build.json @@ -3,7 +3,7 @@ "brief": "Internal build identifier, as it appears on the platform.", "type": "string", "pii": { - "key": "maybe" + "key": "false" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/model/attributes/app/app__identifier.json b/model/attributes/app/app__identifier.json index 78a1c2d9..d3402cba 100644 --- a/model/attributes/app/app__identifier.json +++ b/model/attributes/app/app__identifier.json @@ -3,7 +3,7 @@ "brief": "Version-independent application identifier, often a dotted bundle ID.", "type": "string", "pii": { - "key": "maybe" + "key": "false" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/model/attributes/app/app__start_time.json b/model/attributes/app/app__start_time.json index 97e4e3f0..0ea2a816 100644 --- a/model/attributes/app/app__start_time.json +++ b/model/attributes/app/app__start_time.json @@ -3,7 +3,7 @@ "brief": "Formatted UTC timestamp when the user started the application.", "type": "string", "pii": { - "key": "maybe" + "key": "false" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/model/attributes/app/app__version.json b/model/attributes/app/app__version.json index 513d87a3..256ccb8c 100644 --- a/model/attributes/app/app__version.json +++ b/model/attributes/app/app__version.json @@ -3,7 +3,7 @@ "brief": "Human readable application version, as it appears on the platform.", "type": "string", "pii": { - "key": "maybe" + "key": "false" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 88d7585e..7fc28c89 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -623,7 +623,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Internal build identifier, as it appears on the platform. Type: str - Contains PII: maybe + Contains PII: false Defined in OTEL: No Example: "1" """ @@ -633,7 +633,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Version-independent application identifier, often a dotted bundle ID. Type: str - Contains PII: maybe + Contains PII: false Defined in OTEL: No Example: "com.example.myapp" """ @@ -663,7 +663,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Formatted UTC timestamp when the user started the application. Type: str - Contains PII: maybe + Contains PII: false Defined in OTEL: No Example: "2025-01-01T00:00:00.000Z" """ @@ -673,7 +673,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Human readable application version, as it appears on the platform. Type: str - Contains PII: maybe + Contains PII: false Defined in OTEL: No Example: "1.0.0" """ @@ -5924,7 +5924,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.build": AttributeMetadata( brief="Internal build identifier, as it appears on the platform.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), + pii=PiiInfo(isPii=IsPii.FALSE), is_in_otel=False, example="1", sdks=[ @@ -5940,7 +5940,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.identifier": AttributeMetadata( brief="Version-independent application identifier, often a dotted bundle ID.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), + pii=PiiInfo(isPii=IsPii.FALSE), is_in_otel=False, example="com.example.myapp", sdks=[ @@ -5992,7 +5992,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.start_time": AttributeMetadata( brief="Formatted UTC timestamp when the user started the application.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), + pii=PiiInfo(isPii=IsPii.FALSE), is_in_otel=False, example="2025-01-01T00:00:00.000Z", sdks=[ @@ -6010,7 +6010,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.version": AttributeMetadata( brief="Human readable application version, as it appears on the platform.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.MAYBE), + pii=PiiInfo(isPii=IsPii.FALSE), is_in_otel=False, example="1.0.0", sdks=[ From 8126f65876771f62f261a11e787559199f9363df Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 17:17:00 +0100 Subject: [PATCH 7/8] chore(attributes): Add PR number to app attribute changelog entries Co-Authored-By: Claude Opus 4.6 --- .../sentry-conventions/src/attributes.ts | 12 +++++------ model/attributes/app/app__build.json | 1 + model/attributes/app/app__identifier.json | 1 + model/attributes/app/app__in_foreground.json | 1 + model/attributes/app/app__name.json | 1 + model/attributes/app/app__start_time.json | 1 + model/attributes/app/app__version.json | 1 + python/src/sentry_conventions/attributes.py | 20 +++++++++++++------ 8 files changed, 26 insertions(+), 12 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 979d0243..b03429b2 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -11424,7 +11424,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: '1', sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.build attribute' }], + changelog: [{ version: 'next', prs: [296], description: 'Added app.build attribute' }], }, [APP_IDENTIFIER]: { brief: 'Version-independent application identifier, often a dotted bundle ID.', @@ -11435,7 +11435,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 'com.example.myapp', sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.identifier attribute' }], + changelog: [{ version: 'next', prs: [296], description: 'Added app.identifier attribute' }], }, [APP_IN_FOREGROUND]: { brief: 'Whether the application is currently in the foreground.', @@ -11446,7 +11446,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: true, sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.in_foreground attribute' }], + changelog: [{ version: 'next', prs: [296], description: 'Added app.in_foreground attribute' }], }, [APP_NAME]: { brief: 'Human readable application name, as it appears on the platform.', @@ -11457,7 +11457,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 'My App', sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.name attribute' }], + changelog: [{ version: 'next', prs: [296], description: 'Added app.name attribute' }], }, [APP_START_TIME]: { brief: 'Formatted UTC timestamp when the user started the application.', @@ -11468,7 +11468,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: '2025-01-01T00:00:00.000Z', sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.start_time attribute' }], + changelog: [{ version: 'next', prs: [296], description: 'Added app.start_time attribute' }], }, [APP_START_TYPE]: { brief: 'Mobile app start variant. Either cold or warm.', @@ -11489,7 +11489,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: '1.0.0', sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', description: 'Added app.version attribute' }], + changelog: [{ version: 'next', prs: [296], description: 'Added app.version attribute' }], }, [BLOCKED_MAIN_THREAD]: { brief: 'Whether the main thread was blocked by the span.', diff --git a/model/attributes/app/app__build.json b/model/attributes/app/app__build.json index a2049f1c..23ff5741 100644 --- a/model/attributes/app/app__build.json +++ b/model/attributes/app/app__build.json @@ -11,6 +11,7 @@ "changelog": [ { "version": "next", + "prs": [296], "description": "Added app.build attribute" } ] diff --git a/model/attributes/app/app__identifier.json b/model/attributes/app/app__identifier.json index d3402cba..0a1f2a05 100644 --- a/model/attributes/app/app__identifier.json +++ b/model/attributes/app/app__identifier.json @@ -11,6 +11,7 @@ "changelog": [ { "version": "next", + "prs": [296], "description": "Added app.identifier attribute" } ] diff --git a/model/attributes/app/app__in_foreground.json b/model/attributes/app/app__in_foreground.json index 9d0d30ee..13b60a6d 100644 --- a/model/attributes/app/app__in_foreground.json +++ b/model/attributes/app/app__in_foreground.json @@ -11,6 +11,7 @@ "changelog": [ { "version": "next", + "prs": [296], "description": "Added app.in_foreground attribute" } ] diff --git a/model/attributes/app/app__name.json b/model/attributes/app/app__name.json index 28125fae..0b667dea 100644 --- a/model/attributes/app/app__name.json +++ b/model/attributes/app/app__name.json @@ -11,6 +11,7 @@ "changelog": [ { "version": "next", + "prs": [296], "description": "Added app.name attribute" } ] diff --git a/model/attributes/app/app__start_time.json b/model/attributes/app/app__start_time.json index 0ea2a816..0b556148 100644 --- a/model/attributes/app/app__start_time.json +++ b/model/attributes/app/app__start_time.json @@ -11,6 +11,7 @@ "changelog": [ { "version": "next", + "prs": [296], "description": "Added app.start_time attribute" } ] diff --git a/model/attributes/app/app__version.json b/model/attributes/app/app__version.json index 256ccb8c..9f957a0b 100644 --- a/model/attributes/app/app__version.json +++ b/model/attributes/app/app__version.json @@ -11,6 +11,7 @@ "changelog": [ { "version": "next", + "prs": [296], "description": "Added app.version attribute" } ] diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 7fc28c89..3cfb0b1e 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -5934,7 +5934,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "sentry.dart.flutter", ], changelog=[ - ChangelogEntry(version="next", description="Added app.build attribute"), + ChangelogEntry( + version="next", prs=[296], description="Added app.build attribute" + ), ], ), "app.identifier": AttributeMetadata( @@ -5951,7 +5953,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", description="Added app.identifier attribute" + version="next", prs=[296], description="Added app.identifier attribute" ), ], ), @@ -5969,7 +5971,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", description="Added app.in_foreground attribute" + version="next", + prs=[296], + description="Added app.in_foreground attribute", ), ], ), @@ -5986,7 +5990,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "sentry.dart.flutter", ], changelog=[ - ChangelogEntry(version="next", description="Added app.name attribute"), + ChangelogEntry( + version="next", prs=[296], description="Added app.name attribute" + ), ], ), "app.start_time": AttributeMetadata( @@ -6003,7 +6009,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", description="Added app.start_time attribute" + version="next", prs=[296], description="Added app.start_time attribute" ), ], ), @@ -6020,7 +6026,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "sentry.dart.flutter", ], changelog=[ - ChangelogEntry(version="next", description="Added app.version attribute"), + ChangelogEntry( + version="next", prs=[296], description="Added app.version attribute" + ), ], ), "app_start_type": AttributeMetadata( From 42badff5064e6916e1e105e8cfec2aebb75519ce Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 19 Mar 2026 17:17:42 +0100 Subject: [PATCH 8/8] fix(attributes): Align app attribute pii values with conventions Set pii to maybe for app.version, app.build, app.start_time, and app.identifier to be consistent with analogous attributes like browser.version, os.version, and os.build_id. Only app.in_foreground remains false as a boolean cannot contain PII. Co-Authored-By: Claude Opus 4.6 --- javascript/sentry-conventions/src/attributes.ts | 16 ++++++++-------- model/attributes/app/app__build.json | 2 +- model/attributes/app/app__identifier.json | 2 +- model/attributes/app/app__start_time.json | 2 +- model/attributes/app/app__version.json | 2 +- python/src/sentry_conventions/attributes.py | 16 ++++++++-------- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index b03429b2..da03727d 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -740,7 +740,7 @@ export type AI_WARNINGS_TYPE = Array; * * Attribute Value Type: `string` {@link APP_BUILD_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -760,7 +760,7 @@ export type APP_BUILD_TYPE = string; * * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -820,7 +820,7 @@ export type APP_NAME_TYPE = string; * * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -860,7 +860,7 @@ export type APP_START_TYPE_TYPE = string; * * Attribute Value Type: `string` {@link APP_VERSION_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -11419,7 +11419,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Internal build identifier, as it appears on the platform.', type: 'string', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: '1', @@ -11430,7 +11430,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Version-independent application identifier, often a dotted bundle ID.', type: 'string', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 'com.example.myapp', @@ -11463,7 +11463,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Formatted UTC timestamp when the user started the application.', type: 'string', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: '2025-01-01T00:00:00.000Z', @@ -11484,7 +11484,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'Human readable application version, as it appears on the platform.', type: 'string', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: '1.0.0', diff --git a/model/attributes/app/app__build.json b/model/attributes/app/app__build.json index 23ff5741..a8315320 100644 --- a/model/attributes/app/app__build.json +++ b/model/attributes/app/app__build.json @@ -3,7 +3,7 @@ "brief": "Internal build identifier, as it appears on the platform.", "type": "string", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/model/attributes/app/app__identifier.json b/model/attributes/app/app__identifier.json index 0a1f2a05..ddf56bf4 100644 --- a/model/attributes/app/app__identifier.json +++ b/model/attributes/app/app__identifier.json @@ -3,7 +3,7 @@ "brief": "Version-independent application identifier, often a dotted bundle ID.", "type": "string", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/model/attributes/app/app__start_time.json b/model/attributes/app/app__start_time.json index 0b556148..0b93ad39 100644 --- a/model/attributes/app/app__start_time.json +++ b/model/attributes/app/app__start_time.json @@ -3,7 +3,7 @@ "brief": "Formatted UTC timestamp when the user started the application.", "type": "string", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/model/attributes/app/app__version.json b/model/attributes/app/app__version.json index 9f957a0b..f4dc8f6d 100644 --- a/model/attributes/app/app__version.json +++ b/model/attributes/app/app__version.json @@ -3,7 +3,7 @@ "brief": "Human readable application version, as it appears on the platform.", "type": "string", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 3cfb0b1e..7e0fd62a 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -623,7 +623,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Internal build identifier, as it appears on the platform. Type: str - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: "1" """ @@ -633,7 +633,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Version-independent application identifier, often a dotted bundle ID. Type: str - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: "com.example.myapp" """ @@ -663,7 +663,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Formatted UTC timestamp when the user started the application. Type: str - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: "2025-01-01T00:00:00.000Z" """ @@ -673,7 +673,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Human readable application version, as it appears on the platform. Type: str - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: "1.0.0" """ @@ -5924,7 +5924,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.build": AttributeMetadata( brief="Internal build identifier, as it appears on the platform.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="1", sdks=[ @@ -5942,7 +5942,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.identifier": AttributeMetadata( brief="Version-independent application identifier, often a dotted bundle ID.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="com.example.myapp", sdks=[ @@ -5998,7 +5998,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.start_time": AttributeMetadata( brief="Formatted UTC timestamp when the user started the application.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="2025-01-01T00:00:00.000Z", sdks=[ @@ -6016,7 +6016,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.version": AttributeMetadata( brief="Human readable application version, as it appears on the platform.", type=AttributeType.STRING, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="1.0.0", sdks=[