Skip to content

docs(mobile): complete the App Store 4.7 self-audit - #291

Merged
doublegate merged 1 commit into
mainfrom
docs/app-store-4-7-audit
Jul 31, 2026
Merged

docs(mobile): complete the App Store 4.7 self-audit#291
doublegate merged 1 commit into
mainfrom
docs/app-store-4-7-audit

Conversation

@doublegate

Copy link
Copy Markdown
Owner

Third v1.30.0 item, after #289 (Android CI) and #290 (iOS launch).

Checked against the shipped tree, not against intent.

Clean

No ROM acquisition path. load_rom(rom: Vec<u8>) takes bytes from the caller. No download, no fetch, no URL of any kind in rustysnes-mobile or rustysnes-android — the app cannot obtain content on the user's behalf, which is the substance of §4.7.

No bundled copyrighted content. The game DB ships empty and is loaded from a user-supplied file; there is no include_str! of a title list. The three "Super Mario World" strings in game_db.rs are a doc comment and two test fixtures inside mod tests — none reaches a binary.

Findings

"Super Nintendo Entertainment System", "Super Famicom" and "Super Scope" appear in user-facing strings (cli.rs, two About dialogs, and the peripheral picker).

What is already right: the app's own identity carries no Nintendo mark — android:label and PRODUCT_NAME are both RustySNES, bundle IDs are com.doublegate.*. Nothing passes itself off as a Nintendo product, and naming the hardware you emulate is ordinary nominative use.

But App Store review is conservative here and §4.7 rejections have cited exactly this.

Left as a recommendation, not applied

Soften the two iOS-visible surfaces before submission — the About string and the "Super Scope" label — and keep the marks in the desktop CLI, which no reviewer sees.

I have deliberately not made that change. It is a judgement about review risk rather than a legal conclusion, and it is the maintainer's call; applying it unilaterally would also make the About text less accurate for the desktop build.

Not covered

The touch UX for Mouse/Super Scope/Multitap does not exist yet, so its naming and art could not be audited. The doc says to re-run that item once it does.

🤖 Generated with Claude Code

Checked against the shipped tree rather than against intent.

Clean: no ROM acquisition path -- load_rom takes bytes from the caller,
and there is no download, fetch or URL anywhere in rustysnes-mobile or
rustysnes-android. No bundled copyrighted content -- the game DB ships
empty and is user-loaded; the three 'Super Mario World' strings are a doc
comment and two test fixtures, none of which reaches a binary.

Findings: 'Super Nintendo Entertainment System', 'Super Famicom' and
'Super Scope' appear in user-facing strings. The app's own identity is
clean (android:label and PRODUCT_NAME are RustySNES, bundle IDs are
com.doublegate.*), and naming the emulated hardware is ordinary
nominative use -- but App Store review is conservative and 4.7
rejections have cited exactly this.

Recorded as a RECOMMENDATION to soften the two iOS-visible surfaces
before submission, for the maintainer to accept or reject. Deliberately
not applied: it is a judgement about review risk, not a legal
conclusion, and the desktop strings face no reviewer at all.

The touch UX for Mouse/Super Scope/Multitap does not exist yet, so its
naming and art could not be audited; the doc says to re-run that item
once it does.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@doublegate, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 6 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 864f7a92-05a2-4c90-9bf3-53d70a7be444

📥 Commits

Reviewing files that changed from the base of the PR and between ee34709 and c3ee60f.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • docs/mobile-readiness.md

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Antigravity review (Gemini via Ultra)

This PR updates CHANGELOG.md and docs/mobile-readiness.md to record the completion and findings of the App Store §4.7 self-audit for mobile releases.

Blocking issues

None found.

Suggestions

  • docs/mobile-readiness.md:318 & docs/mobile-readiness.md:329-338: Bare filenames and line numbers (e.g., game_db.rs:6, cli.rs:60, ui_shell.rs:942) are cited without full crate paths. Use relative paths from the workspace root (e.g., crates/rustysnes-core/src/game_db.rs) so findings remain traceable as files drift.
  • docs/mobile-readiness.md:308-311: The static analysis grep command limits its scope to crates/rustysnes-mobile/src and crates/rustysnes-android/src. If mobile crates depend on rustysnes-core or other internal crates, those should be included in the audit command to guarantee no transitive ROM fetch routines exist.

Nitpicks

  • CHANGELOG.md:14-25: The changelog entry duplicates multiple paragraphs of detailed findings directly from docs/mobile-readiness.md; keep the changelog entry concise and defer full analysis to the documentation file.

Automated first-pass review by agy on a self-hosted runner -- not a human review.

@doublegate
doublegate merged commit e72de97 into main Jul 31, 2026
13 checks passed
@doublegate
doublegate deleted the docs/app-store-4-7-audit branch July 31, 2026 23:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant