Skip to content

fix(mobile): theme action sheets and make org-pair seed idempotent - #6377

Open
iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7
Open

iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7

Conversation

@iscekic

@iscekic iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • Action sheets across the app now follow the current theme instead of rendering a light list in dark mode.
  • In dark mode, sheet option text, titles, messages, and destructive labels use the app palette.
  • The account picker on Profile shows each organization once instead of repeating the same row many times.

Changelog for maintainers

  • useThemedActionSheetOptions() is the new shared base for every action sheet: card container, foreground option text, muted title and message, destructive color, and the bottom safe-area inset.
  • Every showActionSheetWithOptions call spreads the base first, so per-call options still override it.
  • pickAgentAttachments and pickAgentPicture take the themed options as a third argument; showSessionActionMenu takes themedSheet instead of bottomInset.
  • iOS delegates to native ActionSheetIOS, which ignores these style fields; tintColor is deliberately unset so iOS buttons keep native coloring.
  • The dev seed app:w4c-org-pair is now idempotent: it deletes prior [seed:w4c-org-pair] organizations and their dependent rows before recreating one pair, so reruns no longer accumulate the repeated org rows the finding showed.
  • No copy changed: the English label is already "Personal", and no catalog was touched, so the reported 'Personaí' header is not reproduced.
  • Where to look first: the shared sheet hook, then the security-agent repository filter, whose sheet previously carried no styling at all.
  • Tests cover the new contract through mounted palette assertions and updated call signatures.

E2E proof

[e1] Seed the account state, sign in, open Profile and tap the account picker: 'Personal', exactly one '[seed:w4c-org-pair] …' organization row, 'Cancel' — no duplicates — android emulator-5554; SCENE digest of the 'Select account' sheet shows 'Personal', exactly one '[seed:w4c-org-pair] e2e-org-owner-explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7@example.com' row and 'Cancel' (e1-account-picker.log), with the DB source beside it: 1 org with the prefix and the signed-in account's sole membership is that same org; no duplicates, no UX defect in the digest (the scenario's named owner e2e-mobile-cloud-android@example.com is the explorer's original account — the pack header's seeded org for this worktree is the e2e-org-owner one and the header…

[e1] Seed the account state, sign in, open Profile and tap the account picker: 'Personal', exactly one '[seed:w4c-org-pair] …' organization row, 'Cancel' — no duplicates — prior/e1-account-picker.png

[e1] dark-mode account picker renders the app dark palette with one org row — Re-ran parked replay e1 on android/emulator-5554 with system dark mode on (e1-darkmode.log: 'Night mode: yes'); e1-scene.log shows 'SCENE e1 OK' with the sheet digest line 'android.view.ViewGroup index="2" ... content-desc="Select account"', and e1-scene.xml carries inside the sheet title 'Select account' (line 219), 'Personal' (line 222), exactly one '[seed:w4c-org-pair] ...' org row (line 225) and 'Cancel' (line 228); e1-org-rows.log shows the same single org row in the DB, so the duplicated-row defect is gone; the dark-palette look is in e1.png, judged by the visual reviewer.

[e1] dark-mode account picker renders the app dark palette with one org row — e2e-mobile-app/e1.png

[e2] With the device in system dark mode, the same account-picker sheet renders the app's dark palette (dark card background, light option text, muted 'Select account' title) instead of a white list — android emulator-5604, system dark mode on at capture time (e2-account-picker-dark.log: Switch "Dark theme" [checked] [ref=e16], re-confirmed after the captures); Profile > account selector opened the sheet with android.view.ViewGroup "Select account" [ref=e38], options Personal / one org / Cancel, and the scripted replay passed (SCENE e2 OK in e2-scene.log); the sheet's 1 org row matches the 1 fixture-prefix org in the DB (e2-account-picker-dark.log). The palette is a visual claim owned by the visual reviewer (e2.png, e2-account-picker-dark.png, e2-profile-dark.png). No behavioural UX…

[e2] With the device in system dark mode, the same account-picker sheet renders the app's dark palette (dark card background, light option text, muted 'Select account' title) instead of a white list — prior/e2-account-picker-dark.png

