5-category notification preferences for mobile, web, and backend - #4692
Conversation
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryThis increment reworks Files Reviewed (1 file)
Previous Review Summaries (5 snapshots, latest commit e9d825f)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit e9d825f)Status: No Issues Found | Recommendation: Merge Executive SummaryThis increment only adds Files Reviewed (1 file)
Previous review (commit 9cfaae2)Status: No Issues Found | Recommendation: Merge Executive SummaryThis increment only reformats a multi-line object literal in a test call; no logic, assertion, or behavior change, so no new issues were found. Files Reviewed (1 file)
Previous review (commit 4c90ad6)Status: No Issues Found | Recommendation: Merge Executive SummaryThis increment only adds a pinned Files Reviewed (2 files)
Previous review (commit fe5961d)Status: 3 Issues Found | Recommendation: Address before merge Executive SummaryThe mobile Notifications screen has overlapping-mutation and busy-flag races (shared Overview
Issue Details (click to expand)WARNING
Files Reviewed (32 files)
Fix these issues in Kilo Cloud Previous review (commit fc9fec8)Status: 2 Issues Found | Recommendation: Address before merge Executive SummaryThe mobile Notifications screen shares a single Overview
Issue Details (click to expand)WARNING
Files Reviewed (30 files)
Reviewed by claude-sonnet-5 · Input: 20 · Output: 2.6K · Cached: 364.2K Review guidance: REVIEW.md from base branch |
fc9fec8 to
fe5961d
Compare
…dOnPlatform - Add @types/pg@8.18.0 to web devDependencies to resolve version conflict with @opentelemetry/instrumentation-pg which pulls in @types/pg@8.15.6 - Add missing createdOnPlatform: null to needs_input test params
… category field The S2c change adds 'category' to cloud_agent_session push payload. Update test expectations to include category: 'status' for: - completed message pushes - failed message pushes - interrupted message pushes - coalesced batch representative pushes
… surface permission errors
Replaces the single global agent_push_enabled boolean with a 5-category per-user push-preference model, enforced fail-closed at every notification RPC and surfaced on a dedicated mobile Notifications screen.
Changes
Backward compatibility
Verification
On-device E2E (iOS simulator, feature-state matrix)
Run on a worktree-owned iOS 26.5 simulator against the local dev stack, driven with Maestro +
simctl, with the Postgres row inspected directly as ground truth.agent_attention_enabledfalse → true) and only that column changed (chat/session-status/kiloclaw untouched), confirming the per-key partialsetNotificationPreferencesupdate. The new value survived cold app relaunches and read back correctly (on-screen toggles matched the persisteduser_notification_preferencesrow exactly: chat ON, agent-attention ON, agent-updates OFF, session-status ON, kiloclaw OFF).notificationsEnabled = falseon-device requires revoking OS notification permission, which is not permitted viasimctlon this runtime (returnsOperation not permitted) and would otherwise need a destructive simulator erase + re-login. The empty state (all 5 switchesdisabled+ the "Enable notifications" CTA) is covered by the mobile unit tests.category) is covered by the notifications-service tests and the cloud-agent-next integration test that asserts thecategoryfield on the push payload. Real end-to-end push delivery/tap-through cannot be exercised on the local stack (noEXPO_ACCESS_TOKEN; no deterministic producer trigger available without disrupting the shared dev stack), so it is reported here rather than self-accepted.onErrorrollback +toast.error+ reconcile-on-refetch path is covered by unit tests. Forcing a deterministic toggle-mutation failure on-device would require stopping the shared web/tRPC worker, which is unsafe on the shared dev stack, so it is reported rather than reproduced.Note: an earlier automated pass reported "category rows not visible"; this was a test-navigation artifact (the ambiguous
Notificationsselector matched the section header instead of the row) and not a product defect — the category rows render and persist correctly on-device.