Skip to content

fix(dashboard): Versions×PDF-Matrix horizontal scrollbar machen (Till-Live-Befund)#310

Merged
TillQuandel merged 1 commit into
masterfrom
fix/pairmatrix-hscroll
Jul 15, 2026
Merged

fix(dashboard): Versions×PDF-Matrix horizontal scrollbar machen (Till-Live-Befund)#310
TillQuandel merged 1 commit into
masterfrom
fix/pairmatrix-hscroll

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Befund (Till, live am gemergten #305, master 477eb07)

In der Versions×PDF-Matrix lässt sich nicht ganz nach rechts scrollen — bei voller Versionszahl (15 Versions-Spalten + PDF-Spalte, ~1500px Mindestbreite durch nowrap/min-width) sind die hinteren Versionen nicht erreichbar.

Repro (VOR dem Fix, Playwright/firefox-1532, Port 8069, read-only-Datenkopie)

Die Matrix steckt zwar im etablierten .table-wrap (overflow-x:auto), aber die #203-P3-Media-Query gibt .table-wrap oberhalb 1200px auf overflow-x:visible frei — für die Bestandstabellen korrekt (die passen dort ohne Scroll, dafür sticky-thead), für die 16-Spalten-Matrix nie. Den Überlauf schneidet .app{overflow-x:clip} ab. Messwerte:

Viewport overflowX (Wrapper) Wrapper / Tabelle letzte Spalte (v0.3.143) scrollbar?
1440×900 visible 1162px / 1497px endet bei x=1746 (außerhalb) nein (scrollLeft unbeweglich)
1280×800 visible 1002px / 1497px x=1746 (außerhalb) nein
1100×800 auto (Basis-Wrapper) 822px / 1497px außerhalb, aber erreichbar ja

Deshalb fiel es in der #305-Sichtprüfung (1440px) nicht auf: dort wurde per Dropdown geklickt, aber nie in der Matrix selbst gescrollt. Die Delta-Tabelle des Paarvergleichs ist nicht betroffen (width:100%, wrappt; ≥1200 passt sie exakt, <1200 greift der Basis-Wrapper) — Repro-Messung im Skript enthalten, sie bleibt unangetastet.

Screenshots vorher: C:/tmp/pairview-verify/hscroll-repro-VORHER-{1440,1280,1100}.png

Fix (minimal, nur die Matrix — #203-Bestand bleibt separates Issue)

internal/dashboard/eval_dashboard.html:

  • Wrapper-Klasse pm-scroll am Matrix-.table-wrap + Regel .table-wrap.pm-scroll { overflow-x:auto; overflow-y:hidden } — hält den Scroll-Container in allen Viewport-Breiten aktiv (Spezifität (0,2,0) schlägt die Media-Query-Regel (0,1,0); der sticky-thead der Media-Query entfällt für die Matrix ohnehin, da ein Scroll-Container sein Containing-Block wäre — die Dashboard responsive: 1100px verschluckt Zeitstempel, Tabellen ohne Horizontal-Scroll, Sticky-Leiste verdeckt Tabellenköpfe #203-P3-Begründung selbst).
  • Nice-to-have (trivial geblieben): erste Spalte sticky (left:0, opaker var(--bg-card)-Hintergrund, z-index:2) — die PDF-Namen bleiben beim Scrollen lesbar. Erste Iteration hatte ein Light-Theme-Artefakt: die body.light-Zebra-Regel (Spezifität 0,3,4) schlug die sticky-Regel (0,3,1) und legte semi-transparentes rgba über die Spalte — durchgescrollte Zellen schienen in even-Zeilen durch (im Screenshot erkannt). Behoben über eine gezielte Opak-Override-Regel (0,5,4) für Zebra+Hover in genau dieser Spalte; Trade-off (Zebra-/Hover-Tint fehlt in der ersten Spalte) im CSS-Kommentar dokumentiert.

Verifikation (NACH dem Fix, aktives Scrollen via scrollLeft = scrollWidth)

Hell (1440/1280/1100) + Dunkel (1440): letzte Spalte v0.3.143 in allen Konstellationen voll sichtbar (scrollLeft == maxScroll, lastColFullyVisible: true), sticky-Spalte opak ohne Durchschein-Artefakte, 0 Page-Errors. Screenshots: C:/tmp/pairview-verify/hscroll-nachher-{LIGHT-1440,LIGHT-1280,LIGHT-1100,DARK-1440}.png

Tests / Checks

  • 1 neuer HTML-Anker-Test test_html_pair_matrix_table_has_dedicated_scroll_wrapper (RED vor dem Fix verifiziert; Muster _build_live_html() wie test_dashboard_agent_stats_empty_message.py — nie bash grep/sed wegen des gewollten NUL-Bytes).
  • NUL-Byte-Check nach jedem HTML-Edit: 1 (unverändert).
  • Volle Suite: 6028 passed, 3 skipped. ruff check + ruff format --check: clean.

…-Live-Befund)

Till-Live-Befund am gemergten #305 (master 477eb07): in der Matrix liess
sich nicht ganz nach rechts scrollen — bei voller Versionszahl (15 Spalten
+ PDF-Spalte, ~1500px Mindestbreite via nowrap/min-width) waren die
hinteren Versionen nicht erreichbar.

Ursache (Repro VOR dem Fix, Playwright/firefox-1532, echte Datenkopie):
Die Matrix steckt zwar im etablierten .table-wrap (overflow-x:auto), aber
die #203-P3-Media-Query gibt .table-wrap oberhalb 1200px auf
overflow-x:visible frei — fuer die Bestandstabellen korrekt (die passen
dort ohne Scroll, dafuer sticky-thead), fuer die Matrix nie. Der Ueberlauf
wurde von .app{overflow-x:clip} abgeschnitten. Messwerte 1440px: Wrapper
1162px, Tabelle 1497px, letzte Spalte v0.3.143 endet bei x=1746 (ausserhalb
Viewport), scrollLeft unbeweglich. 1280px analog. Unter 1200px griff der
Basis-Wrapper (auto) und es war scrollbar — deshalb fiel es in der
1440px-Sichtpruefung von #305 nicht auf (Messfehler dort: nur Dropdown-
Klicks, kein Scroll-Versuch in der Matrix selbst).

Fix (minimal, nur die Matrix — #203-Bestand unangetastet):
- Wrapper-Klasse pm-scroll: .table-wrap.pm-scroll { overflow-x:auto }
  haelt den Scroll-Container in ALLEN Viewport-Breiten aktiv (Spezifitaet
  (0,2,0) schlaegt die Media-Query-Regel (0,1,0)).
- Nice-to-have (trivial geblieben): erste Spalte (PDF-Namen) sticky
  (left:0, opaker var(--bg-card)-Hintergrund, z-index:2). Erste Iteration
  hatte ein Light-Theme-Artefakt: die body.light-Zebra-Regel (0,3,4)
  schlug die sticky-Regel (0,3,1) und legte semi-transparentes rgba ueber
  die Spalte — durchgescrollte Zellen schienen in even-Zeilen durch
  (Screenshot-Beleg). Behoben ueber gezielte Opak-Override-Regel (0,5,4)
  fuer Zebra+Hover in genau dieser Spalte; Trade-off (kein Zebra/Hover-Tint
  in der ersten Spalte) im CSS-Kommentar dokumentiert.
- Delta-Tabelle des Paarvergleichs NICHT angefasst: Repro zeigte kein
  Problem (width:100%, wrappt; >=1200 passt sie, <1200 greift der
  Basis-Wrapper).

Verifikation NACH dem Fix (aktives Scrollen via scrollLeft, hell+dunkel,
1440/1280/1100px): letzte Spalte v0.3.143 in allen Konstellationen voll
sichtbar (scrollLeft==maxScroll, lastColFullyVisible=true), sticky-Spalte
opak ohne Durchschein-Artefakte, 0 Page-Errors. Screenshots
C:/tmp/pairview-verify/hscroll-{repro,nachher}-*.png.

Tests: 1 neuer HTML-Anker-Test (RED verifiziert: pm-scroll-Klasse fehlte),
Muster test_dashboard_agent_stats_empty_message (_build_live_html, nie
bash grep/sed wegen NUL-Byte). NUL-Byte-Check nach jedem HTML-Edit: 1
(unveraendert). Volle Suite: 6028 passed, 3 skipped. ruff check + format:
clean.
@TillQuandel TillQuandel merged commit c9ab57b into master Jul 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants