nightly: 3 production fixes (2026-05-29) - #192
Conversation
Fixes JAVASCRIPT-NEXTJS-2N Reading Notification.permission unconditionally threw "ReferenceError: Can't find variable: Notification" inside iOS Safari WKWebView (5 events / 24h on /golf/dashboard). The existing requestPushPermission below already guards via 'Notification' in window — apply the same check before reading .permission in register(). https://claude.ai/code/session_01L5eAwNgYRoWeDj5WZ74zJt
…Sentry trace Fixes JAVASCRIPT-NEXTJS-2M Supabase's leaked-password protection rejects passwords found in known breaches with "Password is known to be weak and easy to guess". Our signupAction was falling through the unknown-error branch and calling logServerError, which paged Sentry (12 events / 24h on POST /golf/signup). Detect weak_password / "Password should…" messages specifically and surface them inline so the user sees the real reason without the noise reaching Sentry. https://claude.ai/code/session_01L5eAwNgYRoWeDj5WZ74zJt
Fixes JAVASCRIPT-NEXTJS-2F PushPermissionSoftAsk auto-mounts on the /golf/dashboard layout and opens its vaul Drawer 2s after paint. vaul's Content sits on top of Radix Dialog primitives, which emit a console.error when no DialogTitle/DrawerTitle is in the tree (4 events / 24h on /golf/dashboard, all iOS WKWebView). The sheet already had a visible "Stay in the loop" h2 — promote it to DrawerTitle so the screen-reader contract is honored and the warning stops firing. https://claude.ai/code/session_01L5eAwNgYRoWeDj5WZ74zJt
There was a problem hiding this comment.
njrini99-code has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Warning
|
Nightly Health-Check — 2026-05-29
Daily brief
24h totals (production)
/api/cron/v3/standing-refreshand/api/cron/coachhelm-roster-sweepboth 200. Two warnings frompattern-miner.thresholds(excluded per policy — tunable info logs).Top patterns (Sentry, last 24h)
[Golf Auth Error]: Password is known to be weak and easy to guess…POST /golf/signuplogServerErrorinstead of returning a form-level error.ReferenceError: Can't find variable: Notification/golf/dashboard(iOS WKWebView)use-service-worker.ts:144readsNotification.permissionwithout checking the API exists — fails in iOS Safari WKWebView contexts where the Notification global is absent.\DialogContent` requires a `DialogTitle`…`/golf/dashboard(iOS WKWebView)PushPermissionSoftAskauto-opens 2s after dashboard paint via a vaul<DrawerContent>(Radix Dialog underneath) but renders a plain<h2>instead of<DrawerTitle>, so Radix's a11y check pages console.error → Sentry./golf/dashboard/roundshelmv3-o01gtzgfn-…), not the production alias. Tracking only.An unexpected response was received from the server./golf/dashboard/my-qualifiers/golf/dashboard/my-qualifiersPerformance (pg_stat_statements)
Not collected — the Supabase MCP authentication flow failed in this remote-execution sandbox (
HTTP 403: Host not in allowlist). Recommend running/mcpinteractively to re-authorize so future nightlies can pulladmin_events,error_logs, andpg_stat_statements. No Vercel runtime errors point at slow queries, so DB health is not a blocker for tonight's fixes.Deployment health
efbfe8daa879ca572f8e0No failed deploys.
Fixes applied
1.
fix(sw): guard Notification reference for iOS WKWebView— [JAVASCRIPT-NEXTJS-2N]src/hooks/golf/use-service-worker.ts:144ReferenceError: Can't find variable: Notification× 5 (iOS Safari WKWebView)Notification.permissionunconditionally. iOS Safari WKWebView (Capacitor) drops theNotificationglobal. The siblingrequestPushPermissioncallback below was already guarding via'Notification' in window— apply the same guard at line 144 before reading.permission.2.
fix(auth): treat Supabase weak-password rejection as form error, not Sentry trace— [JAVASCRIPT-NEXTJS-2M]src/app/golf/actions/auth.ts:241-267[Golf Auth Error]: Password is known to be weak…× 12 (POST /golf/signup)validatePassworddoesn't know about HIBP, so these reach Supabase, get rejected, and fall through to thelogServerError(...)unknown-error branch, paging Sentry. Add an explicit branch that matchesweak_password/ "Password is known to be weak" / "Password should…" and returns a form-friendly error inline without Sentry capture.3.
fix(a11y): give PushPermissionSoftAsk a DrawerTitle— [JAVASCRIPT-NEXTJS-2F]src/components/golf/PushPermissionSoftAsk.tsx:98-100\DialogContent` requires a `DialogTitle`…× 4 (/golf/dashboard`, iOS WKWebView)PushPermissionSoftAskmounts on the(dashboard)layout and opens its vaul<Drawer>2s after first paint. Vaul wraps Radix Dialog, which emits a console.error (captured by Sentry) when noDialogTitleexists in the subtree. The component already had a visible<h2>Stay in the loop</h2>— promote it to<DrawerTitle>(zero visual change, fixes the a11y contract).Verification
npx tsc --noEmit— passes (no new errors).Open work the human should pick up
admin_events,error_logs,pg_stat_statements. Re-auth via/mcpto restore DB-side triage./golf/dashboard/rounds— only 2 events and the captured URL is a preview deployment (helmv3-o01gtzgfn-…), not a production alias. If it recurs against the production alias, root-cause it; for now it's tracked, not patched.my-qualifiersserver response error) — single-occurrence transients today; if they cluster tomorrow, dig into the qualifier-entries server action.https://claude.ai/code/session_01L5eAwNgYRoWeDj5WZ74zJt
Generated by Claude Code