CTO verdict at FRE-1480: two sentences atdb3e695were false. (b) sendDefaultPii = false does not stop Sentry receiving the connection IP (sentry-cocoa 9.26.1 sets infer_ip = auto for Cocoa; only the Sentry project's Prevent Storing of IP Addresses switch stops it) — the shipped Settings rows already say so. The IP sentence is restored. The iPhone paragraph described an opt-in build no tester has: the build in TestFlight (ios-v0.3.2, 2026-10-22) predates FRE-355 and starts Sentry on every launch with no off switch. The paragraph now says that. Header comment and marketing/drafts/privacy-page.md rows corrected to match (release range narrowed to 0.3.0-0.15.0; evidence rows record the IP and the TestFlight provenance). privacy-page.patch regenerated. Suite: merge tree ofa0e6ff1+ this branch runs the same failure set as cleana0e6ff1(2 junit failures, the known Lineage-redirect environmental pair); the host's env-validation aborts account for the count noise. Zero new failures.
Marketing tree
One voice, one place. Every later artifact draws on positioning.md — do not
invent framing per-asset.
positioning.md # source of truth: wedge, voice, banned phrasings, approved claims
calendar.json # scheduled pushes: date, channel, status
briefs/<channel>.md # per-channel rules, format, limits, what "good" looks like
drafts/<id>/ # agent output: copy.md, assets/, rationale.md
pending/ approved/ posted/ # human gate by directory move
metrics/weekly.md # funnel snapshot, generated
listening.md # buying-intent threads + drafted replies
Hard rule
approved/ is the only thing a human ever publishes from. Nothing posts itself.
Workflow: agent drafts into drafts/<id>/ → moves to pending/ when complete →
a human reviews and moves it to approved/ → the human publishes from approved/
under their own account → the artifact (or a pointer) lands in posted/.
Nothing in drafts/ or pending/ is ever publishable, by anyone, by any means.