Skip to content

Tray layout: zoom<->auto-fit scrollHeight mismatch (tall cards clipped at zoom >100%) + proof-harness anchor overflow #265

Description

@Finesssee

Tray layout bugs surfaced by the #261 repro rig

While running the seeded-repro investigation for #261 (seeded proof harness driving the ambient Codex provider card), two layout bugs in adjacent code turned up. Neither reproduces #261, both are confirmed numerically. They are tracked here so they aren't lost when #261 closes.

1. useTrayPanelLayout measure uses zoom-invariant scrollHeight while TrayPanel applies CSS zoom

  • apps/desktop-tauri/src/surfaces/TrayPanel.tsx applies style={{ zoom: trayScale }} on the rendered surface; useTrayPanelLayout.measure / auto-fit sizes the WIN32 window from DOM metrics (body scrollHeight + bottom offsets).
  • Measured: body scrollHeight is IDENTICAL at tray zoom 100/150/200 (800-ish px in all runs — see probe in proof-261-seed/zoom*/probe trace), but rendered visual height scales with zoom. Outcome: at tray zoom >100% the window is sized to the PRE-zoom height and tall cards are clipped below the fold; a horizontal scrollbar appears mid-flyout.
  • Repro path: apply tray zoom 150% in Settings -> Menu -> Tray panel scale (or the settings preset), open tray flyout with a tall card (e.g. Codex with long top-model + reset credits) and observe the clipped bottom content + horizontal scrollbar.
  • Suspected fix area: apps/desktop-tauri/src/hooks/useTrayPanelLayout.ts measure/apply block — multiply measured content height by the active zoom factor before clamping (or compute content height in post-scale px).
  • Evidence: proof-261-seed/zoom150-ds1/, proof-261-seed/zoom200/ capture folders in run 2026-08-06 (rects.json, panel_series.json, screenshots).

2. Proof-harness anchor point overflows work area on tall auto-fit flyouts

  • apps/desktop-tauri/src-tauri/src/proof_harness.rs anchor positioner anchors the flyout at y=252 for the default initial size; after auto-fit settles a tall panel (≥ ~790px) the bottom edge drops below the 1040px work bottom on 1920x1080 displays, clipping content against the screen edge (harness-only behavior).
  • Not user-facing under normal use — impact scoped to proof runs; fix entails re-anchoring the flyout to the selection nearest the bottom edge (justified-above-taskbar) when measured height > available space, or clamping auto-fit max-height to workBottom - anchorY - inset and letting content scroll.
  • Evidence: proof-261-seed/zoom200/rects.json (settled rect bottom y > work bottom).

Both findings are independent of the #261 Codex-tab resize-loop investigation; their triggers are orthogonal (static tall content / static anchor math).

Note: the first finding's measured probe values come from a temporary resize probe injected for investigation (cleanly reverted; no main-line diff remains). The second is observable WIN32-geometry behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions