mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-03 04:38:48 +00:00
Preserve accepted History recovery and current upstream ancestry after the publication boundary detected an upstream advance. Resolve the browser receipt collision by retaining both original parent-bound records without claiming new browser execution. Change-source: pulse-maintainer
542 lines
36 KiB
JSON
542 lines
36 KiB
JSON
{
|
|
"version": 1,
|
|
"base_sha": "f3c92a242ebf9b7062dfc9f6ff711a56639f536c",
|
|
"verified_at": "2026-09-30T22:39:35Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/components/UpdateProgressModal.tsx",
|
|
"frontend-modern/src/components/updateReadinessModel.ts"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/components/UpdateProgressModal.tsx": "d51df7a98a379e313f306b68529c8db0687ff91176af23869411c4b46feb2599",
|
|
"frontend-modern/src/components/updateReadinessModel.ts": "b25bf82441fc6572b95891af48a1ed2a0e8ea1f4e583c171ea9352a1e67d76ce"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/update-progress-modal.html (production UpdateProgressModal with a scripted update stream and scripted /api/updates/status and /api/version)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"stream delivers one downloading 10% event then stays open and silent; fallback polling advances the modal through 35, 70, 80 and 90% (applying)",
|
|
"stream closed during download with a single unreachable status poll between two successful ones; download progress continues and the restart phase is never entered",
|
|
"restarting status from polling, then /api/version unreachable twice, then the new version reported; Pulse is restarting shown, then exactly one page reload",
|
|
"pre-update version unavailable (503), late polls failing and a new version plus idle answering without a restarting or completed status; modal stays on Pulse is restarting with no reload and no completion claim",
|
|
"stream delivers downloading, verifying, extracting, backing-up, applying and completed; old version answers once, becomes unreachable, then the new version; exactly one reload and no fallback polls"
|
|
],
|
|
"interactions": [
|
|
"emit scripted SSE statuses and hold the stream silent past the 6s silence window; assert the first fallback poll lands after it and the stream stays open",
|
|
"fail the stream and abort one status poll mid-download; assert no restart text ever rendered (MutationObserver) and the do-not-close warning remains",
|
|
"count document loads of the harness to assert a single reload after real restart evidence, and none without a baseline or backend confirmation",
|
|
"inspect screenshots at desktop and phone widths; assert no page errors, no horizontal overflow and the dialog inside the viewport"
|
|
],
|
|
"command": "NODE_PATH=<playwright 1.56.1 node_modules> PULSE_BROWSER_ARTIFACTS=<proof dir> PULSE_CHROMIUM_PATH=<cached chrome-headless-shell 151.0.7922.34> node frontend-modern/browser-tests/update-progress-modal.cjs from the worktree root; Vite dev server on 127.0.0.1:5208, Playwright 1.56.1, Chromium headless shell 151.0.7922.34",
|
|
"artifacts": [
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/harness-rebased-3.log",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/a-polled-90pct-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/a-polled-90pct-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/a-stream-10pct-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/a-stream-10pct-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/b-after-failed-poll-80pct-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/b-after-failed-poll-80pct-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/c-reloaded-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/c-reloaded-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/c-restarting-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/c-restarting-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/d-unconfirmed-waiting-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/d-unconfirmed-waiting-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/e-reloaded-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/e-reloaded-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/e-restarting-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/e-restarting-390.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/e-stream-applying-1365.png",
|
|
"/private/tmp/claude-501/-Users-rcourtman-Development-pulse-repos-pulse/6fb259b1-7b46-484b-80c9-554dd254295e/scratchpad/update-progress-modal-proof-rebased/e-stream-applying-390.png"
|
|
],
|
|
"notes": [
|
|
"Mock-backed UI proof of the production modal; all five scenarios passed at 1365x900 and 390x844 and the screenshots were inspected. The same harness run against the pre-fix UpdateProgressModal and updateReadinessModel (fa1d9eb36) fails scenario (a), staying on 10% (pre-fix/run.log). This does not exercise the backend SSE endpoint, a real proxy, or an installed update. Re-run after rebasing onto 8d5969fb3 (lockfile-only brace-expansion/DOMPurify floors); both full runs passed all five scenarios at both viewports with unchanged component content hashes.",
|
|
"Re-run after rebasing onto f3c92a242; all five scenarios passed at both viewports with unchanged component content hashes."
|
|
],
|
|
"prior_verifications": [
|
|
{
|
|
"version": 1,
|
|
"base_sha": "21a35494aecb335755de773dd099e1364e65b3e0",
|
|
"verified_at": "2026-09-30T20:12:09Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/components/Workloads/GuestDrawerHistory.tsx"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/components/Workloads/GuestDrawerHistory.tsx": "b2b31441b19c2e50283ceedf319cd09a1f94791750cd424c052717a4957fdc67"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/pbs-identity-boundary.html (production PBS table and real resource History renderer; synthetic API data)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"corroborated host with seven observed metric paths",
|
|
"uncached range replacement pending with no old paths",
|
|
"new range loaded before the old range response",
|
|
"withdrawn host link with replacement target pending",
|
|
"replacement target returns 503 with no former-host history",
|
|
"service-only response retains CPU/memory, not host disk/network/I/O",
|
|
"locked 14-day range issues no history read"
|
|
],
|
|
"interactions": [
|
|
"desktop keyboard Enter / phone row click to open PBS details",
|
|
"select 6h while its GET is held; select 1h, then fulfil the obsolete 6h request",
|
|
"withdraw third host link while service GET is held, then return 503",
|
|
"select 6h after failure and inspect the service-only response",
|
|
"select locked 14d; check all ten screenshots, retained History tab, zero horizontal overflow and no page errors"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/browser-tests/pbs-history-source-isolation.cjs from assigned workspace root; Vite 6.4.3, Chromium 141.0.7390.37, Playwright 1.56.1",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/receipts/history-browser-final.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/result.json",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/host-loaded-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/host-loaded-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/range-loading-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/range-loading-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/service-loaded-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/service-loaded-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/target-failed-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/target-failed-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/target-loading-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-j4h_mbv3/history-browser-final/target-loading-390.png"
|
|
],
|
|
"notes": "Ten final screenshots inspected. The superseded GET is observed ERR_ABORTED at both widths; the unit regression also resolves mocks that ignore cancellation. Mock-backed proof establishes source/range isolation, not installed PBS collection, VirtualBox telemetry, all three #1723 drawers or release availability. Earlier unconfigured-CSS red/attempt-one results are retained separately."
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "6ade01cbd4d02cd25b691f9ff5919206cceae764",
|
|
"verified_at": "2026-09-30T01:40:13Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/features/proxmox/ProxmoxBackupServersTable.tsx"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/features/proxmox/ProxmoxBackupServersTable.tsx": "ed7207456ebbc990ada34b0c739e29565d90cfe1998415a781d87f3067d69c36"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/pbs-identity-boundary.html (production PBS table, resource drawer and History with bounded synthetic resource props)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"three unlinked PBS services alongside six label/IP-colliding Agents",
|
|
"explicit backend links for two PVE guests and a standalone host, with same-Agent guest/host deduplication",
|
|
"unchanged links with host rows omitted and restored",
|
|
"withdrawn third link with real and colliding host rows still present",
|
|
"fresh exact PBS nodeName to Agent hostname match with mismatched display labels"
|
|
],
|
|
"interactions": [
|
|
"desktop keyboard disclosure and phone row activation for all three PBS drawers",
|
|
"inspect Metrics Target, reject wrong-host disks, select History and 6h/1h ranges",
|
|
"join, omit, restore and withdraw links while keeping the drawer open; verify only service History remains after withdrawal",
|
|
"24 target/layout observations; 76 History GETs, zero unrelated targets, page errors or horizontal overflow"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/browser-tests/pbs-identity-boundary.cjs; Vite 6.4.3, Playwright 1.56.1, Chromium 141.0.7390.37",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-identity-boundary.cjs",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/result.json",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/unlinked-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/linked-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/withdrawn-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/unlinked-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/linked-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-f2zda9of/pbs-browser-final-artifacts/withdrawn-390.png"
|
|
],
|
|
"notes": "All six screenshots inspected. Mock-backed UI proof, not installed topology, actual persisted host History or full #1723 relief. First browser failure retained separately; source snapshot isolation fixes that observed revocation failure."
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "c3e8b6dd6dff36b5396ba2eb147d4e58d23001a6",
|
|
"verified_at": "2026-09-29T23:04:22Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/features/proxmox/ProxmoxBackupServersTable.tsx"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/features/proxmox/ProxmoxBackupServersTable.tsx": "7172690587f8e642ee30492481abbe76ee79d277aad290c3b50310dd1c0b282b"
|
|
},
|
|
"routes": [
|
|
"/pbs-correlation-proof.html (production PBS backup-server table and resource drawer with scripted, source-scoped resources)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"three PBS services with distinct corroborated Agent links, including two PVE guests and one standalone host",
|
|
"host rows omitted in a transient refresh while the backend link is unchanged",
|
|
"third backend link withdrawn while the Agent row remains omitted"
|
|
],
|
|
"interactions": [
|
|
"open all three PBS drawers and inspect their Metrics Target identity",
|
|
"omit host rows and confirm targets stay on the correlated hosts",
|
|
"withdraw the third link and confirm its drawer returns to agent:pbs-three, with no page errors or horizontal overflow"
|
|
],
|
|
"command": "pulse-worker-browser pbs-browser-proof.cjs from assigned workspace root; Vite 6.4.3, Playwright 1.56.1, Chromium desktop/phone",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-sfkzldum/pbs-browser-proof-final.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-sfkzldum/pbs-browser-proof.cjs",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-sfkzldum/pbs-browser-proof-artifacts/pbs-1365-linked.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-sfkzldum/pbs-browser-proof-artifacts/pbs-1365-withdrawn.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-sfkzldum/pbs-browser-proof-artifacts/pbs-390-linked.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-sfkzldum/pbs-browser-proof-artifacts/pbs-390-withdrawn.png"
|
|
],
|
|
"notes": "Mock-backed proof of the real PBS table and drawer; all four screenshots inspected. It does not establish installed #1723 relief or observed Agent History series."
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "91d8822d76c5a7214995c0e370be637b6e6336e3",
|
|
"verified_at": "2026-09-29T22:13:56Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/components/shared/ContainerUpdateBadge.tsx",
|
|
"frontend-modern/src/components/shared/containerUpdateBadgeModel.ts",
|
|
"frontend-modern/src/components/shared/useContainerUpdateButtonState.ts",
|
|
"frontend-modern/src/stores/containerUpdates.ts"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/components/shared/ContainerUpdateBadge.tsx": "fd88f3e3e275926572126f43cce7296e7361b5e527868dd3c59c7eb951e9f5c9",
|
|
"frontend-modern/src/components/shared/containerUpdateBadgeModel.ts": "10bc488cb82ae84c6ae46d77ec672d34df2a1b3c28e138ae0f3b4214cccbe37e",
|
|
"frontend-modern/src/components/shared/useContainerUpdateButtonState.ts": "4b9dd4a42549b0433a1afa56f26183fe721c80626f823fb3c8489934721267c5",
|
|
"frontend-modern/src/stores/containerUpdates.ts": "b5d47132f7daf7f14bcc38462043288fc211344410af622ada7728694bcd514d"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/update-action-receipt.html (production Docker update button with scripted action reads)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"governed update receipt pending after registry updateAvailable becomes false",
|
|
"existing action re-opened by GET with no second plan or execute",
|
|
"recorded completed action after a second GET changes the displayed outcome"
|
|
],
|
|
"interactions": [
|
|
"inspect pending button and absence of a Current or Completed claim",
|
|
"select Review action and inspect receipt-pending dialog",
|
|
"select Check for receipt and inspect recorded completion",
|
|
"assert both action requests are GET; no page errors or horizontal overflow"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/browser-tests/update-action-receipt.cjs from assigned workspace root; Vite 6.4.3, Chromium 141.0.7390.37, Playwright 1.56.1",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-browser-final.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-proof-final/pending-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-proof-final/review-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-proof-final/completed-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-proof-final/pending-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-proof-final/review-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-ahrmjhme/update-action-receipt-proof-final/completed-390.png"
|
|
],
|
|
"notes": "Mock-backed UI proof; six screenshots inspected, including pending and completed phone states. This does not establish installed behaviour or resolve #1891."
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "fbf17b271abe70ad3e12042506b52f85b6cbc484",
|
|
"verified_at": "2026-09-29T19:50:45Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/pages/Actions.tsx"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/pages/Actions.tsx": "30e862ecc5125f07cf93f0c1e0b5f58efa023f5fdb56fe4b01721bf9a453e7ce"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/action-review-navigation.html (production Actions page with scripted action reads)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"detail for edge-a held while edge-b is selected and rendered",
|
|
"late edge-a response cannot replace edge-b review or URL",
|
|
"pending receipt re-read finishes after edge-b review closes"
|
|
],
|
|
"interactions": [
|
|
"select edge-a then edge-b before the first detail response arrives",
|
|
"release older response and inspect current review at desktop and phone widths",
|
|
"start same-action receipt GET, close review, release response; no dialog reopens",
|
|
"assert all scripted API requests are GET and no horizontal overflow or page errors"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/browser-tests/action-review-navigation.cjs from assigned workspace root; Vite 6.4.3, Chromium 141.0.7390.37, Playwright 1.56.1",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-rkmwqerp/action-review-navigation-browser.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-rkmwqerp/action-review-navigation-proof/newest-review-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-rkmwqerp/action-review-navigation-proof/newest-review-390.png"
|
|
],
|
|
"notes": "Mock-backed navigation proof of production Actions page; screenshots inspected. No update was executed, no installed or reporter result established."
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "c2f7aa8b471d6cbb858e8ec71b4e664fded6549c",
|
|
"verified_at": "2026-09-29T19:09:52Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/features/actions/ActionReviewDialog.tsx"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/features/actions/ActionReviewDialog.tsx": "9a4af522484b42e37b118e8bfde7c1673122037a54b8bfed249818ba644e6b81"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/action-receipt-wait.html (mock-backed production ActionReviewDialog)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"fresh executing/receipt_pending, including after a same-action re-read",
|
|
"failed status re-read with unknown outcome preserved",
|
|
"completed action after a recorded receipt"
|
|
],
|
|
"interactions": [
|
|
"desktop pointer and phone keyboard Check for receipt",
|
|
"GET same action under pending, read error and completion; no POST",
|
|
"desktop and phone layout and horizontal-overflow checks"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/browser-tests/action-receipt-wait.cjs from assigned workspace root; Vite 6.4.3, Chromium 141.0.7390.37, Playwright 1.56.1",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-browser.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-proof/pending-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-proof/read-error-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-proof/completed-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-proof/pending-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-proof/read-error-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-kp_huwb7/action-receipt-proof/completed-390.png"
|
|
],
|
|
"notes": "Production dialog mounted with synthetic recent action data and mocked same-action GET. Both desktop and phone showed explicit receipt-pending/unknown outcome guidance, a non-mutating status refresh, a safe read error, and recorded completion; screenshots inspected. This is not an installed action or reporter retest."
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "498e2b12a22510520f9df7a510105d6775ea0522",
|
|
"verified_at": "2026-09-29T16:42:43Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/features/proxmox/ProxmoxBackupServersTable.tsx",
|
|
"frontend-modern/src/types/resource.ts"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/features/proxmox/ProxmoxBackupServersTable.tsx": "fc3c71f792c91abe62475be2a341fbedc729dd079b31e2245b5769f969fa6b12",
|
|
"frontend-modern/src/types/resource.ts": "4e3b64a3799aad0d357b9d8898dd2daf9a557e05c529df3650d2f6d03eb8ca56"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/pbs-mixed-source-1723.html (mock-backed current ProxmoxBackupServersTable)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"PBS API + corroborated Agent with token-auth nodeName absent",
|
|
"same-host PVE API joined alongside a PVE-only name collision",
|
|
"correlated host row temporarily omitted",
|
|
"correlated host row restored"
|
|
],
|
|
"interactions": [
|
|
"desktop disclosure-button keyboard focus and Enter; phone row click",
|
|
"open History and select 24h, 6h, 1h and 12h across topology changes",
|
|
"join PVE API, omit host row, restore host row"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/node_modules/proof-pbs-1723.cjs from assigned workspace root; Vite 6.4.3, Chromium 141.0.7390.37, Playwright 1.56.1",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/core-runtime-8wlxxg93/proof-pbs-1723.cjs",
|
|
"/var/lib/pulse-maintainer/worker-outputs/core-runtime-8wlxxg93/browser-run.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/core-runtime-8wlxxg93/browser-proof-1723/result.json",
|
|
"/var/lib/pulse-maintainer/worker-outputs/core-runtime-8wlxxg93/browser-proof-1723/joined-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/core-runtime-8wlxxg93/browser-proof-1723/joined-390.png"
|
|
],
|
|
"notes": "Fresh offline browser run on supplied main 498e2b12a2 plus unchanged #1723 runtime repair. At desktop and phone widths, History stayed selected with eight plotted paths through initial PBS + Agent, same-host PVE join, transient host omission and restoration. All eight captured history requests targeted agent:agent-uuid, never the PBS service key; joined screenshots were visually inspected. Mock-backed proof is not installed, second-topology or reporter acceptance.",
|
|
"preserved_candidate_source": "25d6ab2e7a23adf3c74e0c071dfd40e799d2d83d"
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "fcbb7e58ad514ac146f666f49075039d40d829e2",
|
|
"verified_at": "2026-09-29T12:15:52Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/components/Settings/RelaySettingsPanel.tsx",
|
|
"frontend-modern/src/components/Settings/settingsHeaderMeta.ts",
|
|
"frontend-modern/src/components/Settings/settingsNavCatalog.ts",
|
|
"frontend-modern/src/components/Settings/useRelaySettingsPanelState.ts",
|
|
"frontend-modern/src/features/alerts/AlertPushDestinationsSection.tsx",
|
|
"frontend-modern/src/features/alerts/tabs/DestinationsTab.tsx",
|
|
"frontend-modern/src/i18n/messages.de.ts",
|
|
"frontend-modern/src/i18n/messages.es.ts",
|
|
"frontend-modern/src/i18n/messages.ts",
|
|
"frontend-modern/src/utils/alertDestinationsPresentation.ts",
|
|
"frontend-modern/src/utils/licensePresentation.ts",
|
|
"frontend-modern/src/utils/relayPresentation.ts",
|
|
"frontend-modern/src/utils/selfHostedFeatureCatalog.generated.ts",
|
|
"frontend-modern/src/utils/selfHostedPlans.ts"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/components/Settings/RelaySettingsPanel.tsx": "1def33d23464ed3e0a6127e75f16e7da814c9ca7d8fc6a680532fbef05e67755",
|
|
"frontend-modern/src/components/Settings/settingsHeaderMeta.ts": "4847df256a489833c5836e0babcd651ea85d640a204288979f965bda4ff7432b",
|
|
"frontend-modern/src/components/Settings/settingsNavCatalog.ts": "d4832713b84d88033fa15211342b6ff8a243e20c56732c5431aed8e10b22e9c2",
|
|
"frontend-modern/src/components/Settings/useRelaySettingsPanelState.ts": "56525ac9bd0f3634adea1cccbc53c557caed8faad223f48d788c074ab2fa8a86",
|
|
"frontend-modern/src/features/alerts/AlertPushDestinationsSection.tsx": "3a160748f1bd0f42ba412757ca919803a440ad8afb0a946d0d5807188c4bc5a0",
|
|
"frontend-modern/src/features/alerts/tabs/DestinationsTab.tsx": "1e07af69a4f4268601f8227500e79eb6a827c49f7b0d62b283129ff5fa2935f9",
|
|
"frontend-modern/src/i18n/messages.de.ts": "2daa6b5a6bb2a59bf7846fa2f93310a48065fe7bc3082777cbb51c2fd5f107e2",
|
|
"frontend-modern/src/i18n/messages.es.ts": "7052ac4596ef1d36b46935f1bf451f552aee87abe45e23840b3e9d570b215205",
|
|
"frontend-modern/src/i18n/messages.ts": "42c6798b32c5647c89a9f658b40e605773d85e5478a4b889bc0469ef3b2efe8e",
|
|
"frontend-modern/src/utils/alertDestinationsPresentation.ts": "82980cfc35fab1e91c5484b75e1bc3b84f6c2234e26ed5306b4583e89da3f880",
|
|
"frontend-modern/src/utils/licensePresentation.ts": "3573f465207e64e2984c5f18dc89f644b6a88de6e124779840714b01f572e3d6",
|
|
"frontend-modern/src/utils/relayPresentation.ts": "9a0d1000d91e307d31b7176be7d4529a150f7364fd913a4b379e2c96a3aa9e1c",
|
|
"frontend-modern/src/utils/selfHostedFeatureCatalog.generated.ts": "64baf62ae41b9832381ac2a91f7c9724131e765f2493cb894efabeed2ae16d0e",
|
|
"frontend-modern/src/utils/selfHostedPlans.ts": "5efab41402fa3409f307398d5feb3b8ccdbf16ac01d6ce0cdacc3024c640b970"
|
|
},
|
|
"routes": [
|
|
"/settings/system-relay",
|
|
"/alerts/notifications",
|
|
"/settings/pulse-intelligence/billing/plan",
|
|
"/settings/system-general"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1024,
|
|
"height": 768
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"Licensed instance (MSP test license from the offline issuer, relay capability present): Settings > Pulse Mobile shows 'Pair Pulse Mobile' with the 31 March 2027 retirement copy, the 'Allow Pulse Mobile connections' toggle, no Remote Access wording and no upgrade prompt",
|
|
"Licensed instance: Alerts > Notifications shows the Mobile push notifications panel with retirement copy, minimum-severity control and the 'Open Pulse Mobile settings' link",
|
|
"Licensed instance: Plans & Billing lists the relay feature as 'Pulse Relay (Mobile Connection)' with no Remote Access or remote web access wording",
|
|
"Community instance (no license): Alerts > Notifications has no Mobile push panel and no Relay upsell while webhook, email and Apprise destinations remain",
|
|
"Community instance: settings navigation has no Pulse Mobile or Remote Access item; the direct /settings/system-relay route shows the retirement message with no upgrade link",
|
|
"Community instance: Plans & Billing shows the Community plan with no Relay plan card or remote web access copy"
|
|
],
|
|
"interactions": [
|
|
"Activated the offline issuer test license through /api/license/activate on the licensed stack and confirmed relay in /api/license/entitlements",
|
|
"Loaded /settings/system-relay and /alerts/notifications on the licensed stack at 1024px and 390px, checked the toggle and settings link stay inside the viewport with no horizontal overflow",
|
|
"Loaded /alerts/notifications, /settings/system-general, /settings/system-relay and /settings/system/billing/plan on the Community stack and checked nav items, panels and links"
|
|
]
|
|
},
|
|
{
|
|
"version": 1,
|
|
"base_sha": "781cbfa98e04d7f83f0acb0bd45996a7a0de3bf3",
|
|
"verified_at": "2026-09-30T22:01:47Z",
|
|
"result": "passed",
|
|
"changed_paths": [
|
|
"frontend-modern/src/components/Workloads/GuestDrawerHistory.tsx",
|
|
"frontend-modern/src/hooks/createNonSuspendingQuery.ts"
|
|
],
|
|
"content_sha256": {
|
|
"frontend-modern/src/components/Workloads/GuestDrawerHistory.tsx": "102bfe19203a3a333397c3a33f408ff40e43331c0b39bc399e548fcb28814903",
|
|
"frontend-modern/src/hooks/createNonSuspendingQuery.ts": "64401ad5317013604145f9a1d3ccff74342e3810ea8b2288d86f940a9ba0de79"
|
|
},
|
|
"routes": [
|
|
"/browser-tests/pbs-history-refresh.html (direct production GuestDrawerHistory and shared query; synthetic host/service API responses, not the complete PBS table/drawer)"
|
|
],
|
|
"viewports": [
|
|
{
|
|
"width": 1365,
|
|
"height": 900
|
|
},
|
|
{
|
|
"width": 390,
|
|
"height": 844
|
|
}
|
|
],
|
|
"states": [
|
|
"light/dark current host history",
|
|
"real 30-second poll fails while matching points remain explicitly labelled",
|
|
"keyboard retry held with busy/activation guard and retained points",
|
|
"successful retry keeps keyboard focus and updates the same control",
|
|
"real background polling supersedes a slow foreground read and settles loading",
|
|
"late aborted response cannot replace current paths",
|
|
"uncached service-target failure has neither former-host points nor a collecting claim",
|
|
"service-target retry renders CPU/memory only",
|
|
"locked range exposes no read or refresh action"
|
|
],
|
|
"interactions": [
|
|
"Enter retry twice while its GET is held; exactly one retry read starts",
|
|
"fulfil retry; inspect warning removal, changed paths and retained focus",
|
|
"hold manual refresh across the real polling interval; inspect loading settlement and aborted read",
|
|
"switch to service target, fail its GET, retry the same key, select locked 14d"
|
|
],
|
|
"command": "pulse-worker-browser frontend-modern/browser-tests/pbs-history-refresh.cjs --phone; then the same command without --phone, from assigned workspace root. Native polling timers, Vite 6.4.3, Chromium 141.0.7390.37, Playwright 1.56.1 (integration-lock parity verified).",
|
|
"artifacts": [
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/receipts/renderer-browser-phone.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/receipts/renderer-browser-desktop.log",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/receipts/browser-phone-result.json",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/receipts/browser-desktop-result.json",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/refresh-failed-dark-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/refresh-failed-dark-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/refresh-failed-light-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/refresh-failed-light-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/replacement-failed-dark-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/replacement-failed-dark-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/replacement-failed-light-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/replacement-failed-light-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/retry-recovered-dark-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/retry-recovered-dark-390.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/retry-recovered-light-1365.png",
|
|
"/var/lib/pulse-maintainer/worker-outputs/web-product-jybdl1pm/browser-final/retry-recovered-light-390.png"
|
|
],
|
|
"notes": "All 12 final screenshots inspected. These are direct production-renderer and real query proofs, not containing-build #1723 acceptance, screen-reader announcement quality, or a complete PBS drawer/browser update journey. Earlier broader fixture/copy/cache/timeout failures are retained in the outcome receipts; no broad pass is claimed. A diagnostic stage label was clarified after desktop launch; no tested runtime content or assertions changed."
|
|
}
|
|
]
|
|
}
|