Skip to content

DATA-001B — Inventory personal data and approve a minimization/retention matrix #110

Open

Description

@daliu

Problem

MPRC currently collects or may process member identity, contact, registration, emergency-contact, date-of-birth, waiver, payment reference, shipping, Strava, WhatsApp, Google, Instagram, email, analytics, and error-monitoring data. The public privacy page is explicitly a placeholder, and there is no approved field-by-field record of why each datum is needed, who can access it, which vendor receives it, how long it remains useful, or what happens when a member requests access or deletion.

Engineering must not invent those legal, insurance, accounting, or club-policy decisions. Without an approved inventory, later retention jobs, exports, monitoring, and account deletion can either retain too much data or erase evidence the club is required to keep.

Atomic outcome

Produce an owner-approved, versioned data inventory and minimization/retention decision matrix using categories and synthetic examples only. This issue makes the decisions traceable; it does not implement deletion jobs or mutate production data.

For each data category, record:

  • exact field/category and system of record;
  • collection source and plain-language purpose;
  • public, internal, confidential, restricted, financial, or secret classification;
  • minimum roles/capabilities allowed to view or change it;
  • external vendor/subprocessor and disclosure/consent requirement;
  • retention trigger and approved duration, or an explicit decision pending owner;
  • correction, export, deletion/anonymization, legal-hold, and backup treatment;
  • named business/privacy owner and next review date.

Cover at minimum Firebase Auth/member profiles; race and merchandise records; DOB/emergency contacts; waiver evidence; Stripe references; email delivery; Google account/Site/Group data; WhatsApp number/consent; Strava identity/tokens/status; Instagram publishing; Sentry/Firebase Analytics; rate limiting; logs/audit; exports; and backups.

Acceptance criteria

  • Every currently known personal-data category has a purpose, classification, system/vendor, minimum-access role, retention decision state, request behavior, owner, and review date.
  • Not collected, not yet implemented, unknown, and owner decision pending are distinguished from verified current behavior.
  • The approved matrix identifies data that should never appear in browser-readable profiles, logs, analytics, GitHub, support screenshots, or routine exports.
  • The matrix distinguishes member-account deletion from legally required payment, accounting, waiver, incident, or audit evidence.
  • Backup and external-provider deletion limitations are explicit rather than promising immediate erasure everywhere.
  • A named officer/privacy owner approves the inputs and the public privacy notice has a version/effective date and truthful contact path.
  • No real member record, raw email/phone/address, OAuth token, provider identifier, discount code, security finding, or private system URL is copied into this issue or repository evidence.

Dependencies and coordination

Explicitly out of scope

  • Inventing privacy/legal/insurance/accounting policy or retention periods.
  • Editing production Firebase/Auth, Google, Stripe, WhatsApp, Strava, Instagram, Sentry, email, or backup data/settings.
  • Implementing account deletion, retention jobs, exports, consent UI, monitoring changes, Firestore Rules, or incident response.
  • Publishing real-member examples or private evidence.

Claim protocol

Creation is not a claim. Do not begin work until 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. Owner policy/configuration actions remain owner-only even after an engineering claim.

Activity

  1. added
    priority:P0Launch blocker or urgent security risk
    type:securitySecurity or privacy boundary
    area:membershipMembership lifecycle and reconciliation
    area:firebaseFirebase services and data
    size:SSmall focused issue
    area:privacyPersonal data, consent, minimization, retention, and privacy operations
    on Jul 12, 2026
  2. daliu commented on Jul 12, 2026

    @daliu
    ContributorAuthor

    Source-inventory coordination: #113 inventories only redacted systems/categories/counts and selects migrate/recreate/retire/reauthorize/bootstrap/unknown. This issue still owns purposes, minimization, vendor handling, retention decisions, request behavior, and backup/deletion policy. No raw Firebase or Sheets/Forms record may be copied into either issue.

  3. daliu commented on Jul 13, 2026

    @daliu
    ContributorAuthor

    Membership roster input needed: #116 requires an owner-approved minimum column profile, purpose, access roles/capabilities, export/download retention, sharing/storage rules, deletion behavior, and treatment of the club account. Default design excludes UIDs/internal IDs, DOB, emergency contacts, addresses, waiver evidence, payment/provider IDs, tokens, arbitrary notes, and discount codes. #114/#115 also require approved personal fields for account-independent membership and manual payment/link audit.

  4. daliu commented on Jul 13, 2026

    @daliu
    ContributorAuthor

    DISCOUNT REQUEST FORM PRIVACY INPUT (2026-07-13) — NOT CLAIMED; the public form structure was reviewed without submitting a response or opening response data.

    The owner-supplied form is currently a public Google Form. It requests a submitter email, discount category, race/product/service name, website, a required response about contact information that may include a name/email/phone number, and free-text benefit rationale. It states that a response copy will be emailed to the supplied address.

    Add this intake to the matrix as a distinct source from approved discount offers. Owner decisions are needed for purpose, minimum fields, notice/consent, who may view responses, Google/emailed-copy disclosure, spam/abuse controls, retention/deletion/correction behavior, and whether third-party contact details should be collected at all. A request never proves membership or authorizes publication. Requester/contact data must not be copied into member-readable discount records, public issues, logs, analytics, or routine roster exports.

    #113 should privately inventory the Form owner, linked response destination, access state, redacted count/date range, and disposition without opening or exporting response rows. #83 owns only a later approved protected-offer view and scoped review path.

  5. daliu commented on Oct 15, 2026

    @daliu
    ContributorAuthor

    October 15 direct owner decisions for the minimum member release:

    • $25 individual and $30 family, full calendar year.
    • Verified email, accepted waiver and confirmed paid current term suffice; no further discretionary membership approval.
    • Online dues are included in the first launch. Officers retain a private admin dues-confirmation convenience; do not advertise external payment options/instructions publicly.
    • Participating family members have separate verified accounts, share one paid Family ID and do not pay again. A bare Family ID must not grant access; private single-use invitations are the proposed secure enrollment path.
    • Privacy/retention/waiver, including guardian/minor handling, remain undecided. Requested drafts are being prepared, not approved or wired into acceptance.
    • Standing build/deploy authority remains; paid-race checkout/refunds/transfers remain a separate later release. No actual charge, provider, production or real-data action has occurred.

    First focused runtime source change is #737: canonical current-member admission for new free-event signup with expiry-safe cancellation and immutable retry. This does not complete #81/#115/#114 or activate real membership/payments.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:firebaseFirebase services and dataarea:membershipMembership lifecycle and reconciliationarea:privacyPersonal data, consent, minimization, retention, and privacy operationspriority:P0Launch blocker or urgent security risksize:SSmall focused issuestatus:blocked-ownerRequires an owner or external decisiontype:operationsOperational setup or runbooktype:securitySecurity or privacy boundary

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions