Skip to content

feat(templates): provision desktop template inputs - #15902

Open
ryan-di wants to merge 14 commits into
ryan-di/fe-1491-stack-05-model-routingfrom
ryan-di/fe-1491-stack-06-input-assets
Open

feat(templates): provision desktop template inputs#15902
ryan-di wants to merge 14 commits into
ryan-di/fe-1491-stack-05-model-routingfrom
ryan-di/fe-1491-stack-06-input-assets

Conversation

@ryan-di

@ryan-di ryan-di commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Completes the trusted Desktop input-asset contract while the prepared template opens immediately.

Changes

  • Desktop remains the authority for declared template asset identity, source, destination, admission, and managed transfer lifetime.
  • Template Detail lists declared Input Assets for transparency, but exposes no independent asset action or transfer status.
  • Every action that actually opens a Desktop template hands off missing trusted assets. The immediate-open path starts no new models; the model-package path starts eligible models as well.
  • Asset-only and model-ready templates retain direct open plus automatic trusted-asset handoff.
  • Input progress and recovery remain owned by the opened Graph/App and global managed-download surfaces; arbitrary missing workflow inputs never gain template download authority.
  • Breaking changes: none. Requires Comfy-Desktop #1435 and the published bridge contract before merge.

Stack

Stack 6/6. Previous: #15875. Final Detail copy/layout: #16109.

Review focus

  • The renderer passes only declared template input IDs.
  • Viewing Detail alone starts nothing.
  • Input assets never become a second reason to enter Detail and never make an unavailable model CTA actionable.
  • Open-time asset handoff happens once across immediate, model-package, model-ready, and asset-only paths.

Validation

  • Real RED: read-only asset inventory and immediate-open handoff failed against the previous 6/6 implementation.
  • GREEN: related model/Detail/selector suites pass 38/38 at this stack layer and 40/40 cumulatively on refactor(templates): polish template detail decision surface #16109.
  • Targeted format/lint/style checks, frontend typecheck, Knip push hook, and Desktop production build pass.
  • Manual Desktop verification confirmed the read-only Input Assets list and final footer on LTX-2.3: FLF2V; no open/download action was triggered during that visual check.

Linear: FE-1491 · Review spec

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c7c1b6d1-d9d1-4df4-b4fe-25d0f0cf9273

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/28/2026, 11:11:21 PM UTC

Links

🎭 Playwright: ✅ 1886 passed, 0 failed

📊 Browser Reports
  • chromium: View Report (✅ 1865 / ❌ 0 / ⚠️ 0 / ⏭️ 5)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 18 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

🌐 Website E2E

Tip

All tests passed.

Status ✅ Passed
Report View Report

📦 Bundle Size

⚠️ Size data collection failed. Check the CI workflow logs.

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 76.3 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 55.9 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.2 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 80.9 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 82.6 MB heap
large-graph-pan: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.1 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 82.9 MB heap
legacy-node-drag: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.6 MB heap
minimap-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 83.5 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 81.7 MB heap
subgraph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.6 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.3 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 140ms TBT · 89.4 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 70.1 MB heap
vue-large-graph-idle: · 56.2 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 20ms TBT · 168.9 MB heap
vue-large-graph-pan: · 55.4 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 85ms TBT · 174.8 MB heap
workflow-execution: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 66.9 MB heap

ℹ️ No baseline found — significance unavailable.

Absolute values
Metric Value
canvas-idle: avg frame time 17ms
canvas-idle: p95 frame time 17ms
canvas-idle: layout duration 0ms
canvas-idle: style recalc duration 7ms
canvas-idle: layout count 0
canvas-idle: style recalc count 8
canvas-idle: task duration 565ms
canvas-idle: script duration 10ms
canvas-idle: TBT 0ms
canvas-idle: heap used 76.3 MB
canvas-idle: DOM nodes -282
canvas-idle: event listeners -156
canvas-mouse-sweep: avg frame time 17ms
canvas-mouse-sweep: p95 frame time 17ms
canvas-mouse-sweep: layout duration 4ms
canvas-mouse-sweep: style recalc duration 42ms
canvas-mouse-sweep: layout count 12
canvas-mouse-sweep: style recalc count 77
canvas-mouse-sweep: task duration 943ms
canvas-mouse-sweep: script duration 168ms
canvas-mouse-sweep: TBT 0ms
canvas-mouse-sweep: heap used 55.9 MB
canvas-mouse-sweep: DOM nodes -278
canvas-mouse-sweep: event listeners -155
canvas-zoom-sweep: avg frame time 17ms
canvas-zoom-sweep: p95 frame time 17ms
canvas-zoom-sweep: layout duration 1ms
canvas-zoom-sweep: style recalc duration 19ms
canvas-zoom-sweep: layout count 6
canvas-zoom-sweep: style recalc count 31
canvas-zoom-sweep: task duration 383ms
canvas-zoom-sweep: script duration 12ms
canvas-zoom-sweep: TBT 0ms
canvas-zoom-sweep: heap used 70.2 MB
canvas-zoom-sweep: DOM nodes 77
canvas-zoom-sweep: event listeners 20
dom-widget-clipping: avg frame time 17ms
dom-widget-clipping: p95 frame time 17ms
dom-widget-clipping: layout duration 0ms
dom-widget-clipping: style recalc duration 8ms
dom-widget-clipping: layout count 0
dom-widget-clipping: style recalc count 11
dom-widget-clipping: task duration 475ms
dom-widget-clipping: script duration 164ms
dom-widget-clipping: TBT 0ms
dom-widget-clipping: heap used 80.9 MB
dom-widget-clipping: DOM nodes 18
dom-widget-clipping: event listeners 2
large-graph-idle: avg frame time 17ms
large-graph-idle: p95 frame time 17ms
large-graph-idle: layout duration 0ms
large-graph-idle: style recalc duration 4ms
large-graph-idle: layout count 0
large-graph-idle: style recalc count 4
large-graph-idle: task duration 641ms
large-graph-idle: script duration 32ms
large-graph-idle: TBT 0ms
large-graph-idle: heap used 82.6 MB
large-graph-idle: DOM nodes -271
large-graph-idle: event listeners -168
large-graph-pan: avg frame time 17ms
large-graph-pan: p95 frame time 17ms
large-graph-pan: layout duration 0ms
large-graph-pan: style recalc duration 13ms
large-graph-pan: layout count 0
large-graph-pan: style recalc count 67
large-graph-pan: task duration 1814ms
large-graph-pan: script duration 895ms
large-graph-pan: TBT 0ms
large-graph-pan: heap used 68.1 MB
large-graph-pan: DOM nodes -272
large-graph-pan: event listeners -167
large-graph-zoom: avg frame time 17ms
large-graph-zoom: p95 frame time 17ms
large-graph-zoom: layout duration 8ms
large-graph-zoom: style recalc duration 11ms
large-graph-zoom: layout count 60
large-graph-zoom: style recalc count 61
large-graph-zoom: task duration 1800ms
large-graph-zoom: script duration 827ms
large-graph-zoom: TBT 0ms
large-graph-zoom: heap used 82.9 MB
large-graph-zoom: DOM nodes 1
large-graph-zoom: event listeners 10
legacy-node-drag: avg frame time 17ms
legacy-node-drag: p95 frame time 17ms
legacy-node-drag: layout duration 0ms
legacy-node-drag: style recalc duration 5ms
legacy-node-drag: layout count 0
legacy-node-drag: style recalc count 40
legacy-node-drag: task duration 1997ms
legacy-node-drag: script duration 977ms
legacy-node-drag: TBT 0ms
legacy-node-drag: heap used 64.6 MB
legacy-node-drag: DOM nodes 0
legacy-node-drag: event listeners 188
minimap-idle: avg frame time 17ms
minimap-idle: p95 frame time 17ms
minimap-idle: layout duration 0ms
minimap-idle: style recalc duration 3ms
minimap-idle: layout count 0
minimap-idle: style recalc count 3
minimap-idle: task duration 589ms
minimap-idle: script duration 34ms
minimap-idle: TBT 0ms
minimap-idle: heap used 83.5 MB
minimap-idle: DOM nodes -273
minimap-idle: event listeners -74
subgraph-dom-widget-clipping: avg frame time 17ms
subgraph-dom-widget-clipping: p95 frame time 17ms
subgraph-dom-widget-clipping: layout duration 0ms
subgraph-dom-widget-clipping: style recalc duration 12ms
subgraph-dom-widget-clipping: layout count 0
subgraph-dom-widget-clipping: style recalc count 47
subgraph-dom-widget-clipping: task duration 433ms
subgraph-dom-widget-clipping: script duration 146ms
subgraph-dom-widget-clipping: TBT 0ms
subgraph-dom-widget-clipping: heap used 81.7 MB
subgraph-dom-widget-clipping: DOM nodes 20
subgraph-dom-widget-clipping: event listeners 8
subgraph-idle: avg frame time 17ms
subgraph-idle: p95 frame time 17ms
subgraph-idle: layout duration 0ms
subgraph-idle: style recalc duration 9ms
subgraph-idle: layout count 0
subgraph-idle: style recalc count 9
subgraph-idle: task duration 548ms
subgraph-idle: script duration 10ms
subgraph-idle: TBT 0ms
subgraph-idle: heap used 69.6 MB
subgraph-idle: DOM nodes -297
subgraph-idle: event listeners -231
subgraph-mouse-sweep: avg frame time 17ms
subgraph-mouse-sweep: p95 frame time 17ms
subgraph-mouse-sweep: layout duration 5ms
subgraph-mouse-sweep: style recalc duration 40ms
subgraph-mouse-sweep: layout count 16
subgraph-mouse-sweep: style recalc count 75
subgraph-mouse-sweep: task duration 897ms
subgraph-mouse-sweep: script duration 123ms
subgraph-mouse-sweep: TBT 0ms
subgraph-mouse-sweep: heap used 66.3 MB
subgraph-mouse-sweep: DOM nodes -297
subgraph-mouse-sweep: event listeners -233
subgraph-transition-enter: avg frame time 17ms
subgraph-transition-enter: p95 frame time 17ms
subgraph-transition-enter: layout duration 15ms
subgraph-transition-enter: style recalc duration 33ms
subgraph-transition-enter: layout count 15
subgraph-transition-enter: style recalc count 20
subgraph-transition-enter: task duration 1034ms
subgraph-transition-enter: script duration 34ms
subgraph-transition-enter: TBT 140ms
subgraph-transition-enter: heap used 89.4 MB
subgraph-transition-enter: DOM nodes 13671
subgraph-transition-enter: event listeners 2383
viewport-pan-sweep: avg frame time 17ms
viewport-pan-sweep: p95 frame time 17ms
viewport-pan-sweep: layout duration 0ms
viewport-pan-sweep: style recalc duration 35ms
viewport-pan-sweep: layout count 0
viewport-pan-sweep: style recalc count 246
viewport-pan-sweep: task duration 6262ms
viewport-pan-sweep: script duration 2871ms
viewport-pan-sweep: TBT 0ms
viewport-pan-sweep: heap used 70.1 MB
viewport-pan-sweep: DOM nodes -269
viewport-pan-sweep: event listeners -136
vue-large-graph-idle: avg frame time 18ms
vue-large-graph-idle: p95 frame time 17ms
vue-large-graph-idle: layout duration 0ms
vue-large-graph-idle: style recalc duration 0ms
vue-large-graph-idle: layout count 0
vue-large-graph-idle: style recalc count 0
vue-large-graph-idle: task duration 17071ms
vue-large-graph-idle: script duration 335ms
vue-large-graph-idle: TBT 20ms
vue-large-graph-idle: heap used 168.9 MB
vue-large-graph-idle: DOM nodes -6548
vue-large-graph-idle: event listeners -7473
vue-large-graph-pan: avg frame time 18ms
vue-large-graph-pan: p95 frame time 17ms
vue-large-graph-pan: layout duration 0ms
vue-large-graph-pan: style recalc duration 21ms
vue-large-graph-pan: layout count 0
vue-large-graph-pan: style recalc count 176
vue-large-graph-pan: task duration 21695ms
vue-large-graph-pan: script duration 993ms
vue-large-graph-pan: TBT 85ms
vue-large-graph-pan: heap used 174.8 MB
vue-large-graph-pan: DOM nodes -6548
vue-large-graph-pan: event listeners -7469
workflow-execution: avg frame time 17ms
workflow-execution: p95 frame time 17ms
workflow-execution: layout duration 1ms
workflow-execution: style recalc duration 17ms
workflow-execution: layout count 2
workflow-execution: style recalc count 7
workflow-execution: task duration 88ms
workflow-execution: script duration 6ms
workflow-execution: TBT 0ms
workflow-execution: heap used 66.9 MB
workflow-execution: DOM nodes 117
workflow-execution: event listeners 37
Raw data
{
  "timestamp": "2026-08-28T23:23:14.288Z",
  "gitSha": "008818245bc2a05279b963c29b2845065cc3d0dc",
  "branch": "ryan-di/fe-1491-stack-06-input-assets",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2090.800999999999,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.127999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 634.344,
      "heapDeltaBytes": 13133212,
      "heapUsedBytes": 81476208,
      "domNodes": -280,
      "jsHeapTotalBytes": 4710400,
      "scriptDurationMs": 10.307000000000004,
      "eventListeners": -157,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2033.454000000006,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.2570000000000014,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 496.64799999999997,
      "heapDeltaBytes": 9901560,
      "heapUsedBytes": 78537980,
      "domNodes": -283,
      "jsHeapTotalBytes": 4972544,
      "scriptDurationMs": 8.722999999999999,
      "eventListeners": -155,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1892.043000000001,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 45.525,
      "layouts": 12,
      "layoutDurationMs": 3.9429999999999996,
      "taskDurationMs": 947.1289999999999,
      "heapDeltaBytes": -9836520,
      "heapUsedBytes": 59243488,
      "domNodes": -279,
      "jsHeapTotalBytes": 5496832,
      "scriptDurationMs": 165.726,
      "eventListeners": -155,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1827.2020000000566,
      "styleRecalcs": 76,
      "styleRecalcDurationMs": 39.035000000000004,
      "layouts": 12,
      "layoutDurationMs": 3.654,
      "taskDurationMs": 938.016,
      "heapDeltaBytes": -11454372,
      "heapUsedBytes": 58060936,
      "domNodes": -277,
      "jsHeapTotalBytes": 5234688,
      "scriptDurationMs": 170.047,
      "eventListeners": -155,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1737.7900000000182,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 18.823,
      "layouts": 6,
      "layoutDurationMs": 0.784,
      "taskDurationMs": 391.22700000000003,
      "heapDeltaBytes": 4398696,
      "heapUsedBytes": 73912024,
      "domNodes": 77,
      "jsHeapTotalBytes": 5767168,
      "scriptDurationMs": 12.646,
      "eventListeners": 21,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1733.1229999999778,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 18.342,
      "layouts": 6,
      "layoutDurationMs": 0.7979999999999999,
      "taskDurationMs": 375.48800000000006,
      "heapDeltaBytes": 4555656,
      "heapUsedBytes": 73323428,
      "domNodes": 76,
      "jsHeapTotalBytes": 4980736,
      "scriptDurationMs": 11.637000000000002,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 719.5549999999571,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.465,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 469.64900000000006,
      "heapDeltaBytes": 18864124,
      "heapUsedBytes": 87794536,
      "domNodes": 18,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 163.64100000000002,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 696.1430000000064,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 8.145000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 479.38899999999995,
      "heapDeltaBytes": 18711052,
      "heapUsedBytes": 81889396,
      "domNodes": 18,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 163.763,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2057.2460000000206,
      "styleRecalcs": 4,
      "styleRecalcDurationMs": 3.6740000000000004,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 606.5089999999999,
      "heapDeltaBytes": 10566908,
      "heapUsedBytes": 86174576,
      "domNodes": -272,
      "jsHeapTotalBytes": -1355776,
      "scriptDurationMs": 31.10800000000001,
      "eventListeners": -183,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2038.560000000075,
      "styleRecalcs": 4,
      "styleRecalcDurationMs": 4.491999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 675.3589999999999,
      "heapDeltaBytes": -12094708,
      "heapUsedBytes": 86998176,
      "domNodes": -270,
      "jsHeapTotalBytes": -1581056,
      "scriptDurationMs": 33.096000000000004,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2281.0820000000263,
      "styleRecalcs": 66,
      "styleRecalcDurationMs": 11.317999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1688.9219999999998,
      "heapDeltaBytes": 2790788,
      "heapUsedBytes": 67998944,
      "domNodes": -268,
      "jsHeapTotalBytes": 2621440,
      "scriptDurationMs": 833.052,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2977.614000000017,
      "styleRecalcs": 67,
      "styleRecalcDurationMs": 14.289,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1938.0990000000002,
      "heapDeltaBytes": 1616972,
      "heapUsedBytes": 74899272,
      "domNodes": -276,
      "jsHeapTotalBytes": -344064,
      "scriptDurationMs": 957.7479999999999,
      "eventListeners": -181,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3713.7560000000462,
      "styleRecalcs": 60,
      "styleRecalcDurationMs": 10.127,
      "layouts": 60,
      "layoutDurationMs": 7.562,
      "taskDurationMs": 1761.9830000000002,
      "heapDeltaBytes": 18598408,
      "heapUsedBytes": 84991920,
      "domNodes": 0,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 809.552,
      "eventListeners": 10,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3786.021000000005,
      "styleRecalcs": 61,
      "styleRecalcDurationMs": 11.289,
      "layouts": 60,
      "layoutDurationMs": 7.977000000000001,
      "taskDurationMs": 1837.717,
      "heapDeltaBytes": 21949928,
      "heapUsedBytes": 88918424,
      "domNodes": 2,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 844.948,
      "eventListeners": 10,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "legacy-node-drag",
      "durationMs": 3124.364000000014,
      "styleRecalcs": 40,
      "styleRecalcDurationMs": 4.810000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1951.873,
      "heapDeltaBytes": 698244,
      "heapUsedBytes": 67557136,
      "domNodes": 0,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 961.3119999999999,
      "eventListeners": 188,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "legacy-node-drag",
      "durationMs": 3204.695000000015,
      "styleRecalcs": 40,
      "styleRecalcDurationMs": 5.048,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 2041.328,
      "heapDeltaBytes": 365988,
      "heapUsedBytes": 67879352,
      "domNodes": 0,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 992.9839999999999,
      "eventListeners": 188,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666696,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "minimap-idle",
      "durationMs": 2014.9539999999888,
      "styleRecalcs": 3,
      "styleRecalcDurationMs": 2.738000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 559.924,
      "heapDeltaBytes": 21913728,
      "heapUsedBytes": 86971900,
      "domNodes": -273,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 31.78600000000001,
      "eventListeners": -153,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2009.45999999999,
      "styleRecalcs": 3,
      "styleRecalcDurationMs": 3.0950000000000006,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 618.662,
      "heapDeltaBytes": 22512740,
      "heapUsedBytes": 88193800,
      "domNodes": -273,
      "jsHeapTotalBytes": 0,
      "scriptDurationMs": 37.062999999999995,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 604.4500000000426,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 11.001999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 426.24999999999994,
      "heapDeltaBytes": 14071820,
      "heapUsedBytes": 85619748,
      "domNodes": 20,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 142.444,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 626.2590000000046,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 12.334,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 439.99199999999996,
      "heapDeltaBytes": 14392492,
      "heapUsedBytes": 85720040,
      "domNodes": 20,
      "jsHeapTotalBytes": 5242880,
      "scriptDurationMs": 149.16000000000003,
      "eventListeners": 8,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2023.9749999999503,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.139999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 559.944,
      "heapDeltaBytes": 1102684,
      "heapUsedBytes": 72303128,
      "domNodes": -297,
      "jsHeapTotalBytes": 6021120,
      "scriptDurationMs": 9.659999999999998,
      "eventListeners": -231,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2022.3519999999553,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 9.568,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 535.584,
      "heapDeltaBytes": 2352248,
      "heapUsedBytes": 73632920,
      "domNodes": -296,
      "jsHeapTotalBytes": 5758976,
      "scriptDurationMs": 9.659,
      "eventListeners": -231,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.670000000000012,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1741.3399999999797,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 41.266999999999996,
      "layouts": 16,
      "layoutDurationMs": 4.9750000000000005,
      "taskDurationMs": 898.1110000000001,
      "heapDeltaBytes": 3065144,
      "heapUsedBytes": 67713012,
      "domNodes": -298,
      "jsHeapTotalBytes": 5234688,
      "scriptDurationMs": 122.11499999999998,
      "eventListeners": -233,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1757.3930000000928,
      "styleRecalcs": 75,
      "styleRecalcDurationMs": 38.653,
      "layouts": 16,
      "layoutDurationMs": 4.887,
      "taskDurationMs": 896.623,
      "heapDeltaBytes": 789564,
      "heapUsedBytes": 71371452,
      "domNodes": -296,
      "jsHeapTotalBytes": 5758976,
      "scriptDurationMs": 123.172,
      "eventListeners": -233,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1434.7060000000056,
      "styleRecalcs": 20,
      "styleRecalcDurationMs": 33.002,
      "layouts": 15,
      "layoutDurationMs": 15.171999999999999,
      "taskDurationMs": 1034.1090000000002,
      "heapDeltaBytes": -3592912,
      "heapUsedBytes": 93787264,
      "domNodes": 13671,
      "jsHeapTotalBytes": 10747904,
      "scriptDurationMs": 33.582,
      "eventListeners": 2383,
      "totalBlockingTimeMs": 140,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 9338.510999999982,
      "styleRecalcs": 246,
      "styleRecalcDurationMs": 34.612,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 6365.561000000001,
      "heapDeltaBytes": -19348396,
      "heapUsedBytes": 80136328,
      "domNodes": -269,
      "jsHeapTotalBytes": -1388544,
      "scriptDurationMs": 2932.261,
      "eventListeners": -135,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8855.119999999943,
      "styleRecalcs": 246,
      "styleRecalcDurationMs": 34.961,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 6157.6939999999995,
      "heapDeltaBytes": -32848832,
      "heapUsedBytes": 66800400,
      "domNodes": -269,
      "jsHeapTotalBytes": -1318912,
      "scriptDurationMs": 2810.345,
      "eventListeners": -137,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 17476.68299999998,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16824.156,
      "heapDeltaBytes": -34559184,
      "heapUsedBytes": 175225256,
      "domNodes": -6548,
      "jsHeapTotalBytes": -4091904,
      "scriptDurationMs": 283.437,
      "eventListeners": -7473,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.779999999999927,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 18017.425000000003,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 17318.144000000004,
      "heapDeltaBytes": -34444192,
      "heapUsedBytes": 178962628,
      "domNodes": -6548,
      "jsHeapTotalBytes": -4182016,
      "scriptDurationMs": 385.93100000000004,
      "eventListeners": -7473,
      "totalBlockingTimeMs": 40,
      "frameDurationMs": 17.776666666666763,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 21700.091999999982,
      "styleRecalcs": 176,
      "styleRecalcDurationMs": 19.881000000000036,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21389.857,
      "heapDeltaBytes": -11865704,
      "heapUsedBytes": 190530584,
      "domNodes": -6548,
      "jsHeapTotalBytes": 3629056,
      "scriptDurationMs": 974.8330000000001,
      "eventListeners": -7469,
      "totalBlockingTimeMs": 64,
      "frameDurationMs": 17.776666666666642,
      "p95FrameDurationMs": 16.80000000000291
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 22360.936000000038,
      "styleRecalcs": 175,
      "styleRecalcDurationMs": 22.36300000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 21999.657,
      "heapDeltaBytes": -25270848,
      "heapUsedBytes": 176039860,
      "domNodes": -6548,
      "jsHeapTotalBytes": 3948544,
      "scriptDurationMs": 1011.835,
      "eventListeners": -7469,
      "totalBlockingTimeMs": 105,
      "frameDurationMs": 18.329999999999927,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 105.8659999999918,
      "styleRecalcs": 6,
      "styleRecalcDurationMs": 17.553,
      "layouts": 2,
      "layoutDurationMs": 0.8019999999999999,
      "taskDurationMs": 80.759,
      "heapDeltaBytes": 3145148,
      "heapUsedBytes": 69856924,
      "domNodes": 106,
      "jsHeapTotalBytes": 786432,
      "scriptDurationMs": 4.5760000000000005,
      "eventListeners": 49,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "workflow-execution",
      "durationMs": 122.65100000001894,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 17.078000000000003,
      "layouts": 2,
      "layoutDurationMs": 1.2950000000000002,
      "taskDurationMs": 96.21600000000002,
      "heapDeltaBytes": 3115856,
      "heapUsedBytes": 70357216,
      "domNodes": 128,
      "jsHeapTotalBytes": 262144,
      "scriptDurationMs": 6.9479999999999995,
      "eventListeners": 25,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    }
  ]
}

@codecov

codecov Bot commented Aug 25, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 82.25108% with 41 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...es/utils/refreshDownloadedTemplateInputBindings.ts 0.00% 13 Missing ⚠️
...rm/workflow/templates/utils/templateInputAssets.ts 72.00% 7 Missing ⚠️
src/stores/templateInputDownloadStore.ts 80.55% 7 Missing ⚠️
...s/composables/useTemplateInputDownloadGraphSync.ts 89.47% 6 Missing ⚠️
...s/custom/widget/WorkflowTemplateSelectorDialog.vue 85.00% 3 Missing ⚠️
src/components/builder/AppModeWidgetList.vue 60.00% 2 Missing ⚠️
src/views/GraphView.vue 90.00% 2 Missing ⚠️
.../renderer/extensions/linearMode/LinearControls.vue 97.14% 1 Missing ⚠️
@@                            Coverage Diff                             @@
##           ryan-di/fe-1491-stack-05-model-routing   #15902      +/-   ##
==========================================================================
- Coverage                                   82.82%   80.77%   -2.06%     
==========================================================================
  Files                                        1959     2335     +376     
  Lines                                      113026   119536    +6510     
  Branches                                    31935    33402    +1467     
==========================================================================
+ Hits                                        93618    96559    +2941     
- Misses                                      19062    22408    +3346     
- Partials                                      346      569     +223     
Flag Coverage Δ
e2e 66.49% <38.27%> (-0.16%) ⬇️
unit 75.55% <82.58%> (+0.01%) ⬆️
website-unit 44.08% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/platform/missingMedia/missingMediaPipeline.ts 90.90% <100.00%> (+2.67%) ⬆️
src/platform/missingMedia/missingMediaStore.ts 100.00% <100.00%> (ø)
...plates/composables/useTemplateModelRowDownloads.ts 83.59% <100.00%> (+0.26%) ⬆️
...flow/templates/composables/useTemplateWorkflows.ts 94.25% <100.00%> (+0.06%) ⬆️
.../renderer/extensions/linearMode/LinearControls.vue 86.32% <97.14%> (+3.97%) ⬆️
src/components/builder/AppModeWidgetList.vue 73.33% <60.00%> (-0.79%) ⬇️
src/views/GraphView.vue 75.44% <90.00%> (+4.02%) ⬆️
...s/custom/widget/WorkflowTemplateSelectorDialog.vue 83.26% <85.00%> (-0.65%) ⬇️
...s/composables/useTemplateInputDownloadGraphSync.ts 89.47% <89.47%> (ø)
...rm/workflow/templates/utils/templateInputAssets.ts 72.00% <72.00%> (ø)
... and 2 more

... and 386 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions github-actions Bot added the risk:R3 PR risk grade (advisory shadow check; grader-owned) label Aug 25, 2026
@ryan-di
ryan-di force-pushed the ryan-di/fe-1491-stack-06-input-assets branch from 1239376 to 7780b9f Compare August 28, 2026 23:09
@ryan-di
ryan-di force-pushed the ryan-di/fe-1491-stack-06-input-assets branch from 7780b9f to 974ed95 Compare August 29, 2026 01:19
@ryan-di
ryan-di force-pushed the ryan-di/fe-1491-stack-06-input-assets branch from 974ed95 to 15633a0 Compare August 31, 2026 04:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:R3 PR risk grade (advisory shadow check; grader-owned) size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants