Skip to content

OBS-001A — Remove personal data and session replay from current monitoring and logs #111

Description

@daliu

Officer impact: None — member and officer screens/tasks are unchanged; this tracker removes or proves containment of diagnostic payloads.

Officer documentation: None — no officer procedure, navigation, permission, collected field, deployment duty, or external account changed. Engineering evidence is in SECURITY.md and OPERATIONS_RUNBOOK.md.

Deployment evidence: Closure records source/tests/merge separately from website publication, exact runmprc.com, Firebase deployment, outside-provider configuration, and live behavior. Source completion does not prove any production surface.

Problem

Current source sent a signed-in user's email to Sentry user context, enabled Sentry replay for every captured error, and logged the raw signup email in functions/signup.js. Authentication, member, event, registration, payment, and account screens can contain personal data or capability-bearing URL state. Firebase Analytics was also enabled without a repository-proven event allowlist, consent decision, payload audit, or retention decision.

This created avoidable exposure to logs and monitoring vendors even when the underlying feature worked correctly.

Atomic outcome

Make the existing frontend monitoring, analytics wrapper, Auth signup logging, and covered browser diagnostics fail closed for personal data, with synthetic tests that inspect the emitted payloads. This issue removes current exposure; it does not build the broader payment metrics/SLO program or approve future telemetry.

Scope

  • Remove raw email and other direct member identifiers from Sentry user context.
  • Disable Sentry session replay, tracing, client reports, default PII, breadcrumbs, attachments, transactions, and unapproved integrations.
  • Positively project only bounded Sentry error metadata; drop query strings, fragments, form values, provider responses, tokens, addresses, DOB, emergency contacts, emails, phones, request bodies, and unknown fields.
  • Replace raw signup email/error logging with one fixed failure outcome and prove success silence plus failure redaction across standard console levels.
  • Remove Firebase Analytics runtime initialization/emission and keep the compatibility wrapper transport-free.
  • Route the covered browser console failures through a closed five-outcome helper.
  • Add focused synthetic tests that fail if representative sensitive values reach Sentry, Analytics, signup logs, or covered browser diagnostics.
  • Document the residual production/provider decisions that require the approved matrix from DATA-001B — Inventory personal data and approve a minimization/retention matrix #110.

Acceptance criteria

  • No raw email, phone, address, DOB, emergency contact, OAuth/Auth token, provider response, password/reset material, capability-bearing query/fragment, arbitrary form value, or request body is sent by the covered code.
  • Sentry replay is off, or sensitive-route exclusion and masking are verified by payload inspection with no form text or URL state visible.
  • Signup success/failure logs contain only allowlisted event/result identifiers and sanitized codes.
  • Analytics accepts only documented low-cardinality event names/parameters and rejects or drops unknown/sensitive fields.
  • Synthetic canary values are absent from captured Sentry events/replays, Analytics calls, console/function logs, test artifacts, and CI output.
  • Local and CI tests make no production network calls and use synthetic identities only.
  • External Sentry/Firebase retention, consent, access, and deletion configuration remains explicitly unproven until owner evidence is supplied under DATA-001B — Inventory personal data and approve a minimization/retention matrix #110.

Completed atomic children

Dependencies and coordination

Explicitly out of scope

  • Adding new analytics, advertising, fingerprinting, or replay vendors.
  • Designing dashboards, payment metrics, alerts, or incident response.
  • Changing membership authority, OAuth scopes, Firestore authorization, data retention jobs, or the public privacy policy.
  • Enabling monitoring in local/test or contacting live services from tests.

Claim protocol

Creation is not a claim. Do not edit files until dependencies are complete, the issue is assigned, and a timestamped CLAIMED by <canonical agent> at <UTC>; branch <branch> comment is posted and re-read. Earliest valid claim wins.

Metadata

Metadata

Assignees

Labels

area:firebaseFirebase services and dataarea:privacyPersonal data, consent, minimization, retention, and privacy operationsarea:webWeb application and hostingpriority:P1High-priority follow-upsize:SSmall focused issuetype:securitySecurity or privacy boundary

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions