@@ -276,6 +276,41 @@ $diagnostics = [
276276 'nestedFolderCount' => 1,
277277 'maxDepth' => 1,
278278 'updateCounts' => ['available' => 1, 'upToDate' => 1, 'unknown' => 1, 'total' => 3],
279+ 'managerCounts' => ['composeman' => 1, 'dockerman' => 1, 'unclassified' => 1],
280+ 'entityDetails' => [
281+ 'total' => 3,
282+ 'maxEntries' => 200,
283+ 'truncated' => false,
284+ 'entries' => [
285+ [
286+ 'name' => 'PlexMediaServer',
287+ 'state' => 'started',
288+ 'assigned' => true,
289+ 'manager' => 'dockerman',
290+ 'managed' => true,
291+ 'updated' => false,
292+ 'updateState' => 'available'
293+ ],
294+ [
295+ 'name' => 'SonarrStack',
296+ 'state' => 'started',
297+ 'assigned' => true,
298+ 'manager' => 'composeman',
299+ 'managed' => false,
300+ 'updated' => null,
301+ 'updateState' => 'unknown'
302+ ],
303+ [
304+ 'name' => 'LegacyTool',
305+ 'state' => 'stopped',
306+ 'assigned' => false,
307+ 'manager' => null,
308+ 'managed' => false,
309+ 'updated' => true,
310+ 'updateState' => 'upToDate'
311+ ]
312+ ]
313+ ],
279314 'folders' => [
280315 [
281316 'folderId' => 'root01',
@@ -359,6 +394,23 @@ $diagnostics = [
359394 'nestedFolderCount' => 0,
360395 'maxDepth' => 0,
361396 'updateCounts' => ['available' => 0, 'upToDate' => 0, 'unknown' => 1, 'total' => 1],
397+ 'managerCounts' => [],
398+ 'entityDetails' => [
399+ 'total' => 1,
400+ 'maxEntries' => 200,
401+ 'truncated' => false,
402+ 'entries' => [
403+ [
404+ 'name' => 'Orion VM Secret',
405+ 'state' => 'stopped',
406+ 'assigned' => false,
407+ 'manager' => null,
408+ 'managed' => false,
409+ 'updated' => null,
410+ 'updateState' => 'unknown'
411+ ]
412+ ]
413+ ],
362414 'folders' => []
363415 ]
364416 ]
@@ -515,6 +567,25 @@ test('support bundle v2 fixture exposes the exact top-level contract', () => {
515567 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . parentId , '' ) ;
516568 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . depth , 0 ) ;
517569 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 1 ] . depth , 1 ) ;
570+ assert . equal ( bundle . runtimeState . docker . entityDetails . total , 3 ) ;
571+ assert . equal ( bundle . runtimeState . docker . entityDetails . maxEntries , 200 ) ;
572+ assert . equal ( bundle . runtimeState . docker . entityDetails . truncated , false ) ;
573+ assert . equal ( bundle . runtimeState . docker . entityDetails . managerCounts . dockerman , 1 ) ;
574+ assert . equal ( bundle . runtimeState . docker . entityDetails . managerCounts . composeman , 1 ) ;
575+ assert . equal ( bundle . runtimeState . docker . entityDetails . managerCounts . unclassified , 1 ) ;
576+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . state , 'started' ) ;
577+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . assigned , true ) ;
578+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . manager , 'dockerman' ) ;
579+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . managed , true ) ;
580+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . updated , false ) ;
581+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . updateState , 'available' ) ;
582+ assert . equal ( bundle . runtimeState . vm . entityDetails . total , 1 ) ;
583+ assert . deepEqual ( bundle . runtimeState . vm . entityDetails . managerCounts , [ ] ) ;
584+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . state , 'stopped' ) ;
585+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . assigned , false ) ;
586+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . manager , null ) ;
587+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . updated , null ) ;
588+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . updateState , 'unknown' ) ;
518589 assert . equal ( bundle . runtimeState . docker . updateStateSummary . available , 1 ) ;
519590 assert . equal ( bundle . runtimeState . docker . updateStateSummary . total , 3 ) ;
520591 assert . equal ( bundle . runtimeState . vm . updateStateSummary . unknown , 1 ) ;
@@ -525,6 +596,9 @@ test('support bundle v2 fixture exposes the exact top-level contract', () => {
525596 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . folderId , 'root01' ) ;
526597 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 1 ] . folderId , 'child01' ) ;
527598 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 1 ] . parentId , 'root01' ) ;
599+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . name , 'PlexMediaServer' ) ;
600+ assert . match ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . nameHash , / ^ [ 0 - 9 a - f ] { 12 } $ / ) ;
601+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . name , 'Orion VM Secret' ) ;
528602 } else {
529603 const expandedState = bundle . pluginState . docker . prefs . expandedFolderState || { } ;
530604 const expandedKeys = Object . keys ( expandedState ) ;
@@ -545,6 +619,9 @@ test('support bundle v2 fixture exposes the exact top-level contract', () => {
545619 bundle . runtimeState . docker . folderHierarchySummary . folders [ 1 ] . parentId ,
546620 bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . folderId
547621 ) ;
622+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . name , null ) ;
623+ assert . match ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . nameHash , / ^ [ 0 - 9 a - f ] { 16 } $ / ) ;
624+ assert . equal ( bundle . runtimeState . vm . entityDetails . entries [ 0 ] . name , null ) ;
548625 }
549626 assert . equal ( Object . prototype . hasOwnProperty . call ( bundle , 'diagnostics' ) , false ) ;
550627 assert . equal ( Object . prototype . hasOwnProperty . call ( bundle , 'clientTelemetry' ) , false ) ;
@@ -599,6 +676,10 @@ test('sanitized support bundle fixture redacts paths, names, URLs, IPs, and user
599676 assert . deepEqual ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . members . items , [ ] ) ;
600677 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . members . itemHashes . length , 2 ) ;
601678 assert . match ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . members . itemHashes [ 0 ] , / ^ [ 0 - 9 a - f ] { 16 } $ / ) ;
679+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . name , null ) ;
680+ assert . match ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . nameHash , / ^ [ 0 - 9 a - f ] { 16 } $ / ) ;
681+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 2 ] . manager , null ) ;
682+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 2 ] . updateState , 'upToDate' ) ;
602683 assert . equal ( bundle . healthAndHistory . integrityFindings . docker . duplicateFolderNames . examples [ 0 ] . name , null ) ;
603684 assert . match ( bundle . healthAndHistory . integrityFindings . docker . duplicateFolderNames . examples [ 0 ] . nameHash , / ^ [ 0 - 9 a - f ] { 16 } $ / ) ;
604685 assert . deepEqual ( bundle . healthAndHistory . integrityFindings . docker . orphanedMembers . folders [ 0 ] . items , [ ] ) ;
@@ -629,6 +710,7 @@ test('sanitized support bundle fixture redacts paths, names, URLs, IPs, and user
629710 assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'system.request.userAgentHash' ) , true ) ;
630711 assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'pluginState.docker.prefs.expandedFolderState.*' ) , true ) ;
631712 assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'runtimeState.docker.folderHierarchySummary.folders.*.folderId' ) , true ) ;
713+ assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'runtimeState.docker.entityDetails.entries.*.nameHash' ) , true ) ;
632714 assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'healthAndHistory.integrityFindings.docker.orphanedMembers.folders.*.folderId' ) , true ) ;
633715 assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'healthAndHistory.recentActions.*.targetHash' ) , true ) ;
634716 assert . equal ( bundle . redactionManifest . hashedFields . includes ( 'healthAndHistory.serverLogTail.pathHash' ) , true ) ;
@@ -670,6 +752,11 @@ test('full support bundle fixture keeps raw troubleshooting fields and disables
670752 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 1 ] . parentId , 'root01' ) ;
671753 assert . equal ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . folderName , 'Plex Root Secret' ) ;
672754 assert . deepEqual ( bundle . runtimeState . docker . folderHierarchySummary . folders [ 0 ] . members . items , [ 'PlexMediaServer' , 'SonarrStack' ] ) ;
755+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . name , 'PlexMediaServer' ) ;
756+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . manager , 'dockerman' ) ;
757+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 0 ] . updated , false ) ;
758+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 2 ] . manager , null ) ;
759+ assert . equal ( bundle . runtimeState . docker . entityDetails . entries [ 2 ] . updateState , 'upToDate' ) ;
673760 assert . equal ( bundle . healthAndHistory . integrityFindings . docker . duplicateFolderNames . examples [ 0 ] . name , 'Plex Root Secret' ) ;
674761 assert . deepEqual ( bundle . healthAndHistory . integrityFindings . docker . orphanedMembers . folders [ 0 ] . items , [ 'PlexMediaServer' ] ) ;
675762 assert . equal ( bundle . healthAndHistory . recentTimeline [ 0 ] . summary , 'name=PlexMediaServer, folderId=root01, itemCount=2' ) ;
@@ -697,4 +784,10 @@ test('vm state snapshot marks all entities as unknown for update totals', () =>
697784 assert . equal ( fixture . vmStateSnapshot . updateCounts . upToDate , 0 ) ;
698785 assert . equal ( fixture . vmStateSnapshot . updateCounts . unknown , 1 ) ;
699786 assert . equal ( fixture . vmStateSnapshot . updateCounts . total , 1 ) ;
787+ assert . equal ( fixture . vmStateSnapshot . entityDetails . total , 1 ) ;
788+ assert . equal ( fixture . vmStateSnapshot . entityDetails . truncated , false ) ;
789+ assert . equal ( fixture . vmStateSnapshot . entityDetails . entries [ 0 ] . name , null ) ;
790+ assert . equal ( fixture . vmStateSnapshot . entityDetails . entries [ 0 ] . state , 'stopped' ) ;
791+ assert . equal ( fixture . vmStateSnapshot . entityDetails . entries [ 0 ] . managed , false ) ;
792+ assert . equal ( fixture . vmStateSnapshot . entityDetails . entries [ 0 ] . updateState , 'unknown' ) ;
700793} ) ;
0 commit comments