Skip to content

feat(error-tracking): standardize exception event metadata - #734

Draft
hpouillot wants to merge 1 commit into
mainfrom
hp/exception-event-metadata
Draft

feat(error-tracking): standardize exception event metadata#734
hpouillot wants to merge 1 commit into
mainfrom
hp/exception-event-metadata

Conversation

@hpouillot

Copy link
Copy Markdown

💡 Motivation and Context

Standardize Android, JVM, server, and native crash exception events with the cross-SDK metadata contract. This makes severity, capture source, mechanism semantics, deterministic linkage, and reserved metadata ownership consistent.

Canonical contract: https://github.com/PostHog/sdk-specs/blob/main/openspec/specs/exception-event-metadata/spec.md

💚 How did you test it?

  • Focused Gradle tests for core exception capture, native crash coercion, and the server SDK
  • Spotless checks

📝 Checklist

  • I reviewed the submitted code.
  • I added tests to verify the changes.
  • I updated the docs if needed.
  • No breaking change or entry added to the changelog.

If releasing new changes

  • Ran pnpm changeset to generate a changeset file

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Implemented with pi from the shared OpenSpec contract. Nested causes and suppressed exceptions receive deterministic relationship metadata while callers retain control of custom fingerprints.

@hpouillot hpouillot self-assigned this Aug 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

posthog-android Compliance Report

Date: 2026-08-26 08:30:37 UTC
Duration: 118858ms

✅ All Tests Passed!

46/46 tests passed


Capture Tests

29/29 tests passed

View Details
Test Status Duration
Format Validation.Event Has Required Fields 418ms
Format Validation.Event Has Uuid 39ms
Format Validation.Event Has Lib Properties 38ms
Format Validation.Distinct Id Is String 33ms
Format Validation.Token Is Present 32ms
Format Validation.Custom Properties Preserved 36ms
Format Validation.Event Has Timestamp 31ms
Retry Behavior.Retries On 503 7037ms
Retry Behavior.Does Not Retry On 400 4043ms
Retry Behavior.Does Not Retry On 401 4029ms
Retry Behavior.Respects Retry After Header 7033ms
Retry Behavior.Implements Backoff 17043ms
Retry Behavior.Retries On 500 7022ms
Retry Behavior.Retries On 502 7023ms
Retry Behavior.Retries On 504 7024ms
Retry Behavior.Max Retries Respected 17042ms
Deduplication.Generates Unique Uuids 48ms
Deduplication.Preserves Uuid On Retry 7017ms
Deduplication.Preserves Uuid And Timestamp On Retry 12037ms
Deduplication.Preserves Uuid And Timestamp On Batch Retry 7023ms
Deduplication.No Duplicate Events In Batch 52ms
Deduplication.Different Events Have Different Uuids 30ms
Compression.Sends Gzip When Enabled 28ms
Batch Format.Uses Proper Batch Structure 28ms
Batch Format.Flush With No Events Sends Nothing 20ms
Batch Format.Multiple Events Batched Together 49ms
Error Handling.Does Not Retry On 403 4024ms
Error Handling.Does Not Retry On 413 4047ms
Error Handling.Retries On 408 5036ms

Feature_Flags Tests

17/17 tests passed

View Details
Test Status Duration
Request Payload.Request With Person Properties Device Id 44ms
Request Payload.Flags Request Uses V2 Query Param 37ms
Request Payload.Flags Request Hits Flags Path Not Decide 27ms
Request Payload.Flags Request Omits Authorization Header 31ms
Request Payload.Token In Flags Body Matches Init 29ms
Request Payload.Groups Round Trip 34ms
Request Payload.Groups Default To Empty Object 35ms
Request Payload.Disable Geoip False Propagates As Geoip Disable False 33ms
Request Payload.Disable Geoip Omitted Defaults To False 32ms
Request Payload.Flag Keys To Evaluate Contains Only Requested Key 26ms
Request Lifecycle.No Flags Request On Init Alone 13ms
Request Lifecycle.No Flags Request On Normal Capture 31ms
Request Lifecycle.Two Flag Calls Produce Two Remote Requests 60ms
Request Lifecycle.Mock Response Value Is Returned To Caller 27ms
Retry Behavior.Retries Flags On 502 332ms
Retry Behavior.Retries Flags On 504 332ms
Side Effect Events.Get Feature Flag Captures Feature Flag Called Event 30ms

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant