@@ -286,7 +286,7 @@ test.describe('Errors tab - Mode-aware errors', { tag: '@ui' }, () => {
286286 await expect ( missingModelGroup ) . toBeHidden ( )
287287 } )
288288
289- test ( 'Selecting a node filters errors tab to only that node ' , async ( {
289+ test ( 'Selecting a node keeps all errors visible and shows selection context ' , async ( {
290290 comfyPage
291291 } ) => {
292292 await loadWorkflowAndOpenErrorsTab (
@@ -301,14 +301,25 @@ test.describe('Errors tab - Mode-aware errors', { tag: '@ui' }, () => {
301301
302302 const node1 = await comfyPage . nodeOps . getNodeRefById ( '1' )
303303 await node1 . click ( 'title' )
304+
304305 await expect (
305306 getMissingModelLabel ( missingModelGroup , FAKE_MODEL_NAME )
306307 ) . toBeVisible ( )
308+ await expectReferenceBadge ( missingModelGroup , 2 )
309+ const strip = comfyPage . page . getByTestId (
310+ TestIds . propertiesPanel . selectionContextStrip
311+ )
312+ await expect ( strip ) . toBeVisible ( )
307313 await expect (
308- missingModelGroup . getByTestId ( TestIds . dialogs . missingModelLocate )
309- ) . toHaveCount ( 1 )
314+ strip ,
315+ 'The strip count is scoped to the selection, diverging from the global reference badge'
316+ ) . toContainText ( '1 error' )
310317
311318 await comfyPage . canvas . click ( )
319+ await expect (
320+ strip ,
321+ 'Deselecting swaps the always-visible strip back to the summary'
322+ ) . toContainText ( '2 nodes — 1 error' )
312323 await expectReferenceBadge ( missingModelGroup , 2 )
313324 } )
314325 } )
@@ -381,7 +392,7 @@ test.describe('Errors tab - Mode-aware errors', { tag: '@ui' }, () => {
381392 await expect ( missingMediaGroup ) . toBeHidden ( )
382393 } )
383394
384- test ( 'Selecting a node filters errors tab to only that node ' , async ( {
395+ test ( 'Selecting a node keeps all media rows visible and shows selection context ' , async ( {
385396 comfyPage
386397 } ) => {
387398 await comfyPage . workflow . loadWorkflow ( 'missing/missing_media_multiple' )
@@ -403,13 +414,66 @@ test.describe('Errors tab - Mode-aware errors', { tag: '@ui' }, () => {
403414
404415 const node = await comfyPage . nodeOps . getNodeRefById ( '10' )
405416 await node . click ( 'title' )
406- await expect ( mediaRows ) . toHaveCount ( 1 )
417+
418+ // Selection no longer filters the list — rows stay global and the
419+ // selection is surfaced via the context strip instead.
420+ const strip = comfyPage . page . getByTestId (
421+ TestIds . propertiesPanel . selectionContextStrip
422+ )
423+ await expect ( strip ) . toBeVisible ( )
424+ await expect ( strip ) . toContainText ( '1 error' )
425+ await expect ( mediaRows ) . toHaveCount ( 2 )
407426
408427 await comfyPage . canvas . click ( { position : { x : 400 , y : 600 } } )
428+ // Deselecting swaps the always-visible strip back to the summary
429+ await expect ( strip ) . toContainText ( '2 nodes — 2 errors' )
409430 await expect ( mediaRows ) . toHaveCount ( 2 )
410431 } )
411432 } )
412433
434+ test . describe ( 'Selection emphasis' , ( ) => {
435+ test ( 'Selecting a node collapses unrelated groups and highlights its rows' , async ( {
436+ comfyPage
437+ } ) => {
438+ await loadWorkflowAndOpenErrorsTab (
439+ comfyPage ,
440+ 'missing/missing_nodes_and_media'
441+ )
442+
443+ const missingNodeCard = comfyPage . page . getByTestId (
444+ TestIds . dialogs . missingNodeCard
445+ )
446+ const mediaRow = comfyPage . page . getByTestId (
447+ TestIds . dialogs . missingMediaRow
448+ )
449+ const strip = comfyPage . page . getByTestId (
450+ TestIds . propertiesPanel . selectionContextStrip
451+ )
452+ await expect ( missingNodeCard ) . toBeVisible ( )
453+ await expect ( mediaRow ) . toBeVisible ( )
454+ await expect ( strip ) . toContainText ( '2 nodes — 2 errors' )
455+
456+ const mediaNode = await comfyPage . nodeOps . getNodeRefById ( '10' )
457+ // The node sits near the canvas top where overlays intercept clicks
458+ await mediaNode . centerOnNode ( )
459+ await mediaNode . click ( 'title' )
460+
461+ // The unrelated missing-node group auto-collapses while the matched
462+ // media row stays visible and is marked as part of the selection
463+ await expect ( missingNodeCard ) . toBeHidden ( )
464+ await expect ( mediaRow ) . toBeVisible ( )
465+ await expect ( mediaRow ) . toHaveAttribute ( 'aria-current' , 'true' )
466+ await expect ( strip ) . toContainText ( '1 error' )
467+
468+ await comfyPage . canvas . click ( { position : { x : 400 , y : 600 } } )
469+ // Emphasis ends: the collapsed group re-expands and the strip
470+ // returns to the workflow summary
471+ await expect ( missingNodeCard ) . toBeVisible ( )
472+ await expect ( mediaRow ) . not . toHaveAttribute ( 'aria-current' , 'true' )
473+ await expect ( strip ) . toContainText ( '2 nodes — 2 errors' )
474+ } )
475+ } )
476+
413477 test . describe ( 'Subgraph' , ( ) => {
414478 test . beforeEach ( async ( { comfyPage } ) => {
415479 await cleanupFakeModel ( comfyPage )
0 commit comments