diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index 81a6d6e..419223e 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -31,8 +31,18 @@ The policy page states what was *measured* — no accounts, no analytics, no advertising or third-party SDK, no tracking, and no networking code anywhere in the app or in TortoiseGraphics2 — which is also why no `PrivacyInfo.xcprivacy` is needed: nothing here touches a required-reason -API, not even `UserDefaults`. Re-check that if a dependency or an -`@AppStorage` ever arrives. **Both pages read in one language**, chosen by +API, not even `UserDefaults`. That last one is **held on purpose and has +already had to be defended once**: #53's viewer read a debug launch flag with +`UserDefaults.standard.bool(forKey:)`, which is where a `-flag value` pair +normally arrives, and one debug read of it obliges the whole app to ship a +manifest declaring `CA92.1`. It now reads `ProcessInfo.processInfo.arguments` +instead — same launch command, no manifest. So the thing to re-check is not +only "a dependency or an `@AppStorage`": *any* `UserDefaults` call counts, +including a read, including one that only fires in development, because it is +compiled into the shipping binary. `NSWorldSensingUsageDescription` (#53) is +**not** on that list — a usage description is a permission, not a +required-reason API, and it changes the policy page rather than the manifest. +**Both pages read in one language**, chosen by `?lang=` first, then `navigator.languages` in the reader's own order, falling back to English; adding a language is a code in `LANGS`, an `