From bfae4ce0c86c4b1d5b84bc8521d71b9f0600f132 Mon Sep 17 00:00:00 2001
From: "pulse-triage[bot]"
<249995291+pulse-triage[bot]@users.noreply.github.com>
Date: Fri, 11 Sep 2026 11:23:25 +0100
Subject: [PATCH] fix(ui): keep disk mounts in the parent scrolling flow
The nested 140px mount list relies on a thin scrollbar to reveal additional disks, which #2051 reports as invisible in Firefox. Remove that nested scroll boundary so all mounts participate in the existing outer scroll flow without changing data or global scrollbar styling.
Validate short and long lists in light/dark Firefox and Chromium fixtures, including keyboard reachability, and retain aggregate/empty-state component coverage. This is synthetic browser proof, not reporter installation acceptance.
Change-source: pulse-maintainer
---
.../subsystems/frontend-primitives.md | 11 +++
frontend-modern/browser-verification.json | 52 ++++---------
.../qualification/disks/index.html | 7 ++
frontend-modern/qualification/disks/main.tsx | 22 ++++++
.../SharedPrimitives.guardrails.test.ts | 8 ++
.../src/components/shared/cards/DisksCard.tsx | 3 +-
.../shared/cards/__tests__/DisksCard.test.tsx | 15 ++++
tests/qualification/disk-mounts/README.md | 49 ++++++++++++
tests/qualification/disk-mounts/check.mjs | 78 +++++++++++++++++++
9 files changed, 209 insertions(+), 36 deletions(-)
create mode 100644 frontend-modern/qualification/disks/index.html
create mode 100644 frontend-modern/qualification/disks/main.tsx
create mode 100644 tests/qualification/disk-mounts/README.md
create mode 100644 tests/qualification/disk-mounts/check.mjs
diff --git a/docs/release-control/v6/internal/subsystems/frontend-primitives.md b/docs/release-control/v6/internal/subsystems/frontend-primitives.md
index aa8b73c75c..de97ab6f53 100644
--- a/docs/release-control/v6/internal/subsystems/frontend-primitives.md
+++ b/docs/release-control/v6/internal/subsystems/frontend-primitives.md
@@ -20,6 +20,17 @@
## Purpose
+### Disk mount scrolling
+
+DisksCard keeps every supplied mount in its parent's scrolling flow. It must not
+cap the mount list or create a nested scroll target whose only overflow cue is
+a platform scrollbar. Large lists intentionally increase card height; aggregate
+usage, individual mount data and empty-state behaviour remain unchanged. This
+boundary is local to DisksCard, not a global scrollbar styling requirement.
+SharedPrimitives.guardrails.test.ts protects this composition; component tests
+preserve mount counts and totals. The disk-mounts qualification fixture checks
+short/long lists, themes and keyboard reachability with production CSS.
+
### Ollama credential editing
The provider panel exposes the existing Basic Auth configuration. Saved passwords
are represented by presence text, never a placeholder secret or input value.
diff --git a/frontend-modern/browser-verification.json b/frontend-modern/browser-verification.json
index 8c1e2fa553..0a4681caa6 100644
--- a/frontend-modern/browser-verification.json
+++ b/frontend-modern/browser-verification.json
@@ -1,55 +1,37 @@
{
"version": 1,
- "base_sha": "a3eab37bcd36a0a087680ece938ca862c6f4b4d9",
- "verified_at": "2026-09-10T20:31:10.676001Z",
+ "base_sha": "72809bc1cf71e2493d1f0c492b926110a969bdb4",
+ "verified_at": "2026-09-11T10:26:20.316799Z",
"result": "passed",
"changed_paths": [
- "frontend-modern/src/components/Settings/AIProviderConfigurationSection.tsx",
- "frontend-modern/src/components/Settings/aiSettingsModel.ts",
- "frontend-modern/src/components/Settings/useAISettingsState.ts",
- "frontend-modern/src/types/ai.ts"
+ "frontend-modern/src/components/shared/cards/DisksCard.tsx"
],
"content_sha256": {
- "frontend-modern/src/components/Settings/AIProviderConfigurationSection.tsx": "76f3ed93e95cbe9f24f5cd55d49aeae7397f739e6520665f1b8de074ccaeaa96",
- "frontend-modern/src/components/Settings/aiSettingsModel.ts": "9dee0d8b8bd013e870732c3893fa4742e40914ec4931a044b1698bc90f598c22",
- "frontend-modern/src/components/Settings/useAISettingsState.ts": "d4bdd6ce19279e5e243b69e9ca769436c3d88a50f243bd8241c7aeffafeb2613",
- "frontend-modern/src/types/ai.ts": "bdad2e3926976f761b2a75db03ed4473f67e73cdc60e6327f15acc6626225507"
+ "frontend-modern/src/components/shared/cards/DisksCard.tsx": "cdda554f93b7aecb925d803b0192260ef1a445065c501468a0412b824dc08028"
},
"routes": [
- "/settings/pulse-intelligence/provider",
- "/settings/system-updates",
- "/proxmox"
+ "/qualification/disks/?theme=light&count=2",
+ "/qualification/disks/?theme=dark&count=24"
],
"viewports": [
{
- "width": 1440,
- "height": 900
+ "width": 600,
+ "height": 500
},
{
- "width": 390,
- "height": 900
+ "width": 1200,
+ "height": 500
}
],
"states": [
- "Saved Ollama password with blank masked input",
- "Unrelated save preserves credentials",
- "Loading disables save and credential controls",
- "Failed save retains replacement draft, successful retry preserves whitespace and clears draft",
- "Explicit password and username clearing persists across reload",
- "Source build clears cached release offers and disables release updates",
- "Stable and preview builds retain manual update checks",
- "Live Proxmox agent identity and CPU with no source-build agent upgrade target"
+ "2 and 24 mounts in light and dark themes",
+ "No nested clipping before scrolling; all mounts remain in outer flow"
],
"interactions": [
- "Expand Ollama accordion, focus password and Tab",
- "Save unrelated option with keyboard Enter",
- "Fail replacement save then retry",
- "Clear saved credentials and reload",
- "Hover and focus disabled source update check",
- "Keyboard manual stable and preview update checks",
- "Expand and collapse Proxmox details with keyboard, reload",
- "Inspect desktop and narrow screenshots, no horizontal overflow in provider form"
+ "Focus Before disks, keyboard End then Tab",
+ "Verify final mount in viewport and After disks focused",
+ "Inspect full-page Firefox dark narrow and Chromium light desktop screenshots"
],
- "command": "node merged-ollama-browser.cjs && node merged-source-build-browser.cjs",
- "notes": "Fresh verification of merged source on isolated Vite port 5174 at 1440x900 and 390x900. Playwright uses synthetic provider, version, update and agent HTTP responses over the managed local dev backend. Credential writes are intercepted. Actual pixels inspected for provider saved, clear and reloaded states, source update controls and Proxmox detail. Evidence scripts, interaction matrix, logs and screenshots retained in machine-local issue-1913-upgrade task directory. Earlier locator failures are retained and not counted as passes. No release qualification is claimed."
+ "command": "pulse-heavy-run -- node tests/qualification/disk-mounts/check.mjs",
+ "notes": "16 synthetic production-card/CSS cases passed in Firefox142.0.1 and Chromium141.0.7390.37. Screenshots retained in lane outcome screenshots directory. No full installed drawer or reporter Firefox140 ESR reproduction claimed. Production runtime unchanged during completion repair."
}
diff --git a/frontend-modern/qualification/disks/index.html b/frontend-modern/qualification/disks/index.html
new file mode 100644
index 0000000000..9de75126e9
--- /dev/null
+++ b/frontend-modern/qualification/disks/index.html
@@ -0,0 +1,7 @@
+
+
+