[e2] With the device in system dark mode, the same account-picker sheet renders the app's dark palette (dark card background, light option text, muted 'Select account' title) instead of a white list

[e2] With the device in system dark mode, the same account-picker sheet renders the app's dark palette (dark card background, light option text, muted 'Select account' title) instead of a white list — prior/e2-profile-dark.png

E2E proof — log excerpts

[e1] dark-mode account picker renders the app dark palette with one org row -> pass :: Re-ran parked replay e1 on android/emulator-5554 with system dark mode on (e1-darkmode.log: 'Night mode: yes'); e1-scene.log shows 'SCENE e1 OK' with the sheet digest line 'android.view.ViewGroup index="2" ... content-desc="Select account"', and e1-scene.xml carries inside the sheet title 'Select account' (line 219), 'Personal' (line 222), exactly one '[seed:w4c-org-pair] ...' org row (line 225) and 'Cancel' (line 228); e1-org-rows.log shows the same single org row in the DB, so the duplicated-row defect is gone; the dark-palette look is in e1.png, judged by the visual reviewer.
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7/e2e-mobile-app/e1-scene.log
android.widget.Button Code Reviewer, Automatic PR reviews tappable [55,1081][1025,1225]
android.widget.TextView Code Reviewer tappable [189,1109][933,1155]
android.widget.TextView Automatic PR reviews tappable [189,1159][933,1196]
android.widget.Button Security Agent, Find and remediate vulnerabilities tappable [55,1252][1025,1395]
android.widget.TextView Security Agent tappable [189,1280][933,1326]
android.widget.TextView Find and remediate vulnerabilities tappable [189,1330][933,1367]
android.widget.TextView REVIEWS tappable [55,1450][1025,1494]
android.widget.Button PR Review, Review pull requests on mobile tappable [55,1522][1025,1665]
android.widget.TextView PR Review tappable [189,1550][933,1596]
android.widget.TextView Review pull requests on mobile tappable [189,1600][933,1637]
android.widget.TextView APP tappable [55,1719][1025,1763]
android.widget.Button Preferences, Appearance, notifications, thinking, and screen behavior tappable [55,1791][1025,1935]
android.widget.TextView Preferences tappable [189,1819][933,1865]
android.widget.TextView Appearance, notifications, thinking, and screen behavior tappable [189,1869][933,1906]
android.widget.Button Tutorial tappable [55,1962][1025,2096]
android.widget.TextView Tutorial tappable [189,2006][933,2052]
android.widget.TextView LINKED ACCOUNTS tappable [55,2151][1025,2153]
android.view.View Home, tab, 1 of 3 tappable [0,2195][360,2337]
android.widget.TextView HOME tappable [13,2281][347,2320]
android.view.View Agents, tab, 2 of 3 tappable [360,2195][720,2337]
android.widget.TextView AGENTS tappable [373,2281][707,2320]
android.view.View Profile, tab, 3 of 3 tappable [720,2195][1080,2337]
android.widget.TextView PROFILE tappable [733,2281][1067,2320]
android.view.ViewGroup Select account tappable [0,0][1080,2400]
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7/e2e-mobile-app/e1-darkmode.log
=== system night mode (adb cmd uimode night) ===
Night mode: yes
=== device ===
35
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7/e2e-mobile-app/e1-org-rows.log
[seed:w4c-org-pair] e2e-org-owner-explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7@example.com
Owner request

Explorer finding: org-picker-duplicated: The org picker lists the same organization row roughly thirteen times in a raw, unstyled light serif list that ignores the app's dark theme, and its header renders as 'Personaí' rather than 'Personal'.

The user-agent explorer found this while using the app like a user.
One finding per item; the explorer never edits product code.

Flow: org-picker-duplicated
Found on revision: 59ef790

Repro:

  1. set this state first: account e2e-mobile-cloud-android@example.com signed in via emailed code, $10 credits, a second organization (member e2e-org-1789816095@example.com), 3 Code Reviewer pull requests, system night mode, display 1080x2400, density 480, portrait.; the device in dark mode
  2. open the app on emulator-5554
  3. reach the screen the capture names (org-picker-duplicated)
  4. the capture shows the defect named below

Observed: The org picker lists the same organization row roughly thirteen times in a raw, unstyled light serif list that ignores the app's dark theme, and its header renders as 'Personaí' rather than 'Personal'.
Expected: the screen renders without this defect

Evidence (from the device run):

Follow-ups (not changed here)

  • not proved live: Run 'pnpm dev:seed app:w4c-org-pair ' twice back-to-back against the dev DB: the number of organizations whose name starts with '[seed:w4c-org-pair]' stays 1 after the second run (no capture cited it)
  • not proved live: Seed the account state (owner e2e-mobile-cloud-android@example.com + second org), sign in, open Profile and tap the account picker: the sheet lists 'Personal', exactly one '[seed:w4c-org-pair] e2e-mobile-cloud-android@example.com' organization row, and 'Cancel' — no duplicates (no capture cited it)

Open findings (not fixed here)

  • not proved live: org-picker-duplicated.png is no longer on the host that took it, so no publish can carry it

e2

@iscekic
iscekic marked this pull request as draft September 19, 2026 15:44
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 79fe60b to d70bbec Compare September 19, 2026 17:01
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from d70bbec to d23a723 Compare September 19, 2026 17:44
@iscekic

iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Cross-platform fix. Pushed d23a723 (kwf kwf-fix-platform-a23a).

What changed:

  • The root action-sheet provider sets useCustomActionSheet, so both platforms render through the library instead of native ActionSheetIOS.
  • The shared themed options add autoFocus: true and useModal: true to keep the sheet focused and visible above modal screens.
  • ThemedActionSheetOptions now includes autoFocus and useModal.
  • A mounted test asserts a single action-sheet provider with the custom renderer on iOS and Android.
  • Account-sheet tests now cover iOS and Android with light and dark palettes.
  • The live-region assertion stays Android-only because the platform lacks the capability.
  • Where to look first: the root action-sheet provider, then the shared action-sheet hook.
  • Review hint: iOS sheet rendering moves from the native system sheet to the custom renderer; check focus and modal stacking.

@iscekic
iscekic marked this pull request as ready for review September 19, 2026 18:14
Comment thread dev/seed/app/w4c-org-pair.ts Outdated
Comment thread apps/mobile/src/lib/hooks/use-themed-action-sheet.ts Outdated
@kilo-code-bot

kilo-code-bot Bot commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

The only change since the previous review is the removal of the now-unreferenced dev/seed/lib/w4c-org-pair-fixture.ts module and its test, which resolves the prior warning; the 32 action-sheet files are unchanged and no new defects were found in changed code.

Files Reviewed (32 files)
  • apps/mobile/src/components/agents/attachment-picker.test.ts
  • apps/mobile/src/components/agents/attachment-picker.ts
  • apps/mobile/src/components/agents/attachment-preview-strip.mounted.test.tsx
  • apps/mobile/src/components/agents/attachment-preview-strip.tsx
  • apps/mobile/src/components/agents/chat-composer.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.mounted.test.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.tsx
  • apps/mobile/src/components/agents/file-part-renderer.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/app-root-providers.action-sheet.mounted.test.tsx
  • apps/mobile/src/components/app-root-providers.tsx
  • apps/mobile/src/components/context-control.mounted.test.tsx
  • apps/mobile/src/components/context-control.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.mounted.test.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.tsx
  • apps/mobile/src/components/kilo-chat/conversation-row.tsx
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-message-actions.ts
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-options-sheet.ts
  • apps/mobile/src/components/kilo-chat/message-input-attachment-queue.tsx
  • apps/mobile/src/components/organization/invited-member-row.tsx
  • apps/mobile/src/components/organization/member-row.tsx
  • apps/mobile/src/components/pr-review/discussion/comment-row.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.tsx
  • apps/mobile/src/lib/auth/passkey-client.test.ts
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.mounted.test.tsx
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts
Previous Review Summaries (7 snapshots, latest commit cec611a)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit cec611a)

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

