Skip to content

DATA-001C1 — Pause optional My Account phone collection during privacy review #178

Closed

Description

@daliu

Outcome

Pause new optional phone-number collection on the signed-in My Account profile while MPRC performs the private incident, purpose, access, retention, and deployed-state review owned by #110, #112, and #113.

This is precautionary source containment. Current main denies anonymous/cross-user member-profile reads in source and tests, and the public email account-registration form has no phone field. The live Firebase Rules/Functions/App Check revision remains unproven, and the separate public Google membership form does require phone and emergency-contact numbers. Spam timing alone does not prove which system, if any, disclosed a number.

Invariant

After this change, the account page and its service do not offer or send a new phone number. A signed-in user may still edit their name. Existing stored phone values are preserved byte-for-byte and are not newly queried, exported, deleted, backfilled, or migrated by this issue; the existing owner-profile document read remains document-level.

Allowed transitions

  • Existing profile + name edit -> only fullName and updatedAt change.
  • Existing profile + unchanged phone -> phone remains unchanged.
  • Direct self-service attempt to add or replace a non-empty phone -> Rules deny.

Failure cases

  • Anonymous and cross-user profile reads/listing remain denied.
  • A browser client cannot reintroduce phone collection by bypassing the UI.
  • A failed save remains generic and leaves membership/payment state unchanged.
  • No production record, provider Console, or real phone number is used in testing.

Scope

  • Remove the Phone display and Phone edit control from My Account.
  • Add short plain-language notice that phone collection is paused and existing data is not changed by this update.
  • Make the account service validate/write name only.
  • Narrow self-service Rules so non-empty phone mutations are denied while existing values can remain untouched.
  • Add synthetic UI/service/Rules tests for the containment and retained authorization denials.
  • Update the account workflow/system map and officer procedure.

Potential owned paths:

  • src/pages/account/Account.tsx
  • src/pages/account/Account.test.tsx
  • src/services/account/accountService.ts
  • src/services/account/accountService.test.ts
  • src/types/member.ts
  • firestore.rules
  • tests/firestore-rules/members.test.js
  • SYSTEM_DESIGN.md
  • docs/officers/EVENTS_SHOP_MEMBERS.md
  • docs/officers/SYSTEM_MAPS.md

Explicitly out of scope

Acceptance criteria

  • My Account has no phone value, phone input, tel autocomplete, or phone state.
  • Name-only edits send no phone field and preserve a generic failure path.
  • Source Rules deny new/replacement non-empty phone writes and continue denying anonymous/cross-user/list access.
  • Existing profile phone data is not deleted, migrated, exported, logged, or copied into fixtures.
  • Focused frontend/service tests and the full frontend suite pass with synthetic data.
  • Focused Rules tests and the full Rules suite pass in the emulator.
  • Diagnostic production build passes without regenerating public/sitemap.xml.
  • Diff review covers authorization, PII/logging, backward compatibility, and production fallback.

Migration and rollback

No data migration. Existing documents remain compatible. Rollback is a reviewed source revert or safe roll-forward; do not restore phone collection until #110 approves its purpose/disclosure/retention and #113/#133/#136 prove the intended protected deployment and access boundary.

Officer impact: Officers should stop directing members to store phone numbers in My Account; membership-form and provider handling remain a separate private review.

Officer documentation: docs/officers/EVENTS_SHOP_MEMBERS.md, docs/officers/SYSTEM_MAPS.md

Deployment evidence: Source/tests/merge, website publication, runmprc.com revision, Firebase Rules deployment, provider configuration, and production behavior must be recorded separately. This issue performs no provider or production-data action.

Activity

  1. self-assigned this
    on Jul 13, 2026
  2. added
    bugSomething isn't working
    priority:P0Launch blocker or urgent security risk
    type:securitySecurity or privacy boundary
    area:membershipMembership lifecycle and reconciliation
    area:authAuthentication and authorization
    area:firebaseFirebase services and data
    area:webWeb application and hosting
    size:SSmall focused issue
    status:readyDependencies complete and ready to claim
    area:privacyPersonal data, consent, minimization, retention, and privacy operations
    status:in-progressClaimed and actively being implemented
    and removed
    status:readyDependencies complete and ready to claim
    on Jul 13, 2026
  3. daliu commented on Jul 13, 2026

    @daliu
    ContributorAuthor

    CLAIMED — 2026-07-13T20:29:16Z

    Do not edit these paths until a timestamped release is posted here.

  4. daliu commented on Jul 13, 2026

    @daliu
    ContributorAuthor

    RELEASED — 2026-07-13T20:49:05Z

    • Source pull request: DATA-001C1: pause My Account phone collection during privacy review #179
    • Reviewed branch commit: 923731c976ea362967d761ac98ad3f77f80a6c7f
    • Merged main: 6017493f3366790eefba5d00baf3df7211dfc380
    • Post-merge CI: https://github.com/Run-MPRC/Run-MPRC.github.io/actions/runs/29283760147 — success on the exact merge SHA. Functions, frontend, Firestore Rules, and commerce-journal emulator jobs all completed successfully.
    • Local/focused proof: frontend 133/133, Rules 314/314, My Account/service 20/20, focused member Rules 51/51, changed-file ESLint, diagnostic build, and diff check.
    • Independent exact-snapshot QA and security reviews: approved with no blocking findings.
    • Acceptance criteria are checked. The ten-path claim is released.

    Officer impact: My Account source no longer displays or accepts phone values; officers should not direct members to enter a phone there.

    Officer documentation: docs/officers/EVENTS_SHOP_MEMBERS.md, docs/officers/SYSTEM_MAPS.md

    Deployment evidence:

    • Source changed: yes, merged as 6017493.
    • Tests passed: yes, including post-merge hosted CI.
    • Code merged: yes.
    • Netlify deploy preview: ready for PR commit 923731c; this is not production proof.
    • Website published: not proven or triggered by this issue.
    • runmprc.com verified: not yet.
    • Firebase Rules deployed/read back: not yet; the protected release was not run.
    • Outside provider configured or verified: no.
    • Production behavior verified: no.

    Residuals remain explicit: a trusted profile-creation Function may copy a phone already present in Firebase Auth; Firestore still transports the complete owner document before the phone-free client projection; broader admin projection remains #116. The separate redacted #112 handoff records a confirmed anonymous-reader permission on a membership-response artifact. Revocation still requires authorized provider-side action; no response rows or member records were opened.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:authAuthentication and authorizationarea:firebaseFirebase services and dataarea:membershipMembership lifecycle and reconciliationarea:privacyPersonal data, consent, minimization, retention, and privacy operationsarea:webWeb application and hostingbugSomething isn't workingpriority:P0Launch blocker or urgent security risksize:SSmall focused issuetype:securitySecurity or privacy boundary

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions