Update asset schema and fix incorrect tests - #14858
Conversation
|
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)
📝 WalkthroughWalkthroughThe asset schema now derives fields from ChangesAsset metadata and fixture updates
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (4 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 |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/components/sidebar/tabs/AssetsSidebarListView.stories.ts (1)
77-133: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winKeep partial asset fixtures compliant with
AssetItem.
AssetItem.updated_atis required, so Storybook assets built withfromPartialshould still include it. The sidebar test fixture should keep a type-only check, such assatisfies Partial<AssetItem>, so future schema changes remain caught.
src/components/sidebar/tabs/AssetsSidebarListView.stories.ts#L77-L133: addupdated_at: baseTimestampto each sample asset that needs it.src/components/sidebar/tabs/AssetsSidebarTab.test.ts#L9-L19: keep a type-only partialAssetItemcheck for the hoisted fixture.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/sidebar/tabs/AssetsSidebarListView.stories.ts` around lines 77 - 133, Add updated_at: baseTimestamp to every partial asset fixture in src/components/sidebar/tabs/AssetsSidebarListView.stories.ts lines 77-133. In src/components/sidebar/tabs/AssetsSidebarTab.test.ts lines 9-19, retain a type-only satisfies Partial<AssetItem> check for the hoisted fixture so schema changes remain validated.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/platform/assets/components/MediaAssetCard.stories.ts`:
- Around line 1-2: Remove the fromPartial workaround and update every
MediaAssetCard story fixture, including sampleAsset and the WebM, GIF, and grid
fixtures, to provide both required timestamp fields from the AssetItem contract.
Use one complete realistic ComfyUI-compatible base fixture and spread it where
appropriate, preserving each story’s specific asset values.
---
Outside diff comments:
In `@src/components/sidebar/tabs/AssetsSidebarListView.stories.ts`:
- Around line 77-133: Add updated_at: baseTimestamp to every partial asset
fixture in src/components/sidebar/tabs/AssetsSidebarListView.stories.ts lines
77-133. In src/components/sidebar/tabs/AssetsSidebarTab.test.ts lines 9-19,
retain a type-only satisfies Partial<AssetItem> check for the hoisted fixture so
schema changes remain validated.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 82a00d6b-3395-4587-96c6-803346acf888
📒 Files selected for processing (40)
src/components/sidebar/tabs/AssetsSidebarListView.stories.tssrc/components/sidebar/tabs/AssetsSidebarListView.test.tssrc/components/sidebar/tabs/AssetsSidebarTab.test.tssrc/composables/node/startModelNodeDragFromAsset.test.tssrc/platform/assets/components/AssetCard.test.tssrc/platform/assets/components/MediaAssetCard.stories.tssrc/platform/assets/components/MediaAssetCard.test.tssrc/platform/assets/components/MediaAssetCard.vuesrc/platform/assets/components/MediaAssetContextMenu.test.tssrc/platform/assets/components/MediaVideoTop.test.tssrc/platform/assets/composables/media/assetMappers.tssrc/platform/assets/composables/useAssetBrowserDialog.test.tssrc/platform/assets/composables/useAssetGridSelection.test.tssrc/platform/assets/composables/useAssetSelection.property.test.tssrc/platform/assets/composables/useAssetSelection.test.tssrc/platform/assets/composables/useMediaAssetActions.test.tssrc/platform/assets/composables/useMediaAssetFiltering.test.tssrc/platform/assets/composables/useMediaAssetGalleryStore.test.tssrc/platform/assets/composables/useOutputStacks.property.test.tssrc/platform/assets/composables/useOutputStacks.test.tssrc/platform/assets/composables/useUploadModelWizard.test.tssrc/platform/assets/schemas/assetSchema.tssrc/platform/assets/services/assetService.test.tssrc/platform/assets/utils/assetFilterUtils.property.test.tssrc/platform/assets/utils/assetFilterUtils.test.tssrc/platform/assets/utils/assetMetadataUtils.test.tssrc/platform/assets/utils/createAssetWidget.test.tssrc/platform/assets/utils/outputAssetUtil.tssrc/platform/assets/utils/resolveModelNodeFromAsset.test.tssrc/platform/missingMedia/missingMediaAssetResolver.test.tssrc/platform/missingMedia/missingMediaAssetResolver.tssrc/platform/missingMedia/missingMediaScan.test.tssrc/platform/workflow/utils/workflowExtractionUtil.test.tssrc/renderer/extensions/linearMode/LinearPreview.test.tssrc/renderer/extensions/linearMode/OutputHistory.test.tssrc/renderer/extensions/linearMode/useOutputHistory.test.tssrc/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.tssrc/renderer/extensions/vueNodes/widgets/composables/useAssetWidgetData.test.tssrc/renderer/extensions/vueNodes/widgets/composables/useWidgetSelectItems.test.tssrc/stores/assetsStore.test.ts
🎨 Storybook: ✅ Built — View Storybook🎭 Playwright: ✅ 1798 passed, 0 failed · 4 flaky📊 Browser Reports
📦 Bundle: 8.69 MB gzip 🟢 -36 BDetailsSummary
Category Glance App Entry Points — 3.67 kB (baseline 3.67 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.36 MB (baseline 1.36 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 — 565 kB (baseline 565 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 10 added / 10 removed / 16 unchanged User & Accounts — 27 kB (baseline 27 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 6 added / 6 removed / 4 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.5 MB (baseline 3.5 MB) • 🟢 -291 BStores, services, APIs, and repositories
Status: 14 added / 14 removed / 3 unchanged Utilities & Hooks — 550 kB (baseline 550 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 18 added / 18 removed / 20 unchanged Vendor & Third-Party — 16.3 MB (baseline 16.3 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 17 unchanged Other — 14 MB (baseline 14 MB) • ⚪ 0 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-11T21:51:00.790Z",
"gitSha": "22959fa15a7e36aa105112bfa1583d0d2d833b7f",
"branch": "austin/asset-schema-update",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2155.187999999981,
"styleRecalcs": 7,
"styleRecalcDurationMs": 5.784000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 640.1899999999999,
"heapDeltaBytes": 5817192,
"heapUsedBytes": 70162300,
"domNodes": 14,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 20.462999999999997,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2037.5779999999963,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.279,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 488.9440000000001,
"heapDeltaBytes": 5825572,
"heapUsedBytes": 70202672,
"domNodes": 18,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 19.055999999999997,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1820.9020000000464,
"styleRecalcs": 75,
"styleRecalcDurationMs": 40.157,
"layouts": 12,
"layoutDurationMs": 3.5610000000000004,
"taskDurationMs": 869.922,
"heapDeltaBytes": 141796,
"heapUsedBytes": 64233384,
"domNodes": 57,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 125.20399999999998,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1889.6250000000236,
"styleRecalcs": 76,
"styleRecalcDurationMs": 41.579,
"layouts": 12,
"layoutDurationMs": 3.804,
"taskDurationMs": 924.4610000000001,
"heapDeltaBytes": -13117816,
"heapUsedBytes": 51285608,
"domNodes": -281,
"jsHeapTotalBytes": 23830528,
"scriptDurationMs": 129.172,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1723.1409999999983,
"styleRecalcs": 32,
"styleRecalcDurationMs": 14.896999999999998,
"layouts": 6,
"layoutDurationMs": 0.518,
"taskDurationMs": 365.07800000000003,
"heapDeltaBytes": 8794920,
"heapUsedBytes": 73132056,
"domNodes": 77,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 18.302000000000003,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1742.6509999999098,
"styleRecalcs": 31,
"styleRecalcDurationMs": 16.626,
"layouts": 6,
"layoutDurationMs": 0.619,
"taskDurationMs": 380.708,
"heapDeltaBytes": 8768120,
"heapUsedBytes": 72922564,
"domNodes": 76,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 19.245,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 575.1710000000116,
"styleRecalcs": 11,
"styleRecalcDurationMs": 7.9719999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 376.98400000000004,
"heapDeltaBytes": -11047064,
"heapUsedBytes": 53201328,
"domNodes": 18,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 59.293,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "dom-widget-clipping",
"durationMs": 592.7780000000666,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.690999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 389.48499999999996,
"heapDeltaBytes": -10801728,
"heapUsedBytes": 53490428,
"domNodes": 20,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 60.7,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2058.109999999999,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.7390000000000025,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 677.838,
"heapDeltaBytes": 7333300,
"heapUsedBytes": 67292968,
"domNodes": -283,
"jsHeapTotalBytes": 4296704,
"scriptDurationMs": 104.23199999999999,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2025.541999999973,
"styleRecalcs": 8,
"styleRecalcDurationMs": 8.301,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 730.0659999999999,
"heapDeltaBytes": 7816528,
"heapUsedBytes": 67797144,
"domNodes": -284,
"jsHeapTotalBytes": 2985984,
"scriptDurationMs": 114.913,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-pan",
"durationMs": 2134.469000000024,
"styleRecalcs": 68,
"styleRecalcDurationMs": 12.410999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1244.01,
"heapDeltaBytes": 4661248,
"heapUsedBytes": 65628064,
"domNodes": -286,
"jsHeapTotalBytes": 3702784,
"scriptDurationMs": 421.983,
"eventListeners": -147,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2199.0059999999403,
"styleRecalcs": 68,
"styleRecalcDurationMs": 13.356999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1320.4119999999998,
"heapDeltaBytes": 3372640,
"heapUsedBytes": 64619816,
"domNodes": -286,
"jsHeapTotalBytes": 3178496,
"scriptDurationMs": 440.822,
"eventListeners": -151,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3226.2119999999754,
"styleRecalcs": 65,
"styleRecalcDurationMs": 13.982999999999999,
"layouts": 60,
"layoutDurationMs": 7.179999999999999,
"taskDurationMs": 1496.075,
"heapDeltaBytes": -2190248,
"heapUsedBytes": 59987840,
"domNodes": -289,
"jsHeapTotalBytes": 6393856,
"scriptDurationMs": 523.132,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-zoom",
"durationMs": 3226.594999999975,
"styleRecalcs": 64,
"styleRecalcDurationMs": 14.126999999999997,
"layouts": 60,
"layoutDurationMs": 7.047999999999998,
"taskDurationMs": 1555.5829999999999,
"heapDeltaBytes": -1083112,
"heapUsedBytes": 61162088,
"domNodes": -290,
"jsHeapTotalBytes": 6918144,
"scriptDurationMs": 535.965,
"eventListeners": -153,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2042.822000000001,
"styleRecalcs": 8,
"styleRecalcDurationMs": 6.909999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 711.7689999999999,
"heapDeltaBytes": 7211920,
"heapUsedBytes": 67801332,
"domNodes": -283,
"jsHeapTotalBytes": 3248128,
"scriptDurationMs": 114.60400000000001,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2037.3439999999619,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.702000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 743.2209999999999,
"heapDeltaBytes": 6819776,
"heapUsedBytes": 67573968,
"domNodes": -283,
"jsHeapTotalBytes": 3772416,
"scriptDurationMs": 119.783,
"eventListeners": -149,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 574.307000000033,
"styleRecalcs": 45,
"styleRecalcDurationMs": 9.36,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 390.228,
"heapDeltaBytes": -10944300,
"heapUsedBytes": 53427268,
"domNodes": 16,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 117.32700000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 585.4160000000093,
"styleRecalcs": 45,
"styleRecalcDurationMs": 9.468999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 409.97499999999997,
"heapDeltaBytes": -10633844,
"heapUsedBytes": 53853744,
"domNodes": 16,
"jsHeapTotalBytes": 25952256,
"scriptDurationMs": 126.26599999999999,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 1995.6470000000195,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.704,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 474.976,
"heapDeltaBytes": 5794004,
"heapUsedBytes": 70041060,
"domNodes": 20,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 14.202000000000002,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 2007.0690000000013,
"styleRecalcs": 10,
"styleRecalcDurationMs": 10.294999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 517.145,
"heapDeltaBytes": 5927128,
"heapUsedBytes": 70320852,
"domNodes": 20,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 17.83,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1693.3839999999805,
"styleRecalcs": 76,
"styleRecalcDurationMs": 34.785000000000004,
"layouts": 16,
"layoutDurationMs": 4.3,
"taskDurationMs": 766.141,
"heapDeltaBytes": -3487152,
"heapUsedBytes": 60803252,
"domNodes": 64,
"jsHeapTotalBytes": 24903680,
"scriptDurationMs": 90.96300000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1694.7790000000396,
"styleRecalcs": 76,
"styleRecalcDurationMs": 37.494,
"layouts": 16,
"layoutDurationMs": 4.691,
"taskDurationMs": 794.445,
"heapDeltaBytes": -3253328,
"heapUsedBytes": 61049036,
"domNodes": 63,
"jsHeapTotalBytes": 24641536,
"scriptDurationMs": 98.051,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 1389.1890000000444,
"styleRecalcs": 18,
"styleRecalcDurationMs": 29.193000000000012,
"layouts": 14,
"layoutDurationMs": 12.079000000000002,
"taskDurationMs": 934.647,
"heapDeltaBytes": 30968728,
"heapUsedBytes": 97777176,
"domNodes": 13673,
"jsHeapTotalBytes": 15728640,
"scriptDurationMs": 35.117,
"eventListeners": 2375,
"totalBlockingTimeMs": 142,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8219.768999999986,
"styleRecalcs": 249,
"styleRecalcDurationMs": 35.814,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4357.099,
"heapDeltaBytes": 10910808,
"heapUsedBytes": 70622808,
"domNodes": -283,
"jsHeapTotalBytes": 5275648,
"scriptDurationMs": 1347.308,
"eventListeners": -133,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8433.109000000059,
"styleRecalcs": 250,
"styleRecalcDurationMs": 37.766,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4599.349,
"heapDeltaBytes": 12835112,
"heapUsedBytes": 72361764,
"domNodes": -281,
"jsHeapTotalBytes": 5537792,
"scriptDurationMs": 1413.304,
"eventListeners": -131,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 16848.825000000033,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16826.844999999998,
"heapDeltaBytes": -31446748,
"heapUsedBytes": 171512968,
"domNodes": -8312,
"jsHeapTotalBytes": -4395008,
"scriptDurationMs": 557.9490000000001,
"eventListeners": -16387,
"totalBlockingTimeMs": 0,
"frameDurationMs": 18.33666666666662,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 17063.37700000006,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 17032.054000000004,
"heapDeltaBytes": -40562544,
"heapUsedBytes": 166701992,
"domNodes": -8342,
"jsHeapTotalBytes": -8069120,
"scriptDurationMs": 573.8839999999999,
"eventListeners": -16409,
"totalBlockingTimeMs": 0,
"frameDurationMs": 18.890000000000025,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 20552.569000000007,
"styleRecalcs": 142,
"styleRecalcDurationMs": 16.554999999999986,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20520.677999999996,
"heapDeltaBytes": -36683008,
"heapUsedBytes": 168755308,
"domNodes": -8312,
"jsHeapTotalBytes": -9904128,
"scriptDurationMs": 905.2780000000001,
"eventListeners": -16381,
"totalBlockingTimeMs": 249,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 20954.93099999999,
"styleRecalcs": 145,
"styleRecalcDurationMs": 17.80000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20925.273,
"heapDeltaBytes": -49220888,
"heapUsedBytes": 166820328,
"domNodes": -8312,
"jsHeapTotalBytes": -12263424,
"scriptDurationMs": 965.3960000000002,
"eventListeners": -16383,
"totalBlockingTimeMs": 190,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.80000000000291
},
{
"name": "workflow-execution",
"durationMs": 483.9670000000069,
"styleRecalcs": 17,
"styleRecalcDurationMs": 22,
"layouts": 3,
"layoutDurationMs": 1.145,
"taskDurationMs": 123.04799999999999,
"heapDeltaBytes": 5303208,
"heapUsedBytes": 68801060,
"domNodes": 148,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 12.065999999999999,
"eventListeners": 99,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "workflow-execution",
"durationMs": 468.11700000000656,
"styleRecalcs": 16,
"styleRecalcDurationMs": 19.762,
"layouts": 2,
"layoutDurationMs": 0.874,
"taskDurationMs": 115.07199999999999,
"heapDeltaBytes": 5165140,
"heapUsedBytes": 68578224,
"domNodes": 141,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 11.272,
"eventListeners": 97,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
}
]
} |
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## main #14858 +/- ##
==========================================
+ Coverage 80.85% 81.36% +0.51%
==========================================
Files 1873 1873
Lines 121849 106431 -15418
Branches 37437 32698 -4739
==========================================
- Hits 98515 86598 -11917
+ Misses 22802 19478 -3324
+ Partials 532 355 -177
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 352 files with indirect coverage changes 🚀 New features to boost your workflow:
|
| mimeType: AssetMeta['mime_type'] = 'video/mp4' | ||
| ): AssetMeta { | ||
| return { | ||
| return fromPartial<AssetMeta>({ |
There was a problem hiding this comment.
?
| return fromPartial<AssetMeta>({ | |
| return fromPartial({ |
| overrides: Partial<AssetDisplayItem> = {} | ||
| ): AssetDisplayItem { | ||
| const base = { | ||
| return fromPartial<AssetDisplayItem>({ |
There was a problem hiding this comment.
| return fromPartial<AssetDisplayItem>({ | |
| return fromPartial({ |
| size: 0, | ||
| created_at: new Date().toISOString(), | ||
| created_at, | ||
| updated_at: created_at, |
|
|
||
| function createMockAsset(overrides: Partial<AssetItem> = {}): AssetItem { | ||
| return { | ||
| return fromPartial<AssetItem>({ |
There was a problem hiding this comment.
| return fromPartial<AssetItem>({ | |
| return fromPartial({ |
| return Array.from({ length: count }, (_, i) => | ||
| fromPartial<AssetItem>({ |
There was a problem hiding this comment.
| return Array.from({ length: count }, (_, i) => | |
| fromPartial<AssetItem>({ | |
| return Array.from({ length: count }, (_, i): AssetItem => | |
| fromPartial({ |
| ids.map((id) => | ||
| fromPartial<AssetItem>({ |
There was a problem hiding this comment.
| ids.map((id) => | |
| fromPartial<AssetItem>({ | |
| ids.map((id): AssetItem => | |
| fromPartial({ |
There was a problem hiding this comment.
Can we replace this with a reference to the OpenAPI generated types now?
There was a problem hiding this comment.
Took lots of massaging and didn't quite make it all the way there, but it's still better
585751e
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/platform/missingMedia/missingMediaAssetResolver.test.ts (1)
695-695: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winRestore the removed missing-hash regression test.
Line [695] removes coverage for name matching when
hashisnull. Keep an equivalent behavior test. Ifnullis no longer valid, use an omitted orundefinedhash instead of deleting the test.As per coding guidelines, do not delete or disable tests. As per path instructions, retain behavioral coverage for asset matching.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/platform/missingMedia/missingMediaAssetResolver.test.ts` at line 695, Restore the missing-hash regression test in the missing-media asset resolver suite, preserving coverage for name matching when the hash is absent. Use null if still supported; otherwise represent the missing hash with an omitted or undefined value, and keep the test active rather than deleting or disabling it.Sources: Coding guidelines, Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/platform/missingMedia/missingMediaAssetResolver.test.ts`:
- Line 695: Restore the missing-hash regression test in the missing-media asset
resolver suite, preserving coverage for name matching when the hash is absent.
Use null if still supported; otherwise represent the missing hash with an
omitted or undefined value, and keep the test active rather than deleting or
disabling it.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: f3317225-9c07-4f24-b196-d4f8b70f5d42
📒 Files selected for processing (12)
src/platform/assets/components/AssetCard.test.tssrc/platform/assets/components/MediaVideoTop.test.tssrc/platform/assets/composables/media/assetMappers.tssrc/platform/assets/composables/useAssetBrowserDialog.test.tssrc/platform/assets/composables/useAssetSelection.test.tssrc/platform/assets/composables/useMediaAssetActions.test.tssrc/platform/assets/composables/useOutputStacks.property.test.tssrc/platform/assets/schemas/assetSchema.tssrc/platform/assets/utils/assetMetadataUtils.test.tssrc/platform/missingMedia/missingMediaAssetResolver.test.tssrc/platform/missingMedia/missingMediaAssetResolver.tssrc/platform/missingMedia/missingMediaScan.test.ts
💤 Files with no reviewable changes (3)
- src/platform/assets/composables/useMediaAssetActions.test.ts
- src/platform/assets/utils/assetMetadataUtils.test.ts
- src/platform/missingMedia/missingMediaAssetResolver.ts
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@browser_tests/fixtures/assetApiFixture.ts`:
- Around line 47-55: Update the assetApi fixture’s assetApi setup to configure
optional operators when provided, then call assetApi.mock() unconditionally so
default and folders-only configurations install the empty mock; add coverage for
both configurations to prevent regression.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b53bb907-9467-42ed-934a-92355bc5b8e6
📒 Files selected for processing (5)
browser_tests/fixtures/assetApiFixture.tsbrowser_tests/fixtures/helpers/AssetHelper.tsbrowser_tests/tests/sidebar/modelLibraryAssetMode.spec.tssrc/platform/assets/schemas/assetSchema.tssrc/platform/assets/utils/createAssetWidget.test.ts
💤 Files with no reviewable changes (1)
- src/platform/assets/utils/createAssetWidget.test.ts
dac4dee to
6a01ef2
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/components/sidebar/tabs/AssetsSidebarTab.test.ts`:
- Around line 9-19: Update the folderAsset fixture to retain compile-time
validation against AssetItem, using a hoist-safe fromPartial<AssetItem>
construction or an equivalent satisfies AssetItem check while preserving its
current values.
In `@src/platform/assets/schemas/assetSchema.ts`:
- Line 11: Update the size field in the asset schema to preserve signed int64
precision: keep it as bigint, or validate that values are within
Number.MAX_SAFE_INTEGER bounds before converting to number. Add boundary tests
covering safe and unsafe int64 values, including both signed limits where
applicable.
- Around line 7-10: Update the size parsing in zIngestAsset so int64 values
above Number.MAX_SAFE_INTEGER are rejected before Number conversion or preserved
without precision loss. Add parser tests covering default tags, required
timestamps, optional thumbnail_url, and int64 boundary values.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: ebff8e0c-8bda-4b5f-a3b8-1dda4ffe7e07
📒 Files selected for processing (43)
browser_tests/fixtures/assetApiFixture.tsbrowser_tests/fixtures/helpers/AssetHelper.tsbrowser_tests/tests/sidebar/modelLibraryAssetMode.spec.tssrc/components/sidebar/tabs/AssetsSidebarListView.stories.tssrc/components/sidebar/tabs/AssetsSidebarListView.test.tssrc/components/sidebar/tabs/AssetsSidebarTab.test.tssrc/composables/node/startModelNodeDragFromAsset.test.tssrc/platform/assets/components/AssetCard.test.tssrc/platform/assets/components/MediaAssetCard.stories.tssrc/platform/assets/components/MediaAssetCard.test.tssrc/platform/assets/components/MediaAssetCard.vuesrc/platform/assets/components/MediaAssetContextMenu.test.tssrc/platform/assets/components/MediaVideoTop.test.tssrc/platform/assets/composables/media/assetMappers.tssrc/platform/assets/composables/useAssetBrowserDialog.test.tssrc/platform/assets/composables/useAssetGridSelection.test.tssrc/platform/assets/composables/useAssetSelection.property.test.tssrc/platform/assets/composables/useAssetSelection.test.tssrc/platform/assets/composables/useMediaAssetActions.test.tssrc/platform/assets/composables/useMediaAssetFiltering.test.tssrc/platform/assets/composables/useMediaAssetGalleryStore.test.tssrc/platform/assets/composables/useOutputStacks.property.test.tssrc/platform/assets/composables/useOutputStacks.test.tssrc/platform/assets/composables/useUploadModelWizard.test.tssrc/platform/assets/schemas/assetSchema.tssrc/platform/assets/services/assetService.test.tssrc/platform/assets/utils/assetFilterUtils.property.test.tssrc/platform/assets/utils/assetFilterUtils.test.tssrc/platform/assets/utils/assetMetadataUtils.test.tssrc/platform/assets/utils/createAssetWidget.test.tssrc/platform/assets/utils/outputAssetUtil.tssrc/platform/assets/utils/resolveModelNodeFromAsset.test.tssrc/platform/missingMedia/missingMediaAssetResolver.test.tssrc/platform/missingMedia/missingMediaAssetResolver.tssrc/platform/missingMedia/missingMediaScan.test.tssrc/platform/workflow/utils/workflowExtractionUtil.test.tssrc/renderer/extensions/linearMode/LinearPreview.test.tssrc/renderer/extensions/linearMode/OutputHistory.test.tssrc/renderer/extensions/linearMode/useOutputHistory.test.tssrc/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.test.tssrc/renderer/extensions/vueNodes/widgets/composables/useAssetWidgetData.test.tssrc/renderer/extensions/vueNodes/widgets/composables/useWidgetSelectItems.test.tssrc/stores/assetsStore.test.ts
6a01ef2 to
dd1cbb4
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/platform/assets/composables/useMediaAssetActions.test.ts`:
- Around line 232-240: Update the regression test fixture or case using
createMockAsset to pass hash: null rather than hash: undefined, preserving
coverage of useMediaAssetActions falling back to asset.name for nullable API
hashes.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 0d8e043e-0399-4efc-b520-e7d22f69ec5b
📒 Files selected for processing (1)
src/platform/assets/composables/useMediaAssetActions.test.ts
| operators?: AssetOperator[] | ||
| folders?: ModelFolderInfo[] |
There was a problem hiding this comment.
| operators?: AssetOperator[] | |
| folders?: ModelFolderInfo[] | |
| folders?: ModelFolderInfo[] | |
| operators?: AssetOperator[] |
Comfy-Org#14858 more closely aligned the asset schema to match the spec defined by cloud generated types. Since cloud doesn't satisfy it's own schema, this would result in assets being skipped on cloud. The schema is loosened for these inaccuracies. A test was added to verify that these specific inaccuracies be accepted.
A tiny 6 line change to make the asset item schema match the API, and a whooole lot of test fixes.