agentleFS
liuyi0808liuyi0808/android-review/skills/play-store/SKILL.md

play-store

Skill17 starsChanged 9 months agoMITView on GitHub

Google Play Store submission and compliance checklist for Android apps, with special focus on financial/loan apps. Covers build config, permissions (including Contacts Permissions, Contact Picker, location button, Geofence API), Data Safety, Financial Features Declaration, Personal Loan policy, sensitive permission restrictions, spyware policy, deceptive behavior, device abuse, consent flow transparency, data transmission audit, loan app harassment policy, intellectual property (trademark/copyright/counterfeit), restricted content, account deletion, developer verification, and code-level audit. Updated for 2025-2026 policy cycle including April 15, 2026 announcement.

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    All 14 references MUST be loaded: If a reference does not apply to the target app (e.g., App has no store listing assets yet), the auditor …

    line 19
  2. Distinctive:

    The Reference Coverage Report is mandatory: Before the audit report is complete, emit a Coverage table with 14 rows.

    line 25

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Google Play Compliance & Launch Checklist

Comprehensive pre-submission audit and compliance verification for Google Play Store publishing. Includes 2025-2026 policy updates with special sections for financial/loan apps.

Policy effective date: March 4, 2026 (unless otherwise stated per section).

Execution Contract (MUST read before starting)

This skill has 14 reference files. A full audit MUST load all 14. "Progressive disclosure" does NOT mean "skip files you think you know" — it means load each file before you make a claim against it, then cite the specific section.

The Six Rules

  1. All 14 references MUST be loaded. If a reference does not apply to the target app (e.g., App has no store listing assets yet), the auditor MUST explicitly mark it "Not Applicable" with a one-line reason in the Coverage Report. Silent skipping is forbidden.
  2. Parallel execution is the default. Spawn 5 Task subagents in a single message so they run concurrently. See "Parallel Execution Pattern" below for the exact grouping. The main agent merges findings and produces the final report.
  3. Every finding MUST cite its reference. Output format is not optional — see "Output Format" below. A finding without both Reference: and Policy Source: is invalid and must be rejected.
  4. The Reference Coverage Report is mandatory. Before the audit report is complete, emit a Coverage table with 14 rows. No Coverage table → the report is incomplete.
  5. No conclusions from memory. If you cannot cite the reference file section you relied on, you do not have the finding. "I remember Personal Loans policy says X" is not acceptable — you must have actually loaded loan-harassment.md in this session before claiming a Personal Loans violation.
  6. Judge outcome against policy. Never prescribe implementation as policy. Every finding must answer two structural questions, with both answers visible in the Output Format:

    • Declaration gate: Does Google provide a declaration channel for this policy (Permissions Declaration, Data Safety, Financial Declaration)? If yes and the developer's declaration status is unknown to the auditor, severity is NEEDS_CONFIRMATION — never BLOCKER/WARNING. If no channel exists (e.g., DexClassLoader, hidden functionality, using SMS data for credit underwriting), the policy is absolute and direct judgment is allowed.
    • Outcome vs. implementation: The Required by policy: field must contain verbatim or near-verbatim policy text — if you cannot quote it, you do not have a policy requirement. Any engineering preference (sender allow-lists, keyword filters, server-side checks, SP-key guards, specific APIs like SMS Retriever) goes in Suggested implementation: and must be explicitly marked "non-policy, auditor's suggestion only." Code existence alone is not a violation — the auditor judges what is actually exfiltrated, transmitted, or done, not what the code might do under some interpretation.

    Why: Past audits failed by packaging engineering preferences (e.g., "you must add a sender whitelist" or "OTP must use SMS Retriever API") as policy demands, and by judging code patterns (e.g., READ_SMS + uploadInfo) as violations without checking declaration status or actual transmission outcome. The Output Format below makes both gates structurally mandatory — a finding that fails either gate is invalid and must be rejected by the main agent.


Parallel Execution Pattern

Launch 5 Task subagents in parallel (a single assistant message with 5 tool calls). Each subagent owns a group of reference files and returns findings in the Output Format.

SubagentReference Files to LoadAudit Focus
A — Build & Code Basicsbuild-and-signing.md, permissions.md, code-audit.mdbuild.gradle, AndroidManifest.xml, release config, grep patterns
B — Money & Privacyfinancial-declaration.md, data-privacy.md, loan-harassment.mdPlay Console financial declaration, SDK list, Data Safety alignment, lending data use, harassment patterns
C — Spyware, Consent & Deceptionspyware-policy.md, consent-flow.md, deceptive-behavior.mdStartup sequence, SDK init order, consent dialog, disclosure-vs-reality, hidden functionality
D — Abuse, Content & IPdevice-abuse.md, restricted-content.md, intellectual-property.mdAccessibility service, FLAG_SECURE, app strings, logos/icons, brand misuse
E — Listing & Deploymentstore-listing.md, deployment.mdStore listing assets, testing tracks, Play Vitals, developer verification

Subagent prompt template (use this when dispatching each subagent):

You are subagent {A|B|C|D|E} of a parallel Google Play compliance audit.

Your reference files: {list}
Your audit scope: {focus}
Target app path: {absolute path}

Instructions:
1. Read EACH of your reference files in full before auditing.
2. For each finding, produce the full Output Format block including
   ALL ELEVEN mandatory fields:
     status, Category, Finding, Evidence, Reference, Policy Source,
     Declaration Channel, Declaration Status,
     Required by policy, Suggested implementation, Deadline.
3. Apply Rule 6 (Six Rules):
   - If the policy has a declaration channel and you cannot confirm
     the developer's declaration status, status = NEEDS_CONFIRMATION
     (never BLOCKER/WARNING).
   - `Required by policy:` must be a verbatim or near-verbatim quote
     from the policy URL. If you cannot quote it, do not write the
     finding — you do not have a policy requirement.
   - Any implementation mechanism (sender allow-lists, specific APIs,
     SP-key names, server-side filtering, etc.) goes ONLY in
     `Suggested implementation:` prefixed "non-policy, auditor's
     suggestion only" — never in Required by policy or Finding.
4. If a reference does not apply to the target app, return:
   "Not Applicable: <one-line reason>" for that file.
5. Return ALL findings as a single markdown list when done.

Main agent responsibilities after subagents return:

  1. Merge all 5 subagent outputs.
  2. Deduplicate overlapping findings (same file:line + same policy).
  3. Validate every finding against Rule 6 hard constraints:
    • Missing Reference: or Policy Source: → drop.
    • Declaration Channel ≠ None AND Declaration Status = Unknown AND status ≠ NEEDS_CONFIRMATION → downgrade to NEEDS_CONFIRMATION.
    • Required by policy: contains prescriptive implementation language not in policy text → move to Suggested implementation: before emitting.
    • Required by policy: cannot be traced to a quote at the cited URL → downgrade to INFO or drop.
  4. Sort by severity: BLOCKER > WARNING > INFO. NEEDS_CONFIRMATION findings are listed in a separate section after INFO, never tallied with the others.
  5. Produce the Reference Coverage Report.
  6. Emit the final report in this order: Summary → Findings (BLOCKER → WARNING → INFO) → Pending Confirmation (NEEDS_CONFIRMATION) → Coverage Report → Launch Day Checklist.
  7. Write the final report to a markdown file in the current working directory: play-store-audit-report.md. The file must contain the complete audit report in markdown format.

Pre-Submission Audit Process

Output each finding as a full block with all eleven fields. All fields are mandatory — none may be omitted:

[GP-XXXXX] status: BLOCKER | WARNING | INFO | NEEDS_CONFIRMATION
  Category: <section number, e.g. "3.1.4" or "IP.2">
  Finding: <factual observation — what the code/manifest/listing actually does>
  Evidence: <file:line — describe ACTUAL behavior (e.g. "uploads full SMS body via POST /api/sync"), not just code existence (e.g. "calls uploadInfo()")>
  Reference: <reference file>#<section anchor>
  Policy Source: <official Google Play policy URL>
  Declaration Channel: <Permissions Declaration | Data Safety | Financial Declaration | None>
  Declaration Status: <Confirmed | Pending | Unknown | Not Applicable>
  Required by policy: <verbatim or near-verbatim policy text + URL — if you cannot quote it, the requirement is not from policy>
  Suggested implementation: <engineering option(s), explicitly prefixed "non-policy, auditor's suggestion only" — or "None">
  Deadline: <policy enforcement date if applicable, else "Active">

Hard constraints (main agent MUST enforce before emitting the report):

  1. Missing reference — A finding without both Reference: and Policy Source: is invalid. Drop it.
  2. Declaration gate consistency — If Declaration Channel ≠ None AND Declaration Status = Unknown, then status: MUST be NEEDS_CONFIRMATION. Findings that violate this are invalid; downgrade or drop.
  3. Policy-quote consistency — If Required by policy: does not contain a quote from a policy URL (or paraphrases beyond recognition), the policy basis is fabricated. Drop or downgrade to INFO.
  4. Prescription leakage — If Required by policy: contains specific implementation mechanisms (sender allow-lists, particular APIs, SP-key names, server-side filter requirements) that do not appear in the policy text, move that content to Suggested implementation: before emitting.

Example A — absolute prohibition, no declaration channel:

[GP-00101] status: BLOCKER
  Category: 14.3 — Loan Harassment: prohibited data for credit scoring
  Finding: App self-discloses that user SMS content feeds the credit-scoring model.
  Evidence:
    - app/src/main/res/values/strings.xml:9 — discloses SMS data used for "evaluación crediticia"
    - app/src/main/java/.../AppInfoR.kt:79-86 — SMS body uploaded under field SP_SMS to api.example.com/uploadInfo
  Reference: loan-harassment.md#14.3
  Policy Source: https://support.google.com/googleplay/android-developer/answer/9876821#personal-loans
  Declaration Channel: None
  Declaration Status: Not Applicable
  Required by policy: Personal Loans apps may not use prohibited data sources (including SMS data) for credit underwriting decisions. See Personal Loans Policy (URL above).
  Suggested implementation: None — the policy prohibition is on the use case itself; HOW the developer separates legitimate SMS use cases (e.g., OTP, transaction alerts) from credit scoring is the developer's choice.
  Deadline: Active

Example B — declaration-gated policy, status unknown:

[GP-00102] status: NEEDS_CONFIRMATION
  Category: 11.4 — Spyware Cat.4 (Personal SMS exfiltration)
  Finding: App reads SMS via Telephony.Sms.CONTENT_URI and transmits filtered rows to a backend; auditor cannot determine from static review whether the actually-transmitted set excludes non-financial or personal SMS.
  Evidence: app/src/main/java/.../SmsHelper.kt:42-88 — query + LIKE filter + POST /api/sms/sync (body field included)
  Reference: spyware-policy.md#114-category-4-personal-smscall-log-exfiltration-critical-for-loan-apps
  Policy Source: https://support.google.com/googleplay/android-developer/answer/14745000
  Declaration Channel: Permissions Declaration
  Declaration Status: Unknown
  Required by policy: "Personal loans or budgeting apps exfiltrating or sharing non-financial or personal SMS history of a user." (Spyware policy — URL above). All SMS use cases also require Permissions Declaration approval per SMS/Call Log policy.
  Suggested implementation: None — auditor judges only the outcome (whether non-financial/personal SMS leaves the device). The developer chooses the mechanism.
  Deadline: Active
  Resolution requires: (a) Permissions Declaration status (Confirmed/Pending/Rejected), and (b) evidence that the actually-transmitted SMS set contains no non-financial or personal records.

Severity definitions:

  • BLOCKER: App will be rejected or removed. Auditor has direct evidence of policy violation. Must fix before submission.
  • WARNING: May trigger review delay or future enforcement. Fix recommended.
  • INFO: Best practice improvement. No immediate enforcement risk.
  • NEEDS_CONFIRMATION: Code triggers a declaration-gated policy, but the declaration status or actual outcome cannot be determined from static review. The auditor MUST NOT escalate to BLOCKER/WARNING without (a) declaration evidence from the developer/Play Console, and (b) evidence that the actual runtime outcome meets the policy. Reported in a separate section of the final report, never mixed into BLOCKER/WARNING tallies.

Reference File Index (all 14 must be loaded for a full audit)

Each reference file contains the full policy details, code audit commands, and checklists for its topic. Per the Execution Contract, an auditor MUST load all 14 files during a full audit and MUST explicitly mark any file as "Not Applicable" in the Coverage Report if they skip it.

