From d718ba83e260b5dfc49e6ff957d20c9685a1e280 Mon Sep 17 00:00:00 2001 From: Dave Liu <7david12liu@gmail.com> Date: Sun, 11 Oct 2026 11:21:25 -0700 Subject: [PATCH] docs: record verified staging trial billing and focused club scope --- GITHUB_ISSUES.md | 2 ++ OFFICER_START_HERE.md | 2 ++ OPERATIONS_RUNBOOK.md | 2 ++ SYSTEM_DESIGN.md | 2 ++ docs/officers/LOW_COST_COMMUNITY.md | 46 +++++++++++++++++++++++++++-- docs/officers/README.md | 2 ++ docs/officers/SYSTEM_MAPS.md | 14 +++++++++ 7 files changed, 67 insertions(+), 3 deletions(-) diff --git a/GITHUB_ISSUES.md b/GITHUB_ISSUES.md index 457ec67..27e9601 100644 --- a/GITHUB_ISSUES.md +++ b/GITHUB_ISSUES.md @@ -28,6 +28,8 @@ Before creating or claiming anything from this catalog, search GitHub, confirm t ## Current runtime prerequisite +**Current staging cost prerequisite:** COST-002 [#693](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/693) records the October 11 club Free Trial readback, staging-only billing link, and monthly USD10 gross-usage warning budget with 50%/90%/100% actual-spend thresholds. Only the Budget API was enabled; production billing, runtime APIs, deployment and member/payment data remain unchanged. This supersedes historical staging billing-disabled checkpoints, not #113/#133/#136 release gates. GitHub holds the provider acceptance and documentation status; the [officer cost guide](./docs/officers/LOW_COST_COMMUNITY.md) is the no-terminal handoff. + RUNTIME-001 [#691](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/691) prepares the initial profile backend for Node 22. Scope: Functions engine and lock metadata; exact staging guard/provider readback; a required sixth CI job; backend builder runtime; a fixed immutable redacted error stack; and officer handoff. Existing Node 20 checks, first-generation triggers, schema, auth, create-once semantics, two-Function scope, and #683 limits stay unchanged. No dependency versions or migrations change. #113/#133/#136, billing, hosted checks, and existing security advisories remain open; this is not a release or runner-matching activation. GitHub holds exact review/merge/CI evidence. Officer impact: no website or account behavior changes until a separately approved deployment. diff --git a/OFFICER_START_HERE.md b/OFFICER_START_HERE.md index 2e125cb..dc46fb2 100644 --- a/OFFICER_START_HERE.md +++ b/OFFICER_START_HERE.md @@ -12,6 +12,8 @@ Attach the exact wording, public link, or approved photo when you have it. The A **Backend maintenance, 2026-09-27:** [#691](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/691) prepares a supported server runtime, Node 22, in source. It does not publish a website, deploy Functions, or add billing. The first backend release is still on hold. Follow the [low-cost review](./docs/officers/LOW_COST_COMMUNITY.md) and ask a maintainer for separate hosted proof; no officer terminal work is needed. +**Staging cost setup, 2026-10-11:** [#693](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/693) verified the club's $300 Free Trial, expiring January 10, 2027, and linked engineering staging with a monthly $10 usage-warning budget. Alerts at $5/$9/$10 ignore credits so underlying usage remains visible; they do not stop spending. No paid upgrade or production billing link occurred. Functions and member/payment workflows are still **NOT AVAILABLE YET**. The [trial review](./docs/officers/LOW_COST_COMMUNITY.md#check-the-trial-and-warnings-without-a-terminal) explains what an officer can check privately without handling payment details or using a terminal. Earlier billing-disabled staging checkpoints below are historical. + ## Choose the closest task | What you need | Open this short guide | diff --git a/OPERATIONS_RUNBOOK.md b/OPERATIONS_RUNBOOK.md index bde293f..3508d73 100644 --- a/OPERATIONS_RUNBOOK.md +++ b/OPERATIONS_RUNBOOK.md @@ -16,6 +16,8 @@ Before any approved #136 release, the platform maintainer must obtain exact-main Read-only check on 2026-09-27: `runmprc@gmail.com` could access zero billing accounts; staging billing remained disabled, and Functions, Cloud Build, and Artifact Registry APIs remained disabled. No billing, IAM, API, hosted runtime, website, or production behavior was changed by #691. +**Superseding staging cost checkpoint, 2026-10-11:** COST-002 [#693](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/693) verified the club Free Trial ($300 unused; January 10, 2027 expiry), enabled only `billingbudgets.googleapis.com`, linked only `run-mprc-staging` to that existing account, and read back one staging-only monthly USD10 alerts-only budget excluding credits, with actual-spend thresholds 50%/90%/100% and default IAM recipients enabled. No paid-account upgrade, runtime API enablement, IAM change, deployment, data write, or Stripe change occurred. Production remains unlinked. Historical billing-disabled staging checkpoints elsewhere in this document describe their original date, not current billing. #113/#133/#136 and all deployment gates remain open. The [officer cost guide](./docs/officers/LOW_COST_COMMUNITY.md#trial-billing-and-cost-warnings--verified-for-engineering-staging-only) is the current billing handoff; neither warnings nor instance limits guarantee a hard whole-project ceiling. + ## 1. Ownership roster Complete this table in the private operations system before live payments. Do not put personal phone numbers or recovery codes in this public repository. diff --git a/SYSTEM_DESIGN.md b/SYSTEM_DESIGN.md index 6594cb0..3464173 100644 --- a/SYSTEM_DESIGN.md +++ b/SYSTEM_DESIGN.md @@ -20,6 +20,8 @@ RUNTIME-001 [#691](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/691) pr ### Goals +**Owner scope clarification, 2026-10-11:** membership, events, officer management, and MPRC-organized race registrations/cancellations/bib transfers/payments/refunds are the focused core. Custom outbound email may be deferred; this is not permission to remove account verification/recovery or invent refund/transfer policy. Firebase remains the club-record authority; hosted Checkout keeps card entry outside the club application. These follow-on workflows remain unavailable until their own reviewed source, provider, and failure/retry evidence is complete. COST-002 [#693](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/693) now supplies only trial-linked staging billing and a verified warning budget, superseding the earlier staging billing-disabled checkpoints; it does not widen the first two-profile-Function release. See the [current officer cost handoff](./docs/officers/LOW_COST_COMMUNITY.md). + - Publish public club content, events, and merchandise. - Support anonymous and signed-in race registration. - Apply member pricing only when the server verifies a current member role. diff --git a/docs/officers/LOW_COST_COMMUNITY.md b/docs/officers/LOW_COST_COMMUNITY.md index aa4494a..ae4350e 100644 --- a/docs/officers/LOW_COST_COMMUNITY.md +++ b/docs/officers/LOW_COST_COMMUNITY.md @@ -4,7 +4,7 @@ **Approver:** Dave Liu for the current simplification request. Any release still uses the named platform/security reviewers. Regular club expenditure needs the club's finance approval; willingness to supply a personal card is not an unlimited club budget. -**Checked:** 2026-09-27. This is a scope and source-review guide, not proof that the new settings are live. +**Checked:** 2026-10-11. Trial billing and warning-budget settings below were checked directly. Profile Functions and the member/payment workflows are still **NOT AVAILABLE YET**. ## What we are prioritizing @@ -16,7 +16,45 @@ Prefer static pages and published public content: visitors can receive files from the host without running a server operation for each page view. Where events need database content, use bounded reads and avoid unnecessary polling. This is the implementation direction, not a claim that the Events service has been repaired. Production Events/Calendar still have the recorded unavailable state pending their own reviewed release. -The first profile backend remains exactly two server operations: create a missing account profile and recover it safely. Keep custom checkout, refunds, inventory, automatic email, photo uploads, directory search, and Strava synchronization out of that deployment. Their existing code and future requirements remain preserved. Connecting any of them needs its own useful community outcome, cost review, tests, and approval. Do not remove a current external membership/payment service or change club policies through this guide. +The first profile backend remains exactly two server operations: create a missing account profile and recover it safely. Keep checkout, refunds, inventory, automatic email, photo uploads, directory search, and Strava synchronization out of that particular deployment. Their existing code and safety requirements remain preserved. + +Dave clarified the core scope on 2026-10-11: club membership, events, member signup/cancellation, officer event management, and payments/refunds/bib transfers for **MPRC-organized races**. These money workflows are priority follow-on releases, not optional features to abandon. Keep Firebase for club records and use hosted card checkout. Custom outbound email can wait; account status and officer recovery must not depend on it. This does not waive Authentication verification/recovery requirements. Do not add automatic membership subscriptions, choose club refund/transfer policies, remove an existing service, or claim any of these workflows are live through this guide. + +## Trial billing and cost warnings — VERIFIED for engineering staging only + +[COST-002 #693](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/693) linked only `run-mprc-staging` to the existing club Free Trial billing account. The club Console showed $300 unused, expiring **January 10, 2027**. Linking the project enables Firebase's Blaze plan during the trial; it does not upgrade the billing account to paid. No paid upgrade was performed. Without an explicit paid-account upgrade, Firebase says linked projects downgrade to Spark when the trial ends; plan ongoing hosting before that date rather than treating credits as permanent funding. + +The warning budget is named **MPRC staging gross usage alerts**. It covers only staging, all services, and each calendar month. Its amount is **$10 USD**, with actual-usage alerts at **$5, $9, and $10**. Credits are excluded from the calculation so trial credits cannot hide underlying usage. Default billing-account notification recipients remain enabled; no new recipient, access grant, Pub/Sub automation, or shutdown rule was added. Configuration was read back; email delivery was not tested. + +This is an **alerts-only budget**, not a bill ceiling or approval to spend club money. The only API enabled by this step was the Cloud Billing Budget API. Functions, Cloud Build, and Artifact Registry APIs remain disabled. Production billing remains disabled/unlinked. No Function, website, DNS, Stripe configuration, member record, or payment was changed. See the [staging billing map](./SYSTEM_MAPS.md#engineering-staging-billing--checked-2026-10-11). + +### Check the trial and warnings without a terminal + +**Purpose:** verify the engineering trial and detect underlying costs before approving ongoing hosting. + +**Approver:** Dave Liu for this trial setup; treasurer/club finance approver for regular club expenditure. Platform/security approval is still required for a backend release. + +**Prerequisites:** the club Google account, the private billing-owner record, and the platform maintainer's dated #693 provider readback. Do not paste account identifiers or payment details into AI, GitHub, email, or screenshots. + +1. Ask the platform maintainer to show the club account's Google Cloud trial status privately. +2. Confirm the account says **Free Trial**, not a paid account. +3. Confirm the remaining credit and expiry date; the October 11 checkpoint was $300 and January 10, 2027. +4. Ask the maintainer to show that only the intended staging project was linked in #693. +5. Open the budget named **MPRC staging gross usage alerts** in the private billing Console. +6. Confirm staging-only scope, a monthly $10 amount, and exclusion of credits. +7. Confirm actual-usage alerts at 50%, 90%, and 100%, with default billing recipients enabled. +8. Compare gross usage with expected engineering activity before approving any ongoing paid hosting. +9. Ask for separate deployment and made-up-account evidence before treating a member feature as usable. + +**Expected result:** the officer can distinguish trial credit, underlying usage, configured warnings, and a usable backend. No officer needs to edit source, run commands, or handle a secret. + +**Stop conditions:** wrong account/project, a paid upgrade, missing or changed budget settings, unexplained usage, an approaching trial expiry without a hosting decision, or a claim that the budget stops spending. Do not click **Upgrade**, switch off billing, or disable services as an improvised response. + +**Success proof:** dated private Console review plus separate API readback of the billing link and every budget setting. An alert configuration is not proof an email was received, a cap was enforced, or a Function was deployed. + +**Undo:** pause new staging release work and ask the platform maintainer to check dependent resources before proposing a reviewed unlink or API change. Do not shut down a payment backend to save costs; callbacks and refunds need their own continuity plan. + +**Escalation:** platform maintainer for account/configuration or service failures; treasurer/finance approver for spending; cardholder for a paid-account decision. Provider setup and deployment still require a specialist. ## Cost controls in source — NOT AVAILABLE YET in hosted Functions @@ -31,7 +69,7 @@ The first profile backend remains exactly two server operations: create a missin These are resource settings, **not a maximum monthly bill**. Google can briefly exceed the instance limit during traffic surges. A busy HTTP operation can queue requests and return a temporary busy response. Persistent storage, deployment files, database use, and other services can still cost money. The profile remains create-once so retrying an uncertain result does not overwrite existing information or grant membership. -No budget, spending cap, artifact-cleanup policy, billing account, Function, or new host is configured by this source change. Billing was separately checked as disabled/unlinked on 2026-09-27; the club account could access zero billing accounts. A personal card has been offered as fallback; card details belong only in Google's secure payment form. +The #683 source change configured no budget, spending cap, artifact-cleanup policy, billing account, Function, or new host. Its 2026-09-27 billing-disabled/zero-accessible-accounts checkpoint is historical and superseded only for staging billing and the warning budget by the October 11 #693 readback above. Hosted Function limits remain unverified. Card details belong only in Google's secure payment form. [Issue #691](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/691) prepares Node 22, the program that runs the server code. Google schedules the old Node 20 runtime to be taken out of service on October 30, 2026. The update keeps the same two operations and resource limits. It adds automated compatibility and made-up profile checks, but does not deploy anything or fix every dependency warning. Hosted Node 22 behavior is **NOT AVAILABLE YET**. @@ -80,3 +118,5 @@ Text alternative: confirm the small scope, review source, verify provider contro - [Google's zero-value response format](https://protobuf.dev/programming-guides/json/#presence-and-default-values) - [Spending-cap coverage and overages](https://docs.cloud.google.com/billing/docs/how-to/budgets-spend-caps) - [Firebase Hosting usage](https://firebase.google.com/docs/hosting/usage-quotas-pricing) +- [Firebase free-trial billing and expiry](https://firebase.google.com/support/faq/#pricing) +- [Budget scope and notification settings](https://docs.cloud.google.com/billing/docs/how-to/budgets) diff --git a/docs/officers/README.md b/docs/officers/README.md index 3fc272e..c42f887 100644 --- a/docs/officers/README.md +++ b/docs/officers/README.md @@ -29,6 +29,8 @@ In words: approve the merge, request one exact release, and approve its protecte **Runtime maintenance, 2026-09-27:** [#691](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/691) prepares Node 22, the program that runs server code. This is source preparation only, not a deployed backend or new billing. The [low-cost guide](./LOW_COST_COMMUNITY.md) explains the required proof and supported-runtime recovery check. +**Current staging cost checkpoint, 2026-10-11:** [#693](https://github.com/Run-MPRC/Run-MPRC.github.io/issues/693) linked only engineering staging to the verified club Free Trial and configured a monthly $10 gross-usage warning budget. No paid upgrade, production billing, runtime API, deployment, or payment changed. The [trial review](./LOW_COST_COMMUNITY.md#check-the-trial-and-warnings-without-a-terminal) and [billing map](./SYSTEM_MAPS.md#engineering-staging-billing--checked-2026-10-11) supersede older billing-disabled staging checkpoints; a usable member backend remains **NOT AVAILABLE YET**. + ## Short guides 1. [Request a change](./REQUEST_A_CHANGE.md) diff --git a/docs/officers/SYSTEM_MAPS.md b/docs/officers/SYSTEM_MAPS.md index 39594b5..451a748 100644 --- a/docs/officers/SYSTEM_MAPS.md +++ b/docs/officers/SYSTEM_MAPS.md @@ -2,6 +2,20 @@ These diagrams show where pages, information, and deployments go. Each diagram includes a one-sentence text version. +## Engineering staging billing — checked 2026-10-11 + +```mermaid +flowchart LR + Trial["Club Free Trial account\nexpires January 10, 2027"] --> Staging["run-mprc-staging\ntrial billing linked; no Functions deployed"] + Staging --> Budget["Monthly USD10 gross-usage warnings\ncredits excluded; not a cap"] + Budget --> Owners["Existing billing notification recipients\nconfiguration verified; delivery untested"] + Production["Production Firebase project\nbilling remains unlinked"] +``` + +Text alternative: the club trial funds engineering staging, its gross-usage warning budget notifies existing billing recipients, and production billing remains unlinked. + +The [#693 officer cost review](./LOW_COST_COMMUNITY.md#trial-billing-and-cost-warnings--verified-for-engineering-staging-only) records the exact scope and proof. No paid-account upgrade, Function deployment, payment operation, or whole-project spending cap is represented by this map. + ## Public page map ```mermaid