SettingsViewModel.kt:102: app-lock disable runs Keystore deleteKey()+session.lock() on Main dispatcher (AppLockViewModel wraps the same in withContext(default)) — inconsistent threading.
AppLockGateHost.kt:72: app content stays in the semantics tree behind the lock cover — an accessibility service (TalkBack) may traverse occluded mailbox/compose nodes while locked; add a semantics gate on the covered subtree.
ReaderViewModel.kt:116: toggleStar optimistic update never reconciled on failure (star stays toggled, no rollback/error).
OnboardingViewModel.kt:34: firstAddedAccountId not in SavedStateHandle → process-kill mid-onboarding (battery-settings excursion) lands on unfiltered mailbox (defeats #30).
RichTextEditor.kt:265: toolbar re-parses whole body + ~10 scans per keystroke (hot path); wrap in remember(value)/derivedStateOf.
AccountSetupViewModel.kt:58: a normal OAuth cancel is surfaced as an error snackbar — should be a no-op.
MailboxViewModel.kt:131: search re-pages the local list per keystroke (documented intentional); could debounce the pager query.
Phase-3 review — below-the-cut LOW findings (Backlog):
- `SettingsViewModel.kt:102`: app-lock disable runs Keystore `deleteKey()`+`session.lock()` on Main dispatcher (AppLockViewModel wraps the same in withContext(default)) — inconsistent threading.
- `AppLockGateHost.kt:72`: app content stays in the semantics tree behind the lock cover — an accessibility service (TalkBack) may traverse occluded mailbox/compose nodes while locked; add a semantics gate on the covered subtree.
- `ReaderViewModel.kt:116`: `toggleStar` optimistic update never reconciled on failure (star stays toggled, no rollback/error).
- `OnboardingViewModel.kt:34`: `firstAddedAccountId` not in SavedStateHandle → process-kill mid-onboarding (battery-settings excursion) lands on unfiltered mailbox (defeats #30).
- `RichTextEditor.kt:265`: toolbar re-parses whole body + ~10 scans per keystroke (hot path); wrap in remember(value)/derivedStateOf.
- `AccountSetupViewModel.kt:58`: a normal OAuth cancel is surfaced as an error snackbar — should be a no-op.
- `MailboxViewModel.kt:131`: search re-pages the local list per keystroke (documented intentional); could debounce the pager query.
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.
Phase-3 review — below-the-cut LOW findings (Backlog):
SettingsViewModel.kt:102: app-lock disable runs KeystoredeleteKey()+session.lock()on Main dispatcher (AppLockViewModel wraps the same in withContext(default)) — inconsistent threading.AppLockGateHost.kt:72: app content stays in the semantics tree behind the lock cover — an accessibility service (TalkBack) may traverse occluded mailbox/compose nodes while locked; add a semantics gate on the covered subtree.ReaderViewModel.kt:116:toggleStaroptimistic update never reconciled on failure (star stays toggled, no rollback/error).OnboardingViewModel.kt:34:firstAddedAccountIdnot in SavedStateHandle → process-kill mid-onboarding (battery-settings excursion) lands on unfiltered mailbox (defeats #30).RichTextEditor.kt:265: toolbar re-parses whole body + ~10 scans per keystroke (hot path); wrap in remember(value)/derivedStateOf.AccountSetupViewModel.kt:58: a normal OAuth cancel is surfaced as an error snackbar — should be a no-op.MailboxViewModel.kt:131: search re-pages the local list per keystroke (documented intentional); could debounce the pager query.