Skip to content

CI-001D2 — Initialize and prove staging email/password Auth #671

Closed

Description

@daliu

Outcome

Initialize Firebase Authentication only in the isolated run-mprc-staging project, enable email/password sign-in with conservative defaults, and prove the resulting provider behavior using one disposable synthetic identity. The deployed Auth contract must come from an exact reviewed main commit.

Officer impact: Officers gain a staged account backend for made-up sign-in testing. This does not enable production member sign-in or change any real account.

Officer documentation: Update OFFICER_START_HERE.md, docs/officers/README.md, the affected auth/system map guide, OPERATIONS_RUNBOOK.md, SECURITY.md, SYSTEM_DESIGN.md, IMPLEMENTATION_PLAN.md, and GITHUB_ISSUES.md.

Deployment evidence: None at creation. Closure requires exact source commit, CI, staging Auth configuration readback, synthetic create/sign-in/delete proof, final zero-user proof, billing proof, unchanged Hosting and Firestore proof, and explicit production non-mutation.

Invariants

  • Use only runmprc@gmail.com for provider work.
  • Target only run-mprc-staging with every command naming the project and account.
  • Keep Cloud Billing disabled before and after the change. Stop before any Identity Platform upgrade or paid feature.
  • Merge the source-controlled Auth contract before provider mutation, then deploy only Auth from the exact main commit.
  • Enable email/password only, with password required.
  • Keep anonymous and phone sign-in disabled.
  • Do not enable Google sign-in in this slice. Google OAuth branding, ownership, collision recovery, and UI belong to AUTH-006 — Offer simple email/password and Google sign-in #109 and its dependencies.
  • Enable improved email privacy when supported by standard Firebase Authentication.
  • Authorized redirect domains may contain only the staging Firebase and web.app domains. Do not add localhost or runmprc.com.
  • Do not send verification, password-reset, or other email.
  • Use one generated RFC-reserved example.invalid address and a generated password held only in process memory.
  • Delete the exact synthetic user in cleanup and prove the final Auth user count is zero.
  • Do not deploy Functions, Rules, indexes, Hosting, Storage, App Check, Stripe, or any production Firebase surface.
  • Do not read or modify real member/customer data.

Source phase

  • Add an Auth providers contract to firebase.json with emailPassword true and no anonymous or Google provider.
  • Add a focused source test that fails on broader providers, a non-demo default alias, or an unexpected deploy target.
  • Integrate the focused test into the relevant CI gate.
  • Document current and not-yet-available states in engineering and officer surfaces.
  • Open, self-review, pass CI, and merge the focused pull request.

Provider phase

  • Reconfirm exact main commit, no billing, clean uninitialized Auth, zero users, and no unexpected provider state.
  • Deploy only Auth using Firebase CLI 15.24.0 and a short-lived token minted by the club account.
  • Read back Auth config and harden email/password, passwordRequired, anonymous, phone, authorized domains, and email privacy with a narrow update mask if needed.
  • Prove email/password account creation and sign-in through the public Identity Toolkit API using the disposable identity.
  • Prove anonymous signup is rejected.
  • Prove non-existent and wrong-password sign-in errors do not enumerate accounts.
  • Delete the disposable user even when an assertion fails, then prove final zero users.
  • Reconfirm billing disabled, Firestore root collections empty, Hosting version unchanged, and production untouched.
  • Record provider truth in a second documentation-only pull request, pass CI, self-review, and merge.

Acceptance criteria

  • Source Auth contract is merged from a focused reviewed pull request.
  • Exact deployed source commit and Firebase CLI version are recorded.
  • Staging billing is false before and after.
  • Auth subtype remains FIREBASE_AUTH and no paid Identity Platform upgrade occurs.
  • Email/password is enabled with password required.
  • Anonymous and phone sign-in are disabled.
  • No Google, SAML, OIDC, or other identity provider is enabled.
  • Improved email privacy is enabled if available without billing; otherwise the exact limitation is recorded and no upgrade occurs.
  • Authorized domains are exactly the two staging-owned domains and exclude localhost and production.
  • Synthetic create and sign-in pass.
  • Anonymous signup fails safely.
  • Enumeration-resistant negative behavior is recorded without exposing raw credentials or tokens.
  • Synthetic user cleanup succeeds and final user count is zero.
  • No email is sent.
  • Firestore remains empty and staging Hosting remains on its prior version.
  • Production Firebase, runmprc.com, Netlify, Functions, Rules, indexes, Storage, Stripe, and outside providers are unchanged.
  • Officer and engineering documentation distinguish source merged, staging deployed, and production not available.

Stop conditions

Stop if billing is required, any existing Auth user or unexpected provider is present, any real email or member data would be needed, cleanup cannot be proved, the exact main commit is not deployable, a broad Firebase deployment would run, or any production surface would change.

Dependencies and coordination

Parent release: #136.
Protected deployment identity: #133.
Backend tracker: #105.
Google sign-in product work: #109.
This issue does not satisfy the Functions or App Check portions of #136.

Claim protocol

Creation is not a claim. Assign one agent and post CLAIMED by Codex at UTC timestamp; branch codex/issue-number-staging-auth before changing source or provider state.

Activity

  1. self-assigned this
    on Aug 26, 2026
  2. added
    priority:P0Launch blocker or urgent security risk
    type:securitySecurity or privacy boundary
    area:authAuthentication and authorization
    area:firebaseFirebase services and data
    size:SSmall focused issue
    status:readyDependencies complete and ready to claim
    needs-external-configRequires provider console or external configuration
    on Aug 26, 2026
  3. daliu commented on Aug 26, 2026

    @daliu
    ContributorAuthor

    CLAIMED by Codex at 2026-08-26T20:23:00Z; branch codex/issue-671-staging-auth

  4. added
    status:in-progressClaimed and actively being implemented
    and removed
    status:readyDependencies complete and ready to claim
    on Aug 26, 2026
  5. daliu commented on Aug 26, 2026

    @daliu
    ContributorAuthor

    Provider phase completed from exact merged source 42542303d043f87a8f1a04be2f0b4f2a88e0318c (PR #672) on 2026-08-26.

    Redacted provider evidence:

    • Provider work used only runmprc@gmail.com and exact project run-mprc-staging.
    • Exact-main CI run 33011780449 passed all five required jobs before the provider mutation.
    • Firebase CLI 15.24.0 ran the guarded --only auth --project run-mprc-staging command. Hosting, Firestore, Functions, App Check, outside providers, production Firebase, and runmprc.com were outside the deploy scope.
    • Live config is Firebase Authentication with Identity Platform in instrumentless/Spark state: billing remains disabled. Email/password is enabled and password-required. Improved email privacy is enabled.
    • Authorized domains are exactly run-mprc-staging.firebaseapp.com and run-mprc-staging.web.app.
    • Anonymous, phone, native federated, OIDC, and SAML providers are disabled/absent. Multi-tenancy and blocking triggers are absent; MFA is disabled.
    • A disposable reserved-domain identity proved email signup and password sign-in. Anonymous signup was denied. Missing-email and wrong-password attempts both returned the same generic invalid-credential result.
    • A separate browser-level sign-in and sign-out succeeded on the deployed staging UI. The profile surface failed closed because trusted backend Functions are not deployed.
    • No verification/reset email, SMS, or other out-of-band message was requested.
    • Both disposable identities were deleted. Final Auth user count is zero.
    • Final Firestore root collection count is zero. Hosting remains version 3ffadcf2ac8cc760. Billing remains disabled. Cloud Functions APIs remain disabled.
    • runmprc.com still returns the existing Netlify production host; no production surface changed.

    The evidence/documentation pull request is still pending. Do not close #671 until that review and exact-main follow-up are complete.

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 dataneeds-external-configRequires provider console or external configurationpriority:P0Launch blocker or urgent security risksize:SSmall focused issuestatus:in-progressClaimed and actively being implementedtype:operationsOperational setup or runbooktype:securitySecurity or privacy boundary

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions