Skip to content

fix(mobile): drop repeated section headers from personal Security Agent notification settings - #9454

Open
iscekic wants to merge 5 commits into
mainfrom
drain/notifications-heading-scope
Open

iscekic wants to merge 5 commits into
mainfrom
drain/notifications-heading-scope

Conversation

@iscekic

@iscekic iscekic commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Evidence

Evidence: demonstrated — on the Android emulator against this VM's local dev stack and a seeded fake account, the merge-base bundle 8546d7467 renders "NEW-FINDING NOTIFICATION" over the single row "Email me about new findings" and "SLA WARNING NOTIFICATION" over "Email me about SLA warnings", while this head 4ca24445f renders neither heading and separates the two switch groups by 64px (24.38dp); the organization scope keeps both headings, its 54px (20.57dp) break, and its composed accessible names.

Change

Personal Security Agent notification settings put a section heading over each of its two switches, and each heading restated the only row under it:

  • newFindingSection ("New-finding notification") over newFindingPersonalTitle ("Email me about new findings");
  • slaSection ("SLA warning notification") over slaPersonalTitle ("Email me about SLA warnings").

apps/mobile/src/components/security-agent/notification-settings-screen.tsx renders both headings only when the scope is not personal. Organization scope is untouched: there both switches read "Email organization owners", so the heading is the only thing that separates them, and it stays in the composed accessible name (formatList([section, emailOwners])). The personal rows keep their own titles as their accessible names.

Without the headings the break between the two groups carries their separation, so the personal scroll container uses gap-7 (1.75rem, measured 24.38dp) instead of the standard gap-6, while the organization scope keeps gap-6 next to its headings. The steps inside a group are unchanged: 6.86dp from the card to the severity label and 5.33dp from that label to its picker.

No copy or catalog change: both keys remain in use by the organization scope, so all 87 catalogs keep a live entry. No catalog file is in this diff.

apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx pins both sides of the split. The personal scope renders no section heading, titles each switch after its notification, and spaces the two groups with gap-7; the organization scope names each switch by its section and recipient, keeps gap-6, and — added at 4ca24445f — asserts that the mounted tree renders exactly the two section headings in order, so a gate that stopped rendering them fails the suite.

E2E

Android emulator (omp36, default font scale 1.0, default density 420) against this VM's local dev stack, dev client from the CI mobile-native-android artifact of this checkout's native fingerprint (no native file changes on this branch), signed in as an owned fake account with an enabled personal security_scan config and an enabled organization security_scan config it owns (both notification switches on, so the severity pickers and the SLA lead-time field render).

Measured at head 4ca24445f, after a Metro restart on the branch checkout, a dev-client relaunch and a re-dump:

  1. Personal notifications route: no uppercase section heading in the dump; the new-findings card starts at y=348, its severity list ends at y=1124 and the SLA card starts at y=1188 — 64px = 24.38dp between the groups, against 18px = 6.86dp card→severity-label and 14px = 5.33dp label→picker inside a group.
  2. Organization notifications route: "NEW-FINDING NOTIFICATION" and "SLA WARNING NOTIFICATION" both present; the switches keep the composed accessible names "New-finding notification and Email organization owners" and "SLA warning notification and Email organization owners".
  3. Merge-base checkout 8546d7467c449fa0d7b225c98e3e2c1d1f38b818, same Metro-restart-and-relaunch procedure: the personal screen renders both section headings again (new-finding heading at y=348–381, first card at y=409, second heading at y=1239), 54px = 20.57dp between the groups. Switching back to the branch and reloading restores the head screen with no headings, so each run measured the code it claims.

Numbers are uiautomator window bounds at density 2.625 (dp = px / 2.625).

Unit level: with the organization heading gate temporarily forced never to render, the mounted suite fails on the new assertion (the new-finding heading is missing from the collected list); with the gate restored, vitest run on the suite reports 4 passed. oxlint and oxfmt --check pass on the changed file.

Production prerequisites

None.

Design gate

Design gate: 4 cells, 0 errors, 0 warnings.

  • Head run at 4ca24445fb5a9fed09f78d945f6a22213b6a8f0a: 4 cells (base, dark, compact, RTL) × 2 links (personal and organization notification settings), 0 errors, 0 warnings, no findings.
  • Merge-base run of the same two links at 8546d7467c449fa0d7b225c98e3e2c1d1f38b818: 4 cells, 0 errors, 0 warnings, no findings.
  • Both runs, including the base folder, are uploaded for this head's sha.
  • Re-run at the same head on a rebuilt VM (fresh workspace install, new dev stack, new emulator boot, dev client reinstalled from the same CI artifact): head run 4 cells, 0 errors, 0 warnings with no skipped rules, merge-base run of the same links 4 cells, 0 errors, 0 warnings. The pair for this head is uploaded again with its base folder, and the captures are in the proof comment.
  • Before the base run Metro was restarted on the merge-base checkout and the personal screen re-dumped with both section headings present; before the head run Metro was restarted on the branch and the same screen re-dumped with no headings.

Proxy answers

The owner's proxy gave these answers in the owner's place.

  1. Question: Fix shape: How should the personal notification settings lose the duplicated headings?
    Answer: Drop both headings on personal only
    Confidence: 0.85 · Precedent: Speed and least work: choose the simplest design that reaches the goal — session a30dc8dc131a, owner typed "Simplest please"
  2. Question: Personal grouping: Once the headings are gone on personal, how should the two email switches be grouped?
    Answer: Keep two groups, existing gap-6 between them
    Confidence: 0.75 · Precedent: UX: change only the property the owner asked for and keep every other property as it was — session ea803e2373e2, "just change the color"
  3. Question: Regression test: Add a permanent mounted test for the heading visibility?
    Answer: Yes: personal shows no headings, org shows both
    Confidence: 0.50 · Precedent: Speed and least work: do the least work possible with no drop in quality — session 7f3470e0ba6f, "with no drop in quality"
  4. Question: Personal grouping: Design critic says the two personal notification groups now blend (measured on the head run at 411dp width): 21dp between groups vs 7dp card→label and 5.25dp label→picker inside a group. The organization scope separates them by ~44dp because of its header (21dp gap + 12.6dp header + 10.5dp header→card). No headers on personal (this PR's approved fix), so how wide should the personal-only gap between the two switch groups be?
    Answer: gap-12: 42dp (matches the org screen's separation)
    Confidence: 0.66 · Precedent: UX rule 'Keep similar elements consistent across surfaces' (session a247f3c19b1e: thought row must match tool call row); mobile best-in-class standard with consistent, right-sized padding (session 00eb2a1d3e4b)
  5. Question: Personal gap: The host design critic sent this PR back twice on the personal notification spacing. Round 1 (proxy answer 4) put gap-12 (42dp) between the two personal switch groups. Round 2 says that break now reads as a missing header, because the space above the first card is only 14dp, and asks to tighten the gap between the groups to the same spacing used above the first card. Head 672d755 does exactly that: gap-4 = 1rem, measured 13.71dp between groups vs 14.09dp above the first card, in every design-gate cell (411dp width, font scale 1). Kilobot's open remark argues the smaller value blends the two groups and asks either to restore 42dp or to update the PR evidence and get the smaller spacing approved. Measured inside-group spacing on the personal scope is 6.9dp (card → severity label) and 5.25dp (label → picker), so the group break at 13.7dp is about 2x the internal gap. Which spacing should this PR ship?
    Answer: gap-4, matched to the space above the first card
    Confidence: 0.62 · Precedent: Design gate rule: stop mobile design and UX defects before they land, with a design gate in the workflow (session 6341f41c09ab, "Design gate"). PR loop rule: check each kilobot comment and fix it or reject it (session 80d037e14f3a). Here that means rejecting kilobot's remark in its thread with the measured 2x group-to-internal ratio, and updating the PR description and screenshots to the new head (session b1be07191a1d, "Update PR description please").
  6. Question: Design gap: The host's design review blocks PR fix(mobile): drop repeated section headers from personal Security Agent notification settings #9454 at head 672d755: on the personal scope (no section headings) the two switch groups are separated by 13.71dp, while inside a group the gaps are 6.9dp (card→severity label) and 5.25dp (label→picker), so the review says the two unrelated groups run together, and suggests a break of about 24dp. Earlier rounds: proxy answer 4 chose gap-12 (41.14-41.91dp) and the review rejected it as reading like a missing heading next to the 14.09dp above the first card; proxy answer 5 chose gap-4 (13.71dp) and the review now rejects it as too tight. Measured scale on this screen at 411dp width: dp = 13.71 × gap units (gap-4=13.71dp, gap-6=20.57dp, gap-12=41.14dp). Which break should the personal scope get?
    Answer: gap-7: 24.0dp
    Confidence: 0.66 · Precedent: Speed and least work: choose the simplest design that reaches the goal (session a30dc8dc131a, "Simplest please"). Gap-7 matches the review's own suggestion, changes one class, and adds no locale key across 87 catalogs.

…nt notifications

The personal notification settings screen put a section heading over each
of its two switches: "New-finding notification" above "Email me about new
findings" and "SLA warning notification" above "Email me about SLA
warnings". Each heading restated the only row under it.

Render both headings only for the organization scope, where the two
switches share the title "Email organization owners" and the heading is the
only thing that tells them apart, including in the composed accessible
name. Personal rows name themselves; grouping and spacing are unchanged.
@iscekic iscekic added drain Work item from the findings drain explorer:android Finding surfaced by the Android explorer labels Nov 1, 2026
@kilo-code-bot

kilo-code-bot Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental change at 4ca2444 adds a sectionHeadings helper and asserts the organization scope paints both section headings, which closes the previously reported test-coverage gap; no new issues were found.

Assumptions: [INFERENCE] The changed vitest suite was not executed in this read-only review; findings come from reading the assertion logic, notification-settings-screen.tsx, and the test's mocked Text/Switch elements. The earlier inline WARNING about the personal gap-4 spacing and the earlier SUGGESTION about the description/design-gate evidence are both addressed at this head (gap-7 with 24.4dp evidence), so neither is carried forward.

Files Reviewed (1 file)
  • apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx
Previous Review Summaries (5 snapshots, latest commit 58c2374)

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

Previous review (commit 58c2374)

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

The production change is sound — the personal scope drops both redundant headings and gets a wider group gap while the organization scope keeps its headings, gap, and composed accessible names — and the only new finding is a test-coverage gap where the organization scope's visible headings are never asserted.

Assumptions: [INFERENCE] The changed vitest suites were not executed in this read-only review; findings come from reading the screen, the new mounted suite, ToggleRow, Switch, TabScreenScrollView, cn/twMerge, and the shared canManageSecurityAgent/isPersonalSecurityScope helpers. The earlier suggestion about the PR description and design-gate evidence reporting the previous gap-4 head is resolved at 58c2374: the body now states gap-7 with the 24.4dp measurement and the 16:08Z evidence comment covers this head.

Overview

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

SUGGESTION

File Line Issue
apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx 158 The organization-scope test only asserts the switches' composed accessibilityLabel, so it passes even if the !personal gate stopped rendering the visible organization headings; the rendered-heading side of the gate is untested.
Files Reviewed (2 files)
  • apps/mobile/src/components/security-agent/notification-settings-screen.tsx - 0 issues
  • apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx - 1 issue

Fix these issues in Kilo Cloud

Previous review

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

The head now sets the personal-scope group gap to gap-7 (~24.5dp), which satisfies the design critic's request for about 24dp, but the PR description and the attached design-gate evidence still describe the previous gap-4/13.71dp head, so the recorded evidence does not match the shipped spacing.

Assumptions: [INFERENCE] The mounted suite was not executed (read-only review). gap-7 ≈ 24.5dp follows this repo's 3.5dp-per-unit native scale (1rem = 14pt in apps/mobile/AGENTS.md), which matches the PR's own gap-4 = 14dp and gap-6 = 21dp measurements.

Overview

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

SUGGESTION

File Line Issue
apps/mobile/src/components/security-agent/notification-settings-screen.tsx 213 gap-7 (~24.5dp) is implemented, but the PR body still says gap-4/13.71dp for "this head" and the latest design-gate comment measured 672d755fb; no gate run or layout measurement exists for 58c23747. Update the description and re-run the gate so the evidence matches the shipped value.

Fix these issues in Kilo Cloud

Files Reviewed (2 files)
  • apps/mobile/src/components/security-agent/notification-settings-screen.tsx - 1 issue
  • apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx - 0 issues (assertion pinned to the same gap-7 value)

Previous review (commit 672d755)

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

The head commit tightens the personal-scope group gap from the approved 42dp (gap-12) to about 14dp (gap-4), re-creating the group blending the design review flagged while the PR description and attached design-gate evidence still report 41.91dp for this head.

Assumptions: [INFERENCE] The mounted suite was not executed (read-only review); spacing values come from the repo's 3.5dp-per-gap-unit scale the PR itself uses (gap-6 = 21dp, gap-12 = 42dp, so gap-4 = 14dp). The PR body, the last design-gate comment (41.91dp) and proxy answer 4 (gap-12: 42dp) all predate commit 672d755.

Overview

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

WARNING

File Line Issue
apps/mobile/src/components/security-agent/notification-settings-screen.tsx 212 Personal group gap changed to gap-4 (~14dp), contradicting the approved gap-12 (42dp) and the 41.91dp evidence attached for this head; 14dp vs the 10.5dp intra-group gap re-creates the blending flagged at 21dp, and the mounted assertion at line 146 now pins the unapproved value.

Fix these issues in Kilo Cloud

Files Reviewed (2 files)
  • apps/mobile/src/components/security-agent/notification-settings-screen.tsx - 1 issue
  • apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx - 0 issues (assertion pins the value flagged on the screen file)

Previous review (commit bbb621b)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental change widens the personal-scope container gap to gap-12, routes it through the existing cn() helper with the org scope keeping gap-6, and pins both class strings with mounted assertions; the string-mocked TabScreenScrollView makes those props observable without changing what the earlier assertions cover, and no defect was found in the new lines.

Assumptions: [INFERENCE] The new mounted suite was not executed (read-only review); validity was assessed by reading cn()/twMerge ordering, the real TabScreenScrollView prop pass-through, and canManageSecurityAgent('personal', …) === true, which confirms the comment's claim that the permission note never renders on the personal scope.

Files Reviewed (2 files)
  • apps/mobile/src/components/security-agent/notification-settings-screen.tsx
  • apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx

Previous review (commit 6141909)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The change gates both personal notification section headings behind !personal while leaving the organization scope headings and composed accessible names untouched, and the new mounted test pins both scopes. No defects found in the changed lines.

Assumptions: [INFERENCE] I did not execute the new mounted suite (read-only review); test validity was assessed by reading the renderer, ToggleRow, Switch, and the i18n keys, all of which the diff and PR description exercise consistently.

Files Reviewed (2 files)
  • apps/mobile/src/components/security-agent/notification-settings-screen.tsx
  • apps/mobile/src/components/security-agent/notification-settings-sections.mounted.test.tsx

Reviewed by deepseek-flash-latest · Input: 36.9K · Output: 2.3K · Cached: 201.7K

Review guidance: REVIEW.md from base branch main

@iscekic iscekic added the merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. label Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Android dev client on the local dev stack, personal Security Agent notification settings and its organization scope.

  • Before (merge base source): each section heading sits above the one switch it names.
  • After (this branch): the personal screen shows only the two switches, each titled after its notification, with its own severity picker and SLA lead-time field.
  • Organization scope is unchanged: both switches read "Email organization owners", so the headings remain.

The last image is the design gate contact sheet of the head run.

Personal notification settings before the change

Personal notification settings after the change

Organization notification settings unchanged

Design gate contact sheet

@iscekic iscekic added the merge:blocked:design-review Design review has not cleared this change label Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator Author

bot: Design gate re-run for the current head, on the Android emulator with the dev client attached to this VM's Metro.

  • 4 cells (default, dark, compact, RTL) × 2 links: personal notification settings and organization notification settings.
  • 0 errors, 0 warnings; the report lists no findings.
  • The merge-base run of the same two links reports the same counts, so this change introduces no measured finding.
  • Before running it I reloaded the app on the merge-base bundle and confirmed the personal screen still shows both section headings, then reloaded the head bundle and confirmed they are gone, so the two runs measured the code they claim.
  • The head run folder, including its base comparison, is uploaded for the design critic. The contact sheet is attached.

Design gate contact sheet for the change

…ir headings

With the single-row headings gone, the personal scope's two switch groups were separated only by the standard 21dp container gap, while the gaps inside a group are 7dp, so the two notifications read as one list. The personal scope now uses a 42dp container gap, close to the separation the organization scope gets from its headings, which stay there. The permission note that sits above the groups never renders in the personal scope (it can always manage), so its spacing is unchanged.
@iscekic iscekic added merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. and removed merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head labels Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate re-run for the current head, on the Android emulator with the dev client attached to this VM's Metro.

  • 4 cells (default, dark, compact, RTL) x 2 links: personal notification settings and organization notification settings.
  • 0 errors, 0 warnings, no findings. The merge-base run of the same two links reports the same counts.
  • The two personal-screen attachments are both this head's bundle: the first with the previous group gap (the state the design review flagged), the second with the wider group gap. Both dumps were taken on the same emulator, and the organization scope still shows its section headings.
  • Before the base run I restarted Metro on the merge-base checkout and confirmed the personal screen renders its two section headings; after it I restarted Metro on this branch and confirmed they are gone, so each run measured the code it claims.
  • The head run folder, including its base comparison, is uploaded for the design critic.

Design gate contact sheet for the current head

Personal notification settings, previous group gap

Personal notification settings, wider group gap

@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate re-run pair for this head, regenerated so both runs postdate the last edit of the changed screen.

  • Head run: 4 cells (default, dark, compact, RTL) x 2 links, 0 errors, 0 warnings. Measured group gap on the personal screen 41.91dp in every cell, 20.57dp on the organization screen.
  • Merge-base run of the same links: 4 cells x 2 links, 0 errors, 0 warnings, and every cell captured the notification screen itself (both section headings present, 20.57dp group gap), not a partially loaded route.
  • Both runs are uploaded for this head, including the base comparison. The earlier attached sheet measured the same head code; this sheet comes with the regenerated pair.

Design gate contact sheet, head run

Design gate contact sheet, merge-base run

…ove them

With the section headings gone from the personal scope, a wider gap between its two switch groups left the space above the first group at 14dp and the space between the groups at 42dp, so the larger break read as a heading that had gone missing. The personal scope now uses the same 14dp gap between the groups; the organization scope keeps its standard 21dp gap next to its headings.
@iscekic iscekic removed the merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. label Nov 1, 2026
@iscekic iscekic added merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. labels Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate and spacing evidence for head 672d755, on the Android emulator with the dev client attached to this VM's Metro.

  • Merge base: the personal notification screen still shows both single-row section headings, and its group break is 20.57dp.
  • This head: both headings are gone on the personal scope, and the break between the two switch groups is 13.71dp against the 14.09dp the same screen leaves above its first card — the spacing the design review asked for.
  • Organization scope unchanged: both headings and the 20.57dp group break.
  • Design gate at this head: 4 cells (base, dark, compact, RTL) x 2 links, 0 errors, 0 warnings. The merge-base run of the same links also reports 0 errors, 0 warnings.

The last image is the contact sheet of the head run.

Personal notification settings on the merge base, each switch still under its own section heading

Personal notification settings at this head, both switches without headings and the group break matching the space above the first card

Design gate contact sheet for this head across four cells and two links

@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate re-run for the same head 672d755, on the Android emulator with the dev client attached to this VM's Metro, after a Metro restart so the bundle being measured is this checkout's.

  • Head run: 4 cells (base, dark, compact, RTL) x 2 links, 0 errors, 0 warnings.
  • Merge-base run of the same two links: 4 cells x 2 links, 0 errors, 0 warnings.
  • Measured layout frames, head: 14.09dp above the first personal group and 13.71dp between the two personal groups in every cell; the organization screen keeps 14.09dp above and 20.57dp between.
  • Measured layout frames, merge base: 20.57dp between the personal groups in every cell, with the first group 318.86dp tall because both section headings are still there.

Both runs for this head, including the base folder, are uploaded for the design critic. Attached is the contact sheet of the head run.

Design gate contact sheet for this head, four cells and two links

@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: The automatic design review hands this pull request to the owner at head 672d755.
These findings still block it after the automatic fix runs:

  • base / app-security-agent-personal-settings-notifications, the gap between the first severity list (ending at Low) and the "Email me about SLA warnings" card: With the section headers removed, the new-finding group and the SLA group are separated by about the same small gap as the space between a toggle card and its own severity label, so the two unrelated groups run together into one undivided list. Fix: Restore the "NEW-FINDING NOTIFICATION" and "SLA WARNING NOTIFICATION" section headers, or give the space between groups a clearly larger gap (about 24dp) than the gap inside each group.
    The owner proxy could not decide it: Removing the two personal section headers is this PR's own change. It makes the new-finding group and the SLA group run together, because the gap between the groups now matches the gap inside each group. That is a regression this change introduced, so it cannot be accepted. Fix is not offered here, so it needs a decision: a larger gap between the groups (about 24dp) or a single grouped header added to every locale catalog.
    Send it back with these fixes, accept the design, or close it.

@iscekic iscekic added the merge:blocked:human-design The owner reviews the design label Nov 1, 2026
@iscekic iscekic removed merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head labels Nov 1, 2026
@iscekic iscekic added the merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head label Nov 1, 2026
@iscekic iscekic added merge:blocked:insufficient-e2e Verification does not cover the change merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. labels Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Personal Security Agent notification settings at head 58c2374, on the Android emulator (default font scale and density) against this VM's local dev stack, signed in as an owned fake account.

  • Merge base 8546d74: "NEW-FINDING NOTIFICATION" above the one new-findings row and "SLA WARNING NOTIFICATION" above the SLA row, 20.57dp between the two groups.
  • This head: neither section heading is rendered, each switch is titled after its notification, and the two groups sit 24.4dp apart (uiautomator: 64px at density 2.625; probe frames 452.6 − 428.2dp in the base, dark and RTL cells, 24.3dp in the compact cell). That is against 14.09dp above the first card and 6.8dp card→severity-label and 5.25dp label→picker inside a group, i.e. the group break is 3.5x and 4.6x the steps inside a group and stays well under the 41dp break the review rejected as a missing heading. Proxy answer 6 chose gap-7 (24.0dp) for exactly this.
  • The organization scope keeps both headings, its 20.57dp group break, and its composed accessible names.

Design gate at this head: 4 cells, 0 errors, 0 warnings; the merge-base run of the same two links reports 4 cells, 0 errors, 1 warning (an unsettled-sample warning on the organization screen in the first cell after the bundle reload).

Design gate contact sheet at this head, four cells and two links

Personal notification settings at this head in light mode, no section headings and a wide break between the two switch groups

Personal notification settings at this head in dark mode

Personal notification settings on the merge base, each switch still under its own section heading

Organization notification settings at this head, both section headings and their accessible names kept

@iscekic iscekic removed the merge:blocked:insufficient-e2e Verification does not cover the change label Nov 1, 2026
@iscekic iscekic added merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head merge:blocked:insufficient-e2e Verification does not cover the change merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. and removed merge:blocked:kilobot-not-ready Review bot has not recommended merge at this head merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. labels Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Android emulator proof on this VM's local dev stack, signed in as an owned fake account whose personal and organization security-scan configs have both notification switches on.

  • Merge base 8546d7467: the personal notification screen still heads each switch with "NEW-FINDING NOTIFICATION" and "SLA WARNING NOTIFICATION"; the two groups sit 54px (20.57dp) apart.
  • This head 4ca24445f: the personal screen renders neither heading, each switch is titled after its notification, and the two groups sit 64px (24.38dp) apart, against 18px (6.86dp) card→severity-label and 14px (5.33dp) label→picker inside a group.
  • Organization scope: both headings kept, the switches still announce "New-finding notification and Email organization owners" and "SLA warning notification and Email organization owners".
  • Design gate at this head: 4 cells (base, dark, compact, RTL) × 2 links, 0 errors, 0 warnings; the merge-base run of the same links reports the same counts.
  • Metro was restarted on each checkout before its run and the screen re-dumped, so no run measured the other checkout's bundle.

Attached: personal settings on the merge base, personal settings at this head, the organization scope at this head, and the contact sheet of the head design-gate run.

Personal notification settings on the merge base, each switch under its own section heading

Personal notification settings at this head, both switches without headings and a wider break between the groups

Organization notification settings at this head, both section headings and their accessible names kept

Design gate contact sheet at this head, four cells and two links

@iscekic iscekic removed the merge:blocked:insufficient-e2e Verification does not cover the change label Nov 1, 2026
@iscekic

iscekic commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Android emulator proof on this VM's local dev stack, signed in as an owned fake account whose personal and organization security-scan configs both have the notification switches on.

  • Merge base 8546d7467: the personal notification screen still heads each switch with "NEW-FINDING NOTIFICATION" (y 348–381) and "SLA WARNING NOTIFICATION" (y 1239–1272).
  • This head 4ca24445f: the personal screen renders neither heading; the new-findings card starts at y=348, its severity list ends at y=1124 and the SLA card starts at y=1188, i.e. 64px = 24.38dp between the groups against 18px = 6.86dp card→severity label and 14px = 5.33dp label→picker inside a group.
  • Organization scope at this head: both headings kept (y 348–381, y 1239–1272), its break stays 54px = 20.57dp above the second heading, and the switches still announce "New-finding notification and Email organization owners" and "SLA warning notification and Email organization owners".
  • Design gate pair at this head: head run 4 cells (base, dark, compact, RTL) x 2 links, 0 errors, 0 warnings, no skipped rules; merge-base run of the same links 4 cells, 0 errors, 0 warnings. Both runs, including the base folder, are uploaded for this head's sha.
  • Metro was restarted on each checkout and the app relaunched from it before that checkout's captures and gate run, so no run measured the other bundle: before the base run the personal screen showed both headings, before the head run it showed neither.

Numbers are uiautomator window bounds at density 2.625 (dp = px / 2.625); each dump was taken in the same command as its capture.

Personal notification settings on the merge base, each switch under its own section heading

Personal notification settings at this head, both switches without headings and a wider break between the groups

Organization notification settings at this head, both section headings and their accessible names kept

Design gate contact sheet at this head, four cells and two links

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

drain Work item from the findings drain explorer:android Finding surfaced by the Android explorer merge:blocked:design-review Design review has not cleared this change merge:blocked:human-design The owner reviews the design merge:bot Bot-owned review; merge when ready once readiness passes and a review approves.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants