diff --git a/frontend-modern/browser-tests/diagnostics-safety.cjs b/frontend-modern/browser-tests/diagnostics-safety.cjs index f85ba89ab8..eb1007b09b 100644 --- a/frontend-modern/browser-tests/diagnostics-safety.cjs +++ b/frontend-modern/browser-tests/diagnostics-safety.cjs @@ -259,7 +259,7 @@ const payload = { for (const button of [full, github]) assert.match( await describedBy(button), - /Nothing is uploaded.*review even a sanitised file/, + /Nothing is uploaded.*review even a sanitised file/i, ); await verifyLayout(); }, diff --git a/frontend-modern/browser-verification/7d51b51f05acd3b8.json b/frontend-modern/browser-verification/7d51b51f05acd3b8.json new file mode 100644 index 0000000000..ee85dae7ba --- /dev/null +++ b/frontend-modern/browser-verification/7d51b51f05acd3b8.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "result": "passed", + "base_sha": "d78aabaf3959aa1e7b90b94543a6a211b1062c24", + "content_sha256": { + "frontend-modern/src/utils/diagnosticsPresentation.ts": "6956ea3a37927309d840cf076a178f84e25726639316f04158c64f37e80cde9f" + }, + "changed_paths": [ + "frontend-modern/src/utils/diagnosticsPresentation.ts" + ], + "routes": [ + "Existing Settings Diagnostics through production-component fixture", + "Existing shipped Troubleshooting Docs viewer and safety-section anchor" + ], + "states": [ + "No result: no automatic request, visible and accessible live-check warnings", + "Explicit request pending: both run controls disabled", + "Displayed result: private full export and reviewed sanitised export", + "Pending refresh: export controls disabled", + "Failed refresh: original result retained, readable error toast", + "Shipped help: exact safety section, desktop and phone wrapping" + ], + "interactions": [ + "Keyboard Enter starts one explicit diagnostic request", + "Local Blob JSON downloads do not rerun diagnostics or upload", + "Sanitised download checked for identity redaction and real token/snapshot joins", + "Full download checked against unchanged synthetic displayed data", + "Touch-sized buttons, accessible descriptions and no horizontal overflow", + "Safety link opens the production Docs viewer at the exact anchor" + ], + "viewports": [ + { + "width": 1365, + "height": 900 + }, + { + "width": 390, + "height": 844 + } + ], + "verified_at": "2026-10-04T09:50:07.646466Z", + "browsers": [ + "Chromium 141.0.7390.37 desktop", + "WebKit 26.0 phone emulation; not native iOS" + ], + "command": "pulse-worker-browser frontend-modern/browser-tests/diagnostics-safety.cjs", + "proof": "Fresh complete production-component/browser pass after punctuation repair. Playwright 1.56.1 matches the integration lock; fourteen behavioral groups and ten settled screenshots inspected. All five component/model source hashes measured. Synthetic API responses and real local JSON downloads, no native API/QGA target, installed or release acceptance.", + "document_sha256": { + "docs/TROUBLESHOOTING.md": "c7e35be379e2bdcda3162f21e629b04ca474132c71c2628c851aff5bcc2ff547", + "frontend-modern/public/docs/TROUBLESHOOTING.md": "c7e35be379e2bdcda3162f21e629b04ca474132c71c2628c851aff5bcc2ff547" + }, + "verified_component_content_sha256": { + "frontend-modern/src/components/Settings/diagnosticsModel.ts": "11972278d12ffe6a0dd9bdd540c00df98f83b4038eab0620b3871112aacae451", + "frontend-modern/src/components/Settings/DiagnosticsPanel.tsx": "ad3ca811d42241f6f8bb51cebb2ff90d1daaf5d360438d4f7fa8c6d947cca975", + "frontend-modern/src/components/Settings/DiagnosticsResultsPanel.tsx": "6188a848d9dde43b91cf30ee127820e545b0f10a9dcfbd6fe90dd73a9231e6cd", + "frontend-modern/src/components/Settings/useDiagnosticsPanelState.ts": "acc6a054beb5cde80e387b1b2193712c29865c05512ae767c9e9faa821f0a2f7", + "frontend-modern/src/utils/diagnosticsPresentation.ts": "6956ea3a37927309d840cf076a178f84e25726639316f04158c64f37e80cde9f" + } +} diff --git a/frontend-modern/src/utils/__tests__/diagnosticsPresentation.test.ts b/frontend-modern/src/utils/__tests__/diagnosticsPresentation.test.ts index 5fbb4489ff..7efc91b89d 100644 --- a/frontend-modern/src/utils/__tests__/diagnosticsPresentation.test.ts +++ b/frontend-modern/src/utils/__tests__/diagnosticsPresentation.test.ts @@ -24,7 +24,9 @@ describe('diagnosticsPresentation', () => { expect(DIAGNOSTICS_PANEL_COPY.runSafety).toContain('backup, freeze/thaw'); expect(DIAGNOSTICS_PANEL_COPY.runSafety).toContain('does not prove ongoing collection'); expect(DIAGNOSTICS_PANEL_COPY.exportSafety).toContain('Nothing is uploaded'); - expect(DIAGNOSTICS_PANEL_COPY.exportSafety).toContain('review even a sanitised file'); + expect(DIAGNOSTICS_PANEL_COPY.exportSafety).toContain('Review even a sanitised file'); + expect(DIAGNOSTICS_PANEL_COPY.runSafety).not.toContain(';'); + expect(DIAGNOSTICS_PANEL_COPY.exportSafety).not.toContain(';'); }); it('exports canonical diagnostics empty-state copy', () => { diff --git a/frontend-modern/src/utils/diagnosticsPresentation.ts b/frontend-modern/src/utils/diagnosticsPresentation.ts index abe0a29f3f..1488a64e8e 100644 --- a/frontend-modern/src/utils/diagnosticsPresentation.ts +++ b/frontend-modern/src/utils/diagnosticsPresentation.ts @@ -3,9 +3,9 @@ export const DIAGNOSTICS_PANEL_COPY = { description: 'Review connection health, configuration status, and troubleshooting tools.', summary: 'Collect runtime information and check configured Proxmox and PBS connections.', runSafety: - 'Diagnostics can make live API and guest-agent requests. Do not run it during a backup, freeze/thaw or an unresponsive-host incident; keep the existing evidence instead. A successful check does not prove ongoing collection has recovered.', + 'Diagnostics can make live API and guest-agent requests. Do not run it during a backup, freeze/thaw or an unresponsive-host incident. Keep the existing evidence instead. A successful check does not prove ongoing collection has recovered.', exportSafety: - 'Downloads use the displayed result without running diagnostics again. Nothing is uploaded. Keep the full file private; review even a sanitised file for credentials, secret URLs and private host or personal information before sharing.', + 'Downloads use the displayed result without running diagnostics again. Nothing is uploaded. Keep the full file private. Review even a sanitised file for credentials, secret URLs and private host or personal information before sharing.', runActionLabel: 'Run Diagnostics', runShortLabel: 'Run', runningActionLabel: 'Running...',