The mobile action-sheet theming is consistent and complete across all 32 call sites, but the branch was rebased onto main and the newly added dev/seed/lib/w4c-org-pair-fixture.ts plus its test are now unreferenced, so that part of the seed change is inert.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
dev/seed/lib/w4c-org-pair-fixture.ts 7 New module and its test are not imported by any non-test code; the seed imports ../lib/w4c-org-pair, so the added code never runs.
Files Reviewed (34 files)
  • apps/mobile/src/components/agents/attachment-picker.test.ts
  • apps/mobile/src/components/agents/attachment-picker.ts
  • apps/mobile/src/components/agents/attachment-preview-strip.mounted.test.tsx
  • apps/mobile/src/components/agents/attachment-preview-strip.tsx
  • apps/mobile/src/components/agents/chat-composer.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.mounted.test.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.tsx
  • apps/mobile/src/components/agents/file-part-renderer.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/app-root-providers.action-sheet.mounted.test.tsx
  • apps/mobile/src/components/app-root-providers.tsx
  • apps/mobile/src/components/context-control.mounted.test.tsx
  • apps/mobile/src/components/context-control.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.mounted.test.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.tsx
  • apps/mobile/src/components/kilo-chat/conversation-row.tsx
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-message-actions.ts
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-options-sheet.ts
  • apps/mobile/src/components/kilo-chat/message-input-attachment-queue.tsx
  • apps/mobile/src/components/organization/invited-member-row.tsx
  • apps/mobile/src/components/organization/member-row.tsx
  • apps/mobile/src/components/pr-review/discussion/comment-row.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.tsx
  • apps/mobile/src/lib/auth/passkey-client.test.ts
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.mounted.test.tsx
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts
  • dev/seed/lib/w4c-org-pair-fixture.test.ts
  • dev/seed/lib/w4c-org-pair-fixture.ts - 1 issue

Fix these issues in Kilo Cloud

Previous review (commit cb48d3f)

Status: 4 Issues Found | Recommendation: Address before merge

Executive Summary

The org-pair seed's idempotency cleanup cannot match the Acme Corp rows the pre-PR seed wrote (its inserts left created_by_kilo_user_id NULL), so the reported duplicate org rows survive reruns; the remaining findings are a latent documented-vs-actual spread-order inversion and two test-hygiene gaps.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 3
Issue Details (click to expand)

WARNING

File Line Issue
dev/seed/app/w4c-org-pair.ts 94 Cleanup matches Acme Corp by created_by_kilo_user_id, but the pre-PR seed never set that column, so its accumulated rows (NULL creator) match neither cleanup arm and are never deleted; the same generic name also over-matches non-seed orgs the owner created.

SUGGESTION

File Line Issue
apps/mobile/src/lib/hooks/use-themed-action-sheet.ts 19 Contract says the base is spread first so call sites override, but every call site spreads ...themedSheet last, so the theme wins on collisions; latent today but misleading for the next caller.
apps/mobile/src/components/context-control.mounted.test.tsx 216 Palette case mutates the hoisted appearance.colors mock without restoring it, making the suite order-dependent.
apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx 122 New themed-sheet mock is never exercised by an assertion, so the security-agent filter sheet the PR styles has no test coverage.
Files Reviewed (36 files)
  • apps/mobile/src/components/agents/attachment-picker.test.ts
  • apps/mobile/src/components/agents/attachment-picker.ts
  • apps/mobile/src/components/agents/attachment-preview-strip.mounted.test.tsx
  • apps/mobile/src/components/agents/attachment-preview-strip.tsx
  • apps/mobile/src/components/agents/chat-composer.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.mounted.test.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.tsx
  • apps/mobile/src/components/agents/file-part-renderer.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/app-root-providers.action-sheet.mounted.test.tsx
  • apps/mobile/src/components/app-root-providers.tsx
  • apps/mobile/src/components/context-control.mounted.test.tsx - 1 issue
  • apps/mobile/src/components/context-control.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.mounted.test.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.tsx
  • apps/mobile/src/components/kilo-chat/conversation-row.tsx
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-message-actions.ts
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-options-sheet.ts
  • apps/mobile/src/components/kilo-chat/message-input-attachment-queue.tsx
  • apps/mobile/src/components/organization/invited-member-row.tsx
  • apps/mobile/src/components/organization/member-row.tsx
  • apps/mobile/src/components/pr-review/discussion/comment-row.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx - 1 issue
  • apps/mobile/src/components/security-agent/dashboard-screen.tsx
  • apps/mobile/src/lib/auth/passkey-client.test.ts
  • apps/mobile/src/lib/case-guard.test.ts
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.mounted.test.tsx
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts - 1 issue
  • dev/seed/app/w4c-org-pair.ts - 1 issue
  • dev/seed/lib/w4c-org-pair-fixture.test.ts
  • dev/seed/lib/w4c-org-pair-fixture.ts

Fix these issues in Kilo Cloud

Previous review (commit a625ab9)

Status: No Issues Found | Recommendation: Merge

The previous review base (906c720d) is not an ancestor of HEAD (a625ab9), so this run reviewed the full current PR diff. The change is a mechanical action-sheet theming refactor plus a seed-cleanup scoping fix; I verified every showActionSheetWithOptions call site spreads themedSheet last (so per-call options still win), the hook keeps a stable useMemo identity over the module-stable theme colors, ActionSheetIOS-only paths are untouched, the seed cleanup deletes dependents before the org, and no changed code adds listeners or subscriptions that could leak.

Files Reviewed (36 files)
  • apps/mobile/src/components/agents/attachment-picker.test.ts
  • apps/mobile/src/components/agents/attachment-picker.ts
  • apps/mobile/src/components/agents/attachment-preview-strip.mounted.test.tsx
  • apps/mobile/src/components/agents/attachment-preview-strip.tsx
  • apps/mobile/src/components/agents/chat-composer.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.mounted.test.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.tsx
  • apps/mobile/src/components/agents/file-part-renderer.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/app-root-providers.action-sheet.mounted.test.tsx
  • apps/mobile/src/components/app-root-providers.tsx
  • apps/mobile/src/components/context-control.mounted.test.tsx
  • apps/mobile/src/components/context-control.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.mounted.test.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.tsx
  • apps/mobile/src/components/kilo-chat/conversation-row.tsx
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-message-actions.ts
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-options-sheet.ts
  • apps/mobile/src/components/kilo-chat/message-input-attachment-queue.tsx
  • apps/mobile/src/components/organization/invited-member-row.tsx
  • apps/mobile/src/components/organization/member-row.tsx
  • apps/mobile/src/components/pr-review/discussion/comment-row.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.tsx
  • apps/mobile/src/lib/auth/passkey-client.test.ts
  • apps/mobile/src/lib/case-guard.test.ts
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.mounted.test.tsx
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts
  • dev/seed/app/w4c-org-pair.ts
  • dev/seed/lib/w4c-org-pair-fixture.test.ts
  • dev/seed/lib/w4c-org-pair-fixture.ts

Previous review (commit 906c720)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The rebased commit keeps useThemedActionSheetOptions() on a stable useMemo identity and scopes the seed cleanup to the owner-embedded name; I found no changed-code defects and no memory leaks across the 36 changed files.

Files Reviewed (36 files)
  • apps/mobile/src/components/agents/attachment-picker.test.ts
  • apps/mobile/src/components/agents/attachment-picker.ts
  • apps/mobile/src/components/agents/attachment-preview-strip.mounted.test.tsx
  • apps/mobile/src/components/agents/attachment-preview-strip.tsx
  • apps/mobile/src/components/agents/chat-composer.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.mounted.test.tsx
  • apps/mobile/src/components/agents/chat-markdown-text.tsx
  • apps/mobile/src/components/agents/file-part-renderer.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/app-root-providers.action-sheet.mounted.test.tsx
  • apps/mobile/src/components/app-root-providers.tsx
  • apps/mobile/src/components/context-control.mounted.test.tsx
  • apps/mobile/src/components/context-control.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.mounted.test.tsx
  • apps/mobile/src/components/home/new-task-from-picture-button.tsx
  • apps/mobile/src/components/kilo-chat/conversation-row.tsx
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-message-actions.ts
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-options-sheet.ts
  • apps/mobile/src/components/kilo-chat/message-input-attachment-queue.tsx
  • apps/mobile/src/components/organization/invited-member-row.tsx
  • apps/mobile/src/components/organization/member-row.tsx
  • apps/mobile/src/components/pr-review/discussion/comment-row.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx
  • apps/mobile/src/components/security-agent/dashboard-screen.tsx
  • apps/mobile/src/lib/auth/passkey-client.test.ts
  • apps/mobile/src/lib/case-guard.test.ts
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.mounted.test.tsx
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts
  • dev/seed/app/w4c-org-pair.ts
  • dev/seed/lib/w4c-org-pair-fixture.test.ts
  • dev/seed/lib/w4c-org-pair-fixture.ts

Previous review (commit 2d74612)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental commit makes useThemedActionSheetOptions() return a useMemo value keyed on the stable module color constant and the safe-area inset, resolving the prior identity-churn suggestion, and adds a mounted test covering palette and inset changes.

Files Reviewed (2 files)
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts - 0 issues (previous SUGGESTION resolved: useMemo now stabilizes identity across renders while theme/inset are unchanged)
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.mounted.test.tsx - 0 issues

Previous review (commit af5a408)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
apps/mobile/src/lib/hooks/use-themed-action-sheet.ts 22 useThemedActionSheetOptions() returns a fresh object literal each render, so the themedSheet value added to call-site useCallback dependency arrays defeats that memoization. Carried over from the previous review; the author rejected it as non-blocking, and no behavior change is proven.
Files Reviewed (3 files)
  • dev/seed/app/w4c-org-pair.ts - 0 issues (previous WARNING resolved: cleanup now scopes to the exact [seed:w4c-org-pair] <owner-email> name instead of the whole fixture prefix)
  • dev/seed/lib/w4c-org-pair-fixture.ts - 0 issues
  • dev/seed/lib/w4c-org-pair-fixture.test.ts - 0 issues

Fix these issues in Kilo Cloud

Previous review (commit d23a723)

Status: 2 Issues Found | Recommendation: Address before merge

Executive Summary

The action-sheet theming refactor correctly covers every showActionSheetWithOptions call site, but the shared hook returns a fresh object every render (breaking the memoization it is wired into) and the seed cleanup deletes fixture orgs across owners. No memory leaks were found in the changed code.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
dev/seed/app/w4c-org-pair.ts 75 Prefix-only cleanup deletes fixture orgs belonging to other owners/harnesses

SUGGESTION

File Line Issue
apps/mobile/src/lib/hooks/use-themed-action-sheet.ts 22 New object identity every render defeats useCallback memoization at every call site
Files Reviewed (33 files)
  • apps/mobile/src/components/agents/attachment-picker.test.ts - 0 issues
  • apps/mobile/src/components/agents/attachment-picker.ts - 0 issues
  • apps/mobile/src/components/agents/attachment-preview-strip.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/attachment-preview-strip.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-composer.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-markdown-text.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-markdown-text.tsx - 0 issues
  • apps/mobile/src/components/agents/file-part-renderer.tsx - 0 issues
  • apps/mobile/src/components/agents/new-session-screen-body.tsx - 0 issues
  • apps/mobile/src/components/agents/remote-session-row.tsx - 0 issues
  • apps/mobile/src/components/agents/session-detail-content.tsx - 0 issues
  • apps/mobile/src/components/agents/session-row-actions.test.ts - 0 issues
  • apps/mobile/src/components/agents/session-row-actions.ts - 0 issues
  • apps/mobile/src/components/agents/session-row.tsx - 0 issues
  • apps/mobile/src/components/app-root-providers.action-sheet.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/app-root-providers.tsx - 0 issues
  • apps/mobile/src/components/context-control.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/context-control.tsx - 0 issues
  • apps/mobile/src/components/home/new-task-from-picture-button.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/home/new-task-from-picture-button.tsx - 0 issues
  • apps/mobile/src/components/kilo-chat/conversation-row.tsx - 0 issues
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-message-actions.ts - 0 issues
  • apps/mobile/src/components/kilo-chat/hooks/use-conversation-options-sheet.ts - 0 issues
  • apps/mobile/src/components/kilo-chat/message-input-attachment-queue.tsx - 0 issues
  • apps/mobile/src/components/organization/invited-member-row.tsx - 0 issues
  • apps/mobile/src/components/organization/member-row.tsx - 0 issues
  • apps/mobile/src/components/pr-review/discussion/comment-row.tsx - 0 issues
  • apps/mobile/src/components/security-agent/dashboard-screen.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/security-agent/dashboard-screen.tsx - 0 issues
  • apps/mobile/src/lib/auth/passkey-client.test.ts - 0 issues
  • apps/mobile/src/lib/case-guard.test.ts - 0 issues
  • apps/mobile/src/lib/hooks/use-themed-action-sheet.ts - 1 issue
  • dev/seed/app/w4c-org-pair.ts - 1 issue

