privacy: fire the contingency — swap (b) and the iPhone paragraph to the opt-in form

v0.15.1 (2026-11-04) is the first release tag containing FRE-355's merge
6e74b261, and the live appcast serves v0.15.2. The page's own Contingency
made the always-on (b) conditional on no release shipping FRE-355; that
condition no longer holds, so the always-on text would be false on the
build the page deploys with.

Swap applied with two corrections against the pre-written contingency
text, both measured in the shipped starter (Sources/NookApp/main.swift,
CrashReporting.onTracesSampleRate):

- session pings and performance traces (0.1) still flow while enabled,
  so they are named — the contingency's own completeness warning;
- sendDefaultPii = false means no IP is attached, so the swap text's
  'Sentry also receives your IP address' is dropped, not kept.

iPhone paragraph corrected the same way (iOS gates identically:
ios/AgentNookMobile/App.swift startIfEnabled, SettingsView default off).
Last Updated -> November 6, 2026. privacy-page.patch regenerated
(c1c498e..branch); draft sequencing/evidence rows updated.
This commit is contained in:
CMO (FrenoCorp)
2026-11-06 00:44:22 +00:00
parent 4d6550f0d1
commit db3e695ecf
3 changed files with 80 additions and 54 deletions

View File

@@ -6,14 +6,22 @@
* destinations, file:line evidence per row. When the app's egress changes,
* this page changes in the same commit — not later.
*
* The crash-reporting paragraph below describes the build users run today:
* Sentry starts unconditionally in `Sources/NookApp/main.swift:272-279`, with
* `sendDefaultPii = true`, and there is no off switch in Settings. The opt-in
* build change is merged on The-Nook master (FRE-355, 6e74b261) but no release
* tag carries it yet, so the page must keep the always-on form until the first
* release that contains it — then paragraph (b) is replaced by the shorter
* form held in `marketing/drafts/privacy-page.md` §"Contingency" in the same
* commit that makes it true.
* The crash-reporting paragraphs ((b) and the iPhone companion) describe the
* build users run today: crash reporting is opt-in, off by default, on
* releases v0.15.1 and later — FRE-355 (merge `6e74b261`) first shipped in
* `v0.15.1` (2026-11-04), and the live appcast serves `v0.15.2`. When enabled,
* Sentry receives crash and error reports, session pings, and performance
* traces at a 0.1 sample rate (`tracesSampleRate = 0.1`), and no IP address is
* attached (`sendDefaultPii = false`, `Sources/NookApp/main.swift` and
* `Sources/NookCore/System/CrashReporting.swift`). Builds before `v0.15.1`
* started Sentry on every launch with `sendDefaultPii = true` and no off
* switch; this page describes the current release.
*
* The *Contingency* in `marketing/drafts/privacy-page.md` fired with `v0.15.1`
* and is applied in this commit, with two corrections against the pre-written
* swap text: the shipped build still sends session pings and traces while
* enabled, so they are named (the contingency's own completeness warning), and
* `sendDefaultPii = false` means the IP sentence is dropped rather than kept.
*
* Corrected against the CTO's /privacy verdict (FRE-354): no macOS username
* from Sentry (sendDefaultPii sets the IP only), session pings named, (a)
@@ -37,7 +45,7 @@ export default function NookPrivacyPolicy() {
<SubdomainHeader />
<div class="min-h-screen px-[8vw] py-[10vh]">
<div class="py-4 text-xl">The Nook&apos;s Privacy Policy</div>
<div class="py-2">Last Updated: November 4, 2026</div>
<div class="py-2">Last Updated: November 6, 2026</div>
<div class="py-2">
The Nook runs on your Mac, and the iPhone and Apple Watch companion
is in TestFlight beta. Your prompts, your code and your agent
@@ -71,15 +79,16 @@ export default function NookPrivacyPolicy() {
a connection once.
</div>
<div class="pb-2">
<div class="-ml-6">(b) Crash and error reporting:</div> Crash
reports, error events, hang reports, session pings, and
performance traces are sent to Sentry, our crash-reporting
processor, and this is on for every launch in this version —
there is no setting that turns it off. Each report carries the
app version, the macOS version, the Mac model and what the app
was doing when it failed, and Sentry also receives your IP
address. Reports never include your prompts, your code or your
session content.
<div class="-ml-6">(b) Crash and error reporting — off unless
you turn it on:</div> Crash reporting is off by default and
runs only if you enable it in Settings. When it is on, The Nook
sends crash reports, error events, hang reports, session pings,
and a sample of performance traces to Sentry, our
crash-reporting processor. Each report carries the app version,
the macOS version, the Mac model and what the app was doing
when it failed. Your IP address is not attached to the reports.
They never include your prompts, your code or your session
content.
</div>
<div class="pb-2">
<div class="-ml-6">(c) Phone connection:</div> The phone
@@ -160,10 +169,13 @@ export default function NookPrivacyPolicy() {
</div>
<div class="pb-2">
<div class="-ml-6">The iPhone companion.</div> The iPhone and
Apple Watch app is in TestFlight beta. It runs the same Sentry
reporting: the app version, iOS version, iPhone model, session
pings and your IP address, with the same no-off-switch. Those
reports never include your prompts, code or session content.
Apple Watch app is in TestFlight beta. Its crash reporting is
the same opt-in: off unless you turn it on in its settings.
When it is on, it sends crash reports, session pings and a
sample of performance traces to Sentry — the app version, the
iOS version and the iPhone model, with no IP address attached.
Those reports never include your prompts, code or session
content.
Its other network traffic is the phone connection in (c) — the
relay, or a direct LAN/tailnet link — plus, if you allow
notifications, the push token it gives the relay so Apple can