#Reference FileSubagent GroupSectionsScope
1references/build-and-signing.mdA1-2build.gradle, targetSdk, AAB, R8, signing, log guards
2references/permissions.mdA3Manifest permissions, SMS/Call Log, QUERY_ALL_PACKAGES, photo/video, location (incl. location button), FGS types, alarms, Contacts Permissions (Contact Picker)
3references/financial-declaration.mdB4Play Console Financial Features Declaration, loan app requirements, country-specific rules
4references/data-privacy.mdB5-7Data Safety form, SDK data audit, account deletion, privacy policy
5references/store-listing.mdE8-9Store listing assets, metadata quality, content rating, IARC
6references/deceptive-behavior.mdC10Misleading claims, system UI mimicry, undisclosed data collection, disclosure-vs-reality gap, hidden functionality, ads
7references/spyware-policy.mdC11Spyware 4 categories — inadequate notice, covert transmission, unrelated collection, SMS exfiltration
8references/device-abuse.mdD12Device settings modification, accessibility abuse, app interference, network abuse
9references/consent-flow.mdC13End-to-end consent flow audit, permission denial handling, disclosure content requirements
10references/loan-harassment.mdB14Loan app harassment, predatory lending, prohibited data for credit scoring
11references/deployment.mdE15-17Developer verification (2026), testing tracks, post-launch monitoring, Play Vitals
12references/code-audit.mdA18Grep/code audit commands — manifest, code, build config, spyware, device abuse, harassment
13references/intellectual-property.mdDIPTrademark, copyright, counterfeit, financial-app brand-misuse risks
14references/restricted-content.mdDRCRestricted content categories applicable to all apps; loan-app surfaces (strings, notifications, support scripts)

Reference Coverage Report (mandatory output)

Emit this table once, at the end of the audit report, immediately before the Launch Day Checklist. Fill in every row.

## Reference Coverage Report

| # | Reference | Loaded | Findings | Notes |
|---|-----------|--------|----------|-------|
| 1 | build-and-signing.md | ✅ | <N> | — |
| 2 | permissions.md | ✅ | <N> | — |
| 3 | financial-declaration.md | ✅ | <N> | — |
| 4 | data-privacy.md | ✅ | <N> | — |
| 5 | store-listing.md | ✅ / ⏭ Not Applicable | <N> | <reason if N/A> |
| 6 | deceptive-behavior.md | ✅ | <N> | — |
| 7 | spyware-policy.md | ✅ | <N> | — |
| 8 | device-abuse.md | ✅ | <N> | — |
| 9 | consent-flow.md | ✅ | <N> | — |
| 10 | loan-harassment.md | ✅ | <N> | — |
| 11 | deployment.md | ✅ | <N> | — |
| 12 | code-audit.md | ✅ | — | Used as grep pattern source |
| 13 | intellectual-property.md | ✅ | <N> | — |
| 14 | restricted-content.md | ✅ | <N> | — |

Coverage: <M>/14 loaded, <K> marked Not Applicable
Total findings: <T> (<B> BLOCKER, <W> WARNING, <I> INFO)
Pending confirmation: <N> NEEDS_CONFIRMATION (not part of the verdict; require developer evidence to resolve)

Loaded column values:

  • ✅ — Reference was read and findings (or a clean result) were produced.
  • ⏭ Not Applicable — Reference was read, but scope does not apply. Must include reason in Notes.
  • ❌ Skipped — Any row with this value means the audit is incomplete and the report must be treated as a draft, not a decision.

19. Launch Day Checklist (Final)

## Pre-Submit
- [ ] Target API level >= 35
- [ ] AAB format (not APK)
- [ ] R8/ProGuard enabled, resources shrunk
- [ ] Version code incremented
- [ ] ProGuard mapping saved
- [ ] SMS/Call Log permissions: either removed, or Permissions Declaration Form submitted with exception approval
- [ ] Personal loan apps: no prohibited permissions (contacts, photos, phone numbers, fine location)
- [ ] `READ_CONTACTS`: if declared, Contact Picker evaluated and documented as insufficient (effective Oct 28, 2026, Android 17+)
- [ ] One-time precise location uses `onlyForLocationButton` flag; persistent precise location has Play Developer Declaration
- [ ] Geofencing uses Geofence API, not a foreground service
- [ ] All foreground services have declared types

## Play Console
- [ ] App signing configured (Play App Signing)
- [ ] Store listing complete (icon, screenshots, descriptions)
- [ ] Financial Features Declaration completed
- [ ] Content rating questionnaire completed
- [ ] Data Safety form completed (ALL SDKs audited)
- [ ] Privacy policy URL active and linked
- [ ] Account deletion web link provided
- [ ] Contact email configured
- [ ] Pricing & distribution set (free/paid, target countries, in-app purchases declared)
- [ ] All Permissions Declaration Forms submitted

## Financial App Specific
- [ ] App category = "Finance"
- [ ] Loan terms in app description (APR, repayment, representative cost)
- [ ] Licensing documents uploaded for target countries
- [ ] No short-term loans (< 60 days)
- [ ] No access to photos/contacts for lending decisions — applies to loan apps, accessory loan/credit apps (calculators, guides), and EWA apps (SMS governed by Section 3.1 exception policy)
- [ ] EWA apps: fees transparent ($1–$5 or 1–5%), no debt creation, no credit bureau reporting

## Spyware & Privacy (Section 11)
- [ ] Prominent disclosure shown BEFORE any data collection or SDK init
- [ ] User can DECLINE data collection and still use basic functionality
- [ ] No SDK transmits data before user consent
- [ ] No non-financial or personal SMS history exfiltrated or shared (loan/budgeting apps)
- [ ] All collected data types disclosed in consent + privacy policy + Data Safety
- [ ] No data collection unrelated to app functionality
- [ ] No background data uploads without user-visible notification

## Deceptive Behavior (Section 10)
- [ ] No system UI mimicry
- [ ] No hidden functionality or remote code execution
- [ ] Disclosure-vs-reality gap audit passed (all collected data is disclosed)
- [ ] No behavior changes based on undisclosed server flags

## Device Abuse (Section 12)
- [ ] No device settings modification
- [ ] No accessibility service abuse
- [ ] No autonomous action initiation/planning/execution via Accessibility API (Oct 2025 update)
- [ ] No app interference or preventing uninstallation
- [ ] App respects FLAG_SECURE set by other apps (no screen capture of secure content)

## Loan App Harassment (Section 14)
- [ ] No contact access for debt collection
- [ ] No automated messages to user's contacts
- [ ] No threatening/shaming language
- [ ] Prohibited data NOT used for credit scoring

## Consent Flow (Section 13)
- [ ] Consent → Permission → Collection order verified
- [ ] Each permission denial handled gracefully
- [ ] Loading indicator during data uploads
- [ ] Third-party data sharing disclosed

## Policy
- [ ] No deceptive behavior
- [ ] Permissions minimal and justified
- [ ] Account deletion available in-app and via web link
- [ ] Privacy policy matches Data Safety declarations
- [ ] No trademark / copyright / counterfeit issues (IP section) — no unauthorized bank, lender, or regulator logos
- [ ] No restricted content in strings, notifications, or store listing (RC section) — especially no harassing / shaming language in collection notifications

## Testing
- [ ] Internal testing track verified
- [ ] Closed testing track passed review
- [ ] Pre-launch report reviewed (no critical issues)
- [ ] Tested on Pixel devices
- [ ] No crashes or ANRs above threshold

## Submit
- [ ] Release notes written (what's new)
- [ ] Staged rollout configured (start at 10-20%)
- [ ] Monitoring dashboards ready
- [ ] Review response team alerted

20. Common Rejection Reasons & Fixes

How to use this table: It is a quick reference for the most common compliance paths — NOT a finding template. When drafting an actual finding, use the Output Format above and per Rule 6 separate the Fix content below into:

  • Required by policy: — only the outcome-level requirement that maps to verbatim policy text (e.g., "stop using SMS data for credit underwriting").
  • Suggested implementation: — any specific mechanism listed below (e.g., "switch to Photo Picker", "use Geofence API", "delete the manifest entry") — prefixed "non-policy, auditor's suggestion only".

The Fix column may bundle both for brevity; the Output Format must keep them apart.

RejectionRoot CauseFixPriority
Deceptive behaviorMetadata doesn't match functionalityAlign descriptions with actual featuresBLOCKER
Data Safety mismatchSDK collects data not declaredAudit all SDKs, update Data Safety formBLOCKER
Privacy policy missing/brokenNo policy URL or returns 404Host policy and link in Console + appBLOCKER
Financial declaration missingNot completed in Play ConsoleComplete Financial Features DeclarationBLOCKER
Restricted permission misuseREAD_SMS without exception, or READ_CONTACTS in loan appSubmit exception form, or remove prohibited permissionsBLOCKER
Over-permissioningUnnecessary permissionsRemove unused permissions from manifestBLOCKER
No account deletionMissing in-app or web deletionImplement account + data deletion flowBLOCKER
Minimum functionalityApp is essentially a WebView wrapperAdd native functionality beyond WebViewBLOCKER
Spyware - no consentData collected before user consent shownMove SDK init after consent dialogBLOCKER
Spyware - SMS exfiltrationNon-financial or personal SMS history exfiltrated or sharedStop transmitting non-financial/personal SMS (HOW is the developer's choice — see spyware-policy.md §11.4 two-gate model)BLOCKER
Spyware - covert transmissionSDKs transmit data before consent dialogDelay SDK initialization until after consentBLOCKER
Consent decline ineffectiveDecline/Cancel does same as AcceptMake decline genuinely prevent data collectionBLOCKER
Disclosure gapCollected data not in consent dialogUpdate consent dialog to list all data typesBLOCKER
Loan harassmentContact data used for debt collectionStop using contact data for collection/harassment (policy outcome); removing READ_CONTACTS is one common implementationBLOCKER
Predatory lendingLoan terms < 60 days or hidden feesEnsure minimum 60 day terms, disclose all feesBLOCKER
Hidden functionalityDexClassLoader or remote code executionRemove dynamic code loadingBLOCKER
Broad contacts access without justificationREAD_CONTACTS declared without Contact Picker evaluation (Android 17+)Switch to Android Contact Picker, or submit Play Developer Declaration for broad accessBLOCKER (Oct 28, 2026)
Precise location without location buttonFine location for one-time use but no onlyForLocationButton flag and no persistent-location declarationAdd onlyForLocationButton for discrete use, or submit Play Developer Declaration for persistent accessWARNING (May 15, 2026)
Geofencing via foreground serviceLocation FGS used as geofencing transportUse Geofence API directly; remove FGS for geofencingWARNING (May 15, 2026)
Missing FGS typeForeground service without typeAdd foregroundServiceType in manifestWARNING
Photo permission without declarationREAD_MEDIA_IMAGES without formSubmit declaration or switch to Photo PickerWARNING
Trademark / copyright infringementUnauthorized bank, lender, or regulator logo in icon, screenshots, or store listingReplace with owned or licensed assets; remove brand referencesBLOCKER
Counterfeit / impersonationApp mimics an established bank or lenderRebrand so the app does not cause source confusionBLOCKER
Harassing language in stringsThreatening / shaming copy in collection notificationsRewrite to neutral, factual languageBLOCKER

21. Key Policy Deadlines (2025-2026)

DateRequirementImpact
July 15, 2026READ_CALL_LOG for account verification removed (source)30 days compliance — use Digital Credentials API or SMS Retriever API
August 31, 2026Target API level requirementSubmission blocked
May 28, 2025Photo/Video permissions full complianceApp removal if non-compliant
May 28, 2025Line of credit apps must comply with Personal Loan policyBLOCKER
August 31, 2025Target API 35 for new apps and updatesSubmission blocked
November 1, 2025API 35 extension deadlineNo more extensions
January 1, 2026Age Signals API data use restriction (announced Nov 19, 2025)Policy enforcement
January 28, 2026Accessibility API: autonomous action prohibition enforcedPolicy enforcement
January 28, 2026India personal loan apps: must be on government approved listPolicy enforcement
March 4, 2026Updated Developer Program Policies effectiveFull enforcement
March 4, 2026Thailand loan app listing requirements (service provider, rates, fees)Existing apps
May 15, 2026Location button (onlyForLocationButton) / Geofencing removed from FGS / Photo & Video clarifications (announced April 15, 2026)Policy enforcement
October 27, 2026Play Console pre-review checks for contacts and location permissions go liveTooling
October 28, 2026Contacts Permissions policy enforcement (Android 17+ / API 37+) — Contact Picker required for non-broad accessPolicy enforcement
July 2024+Financial/health/VPN/government developers must register as OrganizationRolling out

References


For OWASP-level code security audit, see the security-audit skill.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.