Fix these issues in Kilo Cloud


Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic marked this pull request as draft September 19, 2026 18:24
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from eb62854 to af5a408 Compare September 19, 2026 19:04
@iscekic
iscekic marked this pull request as ready for review September 19, 2026 19:14
@iscekic
iscekic marked this pull request as draft September 19, 2026 19:23
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from af5a408 to 2d74612 Compare September 19, 2026 19:55
@iscekic
iscekic marked this pull request as ready for review September 19, 2026 20:03
@iscekic

iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: Run 'pnpm dev:seed app:w4c-org-pair ' twice back-to-back against the dev DB: the number of organizations whose name starts with '[seed:w4c-org-pair]' stays 1 after the second run (no capture cited it)

A repeated proof run rebuilds the same evidence, so no proof run is dispatched for a named gap. Merging with this gap open is your decision.

@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 19, 2026
@iscekic iscekic self-assigned this Sep 19, 2026
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 2d74612 to 906c720 Compare September 19, 2026 23:18
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 906c720 to a625ab9 Compare September 20, 2026 18:11

@eshurakov eshurakov left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved after a shallow triage pass. Note: bundles org-pair seed idempotency plus passkey/case-guard test edits worth splitting out. #6377 subsumes #6455.

@iscekic iscekic added the merge-by-human the merge bot routed this PR to a human label Sep 21, 2026
@iscekic

iscekic commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

The merge bot leaves this one to a human: Jev reads it as a human's merge (confidence 0.96); destructive or config change (p=0.79).

@iscekic iscekic removed merge-by-human the merge bot routed this PR to a human human-ready The PR is ready for human review. labels Sep 21, 2026
@iscekic
iscekic marked this pull request as draft September 21, 2026 13:00
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from e68e8c9 to cb48d3f Compare September 21, 2026 14:27
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 14:46
Comment thread dev/seed/app/w4c-org-pair.ts Outdated
Comment thread apps/mobile/src/lib/hooks/use-themed-action-sheet.ts
Comment thread apps/mobile/src/components/context-control.mounted.test.tsx
@iscekic
iscekic marked this pull request as draft September 21, 2026 15:08
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 1df2ba0 to cb76805 Compare September 21, 2026 22:00
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 92e18cd to c68ae25 Compare September 22, 2026 00:20
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 6afa569 to adc7d00 Compare September 22, 2026 01:15
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 72e07bb to c9505b5 Compare September 22, 2026 03:35
Comment thread dev/seed/app/w4c-org-pair.ts Outdated
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from da1b7a1 to cec611a Compare September 23, 2026 04:19
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 04:31
Comment thread dev/seed/lib/w4c-org-pair-fixture.ts Outdated
@iscekic
iscekic marked this pull request as draft September 23, 2026 04:52
@iscekic
iscekic force-pushed the kwf/explorer-org-picker-duplicated-the-org-picker-lists-the-s-9dda5-1ad7 branch from 2f5ebe6 to 9dde333 Compare September 23, 2026 05:38
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 05:52

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants