Skip to content

fix(mobile): integrate account styling and confirmation recovery - #2611

Merged
DoodleBears merged 8 commits into
mainfrom
qa/2602-2604
Oct 22, 2026
Merged

DoodleBears merged 8 commits into
mainfrom
qa/2602-2604

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Refs #2524 · Refs #2581 · Refs #2603 · Integrates #2602 and #2604 · Integration claim

Task codex/local/01a1654c-9569-7cb3-a355-ed6c79137709 (integration only). Source ownership: codex/local/01a164b0-214b-7371-bf06-ca7c00c54137 (#2602 and initial #2604), codex/local/01a164fc-d3fd-7d10-9e86-415381f16211 (#2604 review fixes), codex/local/01a16534-c59b-7a90-b7b9-d2aa1149c60f (#2604 successor).

Why the change

The account styling and confirmation PRs conflict on the iOS Sign out row, so this integration preserves the styled control while showing the correct recovery label and confirmation after an unfinished deletion.

Special things to note

  • Merge risk: one-way door after an account action is confirmed, large blast radius — the code can be reverted, but removed credentials need re-pairing and permanent remote account deletion cannot be undone. Review account ownership provenance, stale/duplicate guards, durable local cleanup and uncertain remote outcomes. Manual, legacy and other-account connections remain.
  • The Human explicitly authorized merging this combination on 2026-10-23 JST after the handoff disclosed pending native/Human gates. This authorization covers source merge; it does not claim native acceptance, authorize deployment, device operations or actual account deletion. No new native/dependency/config inputs relative to base 3fe369353b6a9f784341f24fba9b555fa2744eab; the shared QA owner still qualifies its binary and loaded JavaScript.
  • Exact head 1e0ef7e3af5d9462385f817002b40d882459884d contains fix(mobile): color and align account action symbols #2602 620bf28da53739624bff07c3a148ea07cd6b1590 and fix(mobile): confirm account actions and clean owned connections #2604 05b20d6d3c3841a800054f26a993e8ee541391c6. Original source refs remain unchanged. Use a merge commit to preserve both source ancestries. Local mobile typecheck, lint/format/ledger and 1,265 tests passed, 9 skipped; full combined CI is required before merge.

Change outline

 iOS AccountPanel → AccountAction → native Button + Label(Text, Image)
   stable testID, danger foreground, icon slot/optical offset, locked guard
-  label = Sign out
+  label = pendingDeletion ? Clear this phone only : Sign out
   accessible name = the same visible label

 AccountHosts → consequence confirmation → captured sign-in instance
   Cancel/dismiss → no writes/requests/disconnects
   stale/duplicate/busy → refusal/no repeated effect
   Sign out → owned phone connections + local account session
   Delete → existing remote account deletion → durable completion marker
   partial/unknown outcome → retry or separately confirm local-only recovery

 account-owned connection removal
   persist removal/journal → stop owned client → clear scoped local data
   required failure → retain recovery state; success → clear local session

The product conflict resolution is one label expression against #2602's panel. All account controller, provenance, pairing-save serialization, cleanup and Android behavior stays identical to #2604. Eight added tests run the actual iOS panel through the account controller and closed in-memory fixture, with native component adapters mocked. They cover both actions, cancellation, duplicate confirmation, busy/loading and the five failure/recovery scenarios. Existing tests cover stale identity, expired credentials, restart, write failures and HostSession teardown.

Native capture blocker: this integration task has no device lease; the physical lane is occupied by Batch60 recording QA. No combined before/after native screenshots or VoiceOver qualification exist. Historical color evidence belongs to #2602, not this exact combined head. After the owner's next cut, open /qa/account-actions?scenario=success only in __DEV__ with a .dev app ID, verify fixture@example.invalid, and reset between actions. Capture English/Chinese × light/dark × default/intermediate/maximum for rows, both dialogs, Cancel, busy/loading and recovery labels. Run local-write, session-write, delete-partial, expired-retry and completion-write; confirm counter/state isolation and no repeated completed remote deletion. Batch60's Release package cannot run this fixture. Android, live-service effects and Human optical/behavior acceptance remain separate.

Exact-source handoff and verification limits. A separate HTML explainer is omitted for this integration-only conflict resolution: the owning behavior remains the original #2604 implementation, and the complete confirmation/cleanup path and exact changed expression are shown above; no new architecture or policy is introduced.

Summary by CodeRabbit

  • New Features
    • Sign out and Delete account now require separate confirmations that explain their effects.
    • Account actions remove this phone’s connections recorded as belonging to the account, while preserving manual and older unassigned pairings.
    • If deletion or local cleanup is incomplete, recovery state is retained. When the remote deletion result is unknown, you can confirm phone-only cleanup separately.
  • Improvements
    • Sign out and Delete account actions use red icons with aligned placement.
    • Pairing and account cleanup now report clearer messages when identity or recovery steps need attention.

Issue: #2581
Agent-Task: codex/local/01a164b0-214b-7371-bf06-ca7c00c54137
Issue: #2581
Agent-Task: codex/local/01a164b0-214b-7371-bf06-ca7c00c54137
Issue: #2603
Agent-Task: codex/local/01a164b0-214b-7371-bf06-ca7c00c54137
Issue: #2603
Agent-Task: codex/local/01a164fc-d3fd-7d10-9e86-415381f16211
Issue: #2603
Agent-Task: codex/local/01a164fc-d3fd-7d10-9e86-415381f16211
Combine #2602 at 620bf28 and
#2604 at 05b20d6 on main
3fe3693. Preserve the styled AccountAction
and pending-deletion label; exercise the actual iOS panel with the account
controller and closed in-memory fixture. Source owners and branches remain
unchanged. Native and Human gates remain pending.

Issue: #2524
Issue: #2581
Issue: #2603
Agent-Task: codex/local/01a1654c-9569-7cb3-a355-ed6c79137709
@DoodleBears DoodleBears added the ci:full Run the complete verification test plan for this pull request label Oct 22, 2026
@coderabbitai

coderabbitai Bot commented Oct 22, 2026

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2cd45481-0c65-4092-a3a3-aa01b38b2521
📥 Commits

Reviewing files that changed from the base of the PR and between 3fe3693 and 1e0ef7e.

⛔ Files ignored due to path filters: 24
  • .github/pr-screenshots/2601/a-d1.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/a-d2.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/a-d3.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/a-l1.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/a-l2.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/a-l3.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/b-d1.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/b-d2.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/b-d3.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/b-l1.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/b-l2.png is excluded by !**/*.png
  • .github/pr-screenshots/2601/b-l3.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/a-d1.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/a-d2.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/a-d3.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/a-l1.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/a-l2.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/a-l3.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/b-d1.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/b-d2.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/b-d3.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/b-l1.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/b-l2.png is excluded by !**/*.png
  • .github/pr-screenshots/2602/b-l3.png is excluded by !**/*.png
📒 Files selected for processing: 36
  • .github/pr-screenshots/2601/README.md
  • .github/pr-screenshots/2601/manifest.json
  • .github/pr-screenshots/2602/README.md
  • .github/pr-screenshots/2602/manifest.json
  • .github/pr-screenshots/2602/measurements.json
  • apps/mobile/app/qa/account-actions.tsx
  • apps/mobile/src/host/account-action-fixture.ts
  • apps/mobile/src/host/account-connections.ts
  • apps/mobile/src/host/account-owner.ts
  • apps/mobile/src/host/connect-account.ts
  • apps/mobile/src/host/conversation-filter.ts
  • apps/mobile/src/host/host-session.ts
  • apps/mobile/src/host/hosts.ts
  • apps/mobile/src/host/native-connect-account.ts
  • apps/mobile/src/host/native-source-drafts.ts
  • apps/mobile/src/host/saved-host.ts
  • apps/mobile/src/host/source-drafts.ts
  • apps/mobile/src/telemetry/schema.ts
  • apps/mobile/src/ui/account-hosts.tsx
  • apps/mobile/src/ui/design/tokens.ts
  • apps/mobile/src/ui/primitives/account-panel.ios.tsx
  • apps/mobile/src/ui/primitives/account-panel.tsx
  • apps/mobile/src/ui/shell/recent-chats.ts
  • apps/mobile/src/ui/shell/use-pairing.ts
  • apps/mobile/src/ui/strings.ts
  • apps/mobile/test/account-actions.test.ts
  • apps/mobile/test/account-hosts.test.tsx
  • apps/mobile/test/account-panel-ios-integration.test.tsx
  • apps/mobile/test/connect-account.test.ts
  • apps/mobile/test/conversation-filter.test.ts
  • apps/mobile/test/host-session-unpair.test.ts
  • apps/mobile/test/source-drafts.test.ts
  • changes/2581-account-action-icons.md
  • changes/2603-account-action-confirmation.md
  • docs/adr/0241-hosted-connect-reaches-the-host-through-a-managed-tunnel.md
  • docs/architecture/botharness-architecture.md
+----------------------------------+
| Code Wars Episode IV: A New Bug. |
+----------------------------------+
  \
   \     /)/)
        ( '')
        /  |
      o(___)
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@DoodleBears
DoodleBears merged commit 0f6ca29 into main Oct 22, 2026
12 of 22 checks passed
@DoodleBears
DoodleBears deleted the qa/2602-2604 branch October 22, 2026 21:07
@DoodleBears

Copy link
Copy Markdown
Contributor Author

Agent work completed — authorized account integration merge

  • Task: codex/local/01a1654c-9569-7cb3-a355-ed6c79137709; state completed for integration/source merge. Source owners retain native/functional follow-up.
  • Human explicitly instructed merge after the handoff disclosed remaining review/native/Human gates. #2611 merged normally at 0f6ca29bd99514d76b90c5018a78ebe06d33c3f3, 2026-10-22 21:07:20 UTC / 2026-10-23 06:07:20 JST. No administrator bypass used.
  • Exact tested head 1e0ef7e3af5d9462385f817002b40d882459884d, base 3fe369353b6a9f784341f24fba9b555fa2744eab; merge tree equals tested tree 84323c29aecf36cb1d722a289d448d15595ace03. Both source heads remain ancestors. GitHub automatically marked fix(mobile): color and align account action symbols #2602 and fix(mobile): confirm account actions and clean owned connections #2604 MERGED; their original branch refs remain unchanged.
  • Full CI 39853253941 PASS: static/type/build, all three test shards, mobile verification, Android module tests, docs and isolated Host smoke. Real-model E2E was skipped. Local combined mobile checks were 1,265 passed / 9 skipped. CodeRabbit was still PENDING at merge, with no posted reviews or line findings; it was not a required repository check. No automatic review approval is claimed.
  • Future account QA intake now uses main containing 0f6ca29bd99514d76b90c5018a78ebe06d33c3f3, replacing the combo branch. Safe fixture/native screenshot, VoiceOver, Android and Human optical/behavior gates remain pending. This is not Release acceptance or publication; no account operation, phone install or shared QA resource action was performed.
  • Per combo lifecycle rules, remote qa/2602-2604 was deleted only after both source PRs were merged. Exact commit, PR and private evidence remain retained; original source branches and main checkout work remain untouched. No task runtime services were started or left running. agent:active remains while other source/Release claims are active.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:full Run the complete verification test plan for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant