Skip to content

feat(ios): add licenses settings screen#99290

Merged
joshavant merged 2 commits into
mainfrom
feature/ios-licenses-screen
Jul 3, 2026
Merged

feat(ios): add licenses settings screen#99290
joshavant merged 2 commits into
mainfrom
feature/ios-licenses-screen

Conversation

@joshavant

Copy link
Copy Markdown
Contributor

What Problem This Solves

Adds a Settings-tab Licenses screen so iOS users can view bundled third-party license acknowledgements in the app.

Why This Change Was Made

The screen loads UTF-8 .txt license files from apps/ios/Resources/Licenses/, orders them alphabetically by display title, and renders each license body as verbatim monospace text. The published list excludes OpenClaw/OpenClaw Foundation-owned entries and the iOS AGENTS guidance now documents how agents should maintain the screen.

User Impact

iOS users can open Settings > Licenses to inspect third-party license text for bundled dependencies. Maintainers can add or remove license entries by updating .txt files in the license resource folder rather than editing row source code.

Evidence

  • pnpm docs:list
  • git diff --check -- apps/ios/AGENTS.md
  • xcodebuild test -project apps/ios/OpenClaw.xcodeproj -scheme OpenClaw -destination 'id=CC67DD42-8B9E-43A8-B10E-532238BD283E' -configuration Debug -only-testing:OpenClawTests/LicenseDocumentLoaderTests -only-testing:OpenClawTests/SwiftUIRenderSmokeTests
  • maestro test --udid CC67DD42-8B9E-43A8-B10E-532238BD283E --no-ansi --debug-output .artifacts/ios-licenses-e2e/maestro-third-party-only-debug .artifacts/ios-licenses-e2e/licenses-no-subtitles.yaml
  • .agents/skills/autoreview/scripts/autoreview --mode commit --commit HEAD

Local screenshot artifact for maintainer inspection: .artifacts/ios-licenses-e2e/09-licenses-list-third-party-only.png.

@openclaw-barnacle openclaw-barnacle Bot added app: ios App: ios size: M maintainer Maintainer-authored PR labels Jul 3, 2026
@clawsweeper

clawsweeper Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 2, 2026, 9:31 PM ET / 01:31 UTC.

Summary
The PR adds an iOS Settings > Licenses route that loads bundled UTF-8 text license files from apps/ios/Resources/Licenses/, renders them in SwiftUI, updates XcodeGen resources, native string inventory, tests, and iOS AGENTS guidance.

PR surface: Docs +14, Other +342. Total +356 across 11 files.

Reproducibility: not applicable. this is a feature PR rather than a bug report. Source inspection shows current main lacks the route and the PR adds the new loader, Settings row, destination, resources, and tests.

Review metrics: 1 noteworthy metric.

  • Bundled license documents: 2 added. Maintainers should confirm the initial acknowledgement list matches the iOS app's bundled third-party dependencies before release.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🌊 off-meta tidepool
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:

  • Confirm the initial WebRTC and ElevenLabsKit license list is the intended scope for this release.
  • [P2] Wait for the remaining required CI shards to finish before merge.

Mantis proof suggestion
A short visible proof would help reviewers confirm the new iOS Settings > Licenses list and detail view in a real simulator/app UI. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify iOS Settings > Licenses shows WebRTC and ElevenLabsKit rows and opens verbatim license detail text.

Risk before merge

  • [P1] License completeness is still a maintainer review point: this PR adds WebRTC and ElevenLabsKit acknowledgements, while broader bundled-resource notice policy is not fully defined by current iOS docs.
  • [P1] Some broad CI shards were still in progress when checked, so merge should still wait for required checks to finish.

Maintainer options:

  1. Decide the mitigation before merge
    Land the iOS license screen once maintainers confirm the intended third-party acknowledgement scope and required checks finish cleanly.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P1] No ClawSweeper repair job is appropriate because there are no actionable code findings; this needs normal maintainer review, license-scope confirmation, and CI completion.

Security
Cleared: The diff adds Swift UI/resource loading, text license resources, tests, and scoped guidance; no concrete security or supply-chain regression was found.

Review details

Best possible solution:

Land the iOS license screen once maintainers confirm the intended third-party acknowledgement scope and required checks finish cleanly.

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

Not applicable: this is a feature PR rather than a bug report. Source inspection shows current main lacks the route and the PR adds the new loader, Settings row, destination, resources, and tests.

Is this the best way to solve the issue?

Yes, with one maintainer check: using a small SwiftUI route plus a resource-backed text-file loader is a maintainable fit for the existing Settings architecture. The remaining question is whether the initial license list is the complete intended release scope.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add P3: This is a low-risk user-facing iOS settings/compliance feature with limited runtime blast radius.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The PR has the protected maintainer label, so the external contributor proof gate is not applied; the body reports focused xcodebuild and Maestro validation, though the local screenshot path is not publicly inspectable.

Label justifications:

  • P3: This is a low-risk user-facing iOS settings/compliance feature with limited runtime blast radius.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The PR has the protected maintainer label, so the external contributor proof gate is not applied; the body reports focused xcodebuild and Maestro validation, though the local screenshot path is not publicly inspectable.
Evidence reviewed

PR surface:

Docs +14, Other +342. Total +356 across 11 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 1 14 0 +14
Config 0 0 0 0
Generated 0 0 0 0
Other 10 474 132 +342
Total 11 488 132 +356

What I checked:

  • Current main lacks the requested screen: Current SettingsRoute has no .licenses case and current Settings rows end at About, so the central feature is not already implemented on main. (apps/ios/Sources/Design/SettingsProTabSupport.swift:6, 4440226d52c2)
  • PR adds the route and destination: The PR adds the Licenses row, routes .licenses to licensesDestination, and renders document rows with navigation to detail views. (apps/ios/Sources/Design/SettingsProTabSections.swift:171, 1cff0c52481f)
  • PR adds resource-backed license loading: LicenseDocumentLoader discovers regular UTF-8 .txt files under Licenses, derives display titles from filenames, skips hidden/non-text/empty files, and sorts by title. (apps/ios/Sources/Design/LicenseDocuments.swift:14, 1cff0c52481f)
  • PR bundles the license folder as app resources: The XcodeGen spec adds Resources/Licenses as a folder resource for the iOS app target, matching the loader's Bundle.main.resourceURL/Licenses lookup. (apps/ios/project.yml:63, 1cff0c52481f)
  • Dependency license text checked: The added ElevenLabsKit and WebRTC license files match the upstream license files for steipete/ElevenLabsKit tag 0.1.1 and stasel/WebRTC tag 147.0.0. (apps/ios/Resources/Licenses/ElevenLabsKit.txt:1, 1cff0c52481f)
  • Validation context: Live PR status showed the PR is mergeable with many relevant checks already successful, including native-i18n, ios-build, macos-swift, dependency/security guards, and iOS dead-code scan; a few broad CI shards were still running during review. (1cff0c52481f)

Likely related people:

  • steipete: Recently modernized the iOS Settings design and iOS project configuration that this PR extends. (role: recent area contributor; confidence: high; commits: 313560d5b98e, 8502ef6c598b; files: apps/ios/Sources/Design/SettingsProTabSections.swift, apps/ios/project.yml)
  • joshavant: Has prior merged work on iOS Settings, notification UX, App Store/release configuration, and the project file, beyond authoring this PR. (role: recent iOS settings and release contributor; confidence: high; commits: 0bd2aa8ee057, 1168ac2fcd2b, d4f666874f3a; files: apps/ios/Sources/Design/SettingsProTabSupport.swift, apps/ios/Sources/Design/SettingsProTabSections.swift, apps/ios/project.yml)
  • Solvely-Colin: Helped introduce and evolve the Pro iOS Settings/app surfaces that the new screen plugs into. (role: feature history owner; confidence: medium; commits: f6e51ff99af4, bf89552e6783; files: apps/ios/Sources/Design/SettingsProTab.swift, apps/ios/Sources/Design/SettingsProTabSections.swift, apps/ios/Tests/SwiftUIRenderSmokeTests.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.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. labels Jul 3, 2026
@joshavant
joshavant merged commit 878ba55 into main Jul 3, 2026
104 of 110 checks passed
@joshavant
joshavant deleted the feature/ios-licenses-screen branch July 3, 2026 01:35
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 P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: L 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