Repository navigation
OBS-001A1 — Disable Sentry replay and fail closed for personal data #134
Description
Officer impact: None — this removes sensitive telemetry exposure without changing an officer or member procedure.
Officer documentation: None — no officer task, navigation, permission, collected field, or provider-console procedure changes. Engineering security/operations documentation must be updated only after #118 releases its current root-document claims.
Deployment evidence: Closure must distinguish source/tests/merge, website publication, exact runmprc.com release, and Sentry provider configuration. A green build does not prove Sentry retention, access, consent, or deletion settings.
Problem
The hosted frontend currently attaches a signed-in member's email and UID to Sentry, configures error-triggered session replay, and has no fail-closed payload filter. Error messages, request URL state, breadcrumbs, form values, provider responses, and arbitrary extras can contain personal data or capability-bearing tokens.
Invariant
No Sentry event emitted by this code may contain a direct member identifier, form/request body, query string, fragment, breadcrumb, arbitrary extra/context value, provider response, or raw error message. Session replay remains disabled until a separately approved privacy configuration exists.
Atomic outcome
Disable replay, remove member user context, and install a small allowlist-based beforeSend sanitizer with synthetic payload tests. Preserve useful generic error type, safe stack location data, and strictly validated non-content event metadata only.
Exact implementation boundary
src/services/monitoring/sentry.tssrc/services/monitoring/sentry.test.ts- Minimum engineering documentation after AUTH-PROFILE-001 — Restore safe profile setup and editing after the Firebase cutover #118 releases
SECURITY.md/OPERATIONS_RUNBOOK.md
Do not edit functions/signup.js, Analytics, capabilityCallback.ts, Auth/profile code, Firestore Rules, provider configuration, or #118 paths. #118 separately owns the Auth-signup logging outcome pending merge/deploy.
Acceptance criteria
- Both session and error replay are disabled; no Replay integration or nonzero replay sample rate is configured.
-
setUserContextsends no UID, email, phone, or other member identifier. -
beforeSendreturns only documented generic diagnostics and strictly validated non-content event metadata and drops user/request data, query/fragment state, breadcrumbs, arbitrary tags/extras/contexts, raw messages, and unsafe stack-frame values/source context. - Synthetic canaries representing email, phone, address, DOB, emergency contact, OAuth/Auth token, password/reset material, provider response, form value, request body, and capability URL are absent from serialized sanitized events.
- Existing callback-startup isolation remains unchanged and tested.
- Tests initialize only the mocked Sentry client and make no network/provider calls.
- External Sentry retention, access, consent, and deletion configuration remains explicitly unproven under DATA-001B — Inventory personal data and approve a minimization/retention matrix #110.
Dependencies and coordination
- Parent: OBS-001A — Remove personal data and session replay from current monitoring and logs #111.
- SAFETY-001 — Preserve callbacks and fail closed on local Firebase isolation #99 and CI-001A — Repair the deterministic frontend test baseline #103 are complete.
- AUTH-PROFILE-001 — Restore safe profile setup and editing after the Firebase cutover #118 owns
functions/signup.js, profile recovery, and currentSECURITY.md/OPERATIONS_RUNBOOK.mdhunks. Those paths are immutable until its explicit release. - OBS-001A — Remove personal data and session replay from current monitoring and logs #111 retains the separate Firebase Analytics allowlist outcome; do not implement it here.
Claim protocol
Creation is not a claim. Before editing, assign this issue, add status:in-progress, post CLAIMED by <canonical agent> at <UTC>; branch <branch>, and re-read comments. The earliest valid claim wins.
Activity
daliu commentedon Jul 13, 2026
CLAIMED by Codex agent
/rootat 2026-07-13T08:48:34Z; branchcodex/issue-134-sentry-redaction.Exclusive implementation paths:
src/services/monitoring/sentry.tsandsrc/services/monitoring/sentry.test.ts. I will use an isolated worktree from refreshedorigin/main, preserve #99 callback isolation, and make no production/provider calls.STOP boundaries: #118 owns
functions/signup.js, profile/Auth paths, and currentSECURITY.md/OPERATIONS_RUNBOOK.mdhunks until explicit release. Analytics, Firestore Rules, Stripe/webhook, Strava, sitemap, shared dirty-worktree files, and external Sentry settings are excluded. Documentation will wait for #118's released merge base.daliu commentedon Jul 13, 2026
Implementation progress — CLAIM RETAINED / NOT COMPLETE
0ea0fcbe118a1a465648b7380f0757e81d99e41fsrc/services/monitoring/sentry.tsand its focused test.The PR intentionally remains draft. #118 still owns
SECURITY.mdandOPERATIONS_RUNBOOK.md; after that owner explicitly releases the files, this branch must refresh from currentmain, add truthful source/provider-status documentation, rerun the full relevant checks, and only then become mergeable.No Sentry Console setting, provider retention/access policy, production transport, or live payload behavior has been inspected or changed. Those outside-provider controls remain unproven and are not implied by the source tests.
daliu commentedon Jul 13, 2026
DEPENDENCY / DOC OWNERSHIP RELEASE at 2026-07-13T10:08Z
#118 source merged through PR #132 as exact main
13ccc1b67dd57f69091e808b12e1287a1bc05b2f. Exact post-merge CI run 29241524287 is green, and the merge triggered CI only: no Firebase, Pages, Netlify production, or provider deployment occurred.SECURITY.mdandOPERATIONS_RUNBOOK.mdare now released to #134 after a controlled refresh to that exact main. Preserve:The two Sentry runtime files remain #134-owned.
daliu commentedon Jul 13, 2026
COMPLETE — source boundary merged; production behavior remains unproven
OBS-001A1 is complete as the focused source outcome.
maincommita925dbdada35b6d7ceb28f6ba2b10cc5679c9634after branch protection correctly required an outside approval.a0c9065635046c948f1ba92fdf1fe8175b693c40had diff SHA-2567aa64a7636e9257f457002978d6783747c2e459abbce477652df77efa6cd24ee.beforeSendattachment reread race.29242490328passed frontend, Functions, and Rules. Exact-merge post-merge CI run29242595272passed the same three hosted jobs.Deployment evidence
mainata925dbdada35b6d7ceb28f6ba2b10cc5679c9634.runmprc.com: NOT VERIFIED at this revision.The merge triggered only the CI workflow; no protected release, Pages, or Firebase workflow ran. Source completion therefore does not claim live containment.
Officer impact: None — no officer/member procedure, navigation, permission, or collected field changed.
Officer documentation: None — internal engineering boundaries were updated in
SECURITY.mdandOPERATIONS_RUNBOOK.md; no officer task changed.Parent #111 retains the separate Firebase Analytics outcome. Claim released for
src/services/monitoring/sentry.ts,src/services/monitoring/sentry.test.ts, and the two narrow engineering-document hunks.