You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Parent: #88
Predecessors: #235 and #250 are complete and released.
Outcome
When the signed-in Account page cannot confirm a requested Strava disconnect, show one fixed, plain refresh-before-retry message. Never inspect, render, or log the rejected provider, callable, SDK, or exception value.
This is immediate browser leak containment only. It does not claim that revocation is retry-safe, that Strava accepted a revoke, that local records were deleted, or that any source change is live.
Invariant
A rejected disconnect result is ambiguous. The browser must preserve the current connected athlete and activity view, end the busy state, and ask the member to refresh so the authoritative connection record is read again. It must not blindly claim success or encourage an immediate repeat.
Fixed public message:
We could not confirm the Strava disconnect. Please refresh this page before trying again.
Exact scope
src/pages/account/StravaSection.tsx
only the handleDisconnect rejection hunk
argument-free catch and fixed message
preserve confirmation, one callable request, rejection state, busy cleanup, and success transition
src/pages/account/Account.test.tsx
additive stravaDisconnect mock/import and one focused actual-component disconnect describe
docs/officers/EVENTS_SHOP_MEMBERS.md
separately named Strava disconnect failure privacy — SOURCE ONLY, NOT LIVE section only
Everything else is excluded, including service/Functions/Rules/root docs/lint/workflows/packages/provider/deploy/data and all #249/#246 commerce paths.
Acceptance
Old source test exposes a synthetic private canary, then passes after the correction.
Rejection shows exactly the fixed atomic alert and no rejected detail reaches DOM or five console methods.
A hostile throwing message getter is never accessed.
Connected athlete/activity remain visible and Disconnect becomes enabled after rejection.
Cancel makes no callable request and shows no alert.
Synthetic success still calls once, switches to the disconnected view, clears activity, and shows no alert.
Focused and full frontend checks, typecheck, lint safety, SPA/workflow/release/artifact checks, build, diff review, and independent security/accessibility/officer review pass.
Officer impact, officer documentation, and exact deployment truth are recorded.
Safety and deployment truth
Tests use only made-up values and mocks. Do not contact Firebase or Strava, inspect a real account, change provider configuration, or use production data. Source, tests, merge, and green CI do not prove the website, Firebase, provider, or live behavior changed.
Parent: #88
Predecessors: #235 and #250 are complete and released.
Outcome
When the signed-in Account page cannot confirm a requested Strava disconnect, show one fixed, plain refresh-before-retry message. Never inspect, render, or log the rejected provider, callable, SDK, or exception value.
This is immediate browser leak containment only. It does not claim that revocation is retry-safe, that Strava accepted a revoke, that local records were deleted, or that any source change is live.
Invariant
A rejected disconnect result is ambiguous. The browser must preserve the current connected athlete and activity view, end the busy state, and ask the member to refresh so the authoritative connection record is read again. It must not blindly claim success or encourage an immediate repeat.
Fixed public message:
We could not confirm the Strava disconnect. Please refresh this page before trying again.Exact scope
src/pages/account/StravaSection.tsxhandleDisconnectrejection hunksrc/pages/account/Account.test.tsxstravaDisconnectmock/import and one focused actual-component disconnect describedocs/officers/EVENTS_SHOP_MEMBERS.mdStrava disconnect failure privacy — SOURCE ONLY, NOT LIVEsection onlyEverything else is excluded, including service/Functions/Rules/root docs/lint/workflows/packages/provider/deploy/data and all #249/#246 commerce paths.
Acceptance
messagegetter is never accessed.Safety and deployment truth
Tests use only made-up values and mocks. Do not contact Firebase or Strava, inspect a real account, change provider configuration, or use production data. Source, tests, merge, and green CI do not prove the website, Firebase, provider, or live behavior changed.