play data-safety: PSL_SUPPORT_DATA_DELETION_BY_USER as Play's single choice (partialDeletion true | false | 'auto90'), drop the removed PSL_DATA_COLLECTION_USER_REQUEST_DELETE (deletionRequest deprecated, check notes it); ship Google's empty form (cli/data/play-data-safety-form.csv, exported 2026-10-12), take every Answer requirement from it and report pairs not in it (formPairIssues) in check, declarations and play data-safety. Pitfall 21

This commit is contained in:
CRTkafa 2026-10-12 09:33:56 +08:00
parent dfc28c15f8
commit b5b8f2da9d
35 changed files with 1824 additions and 859 deletions

File diff suppressed because it is too large Load diff

View file

@ -79,13 +79,13 @@ const config: ShipConfig = {
dataSafety: {
collectsData: true,
encryptedInTransit: true,
deletionRequest: true,
// Sign-up methods. Google does not publish these ids: compare with Play Console > App content > Data safety >
// Export to CSV before the first import. The delete-account URL (PSL_ACCOUNT_DELETION_URL) comes from
// accounts.deletionUrl; `storebound check` names any other row Play requires.
accountCreation: ['PSL_ACM_USER_ID_PASSWORD'],
// Play asks this once there are accounts (PSL_SUPPORT_DATA_DELETION_BY_USER): can people delete some or all of their
// data without deleting the account? Ask the owner. true also needs a page: partialDeletionUrl (default accounts.deletionUrl).
// Play asks this once there are accounts (PSL_SUPPORT_DATA_DELETION_BY_USER, one choice): can people request that some
// or all of their data is deleted without deleting the account? true | false | 'auto90' (no, but it is deleted
// automatically within 90 days). Ask the owner. true also needs a page: partialDeletionUrl (default accounts.deletionUrl).
partialDeletion: false,
data: {
PSL_EMAIL: { shared: false, collect: ['functionality', 'account'] },

View file

@ -107,13 +107,13 @@ const config: ShipConfig = {
dataSafety: {
collectsData: true,
encryptedInTransit: true,
deletionRequest: true,
// Sign-up methods. Google does not publish these ids: compare with Play Console > App content > Data safety >
// Export to CSV before the first import. The delete-account URL (PSL_ACCOUNT_DELETION_URL) comes from
// accounts.deletionUrl; `storebound check` names any other row Play requires.
accountCreation: ['PSL_ACM_USER_ID_PASSWORD'],
// Play asks this once there are accounts (PSL_SUPPORT_DATA_DELETION_BY_USER): can people delete some or all of their
// data without deleting the account? Ask the owner. true also needs a page: partialDeletionUrl (default accounts.deletionUrl).
// Play asks this once there are accounts (PSL_SUPPORT_DATA_DELETION_BY_USER, one choice): can people request that some
// or all of their data is deleted without deleting the account? true | false | 'auto90' (no, but it is deleted
// automatically within 90 days). Ask the owner. true also needs a page: partialDeletionUrl (default accounts.deletionUrl).
partialDeletion: false,
data: {
PSL_EMAIL: { shared: false, collect: ['functionality', 'account'] },

View file

@ -99,12 +99,14 @@ const config: ShipConfig = {
dataSafety: {
collectsData: true,
encryptedInTransit: true,
deletionRequest: true, // e.g. "email us"; no accounts, so no account deletion URL needed
// No accounts: PSL_ACM_NONE. A guest account with a name picked on the device and a server token (no password, no
// email): accounts { enabled: true, signUp: ['username'], ... } and ['PSL_ACM_USER_ID_OTHER_AUTH'] here (Play's
// "Username and other authentication"; `storebound scan` proposes it). With accounts Play also requires the
// delete-account URL (from accounts.deletionUrl) and partialDeletion: true | false (delete data without deleting the
// account; ask the owner), plus partialDeletionUrl when true (default accounts.deletionUrl).
// delete-account URL (from accounts.deletionUrl) and partialDeletion: true | false | 'auto90' (people can request
// that data is deleted without deleting the account / they cannot / it is deleted automatically within 90 days; ask
// the owner), plus partialDeletionUrl when true (default accounts.deletionUrl). Play removed the old "users can request
// deletion" question, so there is no deletionRequest any more. `storebound check` compares every row with Play's
// current form (cli/data/play-data-safety-form.csv).
accountCreation: ['PSL_ACM_NONE'],
data: {
PSL_APPROX_LOCATION: { shared: true, collect: ['analytics', 'advertising', 'fraud'], share: ['analytics', 'advertising', 'fraud'] },