console plans: guardrails from a real run (2026-10-21): health none label and Sign in details Yes/No + Add details (old labels as altLabels, verify accepts both), finance boxes on step 1, App Privacy Additional Setup Required OK, verify from DOM input states (verify.capture, --from), Save + confirm before every Next on Play pages, IARC Digital purchases boxes and an exact-label in-page helper that refuses patterns and blanket answers; review contact found in parent folders, the profile and more key shapes with the files checked listed; one-line errors for missing required values (Args.required); pitfalls 86-87, tests
This commit is contained in:
parent
a6dab8f3aa
commit
335a4124ab
23 changed files with 486 additions and 74 deletions
|
|
@ -291,6 +291,8 @@ export const IARC_LABELS: Record<IarcQuestion, string> = {
|
|||
userInteraction: 'Users can interact or exchange content', sharesLocation: 'Shares the user\'s location with other users', digitalPurchases: 'Digital purchases',
|
||||
unrestrictedInternet: 'Unrestricted internet access (browser)',
|
||||
};
|
||||
/** IARC's Digital purchases question and the box its Yes reveals (exact console labels, 2026-10-21). */
|
||||
export const IARC_DIGITAL_PURCHASES = 'Digital purchases', IARC_DIGITAL_GOODS = 'Purchases of digital goods';
|
||||
const CATEGORY_LABELS = { game: 'Game', social: 'Social or communication', other: 'All other app types' } as const;
|
||||
|
||||
/** The IARC follow-up questions (console.contentRating.details), in the page's order: section -> key -> label. The
|
||||
|
|
@ -362,6 +364,9 @@ function contentRating(config: ShipConfig): Answer[] {
|
|||
if (topics && !topics.some(t => topic.get(t) === true)) continue;
|
||||
const given = (det as Record<string, Record<string, unknown> | undefined>)[sec] ?? {};
|
||||
const src = (k: string) => `console.contentRating.details.${sec}.${k}`;
|
||||
// Yes on Digital purchases reveals boxes; "Purchases of digital goods" must be ticked before the loot-box and trading
|
||||
// follow-ups show (2026-10-21)
|
||||
if (sec === 'digitalPurchases') out.push(ok(`d:digitalPurchases:digitalGoods`, `Digital purchases: ${IARC_DIGITAL_GOODS}`, true, `console.contentRating.answers.digitalPurchases (Yes) or what is sold`, 'Tick it first: the loot-box and trading questions show only after it.'));
|
||||
for (const [k, kind] of Object.entries(IARC_DETAIL_KEYS[sec])) {
|
||||
if (sec === 'digitalPurchases' && k === 'lootBoxes') continue; // the q:lootBoxes answer above
|
||||
const label = IARC_DETAIL_LABELS[sec][k]!, id = `d:${sec}:${k}`, v = given[k];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue