fix: preserve billing RUM lifecycle pairing - #15205
Conversation
🎭 Playwright: ✅ 1822 passed, 0 failed · 2 flaky📊 Browser Reports
🎨 Storybook: ✅ Built — View Storybook📦 Bundle: 8.85 MB gzip 🔴 +224 BDetailsSummary
Category Glance App Entry Points — 3.71 kB (baseline 3.71 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.37 MB (baseline 1.37 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 2 added / 2 removed / 1 unchanged Views & Navigation — 124 kB (baseline 124 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 13 added / 13 removed / 4 unchanged Panels & Settings — 566 kB (baseline 566 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 10 added / 10 removed / 16 unchanged User & Accounts — 27.7 kB (baseline 27.7 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 6 added / 6 removed / 5 unchanged Editors & Dialogs — 125 kB (baseline 125 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 7 added / 7 removed / 1 unchanged UI Components — 67.1 kB (baseline 67.1 kB) • ⚪ 0 BReusable component library chunks
Status: 6 added / 6 removed / 8 unchanged Data & Services — 3.52 MB (baseline 3.52 MB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 14 added / 14 removed / 3 unchanged Utilities & Hooks — 551 kB (baseline 550 kB) • 🔴 +891 BHelpers, composables, and utility bundles
Status: 18 added / 18 removed / 20 unchanged Vendor & Third-Party — 16.8 MB (baseline 16.8 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 18 unchanged Other — 14.2 MB (baseline 14.2 MB) • 🔴 +408 BBundles that do not match a named category
Status: 68 added / 68 removed / 217 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-08-17T23:41:50.019Z",
"gitSha": "b2b30b4789f3f4565fefbfb0d289921caeffa696",
"branch": "fix/billing-rum-lifecycle-pairing",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2037.554,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.719000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 475.57899999999995,
"heapDeltaBytes": -185768,
"heapUsedBytes": 60774632,
"domNodes": -281,
"jsHeapTotalBytes": 4710400,
"scriptDurationMs": 6.201,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2038.7610000000222,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.471,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 471.6549999999999,
"heapDeltaBytes": -2965368,
"heapUsedBytes": 58270540,
"domNodes": -281,
"jsHeapTotalBytes": 4448256,
"scriptDurationMs": 5.759000000000002,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1813.826000000006,
"styleRecalcs": 70,
"styleRecalcDurationMs": 31.988000000000003,
"layouts": 12,
"layoutDurationMs": 3.714,
"taskDurationMs": 848.3810000000001,
"heapDeltaBytes": 675312,
"heapUsedBytes": 60935968,
"domNodes": -288,
"jsHeapTotalBytes": 4710400,
"scriptDurationMs": 109.828,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1858.161999999993,
"styleRecalcs": 74,
"styleRecalcDurationMs": 36.447,
"layouts": 12,
"layoutDurationMs": 3.4549999999999996,
"taskDurationMs": 854.88,
"heapDeltaBytes": 13248760,
"heapUsedBytes": 73362620,
"domNodes": -280,
"jsHeapTotalBytes": 4972544,
"scriptDurationMs": 110.122,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1751.1709999999994,
"styleRecalcs": 30,
"styleRecalcDurationMs": 16.212,
"layouts": 6,
"layoutDurationMs": 0.629,
"taskDurationMs": 350.492,
"heapDeltaBytes": 2809744,
"heapUsedBytes": 63167148,
"domNodes": 75,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 8.512,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1738.7360000000172,
"styleRecalcs": 33,
"styleRecalcDurationMs": 15.848,
"layouts": 6,
"layoutDurationMs": 0.647,
"taskDurationMs": 333.32800000000003,
"heapDeltaBytes": 2422616,
"heapUsedBytes": 63074880,
"domNodes": 78,
"jsHeapTotalBytes": 4194304,
"scriptDurationMs": 8.802,
"eventListeners": 21,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 722.0800000000054,
"styleRecalcs": 10,
"styleRecalcDurationMs": 6.608000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 433.514,
"heapDeltaBytes": 10234716,
"heapUsedBytes": 70959768,
"domNodes": 16,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 63.69800000000001,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 573.6970000000383,
"styleRecalcs": 12,
"styleRecalcDurationMs": 7.996000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 349.555,
"heapDeltaBytes": 10296428,
"heapUsedBytes": 71074316,
"domNodes": 20,
"jsHeapTotalBytes": 5242880,
"scriptDurationMs": 56.98400000000001,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2022.654999999986,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.468000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 583.812,
"heapDeltaBytes": -11063860,
"heapUsedBytes": 63208940,
"domNodes": -280,
"jsHeapTotalBytes": -1576960,
"scriptDurationMs": 13.894,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2044.1859999999679,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.582999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 593.902,
"heapDeltaBytes": 2229008,
"heapUsedBytes": 76307948,
"domNodes": -261,
"jsHeapTotalBytes": -1576960,
"scriptDurationMs": 11.655,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2172.867999999994,
"styleRecalcs": 67,
"styleRecalcDurationMs": 12.183,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1178.862,
"heapDeltaBytes": 13904056,
"heapUsedBytes": 88032624,
"domNodes": -282,
"jsHeapTotalBytes": 5201920,
"scriptDurationMs": 336.395,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2156.829000000016,
"styleRecalcs": 68,
"styleRecalcDurationMs": 13.175999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1171.779,
"heapDeltaBytes": 2607184,
"heapUsedBytes": 77507324,
"domNodes": -267,
"jsHeapTotalBytes": -1351680,
"scriptDurationMs": 351.061,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3109.5210000000293,
"styleRecalcs": 62,
"styleRecalcDurationMs": 10.974000000000002,
"layouts": 60,
"layoutDurationMs": 6.763000000000001,
"taskDurationMs": 1283.145,
"heapDeltaBytes": 15613792,
"heapUsedBytes": 78058540,
"domNodes": 4,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 384.424,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3131.5160000000333,
"styleRecalcs": 65,
"styleRecalcDurationMs": 14.571999999999997,
"layouts": 60,
"layoutDurationMs": 7.177,
"taskDurationMs": 1286.2310000000002,
"heapDeltaBytes": -8178044,
"heapUsedBytes": 68447108,
"domNodes": 12,
"jsHeapTotalBytes": 5804032,
"scriptDurationMs": 377.221,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2037.1250000000032,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.494000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 599.998,
"heapDeltaBytes": -7197020,
"heapUsedBytes": 73474704,
"domNodes": -273,
"jsHeapTotalBytes": 3735552,
"scriptDurationMs": 14.372,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2022.7950000000874,
"styleRecalcs": 6,
"styleRecalcDurationMs": 4.5889999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 546.627,
"heapDeltaBytes": 1690048,
"heapUsedBytes": 77545264,
"domNodes": -266,
"jsHeapTotalBytes": -2101248,
"scriptDurationMs": 11.467999999999996,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 572.371999999973,
"styleRecalcs": 46,
"styleRecalcDurationMs": 9.160000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 375.059,
"heapDeltaBytes": 11396204,
"heapUsedBytes": 71825064,
"domNodes": 18,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 117.954,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 561.1900000000105,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.839,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 372.149,
"heapDeltaBytes": 11028596,
"heapUsedBytes": 71736504,
"domNodes": 20,
"jsHeapTotalBytes": 4718592,
"scriptDurationMs": 114.23599999999999,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 2047.6320000000214,
"styleRecalcs": 7,
"styleRecalcDurationMs": 9.798,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 512.081,
"heapDeltaBytes": -1109864,
"heapUsedBytes": 59718852,
"domNodes": -283,
"jsHeapTotalBytes": 4710400,
"scriptDurationMs": 6.473,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 2004.7399999999698,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.083000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 465.78000000000003,
"heapDeltaBytes": -307356,
"heapUsedBytes": 60357296,
"domNodes": -280,
"jsHeapTotalBytes": 4710400,
"scriptDurationMs": 5.65,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1707.224999999994,
"styleRecalcs": 75,
"styleRecalcDurationMs": 33.472,
"layouts": 16,
"layoutDurationMs": 4.023,
"taskDurationMs": 784.207,
"heapDeltaBytes": -1629672,
"heapUsedBytes": 59058904,
"domNodes": -278,
"jsHeapTotalBytes": 4448256,
"scriptDurationMs": 84.002,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1755.6280000000015,
"styleRecalcs": 76,
"styleRecalcDurationMs": 45.721,
"layouts": 16,
"layoutDurationMs": 4.2,
"taskDurationMs": 783.4499999999999,
"heapDeltaBytes": -1876312,
"heapUsedBytes": 58537588,
"domNodes": -278,
"jsHeapTotalBytes": 4710400,
"scriptDurationMs": 82.78999999999999,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-transition-enter",
"durationMs": 1400.4650000000538,
"styleRecalcs": 20,
"styleRecalcDurationMs": 30.955999999999996,
"layouts": 15,
"layoutDurationMs": 14.213999999999999,
"taskDurationMs": 905.1020000000001,
"heapDeltaBytes": -5771784,
"heapUsedBytes": 82184608,
"domNodes": 13673,
"jsHeapTotalBytes": 10747904,
"scriptDurationMs": 15.516000000000002,
"eventListeners": 2373,
"totalBlockingTimeMs": 137,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.80000000000109
},
{
"name": "viewport-pan-sweep",
"durationMs": 8247.342000000004,
"styleRecalcs": 250,
"styleRecalcDurationMs": 36.257999999999996,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4032.0640000000003,
"heapDeltaBytes": 8342552,
"heapUsedBytes": 82302712,
"domNodes": -263,
"jsHeapTotalBytes": -1908736,
"scriptDurationMs": 1043.058,
"eventListeners": -135,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8228.77399999993,
"styleRecalcs": 250,
"styleRecalcDurationMs": 36.166000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3974.807,
"heapDeltaBytes": -10969656,
"heapUsedBytes": 62278412,
"domNodes": -280,
"jsHeapTotalBytes": 3928064,
"scriptDurationMs": 1034.149,
"eventListeners": -163,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 16958.656000000017,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16129.663,
"heapDeltaBytes": -31629784,
"heapUsedBytes": 173540120,
"domNodes": -8312,
"jsHeapTotalBytes": -12259328,
"scriptDurationMs": 102.39699999999999,
"eventListeners": -16389,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 16708.163999999895,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15633.978000000003,
"heapDeltaBytes": -26307708,
"heapUsedBytes": 178914296,
"domNodes": -8312,
"jsHeapTotalBytes": -7282688,
"scriptDurationMs": 98.77299999999998,
"eventListeners": -16387,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 21159.676000000047,
"styleRecalcs": 176,
"styleRecalcDurationMs": 18.739000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20585.783,
"heapDeltaBytes": -21394216,
"heapUsedBytes": 183875456,
"domNodes": -8312,
"jsHeapTotalBytes": -14381056,
"scriptDurationMs": 452.22900000000004,
"eventListeners": -16379,
"totalBlockingTimeMs": 63,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 20473.60400000002,
"styleRecalcs": 174,
"styleRecalcDurationMs": 17.43699999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 19877.485,
"heapDeltaBytes": -48770440,
"heapUsedBytes": 171734684,
"domNodes": -8312,
"jsHeapTotalBytes": -11210752,
"scriptDurationMs": 407.829,
"eventListeners": -16385,
"totalBlockingTimeMs": 17,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 132.28200000003199,
"styleRecalcs": 9,
"styleRecalcDurationMs": 18.636,
"layouts": 8,
"layoutDurationMs": 2.332,
"taskDurationMs": 96.16399999999999,
"heapDeltaBytes": 3175404,
"heapUsedBytes": 63558332,
"domNodes": 133,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 8.037,
"eventListeners": 25,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 129.8829999999498,
"styleRecalcs": 7,
"styleRecalcDurationMs": 13.048000000000002,
"layouts": 1,
"layoutDurationMs": 0.7179999999999999,
"taskDurationMs": 75.37599999999999,
"heapDeltaBytes": 3028864,
"heapUsedBytes": 63395652,
"domNodes": 126,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 6.0920000000000005,
"eventListeners": 25,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
}
]
} |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan includes up to 4 reviews per rolling hour; 3 remain after this review. 📝 WalkthroughWalkthroughThe changes add elapsed-time metadata to resubscription telemetry and preserve downgrade telemetry across reactivation retries. Tests verify numeric durations and prevent duplicate downgrade lifecycle events. ChangesSubscription telemetry
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to The change preserves billing lifecycle pairing and adds resubscribe latency telemetry without introducing an actionable merge-blocking risk; it is merge-ready after normal checks and review. Possibly related PRs
Suggested reviewers: Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 inconclusive)
✅ Passed checks (6 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #15205 +/- ##
==========================================
+ Coverage 78.93% 81.12% +2.19%
==========================================
Files 2211 1882 -329
Lines 111813 108726 -3087
Branches 31564 31633 +69
==========================================
- Hits 88254 88206 -48
+ Misses 23105 20115 -2990
+ Partials 454 405 -49
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 378 files with indirect coverage changes 🚀 New features to boost your workflow:
|
christian-byrne
left a comment
There was a problem hiding this comment.
Can you fix merge conflicts?
Amp-Thread-ID: https://ampcode.com/threads/T-019ff637-547e-7498-ac31-b59987908d93 Co-authored-by: Amp <amp@ampcode.com>
13f1401 to
0c1ea6c
Compare
|
Rebased onto the latest |
Amp-Thread-ID: https://ampcode.com/threads/T-01a011fe-a0e1-728a-8d15-46cc47bc3003 Co-authored-by: Amp <amp@ampcode.com>
Summary
Improve FE-1391 dashboard accuracy by preserving one canonical lifecycle across workspace billing retries and recording resubscribe latency.
Datadog dashboard: Billing UX — Frontend RUM
Why this is needed
The dashboard treats each
billing.<operation>.startedaction and its terminalsucceeded,failed, ortimeoutaction as one lifecycle.duration_ms, soresubscribewas absent from the dashboard's Terminal Latency by Operation widget, which only queries terminal events containing@context.duration_ms.REACTIVATION_CONFIRMATION_REQUIRED, the first call emitted terminal failures and the confirmed retry emitted a second set ofstartedevents. The backend response is an intermediate consent state, not a completed attempt, so this inflated started/failure counts and broke lifecycle pairing.Changes
duration_msto workspace resubscribe terminal events from both settings and pricing entry points.AS IS / TO BE
duration_ms; P50/P95 latency can include resubscribestarted → failed, then anotherstarted → terminalstarted → terminallifecycle across confirmation and retryWhat this satisfies
REACTIVATION_CONFIRMATION_REQUIREDis no longer counted as a billing failure.started → one terminal eventwithout introducing another event family.This does not make historical events complete; the corrected telemetry appears after the frontend revision is deployed and users execute these journeys.
Review Focus
startedthensucceeded/failed.Validation
pnpm test:unit src/platform/workspace/composables/useDowngradeToPersonal.test.ts src/platform/workspace/composables/useResubscribe.test.ts src/platform/workspace/composables/useSubscriptionCheckout.test.ts(151 tests)pnpm typecheckpnpm lint:unstagedpnpm knip --cacheScreenshots (if applicable)
Not applicable: this is a telemetry-only change with no visual UI change. The affected output is the Datadog dashboard.