Skip to content

docs: improve setup guide readability across framework pages - #281

Merged
hyochan merged 12 commits into
mainfrom
docs/setup-readability
Aug 4, 2026
Merged

hyochan merged 12 commits into
mainfrom
docs/setup-readability

Conversation

@hyochan

@hyochan hyochan commented Aug 4, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Rework the six framework setup pages (React Native, Expo, Flutter, Godot, KMP, MAUI) and three store pages (index, Amazon, Horizon) for readability, addressing feedback that the current docs read worse than the old per-repo docusaurus sites
  • Flagship fix: the React Native page introduced Vega OS with zero context — it now has its own explained section ("Amazon's newer, non-Android operating system; its apps run on the Kepler runtime") and links Amazon Store Setup for details
  • Fix factual defects found along the way: wrong Nitro Modules repo link, missing react-native-nitro-modules peer-dependency in the install command, a stale "Expo SDK 54+: no configuration needed" claim, and two fabricated/unconditional itms-apps Info.plist justifications

Changes

react-native.tsx

  • Vega OS section with definition + Amazon Store Setup link; Android bullet now distinguishes build-flavor targets (Horizon/Fire OS) from the separate Vega target
  • Install command documents the react-native-nitro-modules peer dependency; Nitro link corrected to mrousavy/nitro
  • Two overlapping requirement callouts merged into one; Swift 6 interop workaround moved into Troubleshooting; Troubleshooting now precedes the terminal Next Steps

expo.tsx

  • Config Plugin Options gets an orientation paragraph (IAPKit key + optional store modules, all off by default); triple-duplicated store links reduced
  • Restored the hedged Expo SDK 54 Kotlin guidance (the default toolchain often works, but OpenIAP artifacts need Kotlin 2.2+ — pin via expo-build-properties if the build fails); added the missing Store Setup bullet to Next Steps

flutter.tsx

  • New Prerequisites section; Basic Setup reshaped around a realistic StatefulWidget with listener setup/teardown
  • dataAndroid deprecation note moved into Troubleshooting; itms-apps Info.plist entry now states its real, optional purpose (only needed if your own code checks App Store links — the plugin never does)

godot.tsx / kmp.tsx / maui.tsx

  • Unified section order: Troubleshooting before terminal Next Steps on all six framework pages
  • kmp: "all APIs are suspending" scoped to the connection/fetch/purchase APIs (getVersion/getStore/Flows are not suspend); unverifiable "auto-declared OpenIAP pod" claim removed; Info.plist guidance aligned with Flutter
  • godot: Next Steps store bullet now states godot-iap's actual support boundary (no dedicated Horizon/Fire OS/Vega flavors yet)

store pages

  • Orientation paragraphs and per-framework support boundaries (e.g. Horizon support ships in every framework except Godot)

scripts/audit-non-godot-parity.mjs

  • The MAUI docs text pin updated from "Google Billing, Play" to the corrected product name "Google Play Billing, Play Services"; the guard still requires the NuGet dependency-shape description

API wayfinding (follow-up commit 33a52523)

Per maintainer feedback that code examples never tell readers where in the docs each function is specified:

  • Every Usage intro's flow sentence is now a clickable roadmap — initConnection → listeners → fetchProducts → requestPurchase → finishTransaction, each step linking its API/event reference page
  • Each major example gets a one-line pointer naming the APIs it uses (godot links snake_case, MAUI links *Async PascalCase — all resolve to the same language-neutral reference pages)
  • First prose mentions link out (ErrorCode → Error Codes, listeners → event pages); CodeBlock contents are untouched (verified byte-identical)
  • CodeRabbit findings addressed in the same commit: flutter/godot examples no longer consume every purchase unconditionally, and the react-native Swift workaround is described as the Swift 5 language mode rather than a compiler pin

Unified Callout system (follow-up commit ded5e45e)

Per maintainer feedback that the rounded bordered callout boxes read poorly and stack up: all ~95 callouts across 46 docs pages now use one semantic <Callout kind="note|tip|important|warning" title?> component (flat brand-tinted background, thin left rule, small uppercase label, light/dark variants) replacing two legacy systems — copy-pasted inline-styled divs and the blue/yellow/green .alert-card classes (CSS removed).

  • Setup-journey pages got an editorial pass: audience-routing boxes folded into intro prose, redundant boxes demoted to paragraphs, no adjacent stacked callouts, and every framework page now surfaces the same boxed finishTransaction auto-refund warning
  • warning is reserved for genuine hazards; availability/requirement boxes use important
  • Fixes dark-mode breakage from hard-coded colors in a few legacy boxes

Review process

Four independent review lenses (facts / links & anchors / render & format / cross-page consistency) ran repeatedly over the diff until convergence: round 1 → 11 findings, round 2 → 6, round 3 → 3, round 4 → 0. Every factual claim added by the rewrite was verified against library source (e.g. grepping libraries/flutter_inapp_purchase and libraries/kmp-iap for itms-apps/canOpenURL before rewording those sections).

Preview

Full-page renders of the reworked pages (from the Vite dev server), committed under .github/pr-previews/ per the preview convention:

React Native (Vega OS section, merged callouts) Expo Flutter
React Native setup page Expo setup page Flutter setup page

Test plan

  • prettier --check passes on all nine pages
  • tsc --noEmit passes (packages/docs)
  • bun run lint passes (packages/docs)
  • vite build succeeds
  • bun run audit:docs — 0 drift
  • Pre-commit SDK parity audit passes with the updated MAUI text pin

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Expanded setup guidance for Expo, Flutter, Godot, KMP, .NET MAUI, and React Native.
    • Clarified platform prerequisites, configuration, API usage, transaction handling, troubleshooting, and toolchain requirements.
    • Added setup details for Horizon OS, Amazon Fire OS, Vega OS, and other supported stores.
    • Improved navigation, examples, verification steps, and links to next steps.
    • Standardized notes, tips, warnings, and important guidance with consistent callouts and improved link styling.

react-native:
- Explain Vega OS in its own section instead of introducing it
  unannounced, and link Amazon Store Setup for details
- Document the react-native-nitro-modules peer dependency in the
  install command; fix the Nitro Modules repo link
- Merge overlapping requirement callouts into one; move the Swift 6
  interop workaround into Troubleshooting

expo:
- Add a Config Plugin Options orientation paragraph (IAPKit key +
  optional store modules); deduplicate repeated store links
- Restore hedged Expo SDK 54 Kotlin guidance; add the missing Store
  Setup bullet to Next Steps

flutter:
- Add Prerequisites; reshape Basic Setup around a StatefulWidget
- Move the dataAndroid deprecation note into Troubleshooting
- State the real (optional) reason for the itms-apps Info.plist entry

godot / kmp / maui:
- Unify section order (Troubleshooting before terminal Next Steps)
- Scope the kmp suspend-API claim to connection/fetch/purchase APIs;
  align itms-apps guidance with flutter; clarify store boundaries

store pages (index, amazon, horizon):
- Add orientation paragraphs and per-framework support boundaries
  (e.g. Horizon ships in every framework except Godot)

Also update the maui parity-audit text pin to the corrected product
name ("Google Play Billing, Play Services") so the guard keeps
requiring the NuGet dependency-shape description.

Verified: prettier, tsc, eslint, vite build, and audit:docs all pass;
four review-self lens rounds (facts/links/render/consistency)
converged with zero findings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@hyochan hyochan added the 📖 documentation Improvements or additions to documentation label Aug 4, 2026
@coderabbitai

coderabbitai Bot commented Aug 4, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7d5b432f-cdb4-4556-827c-e9c3482f35f0

📥 Commits

Reviewing files that changed from the base of the PR and between 4ce9a9d and 4027c61.

📒 Files selected for processing (1)
  • packages/docs/src/styles/documentation.css

📝 Walkthrough

Walkthrough

Updated framework setup guides, store-target documentation, and documentation presentation. Added shared Callout usage, expanded purchase-flow guidance, clarified alternative-store configuration, and updated audit expectations.

Changes

Store targets and framework setup

Layer / File(s) Summary
Store targets and framework setup
packages/docs/src/pages/docs/setup/store/*, packages/docs/src/pages/docs/setup/{expo,flutter,godot,kmp,maui,react-native}.tsx
The guides now document Horizon OS, Fire OS, Vega OS, and Onside targets, platform requirements, configuration, purchase flows, transaction completion, troubleshooting, and navigation.

Shared callout migration

Layer / File(s) Summary
Shared callout migration
packages/docs/src/components/Callout.tsx, packages/docs/src/pages/docs/**/*.tsx, packages/docs/src/styles/*
A reusable Callout component and semantic styles replace custom alert-card markup across setup, API, feature, foundation, guide, update, and backend pages.

Documentation audit and link styling

Layer / File(s) Summary
Documentation audit and link styling
scripts/audit-*.mjs, packages/docs/src/styles/documentation.css
Audit checks now match revised documentation wording. Documentation links use visible theme-specific underline colors.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested labels: :stadium: ui, ፦ refactor

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary documentation readability improvements across the framework setup pages.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/setup-readability

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Rendered full-page captures of the reworked React Native, Expo, and
Flutter setup pages.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
packages/docs/src/pages/docs/setup/store/amazon.tsx (1)

317-329: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Reject conflicting Flutter store flags.

The current Flutter sample does not check horizonEnabled && fireOsEnabled before computing flavor, so a stale Horizon flag can force the Fire OS Gradle flavor. Add the same mutual-exclusion check shown in the React Native and Horizon samples.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs/src/pages/docs/setup/store/amazon.tsx` around lines 317 - 329,
Update the Flutter sample’s Gradle configuration around the fireOsEnabled and
horizonEnabled property parsing to reject or fail on both flags being true
before computing flavor. Preserve the existing flavor selection for valid
configurations, ensuring conflicting store flags cannot silently select a
flavor.
packages/docs/src/pages/docs/setup/kmp.tsx (1)

292-307: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Wait for initConnection() before querying or purchasing.

The docs state init runs first, but line 292 launches it independently. Lines 338-362 then call fetchProducts and requestPurchase in separate coroutines, so they can start before the billing client is connected. Await the initialization coroutine before the product/purchase flow.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs/src/pages/docs/setup/kmp.tsx` around lines 292 - 307, Update
the setup example around kmpIAP.initConnection so initialization completes
before any fetchProducts or requestPurchase calls execute. Capture and await the
coroutine that runs initConnection, then start the product and purchase flow
only after it has completed; keep the purchaseUpdatedListener and
purchaseErrorListener collectors independent as required.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/docs/src/pages/docs/setup/flutter.tsx`:
- Around line 290-293: Update the purchase handlers in
packages/docs/src/pages/docs/setup/flutter.tsx (lines 290-293) and
packages/docs/src/pages/docs/setup/godot.tsx (lines 523-525) to derive the
finishTransaction consumable flag from each product’s catalog type: pass true
only for consumables, and pass false or omit it for non-consumables and
subscriptions.

In `@packages/docs/src/pages/docs/setup/react-native.tsx`:
- Around line 456-472: The prose description in the paragraph under the "Swift 6
C++ interop errors (Nitro)" heading states "pin Swift 5.10" but the actual build
setting SWIFT_VERSION = '5.0' selects Swift 5 language mode, not version 5.10.
Update the text in that paragraph to accurately describe the setting as enabling
Swift 5 language mode or Swift 5 compatibility mode instead of referring to
"Swift 5.10".

---

Outside diff comments:
In `@packages/docs/src/pages/docs/setup/kmp.tsx`:
- Around line 292-307: Update the setup example around kmpIAP.initConnection so
initialization completes before any fetchProducts or requestPurchase calls
execute. Capture and await the coroutine that runs initConnection, then start
the product and purchase flow only after it has completed; keep the
purchaseUpdatedListener and purchaseErrorListener collectors independent as
required.

In `@packages/docs/src/pages/docs/setup/store/amazon.tsx`:
- Around line 317-329: Update the Flutter sample’s Gradle configuration around
the fireOsEnabled and horizonEnabled property parsing to reject or fail on both
flags being true before computing flavor. Preserve the existing flavor selection
for valid configurations, ensuring conflicting store flags cannot silently
select a flavor.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 94032e16-97b1-40b8-8b8c-be34015e9452

📥 Commits

Reviewing files that changed from the base of the PR and between fb05cce and 6c29378.

⛔ Files ignored due to path filters (3)
  • .github/pr-previews/pr-281-setup-readability-expo.jpg is excluded by !**/*.jpg
  • .github/pr-previews/pr-281-setup-readability-flutter.jpg is excluded by !**/*.jpg
  • .github/pr-previews/pr-281-setup-readability-react-native.jpg is excluded by !**/*.jpg
📒 Files selected for processing (10)
  • packages/docs/src/pages/docs/setup/expo.tsx
  • packages/docs/src/pages/docs/setup/flutter.tsx
  • packages/docs/src/pages/docs/setup/godot.tsx
  • packages/docs/src/pages/docs/setup/kmp.tsx
  • packages/docs/src/pages/docs/setup/maui.tsx
  • packages/docs/src/pages/docs/setup/react-native.tsx
  • packages/docs/src/pages/docs/setup/store/amazon.tsx
  • packages/docs/src/pages/docs/setup/store/horizon.tsx
  • packages/docs/src/pages/docs/setup/store/index.tsx
  • scripts/audit-non-godot-parity.mjs

Comment thread packages/docs/src/pages/docs/setup/flutter.tsx
Comment thread packages/docs/src/pages/docs/setup/react-native.tsx
hyochan and others added 4 commits August 5, 2026 01:40
Per maintainer feedback: code examples never told readers where in the
docs each function is specified, so following a setup page to a working
implementation felt disorienting.

- Turn each Usage intro's flow sentence into a clickable roadmap:
  initConnection -> listeners -> fetchProducts -> requestPurchase ->
  finishTransaction, every step linking its API/event reference
- Add a one-line reference pointer next to each major example naming
  the APIs it uses (snake_case on godot, PascalCase on maui — all
  resolve to the same language-neutral reference pages)
- Link first mentions in prose (ErrorCode -> Error Codes, listeners ->
  event pages); CodeBlock contents untouched

Also address CodeRabbit review findings:
- flutter/godot purchase handlers no longer pass the consumable flag
  unconditionally as true; examples now use false with a "true for
  consumables" note, matching the react-native page
- react-native Swift workaround wording corrected from "pin Swift
  5.10" to "Swift 5 language mode (SWIFT_VERSION = '5.0')"

Verified: prettier, tsc, eslint, vite build, audit:docs pass; three
review-self lens rounds converged (identifier-truth and render lenses
clean from round 1; link targets mechanically checked against the
route inventory; CodeBlock strings byte-identical).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Per maintainer feedback that the rounded bordered boxes read poorly
and pages stack multiple boxes: replace both legacy callout systems
(21 files of copy-pasted inline-styled divs and 23 files of
.alert-card classes — ~95 boxes total) with one semantic component.

- New src/components/Callout.tsx: kind = note | tip | important |
  warning, optional title; flat brand-tinted background, thin left
  rule, small uppercase label; light + dark variants
- Editorial reduction on the setup-journey pages (framework setup,
  ios-setup, android-setup): audience-routing boxes folded into intro
  prose, redundant boxes demoted to paragraphs, no page stacks
  adjacent callouts anymore; every framework page now surfaces the
  same boxed finishTransaction auto-refund warning
- Mechanical conversion everywhere else: labels moved into titles,
  emoji prefixes dropped, hazard-only use of the warning kind
  (availability/requirement boxes downgraded to important)
- Fix dark-mode breakage from hard-coded colors (e.g. the Apple
  Developer Forums blockquote in upgrade-downgrade)
- Remove the dead .alert-card CSS; carry the TL;DR-adjacency rule
  over to .callout
- Update the deprecation-schedule audit pin to the callout title form

Verified: prettier, tsc, eslint, vite build, audit:docs, audit:parity
pass; link targets on removed lines mechanically confirmed present in
the replacement markup; kind inventory audited (warning reserved for
hazards, no default-duplicate titles); light and dark render checked
live.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/docs/src/pages/docs/features/subscription/upgrade-downgrade.tsx`:
- Around line 161-178: Restore the quoted Apple Developer Forums excerpt in a
blockquote within the Callout, replacing the first paragraph while preserving
its text and inline code formatting. Keep the attribution link in the separate
paragraph unchanged.

In `@packages/docs/src/pages/docs/guides/testing.tsx`:
- Around line 321-325: Update the warning Callout guidance in the testing
documentation to instruct callers to finish transactions only after successful
verification and durable content delivery. Explicitly state that failed or
transient verification must leave the transaction pending for retry, replacing
the current direction to always call finishTransaction even when verification
fails.

In `@packages/docs/src/pages/docs/ios-setup.tsx`:
- Around line 377-379: Update the iOS-specific requirements text near the
paragraph and the corresponding section around the subscription guidance to
narrow the automatic-handling claim: describe OpenIAP libraries as providing
platform bindings and normalized APIs, while explicitly stating that the app or
backend must still implement server-side verification, finishTransaction,
Restore Purchases, and subscription handling.

In `@packages/docs/src/styles/components.css`:
- Around line 323-333: Update the paragraph reset selector in the callout styles
from `.doc-page .callout p` to `.callout-body p`, so it only affects body
paragraphs and allows `.doc-page .callout-label` and `.callout-body p + p` to
apply their intended margins.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4108dd9d-7825-4e84-b616-51440b8511b0

📥 Commits

Reviewing files that changed from the base of the PR and between 6c29378 and ded5e45.

⛔ Files ignored due to path filters (2)
  • .github/pr-previews/pr-281-setup-readability-flutter.jpg is excluded by !**/*.jpg
  • .github/pr-previews/pr-281-setup-readability-react-native.jpg is excluded by !**/*.jpg
📒 Files selected for processing (48)
  • packages/docs/src/components/Callout.tsx
  • packages/docs/src/pages/docs/android-setup.tsx
  • packages/docs/src/pages/docs/apis/android/acknowledge-purchase-android.tsx
  • packages/docs/src/pages/docs/apis/android/consume-purchase-android.tsx
  • packages/docs/src/pages/docs/apis/android/create-billing-program-reporting-details-android.tsx
  • packages/docs/src/pages/docs/apis/fetch-products.tsx
  • packages/docs/src/pages/docs/apis/finish-transaction.tsx
  • packages/docs/src/pages/docs/apis/ios/present-external-purchase-link-ios.tsx
  • packages/docs/src/pages/docs/apis/request-purchase.tsx
  • packages/docs/src/pages/docs/ecosystem.tsx
  • packages/docs/src/pages/docs/events/ios/promoted-product-listener-ios.tsx
  • packages/docs/src/pages/docs/features/debugging.tsx
  • packages/docs/src/pages/docs/features/discount.tsx
  • packages/docs/src/pages/docs/features/external-purchase.tsx
  • packages/docs/src/pages/docs/features/purchase.tsx
  • packages/docs/src/pages/docs/features/refund.tsx
  • packages/docs/src/pages/docs/features/subscription/index.tsx
  • packages/docs/src/pages/docs/features/subscription/upgrade-downgrade.tsx
  • packages/docs/src/pages/docs/features/validation.tsx
  • packages/docs/src/pages/docs/foundation/founding-supporters.tsx
  • packages/docs/src/pages/docs/foundation/governance.tsx
  • packages/docs/src/pages/docs/foundation/one-pager.tsx
  • packages/docs/src/pages/docs/foundation/roadmap-budget.tsx
  • packages/docs/src/pages/docs/foundation/sponsorship.tsx
  • packages/docs/src/pages/docs/guides/ai-assistants.tsx
  • packages/docs/src/pages/docs/guides/testing.tsx
  • packages/docs/src/pages/docs/ios-setup.tsx
  • packages/docs/src/pages/docs/kit-backend.tsx
  • packages/docs/src/pages/docs/lifecycle/index.tsx
  • packages/docs/src/pages/docs/setup/expo.tsx
  • packages/docs/src/pages/docs/setup/flutter.tsx
  • packages/docs/src/pages/docs/setup/godot.tsx
  • packages/docs/src/pages/docs/setup/kmp.tsx
  • packages/docs/src/pages/docs/setup/maui.tsx
  • packages/docs/src/pages/docs/setup/react-native.tsx
  • packages/docs/src/pages/docs/setup/store/amazon.tsx
  • packages/docs/src/pages/docs/types/ios/app-transaction-ios.tsx
  • packages/docs/src/pages/docs/types/ios/subscription-billing-plan-ios.tsx
  • packages/docs/src/pages/docs/types/purchase.tsx
  • packages/docs/src/pages/docs/types/verify-purchase-with-provider-props.tsx
  • packages/docs/src/pages/docs/types/verify-purchase-with-provider-result.tsx
  • packages/docs/src/pages/docs/updates/announcements.tsx
  • packages/docs/src/pages/docs/updates/deprecations.tsx
  • packages/docs/src/pages/docs/updates/releases.tsx
  • packages/docs/src/pages/docs/webhooks.tsx
  • packages/docs/src/styles/components.css
  • packages/docs/src/styles/dark-mode.css
  • scripts/audit-deprecation-schedule.mjs
🚧 Files skipped from review as they are similar to previous changes (5)
  • packages/docs/src/pages/docs/setup/store/amazon.tsx
  • packages/docs/src/pages/docs/setup/kmp.tsx
  • packages/docs/src/pages/docs/setup/maui.tsx
  • packages/docs/src/pages/docs/setup/flutter.tsx
  • packages/docs/src/pages/docs/setup/godot.tsx

Comment thread packages/docs/src/pages/docs/guides/testing.tsx
Comment thread packages/docs/src/pages/docs/ios-setup.tsx
Comment thread packages/docs/src/styles/components.css
hyochan and others added 3 commits August 5, 2026 05:43
Direct read-through of the reader journey found the iOS/Android setup
pages naming APIs without linking them:

- ios-setup: Purchase Verification -> validation guide; Restore
  Purchases -> restorePurchases + getAvailablePurchases references
- android-setup: acknowledgment and consumption -> finishTransaction
  (with the isConsumable flag), verification -> validation guide and
  IAPKit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The verification lens caught .doc-page global rules defeating the new
callout styles by specificity:

- .doc-page p (0,1,1) overrode .callout-label (0,1,0), rendering every
  label 14px gray with no gap instead of the small kind-colored
  uppercase label; .doc-page .callout p (0,2,1) also zeroed paragraph
  and list spacing inside bodies. Scoped stronger selectors
  (.doc-page .callout .callout-label, .doc-page .callout-body p + p,
  .doc-page .callout-body ul/ol) now win; list left indent preserved.
- Verified live with computed styles: label 12px/kind color/4px gap,
  body paragraphs 13px with 8px gaps, list indent 24px kept.

Also from the lens round and direct read-through:
- create-billing-program-reporting-details-android: External Offer
  ordering callout upgraded important -> warning (24-hour token
  reporting carries the account-suspension consequence documented on
  the external-purchase page)
- purchase.tsx: fix pre-existing cross-line JSX seam rendering
  "useiapkit.amazon"

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- upgrade-downgrade: restore blockquote semantics for the Apple
  Developer Forums quotation inside the callout
- testing: correct the finishTransaction guidance — finish only after
  verification and delivery succeed; leave transient verification
  failures unfinished so the transaction is redelivered (the previous
  wording said to finish even when verification fails, contradicting
  the finish-transaction reference)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
packages/docs/src/pages/docs/ios-setup.tsx (1)

377-379: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Narrow the automatic-handling claims across both setup pages.

The four paragraphs still imply OpenIAP libraries complete platform or subscription requirements rather than providing bounded APIs. Replace them with scoped wording: libraries implement the OpenIAP spec for platform bindings, while the app and backend still implement verification, entitlement delivery, transaction finishing/acknowledgment, restore, subscription-state handling, and renewal work.

  • packages/docs/src/pages/docs/ios-setup.tsx#L377-L379
  • packages/docs/src/pages/docs/ios-setup.tsx#L462-L466
  • packages/docs/src/pages/docs/android-setup.tsx#L353-L355
  • packages/docs/src/pages/docs/android-setup.tsx#L490-L494
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs/src/pages/docs/ios-setup.tsx` around lines 377 - 379, Update
the four referenced paragraphs in packages/docs/src/pages/docs/ios-setup.tsx
lines 377-379 and 462-466, and packages/docs/src/pages/docs/android-setup.tsx
lines 353-355 and 490-494, to state that OpenIAP libraries implement the OpenIAP
specification for platform bindings only; explicitly preserve app/backend
responsibility for verification, entitlement delivery, transaction finishing or
acknowledgment, restore, subscription-state handling, and renewals.
packages/docs/src/pages/docs/android-setup.tsx (1)

306-310: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe the ADB command accurately.

adb shell pm clear com.android.vending clears Google Play Store data, not only the cache. This can reset Play Store state and require the tester to sign in again.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs/src/pages/docs/android-setup.tsx` around lines 306 - 310,
Update the Callout text near the ADB command to state that `adb shell pm clear
com.android.vending` clears Google Play Store data, including app state, rather
than only its cache, and warn that this may require signing in again.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/docs/src/pages/docs/android-setup.tsx`:
- Around line 374-379: Update the Android acknowledgment guidance near
finishTransaction to state the complete order: verify the purchase with a
trusted verifier such as /v1/purchase/verify or IAPKit, grant and persist the
entitlement, then call finishTransaction. Explicitly warn that finishing before
delivery is durably persisted can cause Google Play to refund an unfulfilled
purchase.

---

Outside diff comments:
In `@packages/docs/src/pages/docs/android-setup.tsx`:
- Around line 306-310: Update the Callout text near the ADB command to state
that `adb shell pm clear com.android.vending` clears Google Play Store data,
including app state, rather than only its cache, and warn that this may require
signing in again.

In `@packages/docs/src/pages/docs/ios-setup.tsx`:
- Around line 377-379: Update the four referenced paragraphs in
packages/docs/src/pages/docs/ios-setup.tsx lines 377-379 and 462-466, and
packages/docs/src/pages/docs/android-setup.tsx lines 353-355 and 490-494, to
state that OpenIAP libraries implement the OpenIAP specification for platform
bindings only; explicitly preserve app/backend responsibility for verification,
entitlement delivery, transaction finishing or acknowledgment, restore,
subscription-state handling, and renewals.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5216d70e-af9f-46e9-877a-b3009887d08a

📥 Commits

Reviewing files that changed from the base of the PR and between ded5e45 and 4709ba5.

⛔ Files ignored due to path filters (3)
  • .github/pr-previews/pr-281-setup-readability-expo.jpg is excluded by !**/*.jpg
  • .github/pr-previews/pr-281-setup-readability-flutter.jpg is excluded by !**/*.jpg
  • .github/pr-previews/pr-281-setup-readability-react-native.jpg is excluded by !**/*.jpg
📒 Files selected for processing (2)
  • packages/docs/src/pages/docs/android-setup.tsx
  • packages/docs/src/pages/docs/ios-setup.tsx

Comment thread packages/docs/src/pages/docs/android-setup.tsx Outdated
hyochan and others added 2 commits August 5, 2026 05:54
Per review: verify with a trusted verifier, grant and persist the
entitlement so it survives a restart, then acknowledge through
finishTransaction — finishing before durable delivery risks refunding
an unfulfilled purchase.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Per maintainer feedback that hook-state fields and type names in prose
never link their Types pages:

- react-native Hook State bullets now show each field's shape with a
  linked type: products (Product[]), subscriptions
  (ProductSubscription[]), availablePurchases (Purchase[]),
  activeSubscriptions (ActiveSubscription[])
- flutter/godot/maui prose first-mentions of Purchase and
  ProductRequest link their type pages
- expo/kmp left unchanged: their prose never names a mapped type, and
  links are only added where the identifier actually appears

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
packages/docs/src/pages/docs/setup/maui.tsx (2)

227-254: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Deliver the entitlement before finishing the transaction.

The new flow says to finish after verification, but it does not require successful entitlement delivery first. The adjacent example finishes at Line [332]–[334] and grants the entitlement at Line [336]. If delivery fails after FinishTransactionAsync, the transaction loses its recovery path.

Update the prose and example to use this order: verify the purchase, grant the entitlement, then finish the transaction. This matches packages/docs/src/pages/docs/apis/finish-transaction.tsx and packages/docs/src/pages/introduction.tsx.

Proposed sequence correction
-    await mutate.FinishTransactionAsync(
-        purchase: new PurchaseInput(purchase),
-        isConsumable: true);
-
     GrantEntitlement(purchase.ProductId);
+
+    await mutate.FinishTransactionAsync(
+        purchase: new PurchaseInput(purchase),
+        isConsumable: true);

Also applies to: 306-324

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs/src/pages/docs/setup/maui.tsx` around lines 227 - 254, Update
the Maui setup prose and adjacent purchase example around the typical flow and
transaction handling to explicitly verify the purchase, grant/deliver the
entitlement, and only then call FinishTransactionAsync. Ensure both referenced
sections no longer imply finishing immediately after verification, preserving
the recovery path if entitlement delivery fails.

522-533: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify the Google Play signing-key requirement.

“Signing key match the uploaded build” is ambiguous with Google Play App Signing. The upload key is used to submit the bundle, but Play distributes the app with the associated app-signing certificate. Test-track installations therefore require matching the installed package name and the Play app-signing certificate, not necessarily the upload key. State the required certificate explicitly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/docs/src/pages/docs/setup/maui.tsx` around lines 522 - 533, Update
the signing-key checklist item in the Maui setup documentation to explicitly
require that the installed package name and Google Play app-signing certificate
match the uploaded/configured build. Clarify that this is the Play-distributed
app-signing certificate, not necessarily the upload key.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@packages/docs/src/pages/docs/setup/maui.tsx`:
- Around line 227-254: Update the Maui setup prose and adjacent purchase example
around the typical flow and transaction handling to explicitly verify the
purchase, grant/deliver the entitlement, and only then call
FinishTransactionAsync. Ensure both referenced sections no longer imply
finishing immediately after verification, preserving the recovery path if
entitlement delivery fails.
- Around line 522-533: Update the signing-key checklist item in the Maui setup
documentation to explicitly require that the installed package name and Google
Play app-signing certificate match the uploaded/configured build. Clarify that
this is the Play-distributed app-signing certificate, not necessarily the upload
key.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 558664db-c3af-4513-a07f-8112a15a4e98

📥 Commits

Reviewing files that changed from the base of the PR and between 4709ba5 and 4ce9a9d.

📒 Files selected for processing (10)
  • packages/docs/src/pages/docs/android-setup.tsx
  • packages/docs/src/pages/docs/apis/android/create-billing-program-reporting-details-android.tsx
  • packages/docs/src/pages/docs/features/purchase.tsx
  • packages/docs/src/pages/docs/features/subscription/upgrade-downgrade.tsx
  • packages/docs/src/pages/docs/guides/testing.tsx
  • packages/docs/src/pages/docs/setup/flutter.tsx
  • packages/docs/src/pages/docs/setup/godot.tsx
  • packages/docs/src/pages/docs/setup/maui.tsx
  • packages/docs/src/pages/docs/setup/react-native.tsx
  • packages/docs/src/styles/components.css
🚧 Files skipped from review as they are similar to previous changes (9)
  • packages/docs/src/pages/docs/features/subscription/upgrade-downgrade.tsx
  • packages/docs/src/pages/docs/apis/android/create-billing-program-reporting-details-android.tsx
  • packages/docs/src/pages/docs/android-setup.tsx
  • packages/docs/src/pages/docs/guides/testing.tsx
  • packages/docs/src/styles/components.css
  • packages/docs/src/pages/docs/setup/godot.tsx
  • packages/docs/src/pages/docs/setup/flutter.tsx
  • packages/docs/src/pages/docs/features/purchase.tsx
  • packages/docs/src/pages/docs/setup/react-native.tsx

Inline code chips share the warm-brown link color (#8b6545) and the
link underline was transparent until hover, so linked and unlinked
text/chips were indistinguishable at a glance. Links inside doc pages
now carry a persistent subtle underline (--doc-link-underline CSS
variable: 35% warm brown in light mode, 40% oatmeal in dark mode);
hover still strengthens it. Heading anchors, buttons, and external
links (already dotted + arrow) are unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@hyochan
hyochan merged commit 5c7ad7e into main Aug 4, 2026
11 checks passed
@hyochan
hyochan deleted the docs/setup-readability branch August 4, 2026 21:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📖 documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant