[backport cloud/1.46] fix(billing): refresh workspace billing status after completed top-up (FE-932)#13007
Conversation
… (FE-932) (#12787) ## Summary A completed workspace top-up refreshed only the balance, leaving billing status — and `subscription.hasFunds` (derived from `statusData.has_funds`) — stale until the next status fetch. The completed handler now refreshes both. ## Changes - **What**: `TopUpCreditsDialogContentWorkspace.vue` completed branch — `await fetchBalance()` → `await Promise.all([fetchBalance(), fetchStatus()])` (both already exposed on `useBillingContext()`). - **Breaking**: none. ## Review Focus - Pre-existing bug (predates the B2 facade; `main`'s top-up already called `fetchBalance` only). Test validity proven by reverting to balance-only → the completed case goes red on the `fetchStatus` assertion. - Tests: completed → both refresh; pending / failed → neither (3 cases). typecheck / oxlint / eslint / stylelint / oxfmt / knip clean. Fixes FE-932
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## cloud/1.46 #13007 +/- ##
=============================================
Coverage ? 61.93%
=============================================
Files ? 1455
Lines ? 75272
Branches ? 21239
=============================================
Hits ? 46620
Misses ? 28303
Partials ? 349
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
📦 Bundle Size
⚡ Performance Report
Absolute values
Raw data{
"timestamp": "2026-06-19T13:41:45.135Z",
"gitSha": "f5796e72654e5a4749257699ac009416c4fe2a9b",
"branch": "backport-12787-to-cloud-1.46",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2030.732999999998,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.207000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 352.526,
"heapDeltaBytes": -2219416,
"heapUsedBytes": 56454584,
"domNodes": 18,
"jsHeapTotalBytes": 23855104,
"scriptDurationMs": 15.759000000000002,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2068.245999999988,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.587999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 400.54200000000003,
"heapDeltaBytes": -2882776,
"heapUsedBytes": 64984888,
"domNodes": -275,
"jsHeapTotalBytes": 16969728,
"scriptDurationMs": 23.556000000000004,
"eventListeners": -195,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1984.4469999999887,
"styleRecalcs": 75,
"styleRecalcDurationMs": 40.229,
"layouts": 12,
"layoutDurationMs": 3.5979999999999994,
"taskDurationMs": 839.342,
"heapDeltaBytes": -7316072,
"heapUsedBytes": 51347616,
"domNodes": 58,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 127.46099999999998,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1765.8830000000307,
"styleRecalcs": 74,
"styleRecalcDurationMs": 34.388999999999996,
"layouts": 12,
"layoutDurationMs": 3.3750000000000004,
"taskDurationMs": 717.8729999999999,
"heapDeltaBytes": -8085408,
"heapUsedBytes": 50709864,
"domNodes": 56,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 106.988,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1721.1149999999975,
"styleRecalcs": 31,
"styleRecalcDurationMs": 15.504,
"layouts": 6,
"layoutDurationMs": 0.5600000000000002,
"taskDurationMs": 317.067,
"heapDeltaBytes": 2023788,
"heapUsedBytes": 60289516,
"domNodes": 80,
"jsHeapTotalBytes": 25165824,
"scriptDurationMs": 23.383999999999997,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1727.455999999961,
"styleRecalcs": 30,
"styleRecalcDurationMs": 18.105,
"layouts": 6,
"layoutDurationMs": 0.7739999999999999,
"taskDurationMs": 320.855,
"heapDeltaBytes": 1516852,
"heapUsedBytes": 60229420,
"domNodes": 76,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 20.532999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "dom-widget-clipping",
"durationMs": 609.8479999999995,
"styleRecalcs": 13,
"styleRecalcDurationMs": 11.070000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 343.83000000000004,
"heapDeltaBytes": 5895564,
"heapUsedBytes": 58490640,
"domNodes": 22,
"jsHeapTotalBytes": 10485760,
"scriptDurationMs": 61.802,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "dom-widget-clipping",
"durationMs": 531.7169999999578,
"styleRecalcs": 11,
"styleRecalcDurationMs": 6.973999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 322.264,
"heapDeltaBytes": 7013752,
"heapUsedBytes": 65691308,
"domNodes": 18,
"jsHeapTotalBytes": 18874368,
"scriptDurationMs": 51.648,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66666666666665,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2057.165999999995,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.332000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 556.068,
"heapDeltaBytes": -23891292,
"heapUsedBytes": 57945624,
"domNodes": -299,
"jsHeapTotalBytes": 2740224,
"scriptDurationMs": 90.15200000000002,
"eventListeners": -195,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2013.3769999999913,
"styleRecalcs": 9,
"styleRecalcDurationMs": 6.910000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 509.911,
"heapDeltaBytes": 11449296,
"heapUsedBytes": 72210316,
"domNodes": -268,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 74.521,
"eventListeners": -131,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2136.1539999999763,
"styleRecalcs": 70,
"styleRecalcDurationMs": 20.985,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 988.9590000000002,
"heapDeltaBytes": 10207924,
"heapUsedBytes": 82646756,
"domNodes": 20,
"jsHeapTotalBytes": 11591680,
"scriptDurationMs": 356.03000000000003,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2114.9769999999535,
"styleRecalcs": 70,
"styleRecalcDurationMs": 21.400999999999996,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 989.915,
"heapDeltaBytes": 8580724,
"heapUsedBytes": 79417772,
"domNodes": 20,
"jsHeapTotalBytes": 14737408,
"scriptDurationMs": 361.894,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3134.7130000000334,
"styleRecalcs": 65,
"styleRecalcDurationMs": 28.076999999999998,
"layouts": 60,
"layoutDurationMs": 8.202000000000002,
"taskDurationMs": 1330.9299999999998,
"heapDeltaBytes": 13186180,
"heapUsedBytes": 68081016,
"domNodes": 12,
"jsHeapTotalBytes": 7602176,
"scriptDurationMs": 488.21500000000003,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3034.4609999999648,
"styleRecalcs": 65,
"styleRecalcDurationMs": 20.216,
"layouts": 60,
"layoutDurationMs": 8.157999999999998,
"taskDurationMs": 1242.6589999999999,
"heapDeltaBytes": -6188060,
"heapUsedBytes": 67546840,
"domNodes": 14,
"jsHeapTotalBytes": 10366976,
"scriptDurationMs": 455.889,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2000.9190000000103,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.559000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 481.602,
"heapDeltaBytes": -10267468,
"heapUsedBytes": 62558944,
"domNodes": 18,
"jsHeapTotalBytes": 8531968,
"scriptDurationMs": 77.043,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2030.9819999999945,
"styleRecalcs": 9,
"styleRecalcDurationMs": 12.888000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 546.012,
"heapDeltaBytes": 13369564,
"heapUsedBytes": 81269876,
"domNodes": 18,
"jsHeapTotalBytes": 14299136,
"scriptDurationMs": 93.486,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 582.416999999964,
"styleRecalcs": 47,
"styleRecalcDurationMs": 11.435999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 371.868,
"heapDeltaBytes": -10185800,
"heapUsedBytes": 53041792,
"domNodes": 20,
"jsHeapTotalBytes": 15990784,
"scriptDurationMs": 128.839,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 545.710999999983,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.975999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 358.57099999999997,
"heapDeltaBytes": 7536940,
"heapUsedBytes": 66358716,
"domNodes": 20,
"jsHeapTotalBytes": 17563648,
"scriptDurationMs": 127.90599999999999,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 1991.5320000000065,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.958,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 351.35499999999996,
"heapDeltaBytes": -2443088,
"heapUsedBytes": 56220780,
"domNodes": 22,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 16.889000000000003,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 1991.7669999999816,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.472000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 353.35699999999997,
"heapDeltaBytes": -2253952,
"heapUsedBytes": 56583480,
"domNodes": 22,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 17.201,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1707.398000000012,
"styleRecalcs": 77,
"styleRecalcDurationMs": 37.476,
"layouts": 16,
"layoutDurationMs": 4.079,
"taskDurationMs": 658.9750000000001,
"heapDeltaBytes": -10638328,
"heapUsedBytes": 48050376,
"domNodes": 64,
"jsHeapTotalBytes": 25952256,
"scriptDurationMs": 93.312,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1692.9269999999406,
"styleRecalcs": 76,
"styleRecalcDurationMs": 35.926,
"layouts": 16,
"layoutDurationMs": 4.015000000000001,
"taskDurationMs": 642.696,
"heapDeltaBytes": -10985304,
"heapUsedBytes": 47726140,
"domNodes": 62,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 91.82300000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-transition-enter",
"durationMs": 915.1479999999879,
"styleRecalcs": 17,
"styleRecalcDurationMs": 27.381000000000004,
"layouts": 5,
"layoutDurationMs": 12.400999999999998,
"taskDurationMs": 710.5100000000002,
"heapDeltaBytes": 5052048,
"heapUsedBytes": 77547480,
"domNodes": 13833,
"jsHeapTotalBytes": 16777216,
"scriptDurationMs": 26.122999999999994,
"eventListeners": 2527,
"totalBlockingTimeMs": 149,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "viewport-pan-sweep",
"durationMs": 8175.000000000011,
"styleRecalcs": 250,
"styleRecalcDurationMs": 59.007,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3458.373,
"heapDeltaBytes": -997828,
"heapUsedBytes": 66249476,
"domNodes": -276,
"jsHeapTotalBytes": 581632,
"scriptDurationMs": 1147.842,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.80000000000109
},
{
"name": "viewport-pan-sweep",
"durationMs": 8220.23200000001,
"styleRecalcs": 253,
"styleRecalcDurationMs": 62.84,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3772.839,
"heapDeltaBytes": 4080,
"heapUsedBytes": 70010092,
"domNodes": 24,
"jsHeapTotalBytes": 19980288,
"scriptDurationMs": 1269.793,
"eventListeners": 20,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 13793.766000000005,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13754.632,
"heapDeltaBytes": -38068924,
"heapUsedBytes": 164060960,
"domNodes": -3310,
"jsHeapTotalBytes": 19632128,
"scriptDurationMs": 601.974,
"eventListeners": -16470,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 14015.68599999996,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14001.065,
"heapDeltaBytes": -29922920,
"heapUsedBytes": 168282520,
"domNodes": -3308,
"jsHeapTotalBytes": 17797120,
"scriptDurationMs": 634.9279999999999,
"eventListeners": -16472,
"totalBlockingTimeMs": 0,
"frameDurationMs": 18.333333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15615.222000000016,
"styleRecalcs": 78,
"styleRecalcDurationMs": 19.96500000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15593.252999999999,
"heapDeltaBytes": -37327660,
"heapUsedBytes": 175231756,
"domNodes": -3310,
"jsHeapTotalBytes": 21381120,
"scriptDurationMs": 868.7860000000001,
"eventListeners": -16470,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15944.149999999921,
"styleRecalcs": 82,
"styleRecalcDurationMs": 20.66599999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15922.21,
"heapDeltaBytes": -17817388,
"heapUsedBytes": 177827032,
"domNodes": -3308,
"jsHeapTotalBytes": 16924672,
"scriptDurationMs": 909.235,
"eventListeners": -16470,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.22666666666664,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 463.39899999998124,
"styleRecalcs": 17,
"styleRecalcDurationMs": 21.075999999999997,
"layouts": 4,
"layoutDurationMs": 1.1400000000000001,
"taskDurationMs": 192.643,
"heapDeltaBytes": -22171012,
"heapUsedBytes": 47646216,
"domNodes": -204,
"jsHeapTotalBytes": 5435392,
"scriptDurationMs": 21.088,
"eventListeners": -134,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666682,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 475.0490000000127,
"styleRecalcs": 17,
"styleRecalcDurationMs": 29.880000000000003,
"layouts": 5,
"layoutDurationMs": 1.3479999999999999,
"taskDurationMs": 225.049,
"heapDeltaBytes": -22528856,
"heapUsedBytes": 48125832,
"domNodes": -206,
"jsHeapTotalBytes": 5173248,
"scriptDurationMs": 22.148999999999997,
"eventListeners": -134,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
}
]
} |
🎭 Playwright: ✅ 1667 passed, 0 failed · 3 flaky📊 Browser Reports
|
Backport of #12787 to
cloud/1.46Automatically created by backport workflow.