AuthedApp read the account's settings file inside an effect that its own
unmount canceled, and claimed the account before it started. A remount
during the load (the settings file choosing a language does it, and so
does StrictMode in dev) canceled the first run halfway, and the second
mount took the already-loaded shortcut, which set ready but never armed
the pushes. Every setting changed afterwards was silently dropped, and
reverted on the next reload or sign-in.
The load now belongs to the account rather than the mount:
loadSettingsOnce starts it once, every mount waits on the same promise,
and it runs to the end, arming pushes when it finishes. A sign-out still
stops it, through a generation check in place of the mount's flag.
Arming in the shortcut, as the report suggested, is not enough on its
own: when the remount comes before the file is read, arming there would
push this browser's settings over the account's.
Verified on the mock with no settings cache: on main the account's
language and theme are never applied in dev and a theme change is never
written; with this change both are. No new strings.
AuthedApp read the account's settings file inside an effect that its own
unmount canceled, and claimed the account before it started. A remount
during the load (the settings file choosing a language does it, and so
does StrictMode in dev) canceled the first run halfway, and the second
mount took the already-loaded shortcut, which set ready but never armed
the pushes. Every setting changed afterwards was silently dropped, and
reverted on the next reload or sign-in.
The load now belongs to the account rather than the mount:
loadSettingsOnce starts it once, every mount waits on the same promise,
and it runs to the end, arming pushes when it finishes. A sign-out still
stops it, through a generation check in place of the mount's flag.
Arming in the shortcut, as the report suggested, is not enough on its
own: when the remount comes before the file is read, arming there would
push this browser's settings over the account's.
Verified on the mock with no settings cache: on main the account's
language and theme are never applied in dev and a theme change is never
written; with this change both are. No new strings.
Fixes #23. Reported by @githubrepo.
AuthedApp read the account's settings file inside an effect that its own
unmount canceled, and claimed the account before it started. A remount
during the load (the settings file choosing a language does it, and so
does StrictMode in dev) canceled the first run halfway, and the second
mount took the already-loaded shortcut, which set ready but never armed
the pushes. Every setting changed afterwards was silently dropped, and
reverted on the next reload or sign-in.
The load now belongs to the account rather than the mount:
loadSettingsOnce starts it once, every mount waits on the same promise,
and it runs to the end, arming pushes when it finishes. A sign-out still
stops it, through a generation check in place of the mount's flag.
Arming in the shortcut, as the report suggested, is not enough on its
own: when the remount comes before the file is read, arming there would
push this browser's settings over the account's.
Verified on the mock with no settings cache: on main the account's
language and theme are never applied in dev and a theme change is never
written; with this change both are. No new strings.
Fixes#23. Reported by @githubrepo.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
AuthedApp read the account's settings file inside an effect that its own
unmount canceled, and claimed the account before it started. A remount
during the load (the settings file choosing a language does it, and so
does StrictMode in dev) canceled the first run halfway, and the second
mount took the already-loaded shortcut, which set ready but never armed
the pushes. Every setting changed afterwards was silently dropped, and
reverted on the next reload or sign-in.
The load now belongs to the account rather than the mount:
loadSettingsOnce starts it once, every mount waits on the same promise,
and it runs to the end, arming pushes when it finishes. A sign-out still
stops it, through a generation check in place of the mount's flag.
Arming in the shortcut, as the report suggested, is not enough on its
own: when the remount comes before the file is read, arming there would
push this browser's settings over the account's.
Verified on the mock with no settings cache: on main the account's
language and theme are never applied in dev and a theme change is never
written; with this change both are. No new strings.
Fixes #23. Reported by @githubrepo.