Skip to content

fix(ios): typography audit rejects localized accessibility labels#106092

Merged
steipete merged 7 commits into
mainfrom
codex/fix-ios-typography-a11y
Jul 13, 2026
Merged

fix(ios): typography audit rejects localized accessibility labels#106092
steipete merged 7 commits into
mainfrom
codex/fix-ios-typography-a11y

Conversation

@steipete

@steipete steipete commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Related: #105859

AI-assisted: yes (Codex)

What Problem This Solves

Fixes an issue where the iOS branded-typography test rejected localized accessibility labels that use SwiftUI Text, even though those labels are accessibility metadata and are not visually rendered. The Apple localization checker requires that typed form, leaving the two checks contradictory on current main.

Why This Change Was Made

The typography scanner now excludes Text calls used directly by accessibilityLabel, accessibilityValue, and accessibilityHint, including multiline formatting and nested localized constructors. A small Swift lexical mask plus balanced-parenthesis scan keeps strings/comments from influencing classification. Ordinary visual Text and Label calls remain subject to the branded-font audit, including when they share a line with accessibility metadata.

User Impact

No runtime UI behavior changes. Maintainers can keep localized VoiceOver labels in their canonical SwiftUI form without making the typography test fail or weakening visual typography coverage.

Evidence

  • Before-fix scanner reproduction: SettingsProTabSections.swift:877 and SettingsProTabSections.swift:1403 reported as unbranded offenders.
  • After-fix scanner reproduction: no unbranded Text/Label offenders; accessibility metadata classifier positive and negative samples pass.
  • xcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.5' test -only-testing:OpenClawTests/OpenClawTypographyTests — pass, 11 tests in the focused suite.
  • node --import tsx scripts/apple-app-i18n.ts check — pass on Blacksmith Testbox tbx_01kxdgdkf1frraa2gfw4dnedb5 (run 29242957328).
  • pnpm check:changed — pass on the same synced Testbox checkout.
  • swiftformat --lint --config config/swiftformat apps/ios/Tests/OpenClawTypographyTests.swift — pass.
  • .agents/skills/autoreview/scripts/autoreview --mode local --stream-engine-output — clean, no accepted/actionable findings (0.88 confidence).

@openclaw-barnacle openclaw-barnacle Bot added app: ios App: ios size: XS maintainer Maintainer-authored PR labels Jul 13, 2026
@steipete steipete self-assigned this Jul 13, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b31eaa99c9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/Tests/OpenClawTypographyTests.swift Outdated
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 13, 2026
@steipete
steipete requested a review from a team as a code owner July 13, 2026 07:03
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord channel: googlechat Channel integration: googlechat channel: mattermost Channel integration: mattermost channel: slack Channel integration: slack channel: whatsapp-web Channel integration: whatsapp-web channel: zalouser Channel integration: zalouser app: macos App: macos app: web-ui App: web-ui gateway Gateway runtime cli CLI command changes scripts Repository scripts commands Command implementations docker Docker and sandbox tooling agents Agent runtime and tooling extensions: phone-control channel: qqbot extensions: qa-lab extensions: codex plugin: google-meet plugin: file-transfer extensions: policy labels Jul 13, 2026
@github-actions github-actions Bot removed the dependencies-changed PR changes dependency-related files label Jul 13, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 583b5d03db

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/Tests/OpenClawTypographyTests.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8a1180a235

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/Tests/OpenClawTypographyTests.swift Outdated
@clawsweeper clawsweeper Bot added the P2 Normal backlog priority with limited blast radius. label Jul 13, 2026
@clawsweeper

clawsweeper Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 13, 2026, 7:33 AM ET / 11:33 UTC.

Summary
The PR changes the iOS typography audit to exclude accessibility-only SwiftUI text calls while preserving checks for visually rendered text and labels.

PR surface: Other +217. Total +217 across 1 file.

Reproducibility: yes. The before-fix audit reports localized accessibility-only Text forms as unbranded offenders, and the focused native suite exercises the conflicting checks directly.

Review metrics: none identified.

Stored data model
Persistent data-model change detected: vector/embedding metadata: apps/ios/Tests/OpenClawTypographyTests.swift. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: canonical
Canonical: #106092
Summary: This PR is the canonical candidate repair for the typography-audit conflict; the related merged localization PR is provenance rather than a competing fix.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Refresh the branch and require the queued native iOS gates to pass on the exact mergeable head.

Risk before merge

  • [P1] The branch is behind current main, so the exact merge result still needs native audit gates to confirm that newer Swift source shapes are not misclassified.
  • [P1] The test now owns a small Swift lexical and balanced-call scanner; future syntax variants could create false positives or false negatives unless this helper is maintained with the audit.

Maintainer options:

  1. Refresh and finish native gates (recommended)
    Update the branch against current main and merge after the exact-head iOS typography and native scan checks pass.
  2. Pause for another audit boundary
    Hold the PR if maintainers do not want a custom lexical scanner inside the typography test.

Next step before merge

  • [P2] No mechanical contributor repair remains; a maintainer should decide whether to own the lexical-scanner boundary after the behind head is refreshed and exact-head native checks complete.

Maintainer decision needed

  • Question: Should OpenClaw accept this test-local Swift lexical scanner as the long-term boundary for accessibility-metadata typography exemptions?
  • Rationale: The patch appears correct and well-proven, but choosing parser-like test logic instead of a compiler-backed check or stricter source convention is a maintenance tradeoff automation cannot settle.
  • Likely owner: steipete — The triggering localization forms and recent merged iOS accessibility work are connected to this contributor's prior history.
  • Options:
    • Accept the bounded scanner (recommended): Refresh the branch, require the native gates, and own this focused helper as part of the typography audit.
    • Request another boundary: Pause the PR and require a simpler enforceable source convention or compiler-backed analysis before changing the audit.

Security
Cleared: The change is confined to an iOS test scanner and adds no production execution, dependency, permission, secret, or supply-chain surface.

Review details

Best possible solution:

Retain the narrow accessibility-metadata exemption and adversarial samples, refresh the branch onto current main, and land only after the exact-head native audit gates pass.

Do we have a high-confidence way to reproduce the issue?

Yes. The before-fix audit reports localized accessibility-only Text forms as unbranded offenders, and the focused native suite exercises the conflicting checks directly.

Is this the best way to solve the issue?

Yes, subject to accepting the test-helper maintenance cost. Classifying only directly owned accessibility metadata is narrower than weakening the visual typography rule or changing the canonical localized SwiftUI form.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against b0ebb81e89f5.

Label changes

Label justifications:

  • P2: The PR fixes a bounded maintainer-facing iOS audit regression without changing runtime UI behavior.
  • merge-risk: 🚨 automation: The modified classifier controls a repository audit and could silently weaken or falsely fail typography enforcement as Swift source shapes evolve.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The after-fix focused native run demonstrates the exact typography suite passing, supplemented by Apple i18n and changed-surface checks on a synced Testbox checkout.
  • proof: sufficient: Contributor real behavior proof is sufficient. The after-fix focused native run demonstrates the exact typography suite passing, supplemented by Apple i18n and changed-surface checks on a synced Testbox checkout.
Evidence reviewed

PR surface:

Other +217. Total +217 across 1 file.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 1 219 2 +217
Total 1 219 2 +217

What I checked:

Likely related people:

  • steipete: Authored the merged localization change that established the affected accessibility forms and therefore has prior merged history on the behavior beyond proposing this branch. (role: recent iOS accessibility contributor; confidence: medium; commits: c81ae0412cb0; files: apps/ios/Sources/Settings/SettingsProTabSections.swift, apps/ios/Tests/OpenClawTypographyTests.swift)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (3 earlier review cycles)
  • reviewed 2026-07-13T08:18:49.699Z sha 8a1180a :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-13T10:11:34.580Z sha 1c0e3cf :: found issues before merge. :: [P2] Handle nested calls inside accessibility Text arguments
  • reviewed 2026-07-13T11:17:29.098Z sha 728a423 :: needs maintainer review before merge. :: none

@steipete
steipete force-pushed the codex/fix-ios-typography-a11y branch from 8a1180a to 3fcbaff Compare July 13, 2026 09:06

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3fcbaff422

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/Tests/OpenClawTypographyTests.swift Outdated
@steipete
steipete force-pushed the codex/fix-ios-typography-a11y branch from 3fcbaff to 1c0e3cf Compare July 13, 2026 09:56
@clawsweeper clawsweeper Bot removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 13, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1c0e3cf67d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/ios/Tests/OpenClawTypographyTests.swift Outdated
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jul 13, 2026
@steipete

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@steipete

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@steipete

Copy link
Copy Markdown
Contributor Author

Land-ready verification for exact head f693ed4e2102beba8915b0b32c48c7b384b0e639:

  • Before fix: the typography scanner reproduced two false positives in SettingsProTabSections.swift for typed accessibility labels. After fix: no offenders; positive/negative classifier samples keep visual Text and Label calls audited.
  • xcodebuild -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.5' test -only-testing:OpenClawTests/OpenClawTypographyTests — passed, 11 tests.
  • node --import tsx scripts/apple-app-i18n.ts check — passed.
  • node --import tsx scripts/native-app-i18n.ts check — passed on the current-main inventory.
  • pnpm check:changed and the Apple i18n check passed on Blacksmith Testbox tbx_01kxdgdkf1frraa2gfw4dnedb5: run 29242957328.
  • Exact-head release gate passed, including native i18n, lint, test types, iOS build, macOS Swift, and the full release fan-out: run 29249918899.
  • Scheduled Workflow Sanity passed: run 29249859515. Scheduled native i18n also passed in run 29249859381; its macOS jobs remain provider-capacity queued and are covered by the successful exact-head release gate.
  • Fresh repo-native review: 0 findings, best-fix verdict. OPENCLAW_TESTBOX=1 scripts/pr prepare-run 106092 passed.

Known proof gaps: none for the touched test-scanner surface.

@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

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

Labels

app: ios App: ios maintainer Maintainer-authored PR merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant