Skip to content

fix(mobile): use the open state form and one finding noun in Arabic - #9342

Merged
iscekic merged 2 commits into
mainfrom
drain/mobile-ar-security-agent-copy
Oct 31, 2026
Merged

iscekic merged 2 commits into
mainfrom
drain/mobile-ar-security-agent-copy

Conversation

@iscekic

@iscekic iscekic commented Oct 31, 2026 •

Copy link
Copy Markdown
Collaborator

Evidence

Evidence: demonstrated — on the Android emulator against the local dev stack, the reported Arabic surfaces were captured before and after this branch with uiautomator label reads: the finding detail's status row and the filter's الحالة option read فتح on main and مفتوحة on this branch, and the dismiss sheet's header, not-found title and permission explanation named the finding with two nouns before and one after.

What changed

apps/mobile/src/i18n/locales/ only: value-level edits of existing entries. No key added or removed, no English copy touched, no markup or style changed.

Open finding state (Arabic). securityAgent.findingDetails.statusOpen and securityAgent.filter.statusOpen were فتح, the verbal noun/imperative, in a row of state labels (تم الإصلاح, تم تجاهلها). Both now read مفتوحة, agreeing with the finding noun and matching the catalog's existing نتائج مفتوحة and الحالة: مفتوحة.

One noun per security finding (Arabic). The feature named the same object with two nouns. Nine strings used الملاحظة:

Key Before After
common.findings الملاحظات النتائج
securityAgent.dismiss.title استبعاد الملاحظة استبعاد النتيجة
securityAgent.dismiss.notFoundTitle الملاحظة غير موجودة النتيجة غير موجودة
securityAgent.dismiss.couldNotLoad تعذّر تحميل هذه الملاحظة. تعذّر تحميل هذه النتيجة.
securityAgent.dismiss.reasonInaccurate الملاحظة غير دقيقة النتيجة غير دقيقة
securityAgent.findingDetails.reasonInaccurate الملاحظة غير دقيقة النتيجة غير دقيقة
securityAgent.automation.queued, _other أُضيفت الملاحظات الحالية … أُضيفت النتائج الحالية …
securityAgent.remediation.unavailable … لهذه الملاحظة. … لهذه النتيجة.

The other 67 strings in the namespace already used النتيجة/النتائج, including the same sheet's permission explanation (لا يمكن استبعاد هذه النتيجة) and the filter title (تصفية النتائج). common.findings is the findings header the finding list renders; the code reviewer's Arabic already says النتائج elsewhere, so the shared label becomes consistent there too.

The same state defect in the other catalogs. Twenty-one catalogs labelled these two keys with an action form: an infinitive or imperative (Abrir, Apri, Openen, Atvērt, Opna, Åpne, Buka, کھولیں, ਖੋਲ੍ਹੋ, Ашу, Agor) or a nominalized "opening" (Obertura, Apertura, Ouverture, Deschidere, Отваряне, Hapje, Ftuħ). Each now carries the state form its own catalog already uses, taken from securityAgent.remediationUnavailable.findingNotOpen and securityAgent.dashboardMetrics.openFindings in that catalog, so the noun's gender agrees with the sentence beside it:

Catalog Its own sentence Status label
es El hallazgo ya no está abierto Abierto
gl O achado xa non está aberto Aberto
ca La incidència ja no està oberta Oberta
fr Le signalement n'est plus ouvert Ouvert
it La segnalazione non è più aperta Aperta
pt A ocorrência já não está aberta Aberta
pt-BR A ocorrência não está mais em aberto Em aberto
ro Constatarea nu mai este deschisă Deschisă
bg Проблемът вече не е отворен Отворен
sq Gjetja nuk është më e hapur Hapur
lv Konstatējums vairs nav atvērts Atvērts
is Frávikið er ekki lengur opið Opið
nb Funnet er ikke lenger åpent Åpent
mt Is-sejba m'għadhiex miftuħa Miftuħa
cy Nid yw'r canfyddiad ar agor mwyach Agored
nl De bevinding is niet meer open Open
id Temuan tidak lagi berstatus terbuka Terbuka
ms Penemuan tidak lagi terbuka Terbuka
kk Мәселе енді ашық емес Ашық
pa ਸਮੱਸਿਆ ਹੁਣ ਖੁੱਲ੍ਹੀ ਨਹੀਂ ਹੈ ਖੁੱਲ੍ਹੀ
ur (catalog states it as unresolved; کھلا agrees with the masculine finding noun) کھلا
ar لا توجد نتائج مفتوحة مفتوحة

Both keys keep one value per catalog, and open already has a wording exception for each edited language, so the one-wording rule in check:i18n stays satisfied.

Observation, not exercised on screen. Arabic also used فتح for two other state keys with the same defect: prReview.overview.stateOpen (now مفتوح, matching its sibling stateOpenApproved = مفتوح · …) and organization.invoices.status.open (now مفتوحة, matching مدفوعة/ملغاة). Neither screen is part of this change and neither was driven here.

Verification on this VM

Stack: pnpm dev:setup-env, pnpm drizzle migrate, pnpm dev:start core mobile --no-attach, @kilocode/harness-sdk and @kilocode/trpc built, pnpm dev:env:mobile --host localhost. Emulator omp36 running the CI mobile-native-android dev client built from this branch's base commit (no native file changed), Metro from this checkout, and an owned fake organization fixture in local Postgres (member role, agent_configs.platform='github', one open high-severity finding).

Assertions per state, read from uiautomator dumps of the same bundle, main's catalog against this branch's catalog:

Screen main This branch
Finding detail status row (ar) الخطورة: عالٍ · فتح الخطورة: عالٍ · مفتوحة
Filter sheet, الحالة (ar) فتح مفتوحة
Findings header (ar) الملاحظات النتائج
Dismiss sheet, member role (ar) header استبعاد الملاحظة, body لا يمكن استبعاد هذه النتيجة header استبعاد النتيجة, body لا يمكن استبعاد هذه النتيجة
Dismiss sheet, unknown finding id (ar) استبعاد الملاحظة / الملاحظة غير موجودة / ربما أُزيلت هذه النتيجة… استبعاد النتيجة / النتيجة غير موجودة / ربما أُزيلت هذه النتيجة…
Finding detail, Spanish — Gravedad: Nivel alto · Abierto
Finding detail, Italian — Gravità Livello alto · Aperta; list header Problemi rilevati

The member role reaches the dismiss permission state (canManageSecurityAgent denies member), and an unknown finding id reaches the not-found state. Arabic, Spanish and Italian are read on the screens that render them; the remaining edited catalogs are covered by the catalog checks, which enforce one value per English string across a catalog.

Checks: pnpm --filter kilo-app check:i18n (oxlint i18n rules + check-catalogs), pnpm --filter kilo-app check:plurals, pnpm exec oxfmt --check on the 22 edited catalogs.

Locale switching note: Arabic is set through the Android per-app locale override (cmd locale set-app-locales com.kilocode.kiloapp --locales ar), which is the mechanism this verification used; the app's in-app language sheet was not used for Arabic here. Spanish and Italian were switched through the app's own language sheet. Both paths feed the same i18n resolution and the same layout, and the language-sheet path itself is unchanged by this pull request.

Design gate

Design gate: 16 cells, 16 errors, 20 warnings

Four matrix cells (base, dark, compact, Arabic RTL) × four targets: the finding detail, the filter sheet, the dismiss sheet as a member, and the dismiss sheet for an unknown finding id. This branch changes no markup or style at all — apps/mobile/src/components/screen-header.tsx and every other component are untouched (git diff main...HEAD contains locale JSON only) — and the run reports exactly the errors an identical run over main's catalogs reports on the same emulator: 16 errors in both, 14 safe-area plus 2 layout-shift, on the same element paths. The only differences between the two reports are unsettled warnings, which move between runs.

Exit 1 here is therefore not fixable inside this change, and the two classes are:

  • safe-area on the two dismiss targets (14): ScreenHeader with modal keeps a fixed grabber clearance because a form sheet is its own window and owns its top inset (apps/mobile/src/components/screen-header.tsx:18-25, :297-301). A gate target is only { id, link }, so the dismiss route is opened by deep link, outside its native sheet, and the rule compares the header's box with the app window's inset instead of the sheet's. Measured on the run's own screenshots (1080×2400, 420 dpi): the status-bar clock occupies y 55–81 px and the sheet header title y 123–166 px, i.e. the header renders clear of the status bar, and the same pixels measure y 129–166 px in the main run. Nothing collides; the number comes from the measurement window, not the screen.
  • layout-shift on the finding-detail header paragraph (2): 7.6 dp after settling, inside ScreenHeader, also present in the main run.
  • Warnings: touch-target 38.5 dp on the detail header icon (4) and unsettled roots (8 here, 4 on main), both present on main.

Production prerequisites

None.

Proxy answers

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

  1. Question: Locale breadth: Both securityAgent statusOpen keys are 'فتح' in Arabic, but 21 other catalogs also label the open state with an action form rather than a state: bg 'Отваряне', ca 'Obertura', es 'Apertura', fr 'Ouverture', gl 'Apertura', it 'Apri' (imperative), nl 'Openen', pt/pt-BR 'Abrir', ro 'Deschidere', sq 'Hapje', lv 'Atvērt', is 'Opna', nb 'Åpne', cy 'Agor', id/ms 'Buka', mt 'Ftuħ', kk 'Ашу', ur 'کھولیں' (imperative), pa 'ਖੋਲ੍ਹੋ' (imperative). The brief says to fix every locale with the defect. How wide should the fix go?
    Answer: Arabic + those 21 locales
    Confidence: 0.82 · Precedent: Fix the class on every affected variant: session 8dbecc6e9e16, "I noticed the error in Serbian, but please check all languages and so fix the class"
  2. Question: Arabic state word: Which Arabic word for the open finding state in the detail row and the status filter?
    Answer: مفتوحة
    Confidence: 0.70 · Precedent: Keep similar elements consistent across surfaces: session a247f3c19b1e, thought row must match tool call row (matches existing 'نتائج مفتوحة' / 'الحالة: مفتوحة')
  3. Question: Sibling Open keys: Arabic uses the same verb 'فتح' for two other state keys outside the Security Agent: prReview.overview.stateOpen (a pull request's state) and organization.invoices.status.open. Same defect class, different screens, not part of the reported finding.
    Answer: Fix and state as observation
    Confidence: 0.60 · Precedent: Fix the class, and fix gaps even if unrelated: session 89824a222897, "if you saw a gap, fix it"; keep the PR description true to the diff: session 4bf7a5a30d91
  4. Question: Shared nav label: The 'الملاحظات' navigation/findings-header label is the shared key common.findings, rendered by the Security Agent finding list header and the audit report summary, and also by the code-reviewer review detail header. Aligning it to النتائج changes the Arabic wording on that code-reviewer surface too.
    Answer: Change common.findings
    Confidence: 0.80 · Precedent: Keep similar elements consistent across surfaces, and fix the class on all surfaces: session 75f8833fe8c1, "fix this for all ... on all surfaces"

The Arabic catalog rendered the open finding status with the imperative verb
"فتح" in the finding detail and in the status filter, next to state labels such
as "تم الإصلاح" and "تم تجاهلها". The filter and the detail now read the state
form, agreeing with the finding noun.

The dismiss sheet and the feature's navigation labels also named a security
finding with two different nouns: "الملاحظة" in the sheet header, its not-found
title and the findings navigation label, and "النتيجة" everywhere else,
including the same sheet's permission explanation. Every listing string now
uses the catalog's dominant noun and keeps its grammatical agreement.

Twenty-one other catalogs labelled the same two keys with an action form too:
an infinitive or imperative ("Abrir", "Openen", "Apri", "کھولیں") or a
nominalized "opening" ("Obertura", "Apertura", "Deschidere", "Отваряне"). Each
now carries that language's state adjective. Catalog and plural checks cover
every edited locale; the Arabic and Spanish states are verified on the screens
that render them.
@iscekic iscekic added drain Work item from the findings drain explorer:android Finding surfaced by the Android explorer labels Oct 31, 2026
@iscekic

iscekic commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Arabic Security Agent copy, exercised on the Android emulator against the local dev stack with the app in an owned test organization (member role, one open high-severity finding seeded in local Postgres).

Each pair below is the same screen and the same bundle, first with main's catalogs and then with this branch's catalogs, read from uiautomator dumps of the running app.

State main This branch
Finding detail status row الخطورة: عالٍ · فتح الخطورة: عالٍ · مفتوحة
Filter sheet, الحالة فتح مفتوحة
Findings header الملاحظات النتائج
Dismiss sheet, member role header استبعاد الملاحظة, body لا يمكن استبعاد هذه النتيجة header استبعاد النتيجة, body لا يمكن استبعاد هذه النتيجة
Dismiss sheet, unknown finding id استبعاد الملاحظة / الملاحظة غير موجودة / ربما أُزيلت هذه النتيجة… استبعاد النتيجة / النتيجة غير موجودة / ربما أُزيلت هذه النتيجة…
Finding detail, Spanish locale — Gravedad: Nivel alto · Abierto

The dismiss-sheet pair is the reported mix: the header and the not-found title used one noun while the description used the other; they now agree. The member role reaches the permission state because canManageSecurityAgent denies member, and an unknown finding id reaches the not-found state.

The Spanish read is the on-screen spot check for the twenty-one catalog edits that are not Arabic; the remaining locales are covered by check:i18n and check:plurals.

Arabic was set through the Android per-app locale override (cmd locale set-app-locales com.kilocode.kiloapp --locales ar), because this dev client's in-app language sheet reloads into a blank frame for Arabic. The copy and the RTL rendering of these screens are what the captures show; the language-sheet switch itself is unchanged by this pull request.

Before: open finding status shown with the action form

After: open finding status shown with the state form

Before: status filter option labelled with the action form

After: status filter option labelled with the state form

Before: dismiss sheet header and permission text using two different nouns

After: dismiss sheet header and permission text using one noun

Before: not-found state mixing two nouns

After: not-found state using one noun

Before: findings header using the minority noun

After: findings header using the majority noun

Spanish locale spot check showing the state form

@iscekic

iscekic commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate at the pull request head, Android omp36, --matrix standard.

pnpm dev:mobile:design-gate run over four targets — the finding detail, the filter sheet, the dismiss sheet as a member, and the dismiss sheet for an unknown finding id — in the base, dark, compact and Arabic RTL cells: 16 cells, 16 errors, 18 warnings, exit 1.

The same run over main's catalogs on the same emulator produced 16 errors and 16 warnings, on the same rules and the same element paths; the only difference between the two reports is two extra unsettled warnings at this head. This change edits catalog values only and touches no markup or style, so every error here predates it:

  • safe-area on the two dismiss targets (12 of 16): ScreenHeader with modal keeps a fixed grabber clearance because a form sheet is its own window and owns its top inset (apps/mobile/src/components/screen-header.tsx:18-25, :297-301). The gate opens the route by deep link, outside its sheet, and measures the app window's inset, so the rule sees the header inside the status-bar inset. Pre-existing, unrelated to copy.
  • layout-shift on the finding-detail header paragraph (2): 7.6 dp after settling, inside ScreenHeader, identical on main and unrelated to the changed strings.
  • Warnings: touch-target 38.5 dp on the detail header icon and unsettled roots, both present on main.

Contact sheet attached; the run is uploaded for this head under the session's design-gate path.

Design gate contact sheet for the four changed security agent screens

@kilo-code-bot

kilo-code-bot Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

The 18 changed lines in 9 catalogs are in-place value edits that make the open-state label agree with each catalog's finding noun; commas, key order, and the two edited key paths are intact, and every edited locale already lists open in tools/i18n/wording-exceptions.json.

Assumptions: [INFERENCE] check:i18n/check:plurals were not executed here (read-only review). Two non-blocking observations: (1) the PR body's per-language value list still shows the pre-commit forms (e.g. pt-BR Aberto, ca Obert, bg Отворено, ro Deschis), so the description no longer matches the diff; (2) Bulgarian Отворен agrees with проблем (m) in findingDetails, but the same status row still renders neuter siblings (Отстранено, Отхвърлено, Затворено) — copy consistency, not a defect. The 13 other PR files unchanged since the previous review at 5e66ab35 were not re-analyzed.

Files Reviewed (9 files)
  • apps/mobile/src/i18n/locales/bg.json
  • apps/mobile/src/i18n/locales/ca.json
  • apps/mobile/src/i18n/locales/it.json
  • apps/mobile/src/i18n/locales/mt.json
  • apps/mobile/src/i18n/locales/nb.json
  • apps/mobile/src/i18n/locales/pa.json
  • apps/mobile/src/i18n/locales/pt-BR.json
  • apps/mobile/src/i18n/locales/pt.json
  • apps/mobile/src/i18n/locales/ro.json
Previous Review Summary (commit 5e66ab3)

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

Previous review (commit 5e66ab3)

Status: No Issues Found | Recommendation: Merge

Executive Summary

All 22 changed catalogs contain only in-place value edits; each JSON file parses cleanly, the edited keys stay present with no key additions or removals, and the Arabic state forms agree with their sibling labels (مفتوحة vs مدفوعة/ملغاة, مفتوح vs مفتوح · …).

Assumptions: [INFERENCE] The PR's check:i18n/check:plurals runs were not re-executed here (read-only review; no test runner invocation), and unchanged sibling state keys (for example prReview.overview.stateOpen and organization.invoices.status.open in the non-Arabic catalogs) were outside this PR's changed lines and not assessed. Visual verification claims rely on the PR description.

Files Reviewed (22 files)
  • apps/mobile/src/i18n/locales/ar.json
  • apps/mobile/src/i18n/locales/bg.json
  • apps/mobile/src/i18n/locales/ca.json
  • apps/mobile/src/i18n/locales/cy.json
  • apps/mobile/src/i18n/locales/es.json
  • apps/mobile/src/i18n/locales/fr.json
  • apps/mobile/src/i18n/locales/gl.json
  • apps/mobile/src/i18n/locales/id.json
  • apps/mobile/src/i18n/locales/is.json
  • apps/mobile/src/i18n/locales/it.json
  • apps/mobile/src/i18n/locales/kk.json
  • apps/mobile/src/i18n/locales/lv.json
  • apps/mobile/src/i18n/locales/ms.json
  • apps/mobile/src/i18n/locales/mt.json
  • apps/mobile/src/i18n/locales/nb.json
  • apps/mobile/src/i18n/locales/nl.json
  • apps/mobile/src/i18n/locales/pa.json
  • apps/mobile/src/i18n/locales/pt-BR.json
  • apps/mobile/src/i18n/locales/pt.json
  • apps/mobile/src/i18n/locales/ro.json
  • apps/mobile/src/i18n/locales/sq.json
  • apps/mobile/src/i18n/locales/ur.json

Reviewed by deepseek-flash-latest · Input: 63.5K · Output: 15.5K · Cached: 950.9K

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 Oct 31, 2026
The state word for the open finding status has to carry the gender of the noun
that catalog already uses for a finding. Nine catalogs took the masculine
dictionary form in the previous commit while their own copy for the same object
is feminine or neuter:

- it: "La segnalazione non è più aperta" -> Aperta
- pt: "A ocorrência já não está aberta" -> Aberta
- ca: "La incidència ja no està oberta" -> Oberta
- ro: "Constatarea nu mai este deschisă" -> Deschisă
- bg: "Проблемът вече не е отворен" -> Отворен
- nb: "Funnet er ikke lenger åpent" -> Åpent
- mt: "Is-sejba m'għadhiex miftuħa" -> Miftuħa
- pa: "ਸਮੱਸਿਆ ਹੁਣ ਖੁੱਲ੍ਹੀ ਨਹੀਂ ਹੈ" -> ਖੁੱਲ੍ਹੀ
- pt-BR states the same condition as "em aberto" throughout, so its status keeps
  that phrase instead of a bare adjective.

Each replacement is the adjective form the catalog already uses in
securityAgent.remediationUnavailable.findingNotOpen and
securityAgent.dashboardMetrics.openFindings, so the label agrees with the
sentence next to it.
@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 Oct 31, 2026
@iscekic

iscekic commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Correction to the state label in nine catalogs, now on the head.

The state word has to carry the gender of the noun each catalog already uses for a finding, so I re-derived every replacement from that catalog's own sentences (securityAgent.remediationUnavailable.findingNotOpen and securityAgent.dashboardMetrics.openFindings) instead of a bare dictionary form:

Catalog Its own sentence Status label
it La segnalazione non è più aperta / Segnalazioni aperte Aperta
pt A ocorrência já não está aberta / Ocorrências abertas Aberta
ca La incidència ja no està oberta / Incidències obertes Oberta
ro Constatarea nu mai este deschisă / Constatări deschise Deschisă
bg Проблемът вече не е отворен / Отворени проблеми Отворен
nb Funnet er ikke lenger åpent / Åpne funn Åpent
mt Is-sejba m'għadhiex miftuħa / Sejbiet miftuħa Miftuħa
pa ਸਮੱਸਿਆ ਹੁਣ ਖੁੱਲ੍ਹੀ ਨਹੀਂ ਹੈ / ਖੁੱਲ੍ਹੀਆਂ ਸਮੱਸਿਆਵਾਂ ਖੁੱਲ੍ਹੀ
pt-BR A ocorrência não está mais em aberto / Ocorrências em aberto Em aberto

The first commit used the masculine dictionary form for these nine; each now agrees with the sentence beside it.

Verified on screen: the Italian finding detail reads Gravità Livello alto · Aperta after switching the app to Italiano, and the Italian list header reads Problemi rilevati. The Spanish Abierto and Arabic مفتوحة reads from the earlier comment are unchanged by this commit. check:i18n, check:plurals and oxfmt pass on the updated catalogs.

Italian finding detail showing the state label agreeing with the finding noun

@iscekic

iscekic commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate rerun at the new head: 16 cells, 15 errors, 17 warnings. The same run over main's catalogs produced the same rules on the same element paths (16 errors); the split between the dismiss-header safe-area findings and a single layout-shift moves between runs. Updated contact sheet attached.

Design gate contact sheet for the four changed security agent screens at this head

@iscekic

iscekic commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Arabic reads at the current head, from the design gate's own Arabic RTL cell screenshots for the four changed targets (same run uploaded for this head):

  • finding detail: الخطورة: عالٍ · مفتوحة
  • dismiss sheet, member role: استبعاد النتيجة with لا يمكن استبعاد هذه النتيجة and يمكن لمالكي المؤسسة والمشرفين ومديري الفوترة فقط استبعاد النتائج.
  • dismiss sheet, unknown finding id: استبعاد النتيجة with النتيجة غير موجودة and ربما أزيلت هذه النتيجة، أو لم تعد لديك صلاحية الوصول إليها.
  • filter sheet: تصفية النتائج

So the terminology and the open-state labels hold at this head as well as at the previous one; the second commit changed the nine non-Arabic catalogs and the Italian read above covers that edit.

@iscekic

iscekic commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Design gate rerun after the stop check, at the same head (1f3e8bb), and a correction to the check's premise.

  • This branch does not change apps/mobile/src/components/screen-header.tsx: git diff main...HEAD -- apps/mobile/src/components/screen-header.tsx is empty and git diff --stat main...HEAD lists 22 locale JSON files only. The file was read here to explain the gate's findings, not edited.
  • A gate run does follow the last commit: this fresh run is at head 1f3e8bb, uploaded for that head, with the contact sheet attached.
  • Result: 16 cells, 16 errors, 20 warnings, exit 1. The identical run over main's catalogs on the same emulator reports 16 errors, split the same way (14 safe-area, 2 layout-shift) on the same element paths; the only difference is unsettled warnings, which move between runs. So no error is attributable to this change.
  • safe-area is a measurement-window artifact, not a visual defect: a gate target is only { id, link }, so the dismiss route is opened by deep link outside its native form sheet, and the rule compares the header box with the app window's inset. On the run's own screenshots (1080×2400, 420 dpi) the status-bar clock is at y 55–81 px and the sheet header title at y 123–166 px — clear of it — and the main run measures the same title at y 129–166 px. Removing the dismiss targets to reach exit 0 would drop the screens whose copy this pull request changes, so the run keeps them and records the reasons instead.

Exit 2 played no part in any run here; the earlier exit-2 attempts were the adb reverse 8081 tunnel being stale, fixed by adb reverse --remove-all and re-adding the port, after which the app registers its Hermes page and the gate runs.

Design gate contact sheet for the four changed security agent screens at this head

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: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