文档:同步云管功能进度与现场验收记录

This commit is contained in:
songyiming committed 2026-11-10 17:53:20 +08:00
1 parent 6134d49c16
commit 5ac692724d
179 files changed
+8311 -9

No files matched your search

+144
View File
@@ -0,0 +1,144 @@
Start testing: Nov 10 09:28 CST
----------------------------------------------------------
1/4 Testing: display-guard
1/4 Test: display-guard
Command: "/usr/bin/python3" "/home/armbian/vdi-build/boot-device-auth-20261110/tests/test_display_guard.py"
Directory: /home/armbian/vdi-build/boot-device-auth-20261110/build
"display-guard" start time: Nov 10 09:28 CST
Output:
----------------------------------------------------------
.........
----------------------------------------------------------------------
Ran 9 tests in 0.110s
OK
<end of output>
Test time = 0.83 sec
----------------------------------------------------------
Test Passed.
"display-guard" end time: Nov 10 09:28 CST
"display-guard" time elapsed: 00:00:00
----------------------------------------------------------
2/4 Testing: moonlight-session
2/4 Test: moonlight-session
Command: "/home/armbian/vdi-build/boot-device-auth-20261110/build/test-moonlight-session"
Directory: /home/armbian/vdi-build/boot-device-auth-20261110/build
"moonlight-session" start time: Nov 10 09:28 CST
Output:
----------------------------------------------------------
********* Start testing of MoonlightSessionTest *********
Config: Using QtTest library 5.15.13, Qt 5.15.13 (arm64-little_endian-lp64 shared (dynamic) release build; by GCC 13.2.0), ubuntu 24.04
PASS : MoonlightSessionTest::initTestCase()
PASS : MoonlightSessionTest::parsesSplitReadyMarkers()
PASS : MoonlightSessionTest::requiresBothReadyMarkers()
PASS : MoonlightSessionTest::acceptsSeparateHardwareTestDecoder()
PASS : MoonlightSessionTest::rejectsSecondStart()
PASS : MoonlightSessionTest::reportsKioskLaunchFailure()
PASS : MoonlightSessionTest::buildsConsistentStreamArguments()
PASS : MoonlightSessionTest::selectsProfileWithoutLosingStats()
PASS : MoonlightSessionTest::rejectsInvalidDecoderOverride()
PASS : MoonlightSessionTest::cleanupTestCase()
Totals: 10 passed, 0 failed, 0 skipped, 0 blacklisted, 917ms
********* Finished testing of MoonlightSessionTest *********
<end of output>
Test time = 0.94 sec
----------------------------------------------------------
Test Passed.
"moonlight-session" end time: Nov 10 09:28 CST
"moonlight-session" time elapsed: 00:00:00
----------------------------------------------------------
3/4 Testing: desktop-list-page
3/4 Test: desktop-list-page
Command: "/home/armbian/vdi-build/boot-device-auth-20261110/build/test-desktop-list-page"
Directory: /home/armbian/vdi-build/boot-device-auth-20261110/build
"desktop-list-page" start time: Nov 10 09:28 CST
Output:
----------------------------------------------------------
********* Start testing of DesktopListPageTest *********
Config: Using QtTest library 5.15.13, Qt 5.15.13 (arm64-little_endian-lp64 shared (dynamic) release build; by GCC 13.2.0), ubuntu 24.04
PASS : DesktopListPageTest::initTestCase()
PASS : DesktopListPageTest::firstClickDisablesActionsAndBlocksDuplicate()
PASS : DesktopListPageTest::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 60ms
********* Finished testing of DesktopListPageTest *********
<end of output>
Test time = 0.11 sec
----------------------------------------------------------
Test Passed.
"desktop-list-page" end time: Nov 10 09:28 CST
"desktop-list-page" time elapsed: 00:00:00
----------------------------------------------------------
4/4 Testing: main-window-boot
4/4 Test: main-window-boot
Command: "/home/armbian/vdi-build/boot-device-auth-20261110/build/test-main-window"
Directory: /home/armbian/vdi-build/boot-device-auth-20261110/build
"main-window-boot" start time: Nov 10 09:28 CST
Output:
----------------------------------------------------------
********* Start testing of vdi::MainWindowTest *********
Config: Using QtTest library 5.15.13, Qt 5.15.13 (arm64-little_endian-lp64 shared (dynamic) release build; by GCC 13.2.0), ubuntu 24.04
PASS : vdi::MainWindowTest::initTestCase()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() This plugin does not support raise()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() This plugin does not support raise()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() This plugin does not support raise()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() This plugin does not support raise()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() vdi_device_auth_request http_status= 0 network_error= 1
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() vdi_device_auth result=waiting retry_ms= 30
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() vdi_device_auth_request http_status= 0 network_error= 1
QWARN : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() vdi_device_auth result=waiting retry_ms= 60
QINFO : vdi::MainWindowTest::offlineBootRecoversWithoutRestart() vdi_device_auth result=ready
PASS : vdi::MainWindowTest::offlineBootRecoversWithoutRestart()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support raise()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support raise()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support raise()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support raise()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth_request http_status= 403 network_error= 201
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth result=waiting retry_ms= 30
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth_request http_status= 403 network_error= 201
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth result=waiting retry_ms= 60
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth_request http_status= 403 network_error= 201
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth result=waiting retry_ms= 120
QINFO : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() vdi_device_auth result=ready
QWARN : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries() This plugin does not support propagateSizeHints()
PASS : vdi::MainWindowTest::rejectedIdentityStaysOnSelectionAndRetries()
QWARN : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() This plugin does not support raise()
QWARN : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() This plugin does not support raise()
QWARN : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() This plugin does not support raise()
QWARN : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() This plugin does not support raise()
QINFO : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() vdi_device_auth result=ready
QWARN : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap() This plugin does not support propagateSizeHints()
PASS : vdi::MainWindowTest::slowAuthenticationDoesNotOverlap()
QWARN : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin() This plugin does not support raise()
QWARN : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin() This plugin does not support raise()
QWARN : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin() This plugin does not support raise()
QWARN : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin() This plugin does not support raise()
QWARN : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin() vdi_device_auth result=waiting retry_ms= 30
PASS : vdi::MainWindowTest::invalidConfigurationNeverShowsLogin()
QWARN : vdi::MainWindowTest::localModeStillLoadsDesktops() This plugin does not support propagateSizeHints()
QWARN : vdi::MainWindowTest::localModeStillLoadsDesktops() This plugin does not support raise()
QWARN : vdi::MainWindowTest::localModeStillLoadsDesktops() This plugin does not support raise()
QWARN : vdi::MainWindowTest::localModeStillLoadsDesktops() This plugin does not support raise()
QWARN : vdi::MainWindowTest::localModeStillLoadsDesktops() This plugin does not support raise()
QINFO : vdi::MainWindowTest::localModeStillLoadsDesktops() vdi_device_auth result=ready
PASS : vdi::MainWindowTest::localModeStillLoadsDesktops()
PASS : vdi::MainWindowTest::cleanupTestCase()
Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 4104ms
********* Finished testing of vdi::MainWindowTest *********
<end of output>
Test time = 4.19 sec
----------------------------------------------------------
Test Passed.
"main-window-boot" end time: Nov 10 09:28 CST
"main-window-boot" time elapsed: 00:00:04
----------------------------------------------------------
End testing: Nov 10 09:28 CST
@@ -0,0 +1,4 @@
[1/6] Automatic MOC for target kiosk-shell
[2/4] Automatic MOC for target test-main-window
9dba9c66092aa9ccf67477b305aaefe09f52eabb8c6b30dbbcbb1ce43dc7a6a6 /home/armbian/vdi-terminal/bin/kiosk-shell
old_kiosk_pid=1789
@@ -0,0 +1,12 @@
--- Current kiosk ---
PID PPID COMMAND
12913 12912 /home/armbian/vdi-terminal/bin/kiosk-shell
DESKTOP_SESSION=vdi-kiosk
DISPLAY=:0
9dba9c66092aa9ccf67477b305aaefe09f52eabb8c6b30dbbcbb1ce43dc7a6a6 /home/armbian/vdi-terminal/bin/kiosk-shell
--- Authentication ---
vdi_device_auth result=ready
--- No host desktop processes ---
--- Boot ID unchanged ---
7ca3f9d2-9316-45cd-a490-7fc5c3db8ec4
{"http_status": 200, "authorized_desktops": [{"name": "Ubuntu", "fps": 45, "width": 2560, "height": 1440}, {"name": "Windows 10", "fps": 45, "width": 2560, "height": 1440}, {"name": "麒麟", "fps": 30, "width": 2560, "height": 1440}], "identity_file_mode": "0o600"}
@@ -0,0 +1,32 @@
{
"date": "2026-11-10",
"cause": "A failed one-shot device authentication transitioned DESKTOP_LIST to CONFIG and had no authentication retry; the first underlying network/TLS/HTTP failure was not logged.",
"changes": [
"Stay on desktop selection for authentication failure",
"Retry after completion with 2/4/8/16/30 second backoff",
"Do not load local authorization or request tickets before authentication",
"Log authentication HTTP status and network error code without credentials"
],
"ctest_groups_passed": 4,
"new_regression_scenarios": [
"offline startup and recovery without restart",
"HTTP 403 followed by authorization recovery",
"slow authentication does not overlap",
"synchronous invalid CA configuration stays on selection",
"local POC mode still loads desktops"
],
"deployed_kiosk_sha256": "9dba9c66092aa9ccf67477b305aaefe09f52eabb8c6b30dbbcbb1ce43dc7a6a6",
"previous_kiosk_sha256": "2cca9d2d183c2f34f0f6172db207649decb2799414f9443043d175bbb19d33a1",
"backup": "/home/armbian/vdi-terminal/backups/boot-device-auth-20261110/",
"live_checks": {
"device_auth": "ready",
"authorized_desktops_http": 200,
"authorized_desktops_count": 3,
"session": "vdi-kiosk",
"boot_id": "7ca3f9d2-9316-45cd-a490-7fc5c3db8ec4",
"kernel_rebooted": false,
"host_desktop_processes": false,
"selection_screenshot": "selection-page.png"
},
"power_cycle_validation": "Not performed; recovery scenarios used isolated HTTPS test platform on the box."
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

@@ -0,0 +1,13 @@
{
"checkedAt": "2026-11-10T02:36:12.594Z",
"realAPI": true,
"themes": [
"dark",
"light"
],
"mobileWidth": 390,
"createAndOwnPasswordDialogsCancelled": true,
"pageErrors": [],
"failedResponses": [],
"mutations": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@@ -0,0 +1,149 @@
{
"checkedAt": "2026-11-10T10:35:19.033192+08:00",
"realAPI": true,
"checks": [
{
"path": "/healthz",
"status": 200
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/administrators",
"status": 200
},
{
"path": "/api/v1/administrators",
"status": 201
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/administrators",
"status": 403
},
{
"path": "/api/v1/administrators/adm_069fc9f84da08f3593dccdfb4e6b2eab",
"status": 200
},
{
"path": "/api/v1/auth/me",
"status": 401
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/administrators/adm_069fc9f84da08f3593dccdfb4e6b2eab/password",
"status": 204
},
{
"path": "/api/v1/auth/me",
"status": 401
},
{
"path": "/api/v1/auth/login",
"status": 401
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/administrators/adm_069fc9f84da08f3593dccdfb4e6b2eab",
"status": 200
},
{
"path": "/api/v1/auth/me",
"status": 401
},
{
"path": "/api/v1/auth/login",
"status": 401
},
{
"path": "/api/v1/administrators/adm_069fc9f84da08f3593dccdfb4e6b2eab",
"status": 200
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/auth/password",
"status": 400
},
{
"path": "/api/v1/auth/me",
"status": 200
},
{
"path": "/api/v1/auth/password",
"status": 204
},
{
"path": "/api/v1/auth/me",
"status": 401
},
{
"path": "/api/v1/auth/me",
"status": 401
},
{
"path": "/api/v1/auth/login",
"status": 401
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/auth/logout",
"status": 204
},
{
"path": "/api/v1/administrators/adm_069fc9f84da08f3593dccdfb4e6b2eab",
"status": 200
},
{
"path": "/api/v1/auth/logout",
"status": 204
},
{
"path": "/api/v1/auth/login",
"status": 200
},
{
"path": "/api/v1/desktops",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/auth/logout",
"status": 204
}
],
"temporaryAccountRemoved": true,
"originalAdministratorAndPasswordUnchanged": true,
"desktopConfigurationAndBindingsUnchanged": true,
"managedVMIDs": [
100,
101,
102
],
"allVMsRunning": true,
"onlineTerminals": 1,
"vmMutationsPerformed": false
}
@@ -0,0 +1,20 @@
{
"time": "2026-11-10T08:42:10.235Z",
"themes": [
"dark",
"light"
],
"viewportWidths": [
1440,
390
],
"scriptErrors": [],
"failedResponses": [],
"blockedWrites": [],
"readOnlyPreflights": 2,
"batchSubmissions": 0,
"powerActions": 0,
"confirmationCancelled": true,
"emptyHistoryVerified": true,
"screenshots": 7
}
@@ -0,0 +1,19 @@
{
"date": "2026-11-10",
"goFullSuite": "passed; dedicated isolated PostgreSQL, local HTTP PVE fixture",
"goVet": "passed",
"eslint": "passed",
"typecheck": "passed",
"vitestPassed": 3,
"productionBuild": "passed",
"dockerBuildAndDeploy": "passed",
"playwrightPassed": 45,
"playwrightFailed": 0,
"livePowerWrites": 0,
"livePreflightActions": [
"start",
"shutdown",
"reboot"
],
"liveBusinessSnapshotUnchanged": true
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

@@ -0,0 +1,159 @@
{
"time": "2026-11-10T08:41:51.709569+00:00",
"scope": "live read-only preflight; power writes tested only with local PVE HTTP fixture and isolated PostgreSQL",
"powerWrites": 0,
"snapshotWrites": 0,
"hardwareWrites": 0,
"cloneRequests": 0,
"checks": [
{
"action": "start",
"eligibleCount": 0,
"skippedCount": 3,
"expiresAt": "2026-11-10T08:46:52.12093709Z",
"items": [
{
"desktopId": "desk_29cf3c79d9fc1b4a25e1bfe55c5c943f",
"name": "Ubuntu",
"vmid": 102,
"powerState": "running",
"available": false,
"code": "power_mismatch",
"message": "当前电源状态不适用此操作"
},
{
"desktopId": "desk_38010c040399376117ea116029767c25",
"name": "Windows 10",
"vmid": 100,
"powerState": "running",
"available": false,
"code": "power_mismatch",
"message": "当前电源状态不适用此操作"
},
{
"desktopId": "desk_bbec6e55af36b91f042f66df80902007",
"name": "麒麟",
"vmid": 101,
"powerState": "running",
"available": false,
"code": "power_mismatch",
"message": "当前电源状态不适用此操作"
}
]
},
{
"action": "shutdown",
"eligibleCount": 3,
"skippedCount": 0,
"expiresAt": "2026-11-10T08:47:05.604010139Z",
"items": [
{
"desktopId": "desk_29cf3c79d9fc1b4a25e1bfe55c5c943f",
"name": "Ubuntu",
"vmid": 102,
"powerState": "running",
"available": true,
"code": "ready",
"message": "可提交,执行前将再次核对"
},
{
"desktopId": "desk_38010c040399376117ea116029767c25",
"name": "Windows 10",
"vmid": 100,
"powerState": "running",
"available": true,
"code": "ready",
"message": "可提交,执行前将再次核对"
},
{
"desktopId": "desk_bbec6e55af36b91f042f66df80902007",
"name": "麒麟",
"vmid": 101,
"powerState": "running",
"available": true,
"code": "ready",
"message": "可提交,执行前将再次核对"
}
]
},
{
"action": "reboot",
"eligibleCount": 3,
"skippedCount": 0,
"expiresAt": "2026-11-10T08:47:05.741115326Z",
"items": [
{
"desktopId": "desk_29cf3c79d9fc1b4a25e1bfe55c5c943f",
"name": "Ubuntu",
"vmid": 102,
"powerState": "running",
"available": true,
"code": "ready",
"message": "可提交,执行前将再次核对"
},
{
"desktopId": "desk_38010c040399376117ea116029767c25",
"name": "Windows 10",
"vmid": 100,
"powerState": "running",
"available": true,
"code": "ready",
"message": "可提交,执行前将再次核对"
},
{
"desktopId": "desk_bbec6e55af36b91f042f66df80902007",
"name": "麒麟",
"vmid": 101,
"powerState": "running",
"available": true,
"code": "ready",
"message": "可提交,执行前将再次核对"
}
]
}
],
"site": {
"terminals": [
{
"sn": "ee621cae7199a2e9",
"agentVersion": "qt-platform/0.3.0",
"heartbeatAgeSeconds": 6.90757,
"session": null
}
],
"desktops": [
{
"vmid": 100,
"powerState": "running"
},
{
"vmid": 101,
"powerState": "running"
},
{
"vmid": 102,
"powerState": "running"
}
],
"batchCount": 0,
"batchTaskCount": 0,
"tasks": 7,
"snapshots": 0
},
"businessSnapshotUnchanged": true,
"deployment": {
"time": "2026-11-10T08:38:53.386241+00:00",
"backup": ".local/live/backups/before-batch-operations-20261110-163850.dump",
"backupBytes": 78720,
"oldImageTag": "before-batch-operations-20261110-163850",
"oldImages": {
"api": "sha256:094d38e803437d3a34041e1af36530e7f14445cd37959b6d7316dfadc3f8b062",
"console": "sha256:3b3af4559890cbe7629abd0d029f83c59f6afc23e274b5db07ba64175ae15df0"
},
"deployedAt": "2026-11-10T08:44:32.256998+00:00",
"newImages": {
"api": "sha256:326813ba972357535d34597e3b2aa794c6d5448b48f79549fe6e0792843076e6",
"console": "sha256:93a232b112ff021d8796e3b18780a5c6ece9e8f932a2203488c2329c13505d28"
}
}
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,48 @@
{
"checkedAt": "2026-11-10T02:07:43.283Z",
"realAPI": true,
"results": [
{
"route": "templates",
"theme": "dark",
"heading": "镜像模板"
},
{
"route": "pools",
"theme": "dark",
"heading": "桌面池"
},
{
"route": "desktops",
"theme": "dark",
"heading": "桌面管理"
},
{
"route": "tasks",
"theme": "dark",
"heading": "任务与审计"
},
{
"route": "templates",
"theme": "light",
"heading": "镜像模板"
},
{
"route": "pools",
"theme": "light",
"heading": "桌面池"
},
{
"route": "desktops",
"theme": "light",
"heading": "桌面管理"
},
{
"route": "tasks",
"theme": "light",
"heading": "任务与审计"
}
],
"pageErrors": [],
"failedResponses": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@@ -0,0 +1,27 @@
{
"checkedAt": "2026-11-10T10:07:32.848271+08:00",
"mode": "production",
"health": "ok",
"existingMappingsUnchanged": true,
"managedVMIDs": [
100,
101,
102
],
"allVMsRunning": true,
"onlineTerminals": 1,
"registeredTemplates": 0,
"discoveredPVETemplates": 0,
"storage": [
{
"name": "local",
"availableGiB": 10.47
},
{
"name": "local-lvm",
"availableGiB": 7.22
}
],
"poolPersistenceCheck": "create/update/empty-members/disable passed; own temporary pool removed",
"liveVMClonePerformed": false
}
@@ -0,0 +1,16 @@
{
"time": "2026-11-10T07:28:23.238Z",
"themes": [
"dark",
"light"
],
"viewportWidths": [
1440,
390
],
"scriptErrors": [],
"failedResponses": [],
"mutations": [],
"readOnlyInspection": true,
"screenshots": 8
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

@@ -0,0 +1,90 @@
{
"time": "2026-11-10T07:27:26.168155+00:00",
"vmPowerActions": 0,
"vmHardwareWrites": 0,
"cloneRequests": 0,
"connection": {
"check": true,
"blankSecretPreserved": true,
"encryptedAtRest": true,
"secretOmittedFromResponse": true,
"failedSaveKeptPriorConfig": true,
"hotReload": true,
"nodes": 1,
"vms": 3
},
"hardwareReadOnly": [
{
"vmid": 102,
"cores": 8,
"sockets": 1,
"memoryMiB": 6144,
"disks": [
{
"key": "scsi0",
"storage": "local",
"sizeGiB": 50
}
],
"runningModificationRejected": true
},
{
"vmid": 100,
"cores": 4,
"sockets": 1,
"memoryMiB": 8192,
"disks": [
{
"key": "sata0",
"storage": "local-lvm",
"sizeGiB": 60
}
],
"runningModificationRejected": true
},
{
"vmid": 101,
"cores": 2,
"sockets": 1,
"memoryMiB": 4096,
"disks": [
{
"key": "scsi0",
"storage": "local-lvm",
"sizeGiB": 50
}
],
"runningModificationRejected": true
}
],
"siteHardwarePermissions": [
{
"vmid": 102,
"cpu": false,
"memory": false,
"disk": false
},
{
"vmid": 100,
"cpu": false,
"memory": false,
"disk": false
},
{
"vmid": 101,
"cpu": false,
"memory": false,
"disk": false
}
],
"loginLimit": {
"temporaryAccount": true,
"attemptsAllowed": 10,
"attempt11Rejected": true,
"retryAfterProvided": true,
"forgedForwardingDidNotResetAccountBudget": true,
"viewerCannotReadConnection": true
},
"temporaryAccountCleaned": true,
"businessSnapshotUnchanged": true
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

@@ -0,0 +1,33 @@
{
"time": "2026-11-10T07:33:51.209149+00:00",
"vmPowerActions": 0,
"vmHardwareWrites": 0,
"cloneRequests": 0,
"encryptedConfigurationSurvivedRestart": true,
"businessSnapshotUnchanged": true,
"site": {
"terminals": [
{
"sn": "ee621cae7199a2e9",
"agentVersion": "qt-platform/0.3.0",
"lastSeen": "2026-11-10T07:33:29.003564+00:00",
"heartbeatAgeSeconds": 22.56868,
"session": null
}
],
"desktops": [
{
"vmid": 100,
"powerState": "running"
},
{
"vmid": 101,
"powerState": "running"
},
{
"vmid": 102,
"powerState": "running"
}
]
}
}
@@ -0,0 +1,11 @@
{
"goFullSuite": "passed (dedicated vdi_configuration_test only)",
"goVet": "passed",
"frontendLint": "passed",
"frontendTypes": "passed",
"frontendUnitTests": 3,
"browserRegressions": 23,
"newBrowserFlows": 6,
"dockerBuild": "passed",
"liveVMWritesInTests": 0
}
@@ -0,0 +1,20 @@
{
"time": "2026-11-10T09:10:36.285Z",
"themes": [
"dark",
"light"
],
"viewportWidths": [
1440,
390
],
"scriptErrors": [],
"failedResponses": [],
"blockedWrites": [],
"gpuWrites": 0,
"powerWrites": 0,
"verifiedGPUCount": 2,
"windowsVMReference": 100,
"partialCoverageShown": true,
"screenshots": 6
}
@@ -0,0 +1,17 @@
{
"date": "2026-11-10",
"goFullSuite": "passed; dedicated isolated PostgreSQL, local HTTP PVE fixture",
"goVet": "passed",
"eslint": "passed",
"typecheck": "passed",
"vitestPassed": 3,
"productionBuild": "passed",
"dockerBuildAndDeploy": "passed",
"playwrightPassed": 51,
"playwrightFailed": 0,
"finalGPURecheckPassed": 6,
"liveGPUWrites": 0,
"livePowerWrites": 0,
"liveBusinessSnapshotUnchanged": true,
"liveVMConfigDigestsUnchanged": true
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

@@ -0,0 +1,106 @@
{
"time": "2026-11-10T09:10:32.890463+00:00",
"scope": "read-only GPU and QEMU configuration inspection",
"inventory": {
"complete": false,
"issues": [
{
"code": "custom_vm_config",
"vmid": 100,
"message": "虚拟机包含自定义参数或宿主脚本,额外设备引用未解析"
}
],
"items": [
{
"id": "starhe:0000:00:02.0",
"address": "0000:00:02.0",
"name": "4th Gen Core Processor Integrated Graphics Controller",
"vendor": "Intel Corporation",
"vendorId": "0x8086",
"deviceId": "0x0416",
"class": "0x030000",
"iommuGroup": 0,
"state": "unknown",
"references": []
},
{
"id": "starhe:0000:01:00.0",
"address": "0000:01:00.0",
"name": "GM204M [GeForce GTX 965M]",
"vendor": "NVIDIA Corporation",
"vendorId": "0x10de",
"deviceId": "0x13d9",
"class": "0x030200",
"iommuGroup": 2,
"state": "referenced",
"references": [
{
"vmid": 100,
"vmName": "win10-test",
"vmStatus": "running",
"template": false,
"desktopId": "desk_38010c040399376117ea116029767c25",
"desktopName": "Windows 10",
"slot": "hostpci0",
"phase": "current",
"source": "direct",
"mapping": "",
"mediated": false,
"pendingRemoval": false
}
]
}
],
"node": "starhe",
"observedAt": "2026-11-10T09:10:32.294280849Z",
"scannedVmCount": 3,
"visibleVmCount": 3
},
"site": {
"terminals": [
{
"sn": "ee621cae7199a2e9",
"agentVersion": "qt-platform/0.3.0",
"heartbeatAgeSeconds": 3.650522,
"session": null
}
],
"desktops": [
{
"vmid": 100,
"powerState": "running"
},
{
"vmid": 101,
"powerState": "running"
},
{
"vmid": 102,
"powerState": "running"
}
],
"tasks": 7,
"snapshots": 0
},
"businessSnapshotUnchanged": true,
"vmConfigurationDigestsUnchanged": true,
"gpuBindingWrites": 0,
"powerWrites": 0,
"snapshotWrites": 0,
"diskWrites": 0,
"deployment": {
"time": "2026-11-10T09:02:09.266736+00:00",
"backup": ".local/live/backups/before-gpu-inventory-20261110-170206.dump",
"backupBytes": 84736,
"oldImageTag": "before-gpu-inventory-20261110-170206",
"oldImages": {
"api": "sha256:326813ba972357535d34597e3b2aa794c6d5448b48f79549fe6e0792843076e6",
"console": "sha256:93a232b112ff021d8796e3b18780a5c6ece9e8f932a2203488c2329c13505d28"
},
"deploymentVerifiedAt": "2026-11-10T09:10:50.372617+00:00",
"newImages": {
"api": "sha256:0c33d1618dc5f6ed5dd0afa0d5876f2fc22eaf94508815b90029461b77e20259",
"console": "sha256:71d16b9761d49a91a117d8a65b756a1089fec15dfbfc3f2607a0274cc7afd73c"
}
}
}
@@ -0,0 +1,329 @@
{
"config": {
"argv": [
"D:\\Nodejs\\node.exe",
"D:\\DAIMA\\vdi-cloud\\console\\node_modules\\@playwright\\test\\cli.js",
"test",
"e2e/gpus.spec.ts",
"--reporter=list,json"
],
"configFile": "D:\\DAIMA\\vdi-cloud\\console\\playwright.config.ts",
"rootDir": "D:/DAIMA/vdi-cloud/console/e2e",
"failOnFlakyTests": false,
"forbidOnly": false,
"fullyParallel": false,
"globalSetup": null,
"globalTeardown": null,
"globalTimeout": 0,
"grep": {},
"grepInvert": null,
"maxFailures": 0,
"metadata": {
"actualWorkers": 1
},
"preserveOutput": "always",
"projects": [
{
"outputDir": "D:/DAIMA/vdi-cloud/console/test-results",
"repeatEach": 1,
"retries": 0,
"metadata": {
"actualWorkers": 1
},
"id": "chromium",
"name": "chromium",
"testDir": "D:/DAIMA/vdi-cloud/console/e2e",
"testIgnore": [
"**/live.spec.ts"
],
"testMatch": [
"**/*.@(spec|test).?(c|m)[jt]s?(x)"
],
"timeout": 30000
}
],
"filteredProjects": [
{
"grep": {},
"grepInvert": null,
"outputDir": "D:\\DAIMA\\vdi-cloud\\console\\test-results",
"repeatEach": 1,
"retries": 0,
"metadata": {
"actualWorkers": 1
},
"name": "chromium",
"testDir": "D:\\DAIMA\\vdi-cloud\\console\\e2e",
"snapshotDir": "D:\\DAIMA\\vdi-cloud\\console\\e2e",
"testIgnore": "**/live.spec.ts",
"testMatch": "**/*.@(spec|test).?(c|m)[jt]s?(x)",
"timeout": 30000,
"use": {
"baseURL": "http://127.0.0.1:5183",
"trace": "retain-on-failure",
"screenshot": "only-on-failure",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/158.0.8127.18 Safari/537.36",
"viewport": {
"width": 1280,
"height": 720
},
"screen": {
"width": 1920,
"height": 1080
},
"deviceScaleFactor": 1,
"isMobile": false,
"hasTouch": false,
"defaultBrowserType": "chromium",
"channel": "msedge"
},
"dependencies": [],
"ignoreSnapshots": false,
"__projectId": "chromium"
}
],
"quiet": false,
"reporter": [
[
"list"
],
[
"json"
]
],
"reportSlowTests": {
"max": 5,
"threshold": 300000
},
"shard": null,
"tags": [],
"updateSnapshots": "default",
"updateSourceMethod": "patch",
"version": "1.65.0",
"workers": 1,
"webServer": null
},
"suites": [
{
"title": "gpus.spec.ts",
"file": "gpus.spec.ts",
"column": 0,
"line": 0,
"specs": [
{
"title": "只读角色可查显卡并筛选配置引用,IOMMU 0 保留",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 0,
"parallelIndex": 0,
"status": "passed",
"duration": 2221,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2026-11-10T09:09:05.718Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "339e1869555d4df5a70f-908a22891ab6162efd96",
"file": "gpus.spec.ts",
"line": 31,
"column": 1
},
{
"title": "详情区分当前与待应用、待移除、模板及未纳管的映射引用",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 0,
"parallelIndex": 0,
"status": "passed",
"duration": 1815,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2026-11-10T09:09:08.689Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "339e1869555d4df5a70f-033b538c63d47607bcb8",
"file": "gpus.spec.ts",
"line": 44,
"column": 1
},
{
"title": "配置读取不完整显示待核查,不宣称显卡可用",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 0,
"parallelIndex": 0,
"status": "passed",
"duration": 1589,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2026-11-10T09:09:10.527Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "339e1869555d4df5a70f-d14ca93dfc0e7b05ba08",
"file": "gpus.spec.ts",
"line": 54,
"column": 1
},
{
"title": "PCI 权限错误提供重试,数据过期有明确提示",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 0,
"parallelIndex": 0,
"status": "passed",
"duration": 1480,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2026-11-10T09:09:12.140Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "339e1869555d4df5a70f-52cbecb3930b42eec753",
"file": "gpus.spec.ts",
"line": 62,
"column": 1
},
{
"title": "浅色窄屏清单和详情可读且页面不横向溢出",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 0,
"parallelIndex": 0,
"status": "passed",
"duration": 2009,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2026-11-10T09:09:13.640Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "339e1869555d4df5a70f-f676b76941e652a2209b",
"file": "gpus.spec.ts",
"line": 69,
"column": 1
},
{
"title": "空节点清单与尚未接入显示真实空态",
"ok": true,
"tags": [],
"tests": [
{
"timeout": 30000,
"annotations": [],
"expectedStatus": "passed",
"projectId": "chromium",
"projectName": "chromium",
"results": [
{
"workerIndex": 0,
"parallelIndex": 0,
"status": "passed",
"duration": 2113,
"errors": [],
"stdout": [],
"stderr": [],
"retry": 0,
"startTime": "2026-11-10T09:09:15.677Z",
"annotations": [],
"attachments": []
}
],
"status": "expected"
}
],
"id": "339e1869555d4df5a70f-1db16c0f30c2de9beb2d",
"file": "gpus.spec.ts",
"line": 80,
"column": 1
}
]
}
],
"errors": [],
"stats": {
"startTime": "2026-11-10T09:09:04.608Z",
"duration": 14081.699,
"expected": 6,
"skipped": 0,
"unexpected": 0,
"flaky": 0
}
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,14 @@
{
"checkedAt": "2026-11-10T03:09:46.802Z",
"realAPI": true,
"themes": [
"dark",
"light"
],
"mobileWidth": 390,
"terminalAndUserEditDialogsCancelled": true,
"batchDialogCancelled": true,
"pageErrors": [],
"failedResponses": [],
"mutations": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

@@ -0,0 +1,208 @@
{
"checkedAt": "2026-11-10T11:09:02.738808+08:00",
"realAPI": true,
"checks": [
{
"path": "/healthz",
"status": 200
},
{
"path": "/api/v1/desktops",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 201
},
{
"path": "/api/v1/terminal/register",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 201
},
{
"path": "/api/v1/terminal/register",
"status": 200
},
{
"path": "/api/v1/users",
"status": 201
},
{
"path": "/api/v1/users",
"status": 201
},
{
"path": "/api/v1/terminals/term_18ea2ec00829ebe8876a29e204383145",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/users/user_1ad489582c47eb1ce87e4c03fe761dc5/bindings",
"status": 200
},
{
"path": "/api/v1/terminal/connect-ticket",
"status": 201
},
{
"path": "/api/v1/users/user_1ad489582c47eb1ce87e4c03fe761dc5",
"status": 200
},
{
"path": "/api/v1/terminal/desktops",
"status": 200
},
{
"path": "/api/v1/terminal/connect-ticket",
"status": 403
},
{
"path": "/api/v1/users/user_1ad489582c47eb1ce87e4c03fe761dc5",
"status": 200
},
{
"path": "/api/v1/terminal/connect-ticket/consume",
"status": 401
},
{
"path": "/api/v1/users/batch-bindings",
"status": 200
},
{
"path": "/api/v1/terminal/desktops",
"status": 200
},
{
"path": "/api/v1/users/batch-bindings",
"status": 200
},
{
"path": "/api/v1/terminal/desktops",
"status": 200
},
{
"path": "/api/v1/users/user_1ad489582c47eb1ce87e4c03fe761dc5/bindings",
"status": 200
},
{
"path": "/api/v1/terminal/desktops",
"status": 200
},
{
"path": "/api/v1/terminal/desktops",
"status": 200
},
{
"path": "/api/v1/users/user_4761a0e23465c4c83b712d80577af2c9/bindings",
"status": 409
},
{
"path": "/api/v1/terminals/term_18ea2ec00829ebe8876a29e204383145/disable",
"status": 200
},
{
"path": "/api/v1/terminal/heartbeat",
"status": 401
},
{
"path": "/api/v1/terminal/config",
"status": 401
},
{
"path": "/api/v1/terminal/commands",
"status": 401
},
{
"path": "/api/v1/terminals/term_18ea2ec00829ebe8876a29e204383145/reactivate",
"status": 200
},
{
"path": "/api/v1/terminals/term_18ea2ec00829ebe8876a29e204383145/reactivate",
"status": 200
},
{
"path": "/api/v1/terminal/register",
"status": 401
},
{
"path": "/api/v1/terminal/register",
"status": 200
},
{
"path": "/api/v1/terminal/register",
"status": 401
},
{
"path": "/api/v1/terminal/config",
"status": 200
},
{
"path": "/api/v1/terminal/config",
"status": 401
},
{
"path": "/api/v1/terminals/term_18ea2ec00829ebe8876a29e204383145/disable",
"status": 200
},
{
"path": "/api/v1/terminals/term_e6d8b1bff21760de08021d8ae9b42c99/disable",
"status": 200
},
{
"path": "/api/v1/auth/logout",
"status": 204
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/terminals",
"status": 200
},
{
"path": "/api/v1/desktops",
"status": 200
},
{
"path": "/api/v1/auth/logout",
"status": 204
}
],
"temporaryDevicesAndUsersRemoved": true,
"originalAdministratorAndPasswordUnchanged": true,
"originalDeviceCredentialsAndMetadataUnchanged": true,
"desktopSettingsUsersAndBindingsUnchanged": true,
"originalHeartbeatAdvanced": true,
"onlineTerminals": 1,
"managedVMIDs": [
100,
101,
102
],
"allVMsRunning": true,
"realVMReservationPerformed": false,
"realVMOrDeviceCommandsSent": false
}
@@ -0,0 +1,7 @@
{
"checkedAt": "2026-11-10T10:58:17.203679+08:00",
"backend": "go test ./... and go vet ./... passed with dedicated disposable PostgreSQL",
"frontend": "ESLint, TypeScript, 3 unit tests and production build passed",
"browser": "18 fixture tests passed (lifecycle, administrators, catalog, ui)",
"fixtureTestsSendLiveMutations": false
}
@@ -0,0 +1,7 @@
{
"backend": "Go全量集成测试、go vet;仅使用独立临时PostgreSQL",
"frontend": "ESLint、TypeScript、3项单元测试、生产构建",
"browserTests": 27,
"browserData": "API拦截测试数据,不代表现场业务资源",
"noRealVMPowerActions": true
}
@@ -0,0 +1,16 @@
{
"time": "2026-11-10T06:33:01.774Z",
"themes": [
"dark",
"light"
],
"viewportWidths": [
1440,
390
],
"scriptErrors": [],
"failedResponses": [],
"mutations": [],
"readOnlyInspection": true,
"screenshots": 9
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Loaded 100 of 179 files, more files were not shown because too many files have changed in this diff. Show more