From 9f053a4e300123bde3bed6e2dfb88b4521821e6d Mon Sep 17 00:00:00 2001 From: Fable Integrator Date: Fri, 17 Jul 2026 00:17:10 -0400 Subject: [PATCH] fix(baseball): mobile bottom-nav clip at 320/390px + clearer unhandledRejection reporting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every baseball coach route failed e2e mobile-viewport checks with '"Home" [left -2]': FairwayBottomNav's five flex-1 tab columns lacked min-w-0, so truncate never engaged, the row's content minimum exceeded the viewport, and justify-around's negative-free-space fallback centered the overflowing row — pushing the first tab 2px off-screen. Added min-w-0 to each li and Link (the More button already had it, masking the bug for one of five items). Also: unhandledRejection handler now logs the raw reason before synthesizing an Error (name 'UnhandledRejection', reason threaded into Bridge metadata) so Next dev code frames stop blaming instrumentation.ts for every non-Error rejection. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01MMdviLDsAg2YYJ8adsM6fg --- .../fairway/app-shell/FairwayBottomNav.tsx | 22 +++++++++-- src/instrumentation.ts | 39 +++++++++++++++++-- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/components/fairway/app-shell/FairwayBottomNav.tsx b/src/components/fairway/app-shell/FairwayBottomNav.tsx index 61d4b193f..4cad236cd 100644 --- a/src/components/fairway/app-shell/FairwayBottomNav.tsx +++ b/src/components/fairway/app-shell/FairwayBottomNav.tsx @@ -134,14 +134,28 @@ export const FairwayBottomNav = memo(function FairwayBottomNav({ : matchActive(item.href, pathname)); const Icon = item.icon; return ( -
  • +
  • `) — without it, a long + // label (e.g. "Development", "Messages", or a mode's + // exposureNoun) can force this column past its 1/5 share of + // a 320/390px bar, overflowing the row by a few px. Tailwind's + // `justify-around` (space-around) falls back to `center` per + // the CSS Box Alignment spec whenever the line's free space + // is negative, and centering an overflowing row shifts its + // start point negative — the exact -2px left overhang on the + // first ("Home") tab this fixes. `min-w-0` here (mirroring + // the `min-w-0` already on the More button below) lets the + // label's own `truncate` class actually engage instead. + 'group relative flex min-h-[56px] min-w-0 flex-col items-center justify-center gap-0.5 px-1 py-1.5', 'outline-none transition-colors [transition-duration:var(--fw-dur-fast)] motion-reduce:transition-none', 'focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-border-focus', active ? 'text-accent-700' : 'text-text-tertiary hover:text-text-secondary', @@ -178,7 +192,7 @@ export const FairwayBottomNav = memo(function FairwayBottomNav({ ); })} {onMoreOpen && ( -
  • +