reis-mobile 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +175 -168
- package/THIRD_PARTY_NOTICES.md +224 -4
- package/agents/android-architect.md +89 -0
- package/agents/android-performance-engineer.md +92 -0
- package/agents/android-test-engineer.md +97 -0
- package/agents/flutter-test-engineer.md +2 -0
- package/agents/ios-architect.md +93 -0
- package/agents/ios-performance-engineer.md +92 -0
- package/agents/ios-test-engineer.md +95 -0
- package/agents/lead-mobile.md +10 -1
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +94 -0
- package/agents/rn-performance-engineer.md +92 -0
- package/agents/rn-test-engineer.md +98 -0
- package/bin/reis-mobile.mjs +59 -17
- package/commands/debate.md +10 -1
- package/commands/debug.md +60 -0
- package/commands/reis-mobile.md +7 -2
- package/core/config/project.mjs +59 -0
- package/core/registry/frontmatter.mjs +15 -4
- package/core/registry/registry.mjs +21 -1
- package/core/router/intents.mjs +2 -0
- package/core/router/router.mjs +10 -5
- package/package.json +1 -1
- package/skills/android-adaptive/SKILL.md +304 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-agp-9-upgrade/SKILL.md +106 -0
- package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
- package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
- package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
- package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
- package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
- package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
- package/skills/android-appfunctions/SKILL.md +74 -0
- package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
- package/skills/android-appfunctions/references/context.md +26 -0
- package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
- package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
- package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
- package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
- package/skills/android-camerax/SKILL.md +135 -0
- package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
- package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
- package/skills/android-camerax/references/expert-blueprints.md +58 -0
- package/skills/android-camerax/references/foldables.md +83 -0
- package/skills/android-camerax/references/immutability.md +60 -0
- package/skills/android-camerax/references/low-light.md +124 -0
- package/skills/android-camerax/references/mlkit-spatial.md +75 -0
- package/skills/android-camerax/references/modern-apis.md +42 -0
- package/skills/android-camerax/references/testing.md +69 -0
- package/skills/android-camerax/references/thermals.md +85 -0
- package/skills/android-camerax/references/wear-os.md +76 -0
- package/skills/android-camerax/references/xr.md +54 -0
- package/skills/android-cli/SKILL.md +474 -0
- package/skills/android-cli/references/interact.md +113 -0
- package/skills/android-cli/references/journeys.md +120 -0
- package/skills/android-code-review/SKILL.md +58 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
- package/skills/android-edge-to-edge/SKILL.md +429 -0
- package/skills/android-engage-sdk-integration/SKILL.md +130 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
- package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
- package/skills/android-engage-sdk-integration/references/common.md +519 -0
- package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
- package/skills/android-engage-sdk-integration/references/requests.md +260 -0
- package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
- package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
- package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
- package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
- package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
- package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
- package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
- package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
- package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
- package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
- package/skills/android-gradle-build-debug/SKILL.md +71 -0
- package/skills/android-intent-security/SKILL.md +550 -0
- package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
- package/skills/android-media3-cast-integration/SKILL.md +236 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
- package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
- package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
- package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
- package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
- package/skills/android-navigation-3/SKILL.md +122 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/skills/android-navigation-event/SKILL.md +312 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
- package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
- package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
- package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
- package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
- package/skills/android-play-policy-insights/SKILL.md +172 -0
- package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
- package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
- package/skills/android-play-policy-insights/resources/critic.md +86 -0
- package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
- package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
- package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
- package/skills/android-play-policy-insights/resources/policies.json +321 -0
- package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
- package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
- package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
- package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
- package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
- package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
- package/skills/android-profiler/SKILL.md +60 -0
- package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
- package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
- package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
- package/skills/android-profiler/references/env_setup.md +15 -0
- package/skills/android-profiler/references/perfetto/setup.md +29 -0
- package/skills/android-profiler/references/perfetto/sql.md +327 -0
- package/skills/android-r8-analyzer/SKILL.md +72 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
- package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
- package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
- package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
- package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
- package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
- package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
- package/skills/android-restore-credentials/SKILL.md +359 -0
- package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
- package/skills/android-styles/SKILL.md +229 -0
- package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
- package/skills/android-verified-email/SKILL.md +432 -0
- package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
- package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
- package/skills/android-wear-compose-m3/SKILL.md +365 -0
- package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
- package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
- package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
- package/skills/flutter-build-debug/SKILL.md +66 -0
- package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
- package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
- package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
- package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
- package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
- package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
- package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
- package/skills/{provider → flutter-provider}/SKILL.md +1 -1
- package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
- package/skills/ios-cocoapods-debug/SKILL.md +65 -0
- package/skills/ios-code-review/SKILL.md +56 -0
- package/skills/ios-xcode-build-debug/SKILL.md +66 -0
- package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
- package/skills/mobile-firebase/SKILL.md +54 -0
- package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
- package/skills/mobile-firebase/references/android/analytics.md +33 -0
- package/skills/mobile-firebase/references/android/app-check.md +36 -0
- package/skills/mobile-firebase/references/android/auth.md +44 -0
- package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
- package/skills/mobile-firebase/references/android/firestore.md +44 -0
- package/skills/mobile-firebase/references/android/functions.md +33 -0
- package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
- package/skills/mobile-firebase/references/android/messaging.md +41 -0
- package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
- package/skills/mobile-firebase/references/android/remote-config.md +43 -0
- package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
- package/skills/mobile-firebase/references/android/storage.md +39 -0
- package/skills/mobile-firebase/references/android.md +30 -0
- package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
- package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
- package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
- package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
- package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
- package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
- package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
- package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
- package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
- package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
- package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
- package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
- package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
- package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
- package/skills/mobile-firebase/references/flutter.md +36 -0
- package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
- package/skills/mobile-firebase/references/ios/analytics.md +33 -0
- package/skills/mobile-firebase/references/ios/app-check.md +36 -0
- package/skills/mobile-firebase/references/ios/auth.md +48 -0
- package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
- package/skills/mobile-firebase/references/ios/firestore.md +53 -0
- package/skills/mobile-firebase/references/ios/functions.md +35 -0
- package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
- package/skills/mobile-firebase/references/ios/messaging.md +45 -0
- package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
- package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
- package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
- package/skills/mobile-firebase/references/ios/storage.md +36 -0
- package/skills/mobile-firebase/references/ios.md +28 -0
- package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
- package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
- package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
- package/skills/mobile-firebase/references/react-native/auth.md +50 -0
- package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
- package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
- package/skills/mobile-firebase/references/react-native/functions.md +28 -0
- package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
- package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
- package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
- package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
- package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
- package/skills/mobile-firebase/references/react-native/storage.md +30 -0
- package/skills/mobile-firebase/references/react-native.md +29 -0
- package/skills/mobile-test/SKILL.md +63 -0
- package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
- package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
- package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
- package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
- package/skills/mobile-test/references/android.md +83 -0
- package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
- package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
- package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
- package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
- package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
- package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
- package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
- package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
- package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
- package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
- package/skills/mobile-test/references/flutter.md +44 -0
- package/skills/mobile-test/references/ios.md +79 -0
- package/skills/mobile-test/references/react-native.md +62 -0
- /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
## High-Impact Migration Logic
|
|
2
|
+
|
|
3
|
+
### 1. Connection Management (The v8+ Reconnection Shift)
|
|
4
|
+
|
|
5
|
+
**Intent**: Move from developer-managed state (manual retries) to
|
|
6
|
+
library-managed state.
|
|
7
|
+
|
|
8
|
+
- **Remove** : Manual `startConnection()` calls or retry timers inside `onServiceDisconnected()`.
|
|
9
|
+
- **Add** : `.enableAutoServiceReconnection()` to `BillingClient.Builder`.
|
|
10
|
+
- **Logic** : In v8+, the library handles transient disconnections. Your `onServiceDisconnected` must only be used for logging or updating UI state (e.g., "Billing service temporarily unavailable").
|
|
11
|
+
|
|
12
|
+
### 2. Product Querying \& Models (The v5-v8 Architectural Shift)
|
|
13
|
+
|
|
14
|
+
**Intent**: Support the "One Product, Multiple Offers" model introduced in v5
|
|
15
|
+
and refined in v8.
|
|
16
|
+
|
|
17
|
+
- **Data Model Swap** :
|
|
18
|
+
- **Legacy** : `SkuDetails` (1:1 mapping of ID to price).
|
|
19
|
+
- **Modern** : `ProductDetails`. A single `ProductDetails` can contain multiple `SubscriptionOfferDetails` (Base Plans + Offers).
|
|
20
|
+
- **Result Handling (v8+ Logic)** :
|
|
21
|
+
- **Change** : `queryProductDetailsAsync` no longer returns a list in the listener.
|
|
22
|
+
- **New Intent** : You must receive a `QueryProductDetailsResult` object.
|
|
23
|
+
- **Refactor** : `kotlin
|
|
24
|
+
// PBL 8+ Pattern
|
|
25
|
+
billingClient.queryProductDetailsAsync(params) { result: QueryProductDetailsResult ->
|
|
26
|
+
val responseCode = result.billingResult.responseCode
|
|
27
|
+
val productDetailsList = result.productDetailsList // Retrieve list from result object
|
|
28
|
+
// Process list...
|
|
29
|
+
}`
|
|
30
|
+
|
|
31
|
+
### 3. Subscription Modernization (v6 \& v7)
|
|
32
|
+
|
|
33
|
+
**Intent**: Support "Base Plans" and "Offers" instead of legacy standalone SKUs.
|
|
34
|
+
|
|
35
|
+
- **Subscription Upgrades/Downgrades (v6+)**:
|
|
36
|
+
|
|
37
|
+
- **Legacy** : `setOldSkuPurchaseToken()` in `BillingFlowParams`.
|
|
38
|
+
- **Modern** : Use `SubscriptionUpdateParams`. You must specify the `PurchaseToken` of the existing subscription and the `ReplacementMode` (which replaces the deprecated `ProrationMode`).
|
|
39
|
+
- **Logic** : Verify that the `ReplacementMode` matches the business intent (e.g., `CHARGE_FULL_PRICE` versus `WITH_TIME_PRORATION`).
|
|
40
|
+
- **Installment Plans (v7+)**:
|
|
41
|
+
|
|
42
|
+
- **Intent**: Allow users to pay for a subscription in monthly installments.
|
|
43
|
+
- **Check** : Look for `InstallmentPlanDetails` within `SubscriptionOfferDetails`. If the app supports high-ticket subscriptions, it is mandatory to implement the `installmentPlanDetails` UI.
|
|
44
|
+
|
|
45
|
+
### 4. Purchase Handling \& History (v6+)
|
|
46
|
+
|
|
47
|
+
**Intent**: Move away from local-only purchase caches to real-time status
|
|
48
|
+
checks.
|
|
49
|
+
|
|
50
|
+
- **Active Purchases** :
|
|
51
|
+
- **Deprecated** : `queryPurchases()` (synchronous).
|
|
52
|
+
- **Mandatory** : `queryPurchasesAsync()`. You must pass `QueryPurchasesParams` containing the `ProductType` (`INAPP` or `SUBS`).
|
|
53
|
+
- **Purchase History (Pagination Intent)** :
|
|
54
|
+
- **v6+ Change** : `queryPurchaseHistoryAsync` is optimized for pagination.
|
|
55
|
+
- **Logic** : If the app has thousands of historical transactions, verify you are using the `PurchaseHistoryRecord` list correctly to avoid memory overhead.
|
|
56
|
+
|
|
57
|
+
### 5. Security \& Pending Transactions (The "Always On" Rule)
|
|
58
|
+
|
|
59
|
+
- **Mandatory** : `enablePendingPurchases()` has been required since v3, but in v8+, verify that it is called before `.build()`. You must also include `.enableOneTimeProducts()` on the `enablePendingPurchases()` builder.
|
|
60
|
+
- **Optional** : If the app sells prepaid subscriptions, you must also include `.enablePrepaidPlans()`.
|
|
61
|
+
- **Intent**: This handles "Slow/Delayed" payments (like cash or bank transfers). Without this, the app will crash on initialization in modern versions.
|
|
62
|
+
|
|
63
|
+
### 6. SDK \& Environment Requirements
|
|
64
|
+
|
|
65
|
+
- **PBL 7.0** : Requires `compileSdk 34` or higher.
|
|
66
|
+
- **PBL 8.0** : Requires `compileSdk 34` or higher.
|
|
67
|
+
- **PBL 9.0** : Requires `compileSdk 35` or higher.
|
|
68
|
+
- **Kotlin** : Verify that `kotlin-stdlib` is updated to at least 1.9.x to support new library coroutine extensions.
|
|
69
|
+
|
|
70
|
+
### 7. User-Facing Features (Post-Upgrade Recommendations)
|
|
71
|
+
|
|
72
|
+
Once the upgrade is complete, the following features are enabled by these
|
|
73
|
+
versions:
|
|
74
|
+
|
|
75
|
+
- **v7** : **Installments** (Monthly payments for annual plans).
|
|
76
|
+
- **v8** : **Prepaid Plans** (Users can top-up time without auto-renewing).
|
|
77
|
+
- **v8** : **Personalized Pricing** (Show legal disclosure if price varies by user).
|
|
78
|
+
- **v9** : **In-App Price Reviews** (Users can accept upcoming subscription price increases directly inside the app without leaving for the Play Store; capped by Google at a maximum of once every 7 days).
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
## Play Billing Library: Smart Version-Specific Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist to verify that every technical requirement between your
|
|
4
|
+
\[Current Version\] and \[Target Version\] has been met.
|
|
5
|
+
|
|
6
|
+
## PBL v1.x through v3.x
|
|
7
|
+
|
|
8
|
+
- \[ \] **\[v1.0\] Builder Pattern** : Verify `BillingClient.newBuilder(context)` is used.
|
|
9
|
+
- \[ \] **\[v2.0\] Mandatory Acknowledgment** : Verify `acknowledgePurchase()` or `consumeAsync()` is called within 3 days.
|
|
10
|
+
- \[ \] **\[v2.0\] Response Types** : Logic must handle `BillingResult` objects instead of raw integers.
|
|
11
|
+
- \[ \] **\[v3.0\] Legacy Removal** : Verify `ChildDirected` and `UnderAgeOfConsent` parameters are deleted.
|
|
12
|
+
|
|
13
|
+
## PBL v4.x Series
|
|
14
|
+
|
|
15
|
+
- \[ \] **Async Purchasing** : Confirm `queryPurchases()` is replaced with `queryPurchasesAsync()`.
|
|
16
|
+
- \[ \] **Multi-SKU Accessors** : Replace `getSku()` with `getSkus()` (returns a list) in `Purchase` objects.
|
|
17
|
+
- \[ \] **Subscription Refactor** : Verify `setSubscriptionUpdateParams()` is used for change logic.
|
|
18
|
+
|
|
19
|
+
## PBL v5.x Series
|
|
20
|
+
|
|
21
|
+
- \[ \] **Data Model Swap** : Replace all instances of `SkuDetails` with `ProductDetails`.
|
|
22
|
+
- \[ \] **Personalized Pricing** : Implement `setIsOfferPersonalized()` for EU price disclosures.
|
|
23
|
+
|
|
24
|
+
## PBL v6.x Series
|
|
25
|
+
|
|
26
|
+
- \[ \] **Replacement Mode** : Replace `ProrationMode` with the `ReplacementMode` enum.
|
|
27
|
+
- \[ \] **User Choice Billing** : Replace `AlternativeBillingListener` with `UserChoiceBillingListener`.
|
|
28
|
+
|
|
29
|
+
## PBL v7.x Series
|
|
30
|
+
|
|
31
|
+
- \[ \] **SDK Compliance** : `compileSdk` is set to 34 or higher.
|
|
32
|
+
- \[ \] **Pending Purchases** : Replace parameterless `enablePendingPurchases()` with `enablePendingPurchases(PendingPurchaseParams)`.
|
|
33
|
+
- \[ \] **API Cleanup** : Replace `setOldSkuPurchaseToken()` with `setOldPurchaseToken()`.
|
|
34
|
+
|
|
35
|
+
## PBL v8.x Series
|
|
36
|
+
|
|
37
|
+
- \[ \] **SDK Compliance** : `compileSdk` is set to 34 or higher.
|
|
38
|
+
- \[ \] **Terminology Shift**: Rename "in-app items" to "one-time products" in UI/strings.
|
|
39
|
+
- \[ \] **Signature Enforcement** : `onProductDetailsResponse` signature MUST be `(BillingResult, QueryProductDetailsResult)`.
|
|
40
|
+
- \[ \] **SUBS Offer Token** : For `SUBS` type, `ProductDetailsParams` MUST include an `offerToken`.
|
|
41
|
+
- \[ \] **Auto-Reconnection** : Verify `enableAutoServiceReconnection()` is used in the builder.
|
|
42
|
+
- \[ \] **Min SDK Increase** : Verify `minSdkVersion` is at least 23.
|
|
43
|
+
|
|
44
|
+
## PBL v9.x Series
|
|
45
|
+
|
|
46
|
+
- \[ \] **SDK Compliance** : `compileSdk` is set to 35 or higher.
|
|
47
|
+
- \[ \] **API Removals** : Ensure all usages of `SkuDetails`, `SkuDetailsParams`, and `SkuDetailsResponseListener` are removed and replaced with their `ProductDetails` equivalents.
|
|
48
|
+
- \[ \] **Blocked Store Error Handling** : If targeting restricted device modes (e.g., kids modes), ensure `androidx.core` is at v1.9+ and update error logic to catch `BILLING_UNAVAILABLE` instead of `ERROR`.
|
|
49
|
+
- \[ \] **External Payment Program Null-Safety** : If using developer-provided billing, update `DeveloperProvidedBillingDetails.getLinkUri()` logic to explicitly check for both `null` and empty string (`""`) values before parsing.
|
|
50
|
+
|
|
51
|
+
## Future Versions (PBL 10.0.0+)
|
|
52
|
+
|
|
53
|
+
- \[ \] **Dynamic Checklist Generation** : For any version \>=10.0.0, you **MUST** synthesize a new checklist for each new version header found in the [Release Notes](https://developer.android.com/google/play/billing/release-notes).
|
|
54
|
+
- \[ \] **Identify Version Delta** : Review "Breaking Changes" and "Removed APIs" for the new version and create a list of terms to `grep`.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: android-play-policy-insights
|
|
3
|
+
description: Automated auditor designed to verify Android applications against Google Play Policy domains. It cross-references static code analysis with Play Store declarations to generate deterministic compliance reports, identifying undeclared data collection, architectural risks, and missing disclosures across Permissions and APIs Hygiene, User Account and Identity, and Data Safety and Privacy domains.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
source: https://github.com/android/skills
|
|
6
|
+
intents: [release]
|
|
7
|
+
stacks: [android]
|
|
8
|
+
metadata:
|
|
9
|
+
author: Google LLC
|
|
10
|
+
last-updated: '2026-07-13'
|
|
11
|
+
keywords:
|
|
12
|
+
- account deletion
|
|
13
|
+
- accessibility api
|
|
14
|
+
- all files access
|
|
15
|
+
- audio recording
|
|
16
|
+
- audit
|
|
17
|
+
- compliance
|
|
18
|
+
- contacts access
|
|
19
|
+
- data disclosure
|
|
20
|
+
- data safety
|
|
21
|
+
- data safety label
|
|
22
|
+
- data transmission
|
|
23
|
+
- demo credentials
|
|
24
|
+
- exact alarm
|
|
25
|
+
- foreground services
|
|
26
|
+
- location access
|
|
27
|
+
- login credentials
|
|
28
|
+
- manifest hygiene
|
|
29
|
+
- package visibility
|
|
30
|
+
- permissions hygiene
|
|
31
|
+
- photo and video access
|
|
32
|
+
- photopicker
|
|
33
|
+
- play policy
|
|
34
|
+
- pre-submission audit
|
|
35
|
+
- privacy policy
|
|
36
|
+
- prominent disclosure
|
|
37
|
+
- restricted permissions
|
|
38
|
+
- scoped storage
|
|
39
|
+
- sms and call log
|
|
40
|
+
- static analysis
|
|
41
|
+
- target sdk
|
|
42
|
+
- user consent
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
# Play Policy Insights: data safety, login credentials, and restricted permissions
|
|
46
|
+
|
|
47
|
+
You must audit Android apps for three specific policy domains. You must check
|
|
48
|
+
data safety, demo login credentials, and restricted permissions.
|
|
49
|
+
|
|
50
|
+
## Path Resolution
|
|
51
|
+
|
|
52
|
+
* **repo_root**: Absolute path to the directory containing this `SKILL.md`.
|
|
53
|
+
* **app_dir**:: Absolute path to the directory containing app's code.
|
|
54
|
+
* **temp_dir**: Absolute path to the scratch directory at the workspace root.
|
|
55
|
+
It is located at `.scratch/play_policy_insights_<uuid>`. **Containment
|
|
56
|
+
Mandate**: You must confine all file system writes, intermediate artifacts,
|
|
57
|
+
and logs strictly to this directory. This ensures the skill remains portable
|
|
58
|
+
and safe across diverse execution environments, including local harnesses
|
|
59
|
+
and CI/CD pipelines, by avoiding reliance on system-level temporary paths or
|
|
60
|
+
user home directories.
|
|
61
|
+
|
|
62
|
+
## Critical mandates
|
|
63
|
+
|
|
64
|
+
- **Execution Mode Awareness** Before starting Phase 2, evaluate if your
|
|
65
|
+
execution environment provides a tool to spawn or delegate tasks to
|
|
66
|
+
general-purpose sub-agents (e.g., tools often named `invoke_agent`,
|
|
67
|
+
`delegate_task`, or `spawn_worker`, using generic agent profiles like
|
|
68
|
+
'generalist' or 'coding_agent').
|
|
69
|
+
|
|
70
|
+
- If **YES**, you MUST use **Mode A (Delegation)**.
|
|
71
|
+
|
|
72
|
+
- If **NO**, use **Mode B (Sequential Self-Execution)**. You must read the
|
|
73
|
+
prompt files intended for the subagents, follow their instructions, and
|
|
74
|
+
write the expected output files to disk.
|
|
75
|
+
|
|
76
|
+
- **Sub-agents orchestration:**
|
|
77
|
+
|
|
78
|
+
- If you use "Mode A (Delegation)", wait for "SUCCESS" confirmation from
|
|
79
|
+
sub-agents to know when they are done.
|
|
80
|
+
|
|
81
|
+
- **Idempotency & Timeout Safeguard**: If a sub-agent fails or times out,
|
|
82
|
+
you MUST verify the presence and integrity of its target output file
|
|
83
|
+
(e.g., `<temp_dir>/worker_<goal_name>.json`) before retrying. If the
|
|
84
|
+
file exists and contains valid JSON, treat the execution as **SUCCESS**
|
|
85
|
+
and proceed. Otherwise, retry up to three times.
|
|
86
|
+
|
|
87
|
+
- **Fail-fast mandate:** The automated audit in Phase 1 is the source of
|
|
88
|
+
truth. If `orchestrator.py` fails, you must stop immediately with an
|
|
89
|
+
explanation of failure. Do not use manual auditing as a fallback.
|
|
90
|
+
|
|
91
|
+
## The two-phase protocol
|
|
92
|
+
|
|
93
|
+
### Phase 1: Fact gathering and triage
|
|
94
|
+
|
|
95
|
+
1. **Initialize and triage**:
|
|
96
|
+
- Run `python3 <repo_root>/scripts/orchestrator.py init <app_dir>`.
|
|
97
|
+
- This will create the scratch environment, perform static analysis, map
|
|
98
|
+
the codebase, identify audit goals, and produce prompts for subagents
|
|
99
|
+
for each audit goal and prompts for designated critic and aggregator
|
|
100
|
+
subagents.
|
|
101
|
+
- You must wait (up to 5 minutes) for the script to finish.
|
|
102
|
+
2. **Capture environment**: Note values of the `temp_dir`, and
|
|
103
|
+
`activated_goals` from the JSON output. You will need them in Phase 2.
|
|
104
|
+
3. **Evaluate goals**: If `activated_goals` is empty, skip to step 3 of Phase 2
|
|
105
|
+
(Aggregation). Otherwise, proceed to step 1 of Phase 2 (Detailed analysis).
|
|
106
|
+
|
|
107
|
+
### Phase 2: Goal-oriented audit
|
|
108
|
+
|
|
109
|
+
Determine your execution capabilities and proceed with either Mode A OR Mode B.
|
|
110
|
+
|
|
111
|
+
#### Mode A: Orchestrator WITH Delegation Capabilities (Parallel)
|
|
112
|
+
|
|
113
|
+
1. **Detailed analysis**: For each goal in `activated_goals` (e.g.,
|
|
114
|
+
`permissions_and_apis`, `data_safety_part_1`, `data_safety_part_2`),
|
|
115
|
+
delegate to a sub-agent. **Concurrency Limit:** You must not spawn more than
|
|
116
|
+
3 sub-agents simultaneously. Spawn the first batch of up to 3, wait for
|
|
117
|
+
their completions, and then spawn the next batch. Repeat until all goals are
|
|
118
|
+
complete. Pass the prompt: `"Read your instructions from
|
|
119
|
+
<temp_dir>/prompt_worker_<goal_name>.md and execute. MANDATORY: You must
|
|
120
|
+
use your file-writing capabilities to save your final JSON findings directly
|
|
121
|
+
to the file system at <temp_dir>/worker_<goal_name>.json. You are strictly
|
|
122
|
+
forbidden from outputting the JSON in your chat response. To minimize
|
|
123
|
+
context usage, your final response must be exactly 'SUCCESS' and nothing
|
|
124
|
+
else."` **Validate**: Confirm every
|
|
125
|
+
`<temp_dir>/worker_<goal_name>.json` exists and contains valid JSON. If a
|
|
126
|
+
sub-agent fails or times out, but the valid JSON output file is already
|
|
127
|
+
present on disk, do NOT retry; proceed normally. Only retry the
|
|
128
|
+
corresponding worker (up to three times) if the file is missing or invalid.
|
|
129
|
+
2. **Aggregate Findings**: Execute the python aggregation command:
|
|
130
|
+
`python3 <repo_root>/scripts/orchestrator.py aggregate <temp_dir>`. This
|
|
131
|
+
produces `aggregated_findings.json` and returns a JSON object containing
|
|
132
|
+
`critic_chunks` representing the number of chunks to verify (e.g.,
|
|
133
|
+
`{"temp_dir": "...", "critic_chunks": 2}`).
|
|
134
|
+
3. **Parallel Critic review**: For each chunk index `i` from 1 to
|
|
135
|
+
`critic_chunks`, delegate to a sub-agent. **Concurrency Limit:** You must not
|
|
136
|
+
spawn more than 3 critic sub-agents simultaneously. Batch them in groups of 3
|
|
137
|
+
as above. Pass the prompt:
|
|
138
|
+
`"Read your instructions from <temp_dir>/prompt_critic_<i>.md and execute. MANDATORY: You must use your file-writing capabilities to save your final JSON findings directly to the file system at <temp_dir>/critic_output_<i>.json. You are strictly forbidden from outputting the JSON in your chat response. To minimize context usage, your final response must be exactly 'SUCCESS' and nothing else."`
|
|
139
|
+
**Validate**: Confirm each `<temp_dir>/critic_output_<i>.json` exists and
|
|
140
|
+
contains valid JSON before proceeding. If it failed or timed out, but the
|
|
141
|
+
valid JSON file is present, proceed normally. Otherwise, retry that specific
|
|
142
|
+
critic chunk.
|
|
143
|
+
4. **Proceed to Finalization** (Step 4 below)
|
|
144
|
+
|
|
145
|
+
#### Mode B: Orchestrator WITHOUT Delegation Capabilities (Sequential)
|
|
146
|
+
|
|
147
|
+
1. **Detailed Analysis**: For each goal in `activated_goals`, sequentially:
|
|
148
|
+
- Read the contents of `<temp_dir>/prompt_worker_<goal_name>.md`.
|
|
149
|
+
- Execute the instructions contained within that file yourself.
|
|
150
|
+
- **CRITICAL**: You MUST format your findings exactly as requested in the
|
|
151
|
+
prompt and save them to `<temp_dir>/worker_<goal_name>.json`. **Do not**
|
|
152
|
+
summarize findings in your thoughts or chat; move to the next task.
|
|
153
|
+
- **Validate**: Confirm `<temp_dir>/worker_<goal_name>.json` exists before
|
|
154
|
+
moving to the next goal.
|
|
155
|
+
2. **Aggregate Findings**: Execute the python aggregation command:
|
|
156
|
+
`python3 <repo_root>/scripts/orchestrator.py --aggregate <temp_dir>`.
|
|
157
|
+
This produces `aggregated_findings.json` and returns a JSON object containing
|
|
158
|
+
`critic_chunks` representing the number of chunks to verify.
|
|
159
|
+
3. **Sequential Critic review**: For each chunk index `i` from 1 to
|
|
160
|
+
`critic_chunks`, sequentially:
|
|
161
|
+
- Read the contents of `<temp_dir>/prompt_critic_<i>.md`.
|
|
162
|
+
- Execute the steps yourself and save your findings to
|
|
163
|
+
`<temp_dir>/critic_output_<i>.json`.
|
|
164
|
+
- **Validate**: Confirm `<temp_dir>/critic_output_<i>.json` exists before
|
|
165
|
+
moving to the next chunk.
|
|
166
|
+
4. **Proceed to Finalization** (Step 4 below)
|
|
167
|
+
|
|
168
|
+
#### Finalization (Both Modes)
|
|
169
|
+
|
|
170
|
+
4. **Present findings**: Run `python3 <repo_root>/scripts/generate_report.py <temp_dir>`.
|
|
171
|
+
It will produce `<temp_dir>/compliance_report.md`. Present this output file to user.
|
|
172
|
+
5. **STOP**: The audit is complete. Await further instructions.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Execution Mandates
|
|
2
|
+
|
|
3
|
+
### Technical Rules
|
|
4
|
+
|
|
5
|
+
1. **Absolute Paths Only**: Always resolve and use absolute paths.
|
|
6
|
+
2. **Containment**: Write all artifacts strictly within `{{TEMP_DIR}}`.
|
|
7
|
+
3. **Fail-fast**: If any required input file is missing, stop immediately and
|
|
8
|
+
report the failure.
|
|
9
|
+
|
|
10
|
+
### Surgical Input Protocol & Efficient Search (MANDATORY)
|
|
11
|
+
|
|
12
|
+
- **Direct Evidence First**: Prioritize files listed in the **Context &
|
|
13
|
+
Evidence** sections. Use the provided file/line evidence (e.g., from Data
|
|
14
|
+
Sources or Sinks) to jump directly to the relevant code. Do not perform
|
|
15
|
+
broad workspace searches if these surgical starting points are available.
|
|
16
|
+
- **Path Filtering Over File Crawling**: Locate target files by name, path, or
|
|
17
|
+
extension *first* using directory/file listing tools before performing any
|
|
18
|
+
text/content-based searches. Restrict searches and file reads strictly to
|
|
19
|
+
the target `{{APP_DIR}}`.
|
|
20
|
+
- **Strict Exclusions (The Noise Wall)**: Configure search, glob, and find
|
|
21
|
+
tools to ignore build, cache, dependencies, and testing folders. You MUST
|
|
22
|
+
exclude matches from: `**/build/**`, `**/.gradle/**`, `**/.scratch/**`,
|
|
23
|
+
`**/androidTest/**`, `**/test/**`, `**/node_modules/**`.
|
|
24
|
+
- **Targeted Extensions**: Restrict content searches and file reads strictly
|
|
25
|
+
to source and configuration files: `.java`, `.kt`, `.xml`, `.gradle`, `.kts`
|
|
26
|
+
(and `.js`, `.ts`, `.jsx`, `.tsx`, `.dart` if a hybrid/cross-platform
|
|
27
|
+
environment is analyzed). Never search or read inside compiled `.class`
|
|
28
|
+
files, binary resources, or output assets.
|
|
29
|
+
- **Surgical Queries & Limiters**: Use highly specific search patterns (e.g.,
|
|
30
|
+
search for `getLastKnownLocation` or `deleteAccount` instead of general
|
|
31
|
+
words like `location` or `delete`). If search tools support limits or
|
|
32
|
+
pagination, cap results at a maximum of 50 matches. Do not load unlimited
|
|
33
|
+
search results into your context window.
|
|
34
|
+
- **Parallel Reading Required (Turn Efficiency)**: You are operating under a
|
|
35
|
+
strict maximum turn limit. To prevent timeouts, you MUST request to read
|
|
36
|
+
multiple target files concurrently in a single response. Do not read the
|
|
37
|
+
evidence files sequentially one-by-one. Issue all of your file-reading tool
|
|
38
|
+
calls simultaneously whenever possible.
|
|
39
|
+
|
|
40
|
+
### Evidentiary Standard & Guardrails (CRITICAL)
|
|
41
|
+
|
|
42
|
+
To prevent over-auditing, false positives, and speculative "prosecution" of
|
|
43
|
+
compliant code during extrapolation:
|
|
44
|
+
|
|
45
|
+
1. **Presumption of Compliance**: Treat code as compliant unless there is
|
|
46
|
+
*definitive, visible evidence* in the provided files of a policy violation.
|
|
47
|
+
If code is ambiguous, or if network/database logic is hidden behind
|
|
48
|
+
abstractions (e.g., calling an interface or repository method like
|
|
49
|
+
`clearSession()`), you must assume standard compliant behavior. Do NOT guess
|
|
50
|
+
or speculate about what happens behind interfaces.
|
|
51
|
+
2. **Benefit of the Doubt**: When compliance cannot be strictly verified due to
|
|
52
|
+
code abstractions or missing source file contexts, you must downgrade your
|
|
53
|
+
finding:
|
|
54
|
+
- Never flag a `🔴 Critical` or `🟡 Important` finding based on suspicion or
|
|
55
|
+
lack of context.
|
|
56
|
+
- Instead, output a `🔵 Suggestion` (informational) to advise the developer
|
|
57
|
+
on what to double-check in their backend or configuration.
|
|
58
|
+
3. **Exclusion of Local State**: Local-only processing (e.g., caching theme
|
|
59
|
+
settings, user-selected visual configurations, or on-device-only database
|
|
60
|
+
operations) is explicitly exempt from Data Safety collection or Account
|
|
61
|
+
Deletion mandates.
|
|
62
|
+
4. **Concrete Attributions**: Every `🔴 Critical` or `🟡 Important` finding must
|
|
63
|
+
cite the exact file, line number, or configuration block containing the
|
|
64
|
+
direct violation. If you cannot cite the exact line of code containing the
|
|
65
|
+
violation, you cannot flag it as a violation.
|
|
66
|
+
5. **Empty-List Discipline**: If no policy violations, discrepancies, or review
|
|
67
|
+
items are identified during your audit, you MUST represent this as an empty
|
|
68
|
+
array `[]` for that field (e.g., `"findings": []`, `"verified_findings":
|
|
69
|
+
[]`, or `"manual_verification_required": []`). **DO NOT** populate arrays
|
|
70
|
+
with "dummy" objects, placeholder strings, or `"N/A"` / `"None"` values.
|
|
71
|
+
6. **Heuristics & Extrapolation Boundaries**: Whenever applying specific
|
|
72
|
+
heuristics defined in your goal (e.g., searching for implicit logger leaks
|
|
73
|
+
or
|
|
74
|
+
SDK siphoning), you must strictly bound them to the provided evidence and
|
|
75
|
+
their immediate callers. You are strictly forbidden from initiating broad,
|
|
76
|
+
unbounded searches for custom paths or variables across the wider codebase.
|
|
77
|
+
Base your extrapolation only within the specific files already provided to
|
|
78
|
+
you in the prompt.
|
|
79
|
+
|
|
80
|
+
### Finalization & Output Mandates (CRITICAL)
|
|
81
|
+
|
|
82
|
+
- **Iterative Saving**: If your investigation requires multiple steps, save
|
|
83
|
+
partial or intermediate JSON states to disk as you progress. Do not hold all
|
|
84
|
+
data in memory until the very end to prevent data loss upon interruption.
|
|
85
|
+
- **Strict File Output (NO TRIPLE BACKTICKS)**: You MUST save your final JSON
|
|
86
|
+
output to disk at the exact path specified in the goal schema using your
|
|
87
|
+
file-writing capabilities.
|
|
88
|
+
- **CRITICAL: The content written to the file MUST be pure, raw JSON. DO
|
|
89
|
+
NOT wrap the contents inside the JSON file with Markdown code blocks
|
|
90
|
+
(such as triple backticks `json ...`). Writing markdown blocks into the
|
|
91
|
+
file makes the JSON unparseable by the compiler.**
|
|
92
|
+
- **NO Chat Summaries**: **MANDATORY: DO NOT summarize your findings, explain
|
|
93
|
+
your reasoning, or output JSON in your final chat response.** Your chat
|
|
94
|
+
output wastes context and is ignored by the orchestrator.
|
|
95
|
+
- **Verification Before Termination**: You MUST only terminate and return the
|
|
96
|
+
"SUCCESS" string *after* you have explicitly verified that your JSON file
|
|
97
|
+
successfully wrote to disk and contains valid JSON (e.g., by reading the
|
|
98
|
+
file back or checking the directory contents).
|
|
99
|
+
- **Final response**: Your final response MUST be exactly the word: "SUCCESS"
|
|
100
|
+
and nothing else.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Play Policy Compliance Report: {{app_name_id}}
|
|
2
|
+
|
|
3
|
+
**Status:** {{overall_compliance}} **Scan Date:** {{current_date}}
|
|
4
|
+
|
|
5
|
+
> **Disclaimer:** This report is generated by an AI automated scanner and is for
|
|
6
|
+
**informational and advisory purposes only**. It does NOT constitute legal
|
|
7
|
+
advice, a guarantee of Play Store approval, or a definitive compliance check.
|
|
8
|
+
The Google Play Review team has final authority. Undiscovered issues may still
|
|
9
|
+
exist. The developer retains sole responsibility and liability for the apps’
|
|
10
|
+
security, data privacy compliance, and final Play Store submission.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Policy Risks & Recommendations
|
|
15
|
+
|
|
16
|
+
*Review these identified risks and follow the suggested recommendation steps.*
|
|
17
|
+
|
|
18
|
+
{{findings_detail}}
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Data Safety Discrepancies
|
|
23
|
+
|
|
24
|
+
Review these discrepancies between detected behavior and Play Store
|
|
25
|
+
declarations. Discrepancies may stem from data collection/sharing practices or
|
|
26
|
+
new code features not yet reflected in your Data Safety label.
|
|
27
|
+
|
|
28
|
+
{{data_safety_table}}
|
|
29
|
+
|
|
30
|
+
{{suggested_declaration_section}}
|
|
31
|
+
|
|
32
|
+
{{local_access_section}}
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Remediation Checklist
|
|
37
|
+
|
|
38
|
+
Follow these personalized steps to resolve the identified risks.
|
|
39
|
+
|
|
40
|
+
{{personalized_checklist}}
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Play Store Compliance Status Legend
|
|
45
|
+
|
|
46
|
+
| Overall Status | Meaning & Rejection Risk | Required Action |
|
|
47
|
+
| :--- | :--- | :--- |
|
|
48
|
+
| **🟢 Compliant** | The application code and metadata appear fully compliant with analyzed Play Store policies. No active policy violations or high-risk discrepancies were identified. | **No issues detected**: No active policy violations were identified by this automatic scan. |
|
|
49
|
+
| **🟡 Needs Review** | No critical violations were found in the code, but the app implements features requiring manual Play Console configurations (e.g., submitting **Reviewer Demo Credentials** for login screens) or requests restricted, high-risk permissions (e.g., Exact Alarms, All Files Access, or Background Location) requiring Play Console declaration forms. | **Must Review**: Review the findings. You must either **migrate to modern scoped alternatives (highly recommended)** to bypass declaration scrutiny, OR **manually verify that your Play Console settings (like Reviewer Credentials and Declaration Forms) are completely and carefully configured** before submitting. |
|
|
50
|
+
| **🔴 Non-Compliant** | Severe, direct policy violations (e.g., silent background data tracking, default-only permission abuse) or active Data Safety declaration mismatches were identified. | **Must Fix**: Immediate rejection or account-level policy suspension risk. You must remediate these issues before submitting to the Play Store. |
|
|
51
|
+
|
|
52
|
+
<br>
|
|
53
|
+
|
|
54
|
+
| Finding Severity | Description | Action Required |
|
|
55
|
+
| :--- | :--- | :--- |
|
|
56
|
+
| **🔴 Critical** | Direct, verified policy violation (e.g., unauthorized data collection/sharing). | Critical action recommended. |
|
|
57
|
+
| **🟡 Important** | Deprecated permission use or API discrepancy where scoped pathways are mandated. | **Should Fix**: Highly recommended to migrate to prevent manual reviewer flags. |
|
|
58
|
+
| **🔵 Suggestion** | Standard advisory reminder or administrative checklist item (fully compliant). | **Good to Know**: Clean-path confirmation or helper checklist. |
|
|
59
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Review of specialized policy findings (Chunked Critic)
|
|
2
|
+
|
|
3
|
+
Review a specific chunk of identified policy findings to identify potential
|
|
4
|
+
false positives, exaggerated claims, or inaccuracies due to lack of evidence.
|
|
5
|
+
|
|
6
|
+
### Provided context files
|
|
7
|
+
|
|
8
|
+
The prompt provides absolute paths to files and directories:
|
|
9
|
+
- `{{TEMP_DIR}}`: The temporary scratch directory for this audit.
|
|
10
|
+
- `input_file`: `{{TEMP_DIR}}/input_critic_{{CHUNK_INDEX}}.json` contains the
|
|
11
|
+
chunk of findings to verify.
|
|
12
|
+
|
|
13
|
+
### Instructions
|
|
14
|
+
|
|
15
|
+
1. **Read input chunk**: Read the JSON object in
|
|
16
|
+
`{{TEMP_DIR}}/input_critic_{{CHUNK_INDEX}}.json`. The keys (e.g. `"1"`,
|
|
17
|
+
`"2"`, `"3"`) correspond to the finding IDs.
|
|
18
|
+
2. **Verify each finding**:
|
|
19
|
+
- For each finding, analyze its evidence against the source files in
|
|
20
|
+
`{{APP_DIR}}`.
|
|
21
|
+
- Determine the verdict:
|
|
22
|
+
- `"VERIFIED"`: True Positive. The codebase confirms the policy
|
|
23
|
+
violation.
|
|
24
|
+
- `"MANUAL_REVIEW"`: Ambiguous code or abstract logic where automatic
|
|
25
|
+
verification is impossible.
|
|
26
|
+
- `"PRUNED"`: False Positive. The codebase is compliant, or the
|
|
27
|
+
finding is not supported by actual evidence.
|
|
28
|
+
- Provide your verification details in the output JSON.
|
|
29
|
+
3. **Optional Editorial Overrides**: If (and only if) you need to edit, refine,
|
|
30
|
+
or moderate the worker finding's text, you may include one or more of these
|
|
31
|
+
optional keys to your decision object. **If you agree with the worker's text,
|
|
32
|
+
you MUST omit these keys entirely from your JSON.**
|
|
33
|
+
- `"issue_summary"`: Write a more accurate, tailored summary.
|
|
34
|
+
- `"severity"`: Set to `"CRITICAL"`, `"IMPORTANT"`, or `"SUGGESTION"` to
|
|
35
|
+
override.
|
|
36
|
+
- `"recommendation"`: Write a tailored, codebase-specific remediation
|
|
37
|
+
step.
|
|
38
|
+
4. **Save Results**: Save your final "Thin JSON" mapping to
|
|
39
|
+
`{{TEMP_DIR}}/critic_output_{{CHUNK_INDEX}}.json`.
|
|
40
|
+
|
|
41
|
+
### Audit principles for false positive detection
|
|
42
|
+
|
|
43
|
+
- **Environment detection**: **Do not** flag emulator or root detection as
|
|
44
|
+
violations unless evidence shows malicious intent or review evasion.
|
|
45
|
+
- **Speculative collection**: Prune claims based solely on permission
|
|
46
|
+
presence. Require evidence of actual data access and transfer (whether
|
|
47
|
+
off-device network egress or on-device sharing to a third-party app).
|
|
48
|
+
- **Standard patterns**: **Do not** flag standard Android architectural
|
|
49
|
+
patterns unless used maliciously.
|
|
50
|
+
- **Surgical Evidence Standard**: Prune or downgrade any finding where the
|
|
51
|
+
worker has speculated on a transmission pathway that cannot be directly
|
|
52
|
+
verified in the immediate source files, or where the finding fails to cite a
|
|
53
|
+
concrete file and line number containing the direct policy violation.
|
|
54
|
+
- **Data Safety Flag Verification**: If a finding includes Data Safety flags
|
|
55
|
+
(e.g., `user_initiated`, `is_third_party`), strictly verify them. If the
|
|
56
|
+
worker claims `user_initiated: true`, ensure there is undeniable evidence of
|
|
57
|
+
explicit user interaction triggering the transfer. If the worker claims
|
|
58
|
+
`is_third_party: true`, verify the sink is definitively outside the
|
|
59
|
+
developer's control (e.g., Android Share Sheet, Social Media SDK). If evidence
|
|
60
|
+
is lacking, downgrade the finding or use `"issue_summary"` to correct the
|
|
61
|
+
claim.
|
|
62
|
+
- **Gatekeeper Validation**: If a worker claims a finding is compliant because
|
|
63
|
+
a disclosure exists (`prominent_disclosure_status: "DISCLOSED"`), you MUST
|
|
64
|
+
verify that the UI acts as a strict gatekeeper. If data collection begins
|
|
65
|
+
before the user taps "Accept", or if they can dismiss it and continue,
|
|
66
|
+
override the `"severity"` to `"CRITICAL"` and explicitly state the gatekeeper
|
|
67
|
+
is invalid.
|
|
68
|
+
|
|
69
|
+
### Output JSON format
|
|
70
|
+
|
|
71
|
+
**Important**: The output must be a pure JSON object mapping the sequential
|
|
72
|
+
finding IDs from your input file to their decisions. If there are no findings in
|
|
73
|
+
the chunk, return `{}`.
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"1": {
|
|
78
|
+
"action": "VERIFIED | MANUAL_REVIEW | PRUNED",
|
|
79
|
+
"confidence": "High | Medium | Low",
|
|
80
|
+
"critic_justification": "A concise, technical explanation of your decision based on codebase evidence.",
|
|
81
|
+
"issue_summary": "OPTIONAL: Overridden issue summary text",
|
|
82
|
+
"severity": "OPTIONAL: CRITICAL | IMPORTANT | SUGGESTION",
|
|
83
|
+
"recommendation": "OPTIONAL: Overridden recommendation text"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|