Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion GITHUB_ISSUES.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Do not redesign routing or hosting in this issue; WEB-001 owns that. WEB-001A1 [

**Current CI-001C boundary:** CI-001C1 [#667](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/667) supplies the staging-only protected read-only OIDC proof: exact immutable repository/owner IDs, `main`, the `staging` environment, one verifier workflow, two named individual reviewers, and a keyless principal with only project-identity read permission. Parent #133 still owns Firebase deployment roles and production protection; #136 still owns an actual backend release.

**Current CI-001D boundary:** CI-001D1 [#669](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/669) supplies the first staging data boundary: empty Native/Standard `(default)` Firestore in `us-west2`, delete protection enabled, PITR disabled, and exact Rules/indexes from `ee16bd16220ab58bd3a2add80dd2f39a1d514dd7`. The 418-case Rules suite passed, provider definitions matched, fixed anonymous server-only reads were denied, and root collection count remained zero. CI-001D2 [#671](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/671) deploys the email/password-only Auth contract from exact merged source `42542303d043f87a8f1a04be2f0b4f2a88e0318c`. Provider readback and disposable API/browser checks prove password-required sign-in, improved email privacy, only staging domains, no other provider, billing disabled, and final cleanup to zero users/records. CI-001D3 [#674](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/674) adds a source-only, argument-closed command for exactly `createMemberOnSignUp` and `ensureMemberProfile`; its tests reject broad/partial targets, another project/account, a credentials file, changed exports/scripts, extra arguments, and an unpinned CLI. Read-only preflight found project Owner authority, billing disabled, and zero open billing accounts visible to the club account. No Function/API/billing/data/provider mutation is part of #674. Functions, App Check, provider sandboxes, reusable deploy authority, application records, and production behavior remain absent. Parent #133 still owns keyless Firebase deployment roles and production protection; #136 still owns the compatible synthetic backend release.
**Current CI-001D boundary:** CI-001D1 [#669](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/669) supplies the first staging data boundary: empty Native/Standard `(default)` Firestore in `us-west2`, delete protection enabled, PITR disabled, and exact Rules/indexes from `ee16bd16220ab58bd3a2add80dd2f39a1d514dd7`. The 418-case Rules suite passed, provider definitions matched, fixed anonymous server-only reads were denied, and root collection count remained zero. CI-001D2 [#671](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/671) deploys the email/password-only Auth contract from exact merged source `42542303d043f87a8f1a04be2f0b4f2a88e0318c`. Provider readback and disposable API/browser checks prove password-required sign-in, improved email privacy, only staging domains, no other provider, billing disabled, and final cleanup to zero users/records. CI-001D3 [#674](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/674) adds a source-only, argument-closed command for exactly `createMemberOnSignUp` and `ensureMemberProfile`; its tests reject broad/partial targets, another project/account, a credentials file, changed exports/scripts, extra arguments, and an unpinned CLI. Read-only preflight found project Owner authority, billing disabled, and zero open billing accounts visible to the club account. No Function/API/billing/data/provider mutation is part of #674. CI-001D4 [#676](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/676) adds a source-only, argument-closed Hosting command for the exact staging project/account/quota/scope and pinned CLI. It requires a bounded non-placeholder Enterprise site key before deployment and in the executable artifact while leaving local/test and credential-free previews unchanged. Its source phase creates no key, App Check configuration, enforcement setting, Hosting version, user, record, Function, billing link, or production change. Parent #133 still owns keyless Firebase deployment roles and production protection; #136 still owns the compatible synthetic backend release.

### Problem

Expand Down
2 changes: 2 additions & 0 deletions IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ MPRC can open a race or merchandise item for sale only when the platform can:

**CI-001D3 staging profile-Function guard:** [#674](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/674) adds an argument-closed source command for exactly `createMemberOnSignUp` and `ensureMemberProfile`. It validates the demo-only default alias, single reviewed Functions codebase, exact exports, lockfile Firebase CLI 15.24.0, staging project and quota project, club-account declaration, exact target list, short-lived token path, and absence of credential-file overrides before invoking Firebase. Negative tests reject missing/redirected exports, broad or partial target sets, production/cross-project context, extra arguments, changed scripts, and an unpinned CLI. Read-only provider preflight found project Owner authority but billing disabled and zero visible open billing accounts. #674 therefore enables no API, links no billing, deploys no Function, creates no record, and leaves App Check, staging E2E, reusable release authority, and production to later approved children.

**CI-001D4 staging App Check/Hosting guard:** [#676](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/676) adds a source-only, argument-closed Hosting command for `run-mprc-staging`. It validates the demo-only default alias, exact Hosting predeploy chain, Firebase CLI 15.24.0, staging project and quota project, club-account declaration, Hosting-only scope, short-lived token path, absence of credential-file overrides, and one bounded non-placeholder Enterprise site key. The executable artifact check must also find the selected key. Ordinary local/test and credential-free preview builds remain unchanged. Source/tests/merge do not create or register a provider key, republish Hosting, enable Auth/Firestore enforcement, deploy Functions, link billing, change production, or prove live token behavior; those are separate provider/evidence states in #676.

## 3. Dependency map

```mermaid
Expand Down
2 changes: 1 addition & 1 deletion OFFICER_START_HERE.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ As of **2026-08-13**, a merge runs checks but does not start the GitHub release.

As of **2026-08-14**, [#659](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/659) completed one accessibility-only Netlify release. Deploy `6a7ece87c5ca4d0007c1a3fc` is live from frozen source `7496fe0881fb52908c4ff2f40f488df09c94c908`; its exact 62-file marker and signed-out desktop/phone route-focus and menu checks passed. Repause merge `3138a00c1c48e1d5d1dcda0b44722b09a2194ff7` made the manifest inactive. Its attempt `6a7ed0ddb00a46000818878d` published nothing and retained the verified deploy. #623 deploy `6a7e072f8f346b0008510d29` is the recorded rollback, not current production. #659 changed no Firebase, provider configuration, account, sign-in state, production data, payment, or connected directory behavior. Officers do not run commands, sign in, enter data, or approve this as a reusable release. Follow the completed record in [Review, merge, release, and check a change](./docs/officers/PUBLISH_AND_CHECK.md).

As of **2026-08-26**, WEB-001A1 [#663](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/663) is merged, and WEB-001A2 [#665](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/665) created the club-owned `run-mprc-staging` project and published exact source `a614c68d9a1a2be631a3be874a686d61e5d170a0` to [run-mprc-staging.web.app](https://run-mprc-staging.web.app). CI-001C1 [#667](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/667) adds a separate protected read-only identity check: Dave Liu or Jeff Chang reviews exact `main`, and a keyless five-minute identity may read only the staging project identity. It cannot deploy Firebase. CI-001D1 [#669](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/669) adds an empty, delete-protected staging Firestore database and the exact reviewed Rules/index definitions. Anonymous reads of three fixed server-only paths were denied, and the database still had zero root collections after verification. CI-001D2 [#671](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/671) deploys password-required email/password Auth from exact merged source and proves it with disposable API and browser sign-in/sign-out checks. Readback shows improved email privacy, only the two staging domains, no other provider, billing disabled, and zero users/records after cleanup. CI-001D3 [#674](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/674) adds a code guard for a future deployment of only the two profile Functions. It does not deploy them. Read-only checks found no billing account available to the club account, and Firebase requires pay-as-you-go billing for Functions. This remains an **ENGINEERING STAGING SITE ONLY**. It has no trusted Functions, App Check, outside-provider sandbox, protected automatic release, release marker, tested predecessor rollback, complete security-header policy, custom domain, or officer publish control. Officers do not sign in, enter data, run commands, attach billing, or treat a command guard as a usable member backend. Netlify still answers `runmprc.com`; production Firebase Hosting remains empty, and no DNS, GitHub Pages, Netlify, production Firebase, production data, or live website behavior changed.
As of **2026-08-26**, WEB-001A1 [#663](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/663) is merged, and WEB-001A2 [#665](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/665) created the club-owned `run-mprc-staging` project and published exact source `a614c68d9a1a2be631a3be874a686d61e5d170a0` to [run-mprc-staging.web.app](https://run-mprc-staging.web.app). CI-001C1 [#667](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/667) adds a separate protected read-only identity check: Dave Liu or Jeff Chang reviews exact `main`, and a keyless five-minute identity may read only the staging project identity. It cannot deploy Firebase. CI-001D1 [#669](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/669) adds an empty, delete-protected staging Firestore database and the exact reviewed Rules/index definitions. Anonymous reads of three fixed server-only paths were denied, and the database still had zero root collections after verification. CI-001D2 [#671](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/671) deploys password-required email/password Auth from exact merged source and proves it with disposable API and browser sign-in/sign-out checks. Readback shows improved email privacy, only the two staging domains, no other provider, billing disabled, and zero users/records after cleanup. CI-001D3 [#674](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/674) adds a code guard for a future deployment of only the two profile Functions. It does not deploy them. Read-only checks found no billing account available to the club account, and Firebase requires pay-as-you-go billing for Functions. CI-001D4 [#676](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/676) adds a separate code guard for a future staging Hosting release with App Check configuration. It requires the exact club account and staging project, a Hosting-only scope, a short-lived credential path, and a valid-looking Enterprise public site key in the built website. Source and tests do not create the key, publish the site, or turn protection on. This remains an **ENGINEERING STAGING SITE ONLY**. Until #676 posts provider and browser evidence, it has no trusted Functions, live App Check, outside-provider sandbox, protected automatic release, release marker, tested predecessor rollback, complete security-header policy, custom domain, or officer publish control. Officers do not sign in, enter data, run commands, attach billing, or treat a command guard as a usable member backend. Netlify still answers `runmprc.com`; production Firebase Hosting remains empty, and no DNS, GitHub Pages, Netlify, production Firebase, production data, or live website behavior changed.

The optional profile-photo and officer People-finder functions are still **NOT AVAILABLE YET**. #621 makes the frontend default an inert preview: My Account shows the future photo and separate finder-choice controls disabled, while the People finder stays behind the administrator guard and shows its name field and Search button disabled. The preview reads no saved photo or setting, accepts or uploads no photo, searches no name, and saves nothing; it shows no people or sample results. #623 published exactly that disabled interface as deploy `6a7e072f8f346b0008510d29`. Officers inspect the protected layouts only in synthetic local artifacts. The completed signed-out production review proved only the exact revision, normal sign-in and administrator guards, and absence of a member-directory network request. Do not sign in to production, choose a real photo, enter a real name, or treat the preview as a directory. #623 changed no Firebase, provider configuration, account, sign-in, or production data. #507 must later prove the privacy, authorization, staging, backend-first deployment, and readback gates before a separate reviewed source change may connect it. Follow the preview and source-review procedure in [Events, shop, members, and money](./docs/officers/EVENTS_SHOP_MEMBERS.md).

Expand Down
11 changes: 7 additions & 4 deletions OPERATIONS_RUNBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ The bounded provider phase ran on 2026-08-26 from exact merged source `42542303d

CI-001D3 [#674](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/674) adds `npm run deploy:staging-profile-functions` as a source-only, argument-closed wrapper. Before Firebase CLI it checks the demo-only default alias, one reviewed Functions codebase, both exact profile exports, lockfile CLI 15.24.0, `run-mprc-staging` as both project and quota project, `runmprc@gmail.com` as the declared operator, an in-memory short-lived token, no credential-file override, and exactly `functions:createMemberOnSignUp,functions:ensureMemberProfile`. Do not add arguments or invoke the command directly from a branch. Read-only preflight on 2026-08-26 showed the club account is project Owner, project billing is disabled, and that account can see zero open billing accounts. Firebase requires Blaze for Function deployment, so do not enable APIs or run this command until a separately approved billing account, budget/alerts, exact-main source, and provider release issue exist. The guard itself deploys nothing and does not make App Check or staging profile behavior available.

CI-001D4 [#676](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/676) adds `npm run deploy:staging-hosting` as a separate source-only, argument-closed wrapper. It checks the demo-only default alias, exact Hosting predeploy chain, lockfile CLI 15.24.0, exact staging project/quota/account, Hosting-only scope, in-memory short-lived token, no credential-file override, and a bounded non-placeholder Enterprise site key. The existing executable scanner must find that same public key in the built JavaScript. Do not run it from a branch, append arguments, use a debug token, add localhost to provider domains, or treat the public site key as a server credential. Source/tests/merge do not configure the provider, publish Hosting, or enable service enforcement; #676 records those as separate later states.

The repository's only `.firebaserc` default is now `demo-mprc-local`, a deliberately non-deployable local namespace. It is an accidental-deploy brake, not staging. Every future deployment must still pass one exact privately approved project explicitly. Do not infer backend/provider isolation or release authority from the static host; #113/#133 must protect, map, and verify those remaining boundaries.

## 4. Configuration and secrets
Expand Down Expand Up @@ -117,10 +119,11 @@ The safe sequence remains:

1. Confirm the approved Firebase project and host inventory under #113.
2. Merge and verify #159 source/tests without a real key.
3. Have the named owner create the Enterprise site key and allowed-domain policy for the approved environment.
4. Bind website preparation to the approved protected Actions scope under #133/a dedicated CI child, then store only that public site key there. The current preparation job has no environment binding and can read only repository/organization variables; do not use that gap as a production shortcut.
5. Rehearse a synthetic staging page, observe App Check metrics, and prove expected token behavior before ABUSE-001A2 enables any callable enforcement.
6. Publish and verify the website, Firebase, provider, and live behavior as separate states under #136/WEB-001.
3. Merge and verify the #676 staging-only Hosting/App Check deploy guard without a real key.
4. Under the #676 provider phase, have the named owner create one score-based Enterprise key restricted to the two staging hosts and register it only to the staging web app.
5. Use the exact merged source and guarded Hosting-only command to publish the staging client, then prove token-bearing browser Auth/Firestore behavior before changing enforcement.
6. Enable only staging Authentication and Firestore enforcement, prove missing-token denial plus continued browser success, and retain the documented monitoring-only rollback.
7. Keep native callable enforcement and Function deployment separate until the billing gate is explicitly approved; publish and verify production website, Firebase, provider, and live behavior separately under #136/WEB-001.

A source merge, green CI run, or public-key variable alone does not prove Enterprise is configured or protecting a callable.

Expand Down
Loading