refactor(assets): remove write-only video state from MediaAsset context - #15543
refactor(assets): remove write-only video state from MediaAsset context#15543mattmillerai wants to merge 1 commit into
Conversation
`isVideoPlaying` and `showVideoControls` had no readers. The last read of `showVideoControls` (`durationChipClasses`) went away in #7858; the last read of `isVideoPlaying` (`showActionsOverlay`) went away in #14765, which moved the actions overlay to pure CSS. What remained was two emits, two refs, two provided context fields and two entries on `MediaAssetProviderValue` — kept in sync and consumed by nothing, so any future reader would wire up to state that is only accidentally correct. Drops the whole chain: the `videoPlayingStateChanged` / `videoControlsChanged` emits and their `watch`/`onMounted` plumbing in `MediaVideoTop`, the card's two refs and listeners, and the two contract fields. `MediaVideoTop` keeps its local `isPlaying`/`isHovered` state, so the rendered behaviour is unchanged. The `MediaVideoTop` playback test asserted the removed emits; it now asserts the observable behaviour those emits shadowed — native controls appear only while the video is both playing and hovered — which covers the play and pause transitions the emit assertions used to cover.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 35 minutes Limit details: You’ve used the included review currently available. Your 93 included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
Comment |
🎭 Playwright: ✅ 1829 passed, 0 failed · 6 flaky📊 Browser Reports
🎨 Storybook: ✅ Built — View Storybook📦 Bundle: 9.13 MB gzip 🟢 -261 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.5 kB (baseline 27.5 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.53 MB (baseline 3.53 MB) • 🟢 -325 BStores, services, APIs, and repositories
Status: 14 added / 14 removed / 3 unchanged Utilities & Hooks — 549 kB (baseline 549 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 18 added / 18 removed / 19 unchanged Vendor & Third-Party — 18.1 MB (baseline 18.1 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 18 unchanged Other — 14.2 MB (baseline 14.2 MB) • 🟢 -412 BBundles that do not match a named category
Status: 70 added / 70 removed / 218 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-08-21T08:48:01.570Z",
"gitSha": "d002123905b9e3b40632afc180db9aded00b0aa9",
"branch": "matt/fe-1713-remove-write-only-video-context-fields",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2003.5649999999805,
"styleRecalcs": 10,
"styleRecalcDurationMs": 4.905999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 302.663,
"heapDeltaBytes": -351264,
"heapUsedBytes": 62531860,
"domNodes": 20,
"jsHeapTotalBytes": 4718592,
"scriptDurationMs": 4.888,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666636,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 1993.0180000000064,
"styleRecalcs": 10,
"styleRecalcDurationMs": 6.196999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 369.024,
"heapDeltaBytes": -1167836,
"heapUsedBytes": 60171892,
"domNodes": -282,
"jsHeapTotalBytes": 3923968,
"scriptDurationMs": 5.258000000000001,
"eventListeners": -181,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2038.8729999999669,
"styleRecalcs": 68,
"styleRecalcDurationMs": 21.113,
"layouts": 12,
"layoutDurationMs": 2.175,
"taskDurationMs": 933.1530000000001,
"heapDeltaBytes": 17883752,
"heapUsedBytes": 79332192,
"domNodes": -278,
"jsHeapTotalBytes": 6021120,
"scriptDurationMs": 64.643,
"eventListeners": -149,
"totalBlockingTimeMs": 154,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1697.8229999999712,
"styleRecalcs": 71,
"styleRecalcDurationMs": 22.110999999999997,
"layouts": 12,
"layoutDurationMs": 2.78,
"taskDurationMs": 624.356,
"heapDeltaBytes": 8296504,
"heapUsedBytes": 69571204,
"domNodes": -281,
"jsHeapTotalBytes": 4972544,
"scriptDurationMs": 73.954,
"eventListeners": -181,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1664.816999999971,
"styleRecalcs": 32,
"styleRecalcDurationMs": 12.139,
"layouts": 6,
"layoutDurationMs": 0.7770000000000001,
"taskDurationMs": 264.671,
"heapDeltaBytes": 3090088,
"heapUsedBytes": 64508016,
"domNodes": 80,
"jsHeapTotalBytes": 4718592,
"scriptDurationMs": 8.562999999999999,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1717.738000000054,
"styleRecalcs": 31,
"styleRecalcDurationMs": 11.243,
"layouts": 6,
"layoutDurationMs": 0.631,
"taskDurationMs": 248.90099999999998,
"heapDeltaBytes": 2477288,
"heapUsedBytes": 63695852,
"domNodes": 76,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 7.521,
"eventListeners": 21,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "dom-widget-clipping",
"durationMs": 408.15699999996014,
"styleRecalcs": 14,
"styleRecalcDurationMs": 4.766000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 228.072,
"heapDeltaBytes": 9908368,
"heapUsedBytes": 71737824,
"domNodes": 22,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 29.174,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "dom-widget-clipping",
"durationMs": 427.2610000000441,
"styleRecalcs": 12,
"styleRecalcDurationMs": 6.693,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 261,
"heapDeltaBytes": 9954980,
"heapUsedBytes": 71577412,
"domNodes": 20,
"jsHeapTotalBytes": 4718592,
"scriptDurationMs": 36.882999999999996,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "large-graph-idle",
"durationMs": 2022.1990000000005,
"styleRecalcs": 10,
"styleRecalcDurationMs": 4.4540000000000015,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 425.15899999999993,
"heapDeltaBytes": -13310260,
"heapUsedBytes": 61676452,
"domNodes": -281,
"jsHeapTotalBytes": 2879488,
"scriptDurationMs": 13.887,
"eventListeners": -177,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-idle",
"durationMs": 2008.4610000000112,
"styleRecalcs": 10,
"styleRecalcDurationMs": 6.13,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 459.45399999999995,
"heapDeltaBytes": -13417740,
"heapUsedBytes": 62492116,
"domNodes": -280,
"jsHeapTotalBytes": 3665920,
"scriptDurationMs": 14.294,
"eventListeners": -177,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2051.0959999999727,
"styleRecalcs": 68,
"styleRecalcDurationMs": 9.857,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 777.858,
"heapDeltaBytes": 11395940,
"heapUsedBytes": 87455108,
"domNodes": -278,
"jsHeapTotalBytes": 4153344,
"scriptDurationMs": 203.263,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-pan",
"durationMs": 2094.2270000000462,
"styleRecalcs": 69,
"styleRecalcDurationMs": 12.187999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 873.2359999999999,
"heapDeltaBytes": -4875656,
"heapUsedBytes": 71512336,
"domNodes": -240,
"jsHeapTotalBytes": -1089536,
"scriptDurationMs": 241.303,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-zoom",
"durationMs": 3069.642999999985,
"styleRecalcs": 67,
"styleRecalcDurationMs": 11.42,
"layouts": 60,
"layoutDurationMs": 5.183999999999999,
"taskDurationMs": 882.529,
"heapDeltaBytes": 19396772,
"heapUsedBytes": 96515216,
"domNodes": 18,
"jsHeapTotalBytes": 5541888,
"scriptDurationMs": 232.34000000000003,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3104.477999999972,
"styleRecalcs": 66,
"styleRecalcDurationMs": 13.094000000000001,
"layouts": 60,
"layoutDurationMs": 7.299999999999999,
"taskDurationMs": 983.47,
"heapDeltaBytes": -14515896,
"heapUsedBytes": 62853012,
"domNodes": 16,
"jsHeapTotalBytes": 4452352,
"scriptDurationMs": 262.135,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "legacy-node-drag",
"durationMs": 2065.088000000003,
"styleRecalcs": 49,
"styleRecalcDurationMs": 7.268999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 943.22,
"heapDeltaBytes": -16395068,
"heapUsedBytes": 69401036,
"domNodes": 18,
"jsHeapTotalBytes": 7901184,
"scriptDurationMs": 288.489,
"eventListeners": 184,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "legacy-node-drag",
"durationMs": 2123.7290000000257,
"styleRecalcs": 48,
"styleRecalcDurationMs": 7.836999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1012.677,
"heapDeltaBytes": 10524720,
"heapUsedBytes": 89071540,
"domNodes": 16,
"jsHeapTotalBytes": 7270400,
"scriptDurationMs": 313.923,
"eventListeners": 184,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2006.447000000037,
"styleRecalcs": 11,
"styleRecalcDurationMs": 5.707999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 475.45500000000004,
"heapDeltaBytes": -12498608,
"heapUsedBytes": 71543372,
"domNodes": -269,
"jsHeapTotalBytes": 3403776,
"scriptDurationMs": 12.895,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2033.7650000000167,
"styleRecalcs": 9,
"styleRecalcDurationMs": 4.737,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 440.88899999999995,
"heapDeltaBytes": -13296528,
"heapUsedBytes": 63310476,
"domNodes": -284,
"jsHeapTotalBytes": 3141632,
"scriptDurationMs": 11.563,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 428.46600000001445,
"styleRecalcs": 47,
"styleRecalcDurationMs": 7.317000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 264.983,
"heapDeltaBytes": 10655956,
"heapUsedBytes": 72548640,
"domNodes": 20,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 76.71700000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 430.46499999991283,
"styleRecalcs": 47,
"styleRecalcDurationMs": 7.1590000000000025,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 267.715,
"heapDeltaBytes": 11040928,
"heapUsedBytes": 72561328,
"domNodes": 20,
"jsHeapTotalBytes": 5242880,
"scriptDurationMs": 77.961,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "subgraph-idle",
"durationMs": 2013.697000000036,
"styleRecalcs": 11,
"styleRecalcDurationMs": 4.822,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 352.149,
"heapDeltaBytes": 3206312,
"heapUsedBytes": 65020080,
"domNodes": -280,
"jsHeapTotalBytes": 4186112,
"scriptDurationMs": 4.723,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 2021.3069999999789,
"styleRecalcs": 11,
"styleRecalcDurationMs": 5.657000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 345.096,
"heapDeltaBytes": 3240512,
"heapUsedBytes": 65722524,
"domNodes": -280,
"jsHeapTotalBytes": 3923968,
"scriptDurationMs": 5.061,
"eventListeners": -181,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1698.7290000000144,
"styleRecalcs": 76,
"styleRecalcDurationMs": 23.243,
"layouts": 16,
"layoutDurationMs": 3.0849999999999995,
"taskDurationMs": 546.608,
"heapDeltaBytes": 11510324,
"heapUsedBytes": 73400132,
"domNodes": -280,
"jsHeapTotalBytes": 5758976,
"scriptDurationMs": 49.484,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1693.3859999999186,
"styleRecalcs": 75,
"styleRecalcDurationMs": 24.346,
"layouts": 16,
"layoutDurationMs": 3.65,
"taskDurationMs": 603.131,
"heapDeltaBytes": 2387220,
"heapUsedBytes": 64194412,
"domNodes": -280,
"jsHeapTotalBytes": 3661824,
"scriptDurationMs": 60.528,
"eventListeners": -179,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 882.3160000000598,
"styleRecalcs": 20,
"styleRecalcDurationMs": 24.187,
"layouts": 15,
"layoutDurationMs": 9.151000000000002,
"taskDurationMs": 651.9870000000001,
"heapDeltaBytes": 20412068,
"heapUsedBytes": 103405256,
"domNodes": 13673,
"jsHeapTotalBytes": 11796480,
"scriptDurationMs": 12.202000000000005,
"eventListeners": 2373,
"totalBlockingTimeMs": 107,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8075.35299999995,
"styleRecalcs": 249,
"styleRecalcDurationMs": 25.599999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 2718.3489999999997,
"heapDeltaBytes": 14620024,
"heapUsedBytes": 90567676,
"domNodes": -278,
"jsHeapTotalBytes": 4415488,
"scriptDurationMs": 652.042,
"eventListeners": -133,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8070.813000000044,
"styleRecalcs": 250,
"styleRecalcDurationMs": 32.007,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 2831.4210000000003,
"heapDeltaBytes": 17521208,
"heapUsedBytes": 92420968,
"domNodes": -278,
"jsHeapTotalBytes": 4415488,
"scriptDurationMs": 700.1030000000001,
"eventListeners": -163,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333338,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 12094.21100000003,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11192.695,
"heapDeltaBytes": -32105396,
"heapUsedBytes": 174887480,
"domNodes": -8312,
"jsHeapTotalBytes": -14618624,
"scriptDurationMs": 76.349,
"eventListeners": -16393,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 12062.56200000007,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11011.186,
"heapDeltaBytes": -44885156,
"heapUsedBytes": 177524072,
"domNodes": -8312,
"jsHeapTotalBytes": -11997184,
"scriptDurationMs": 80.59600000000002,
"eventListeners": -16389,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.669999999999952,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 14082.466000000011,
"styleRecalcs": 67,
"styleRecalcDurationMs": 13.776999999999983,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13230.251999999999,
"heapDeltaBytes": -30828864,
"heapUsedBytes": 191757504,
"domNodes": -8312,
"jsHeapTotalBytes": -15998976,
"scriptDurationMs": 387.444,
"eventListeners": -16389,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.77333333333336,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 13868.427999999994,
"styleRecalcs": 69,
"styleRecalcDurationMs": 13.786999999999994,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13150.576,
"heapDeltaBytes": -21752796,
"heapUsedBytes": 187012632,
"domNodes": -8312,
"jsHeapTotalBytes": -14655488,
"scriptDurationMs": 418.068,
"eventListeners": -16387,
"totalBlockingTimeMs": 40,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 443.46199999995406,
"styleRecalcs": 20,
"styleRecalcDurationMs": 17.001,
"layouts": 4,
"layoutDurationMs": 1.592,
"taskDurationMs": 90.64999999999999,
"heapDeltaBytes": 5146840,
"heapUsedBytes": 66982604,
"domNodes": 148,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 6.347,
"eventListeners": 99,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000273
},
{
"name": "workflow-execution",
"durationMs": 63.17699999999604,
"styleRecalcs": 5,
"styleRecalcDurationMs": 7.275999999999998,
"layouts": 3,
"layoutDurationMs": 0.9390000000000001,
"taskDurationMs": 44.208,
"heapDeltaBytes": 2990852,
"heapUsedBytes": 64387348,
"domNodes": 120,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 3.788,
"eventListeners": 25,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000273
}
]
} |
There was a problem hiding this comment.
🔍 Cursor Review — Consolidated panel
Triggered by @mattmillerai.
✅ No high-signal findings.
Panel: 8/8 reviewers contributed findings.
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## main #15543 +/- ##
==========================================
+ Coverage 79.80% 82.07% +2.27%
==========================================
Files 2214 1887 -327
Lines 127824 122908 -4916
Branches 40831 40128 -703
==========================================
- Hits 102004 100882 -1122
+ Misses 25216 21521 -3695
+ Partials 604 505 -99
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 334 files with indirect coverage changes 🚀 New features to boost your workflow:
|
ELI-5
Two pieces of video state were being carefully computed, emitted, stored and shared with the rest of the asset card — and then nobody looked at them. This deletes the whole pipe. Nothing on screen changes.
Summary
isVideoPlayingandshowVideoControlsare a write-only chain on the MediaAsset context with zero consumers; this removes the emits, the refs, the provided fields and the two entries on theMediaAssetProviderValuecontract.Changes
MediaVideoTopno longer declares thevideoPlayingStateChanged/videoControlsChangedemits, and itswatch(shouldShowControls, …)+onMountedplumbing (which existed only to fire them) is gone.MediaAssetCarddrops the two listeners, the tworef(false)s and the twoprovideentries.MediaAssetProviderValuedrops the two fields.MediaVideoTopkeeps its localisPlaying/isHoveredstate, so rendered behaviour is byte-for-byte unchanged.MediaAssetProviderValueis a module-private interface — onlyMediaAssetKeyis exported, and it has exactly oneprovidesite insrc/plus oneinjectsite (useMediaAssetActions, which reads onlyassetandcontext).Why it is safe to delete rather than annotate
The two fields did not go stale by accident — each lost its last reader in a deliberate change, and nothing replaced it:
showVideoControls: last read bydurationChipClassesinMediaAssetCard, deleted by feature: media asset card design changes #7858 (media asset card design changes).isVideoPlaying: last read byshowActionsOverlay, deleted by fix(assets): correct video asset interactions #14765, which moved the actions overlay to pure CSS (group-hover:/group-has-focus-visible:) and so no longer needs to know whether a video is playing.Since #14765 the chain has been kept in sync and read by nothing, which is worse than merely dead: the contract type advertises the fields, so a future consumer would reasonably assume they are live and wire up to state that is only accidentally correct.
Ownership note, since the two halves have different owners:
mediaAssetSchema.tswas last touched by AustinMroz (#13180); the video wiring by Ryan Di (#14765). Both sides of this diff remove code those changes left unreferenced, rather than redesigning either.Test changes
MediaVideoTop.test.tsasserted the two emits, so those assertions could not survive the emits. Rather than deleting the case, it now asserts the observable behaviour those emits shadowed — native controls appear only while the video is both playing and hovered — stepping play → hover → pause → play → unhover so both the play and the pause transition are still covered. (The old title claimed it checked the paused overlay; it never did. The title now matches the assertions.)Review Focus
The riskiest line is removing the two fields from
MediaAssetProviderValue. Evidence it is safe, since a removal like this is only as safe as the grep behind it:grep -rn "isVideoPlaying\|showVideoControls\|videoPlayingStateChanged\|videoControlsChanged\|video-playing-state-changed\|video-controls-changed"oversrc/,browser_tests/,apps/andpackages/returns nothing after this change, and before it returned only the writes, the schema declaration and one test provider.MediaAssetKeyappears in exactly four files, all undersrc/platform/assets/; it is not re-exported through any public/extension entry point.pnpm typecheckandpnpm knipare clean — an excess or missing property on any otherprovide(MediaAssetKey, …)site would fail the former.Removing the listeners from the
<component :is>binding is a no-op for the non-video top components: they never declared these emits, so the handlers only ever landed as inert fallthrough listeners for events that were never fired.No manual/visual pass was done, and none is claimed — this change removes no rendered behaviour, and
MediaVideoTop's own render path is untouched.Scope
Refs #15220 — this is finding 4 of that issue's 5. Findings 1, 2, 3 and 5 (modifier-clicks on the native control bar mutating selection, audio cards not modifier-selectable, no keyboard play/pause in compact grid, list-view lightbox over a modifier-selection) are untouched here and that issue stays open for them. Deliberately not
Fixes.Provenance
pnpm test:unit src/platform/assets— 51 files, 762 tests passed, 0 failed;pnpm typecheck(vue-tsc, after a realpnpm installin the worktree) — clean;pnpm knip— clean;pnpm exec oxfmt --checkandpnpm exec eslinton the 5 changed files — clean.