Repository navigation
CI-001C1 — Configure protected staging-only keyless Firebase authority #667
Description
Outcome
Configure a staging-only GitHub Actions OpenID Connect path into the club-owned run-mprc-staging Google Cloud project, using a dedicated service account and no downloaded key. Add one manual protected read-only verification workflow and prove exact repository/environment/ref restrictions before any backend deployment.
This is the dependency-ready staging child of #133 and #105. It configures release identity and its no-op proof only; it does not deploy application code or close #133 production authority.
Invariants
- Trust only the immutable Run-MPRC organization/repository IDs,
refs/heads/main, thestagingenvironment, and the reviewed verification workflow. - Use one provider in one staging pool and one dedicated staging deploy principal.
- Store provider and service-account locators as protected environment secrets; never store or create a JSON key or Firebase token.
- Require the protected
stagingenvironment and two named existing individual organization administrators as reviewers. - Grant no project Owner/Editor role and no runtime identity role to the deploy principal.
- The verification workflow may authenticate and read the exact project identity only. It must not enable APIs, create resources, deploy, write data, inspect data, or call outside providers.
- Missing/wrong environment, project, ref, repository, provider, or service account fails before authentication or mutation.
Acceptance criteria
-
stagingenvironment exists with exact-main branch policy and two individual reviewers. - IAM, STS, and Service Account Credentials APIs needed for WIF are enabled in staging only.
- Dedicated pool/provider uses an exact numeric owner/repository admission condition plus main/staging restrictions.
- Dedicated service account has no key and is impersonable only by the exact admitted staging principal set.
- Protected environment contains the exact Firebase project variable and two locator secrets, with no long-lived credential.
- Source tests prove the verification workflow is manual, read-only, pinned, protected, and fail-closed.
- One protected read-only GitHub run succeeds and records no sensitive provider identifier in public logs.
- Wrong-ref and missing-authority behavior is evidenced without attempting a deployment.
- Revocation and backup-officer steps are documented.
Officer impact: Two named officers can approve a staging identity check without handling a cloud key. This does not yet provide an officer backend publish button.
Officer documentation: Update docs/officers/ACCESS_CONTINUITY.md, docs/officers/PUBLISH_AND_CHECK.md, OPERATIONS_RUNBOOK.md, SECURITY.md, and the #133/#105 status evidence.
Deployment evidence: Record source, tests, merge, environment policy, WIF readback, protected no-op run, and absence of backend/provider/production changes separately.
Stop conditions
Stop if configuration needs billing, a JSON key, a Firebase token, broad Owner/Editor access, production mutation, real data, an unnamed reviewer, or an unbounded repository/ref trust rule.
Claim protocol
Assign one agent and post CLAIMED by <canonical agent> at <UTC>; branch <branch> before source or provider mutation.
Activity
daliu commentedon Aug 26, 2026
CLAIMED by Codex at 2026-08-26T19:20:46Z; branch codex/issue-667-staging-wif
daliu commentedon Aug 26, 2026
Completion evidence — 2026-08-26
ee16bd16220ab58bd3a2add80dd2f39a1d514dd7.33006444724; all five required jobs passed.33006701237; all five required jobs passed for the exact merge.resourcemanager.projects.get; one exact numeric-repository impersonation binding; no Owner, Editor, Firebase deploy, or runtime role.staging, exactmaincustom branch policy, reviewersdaliuandjeffchang5, exact project variable, and only the two locator-secret names.33006732455on exact mergeee16bd16220ab58bd3a2add80dd2f39a1d514dd7, approved bydaliu, succeeded after one project-identity read.33006901957from temporary refcodex/issue-667-wrong-ref-prooffailed before approval/authentication with zero steps and no pending deployment. The temporary ref was deleted and verified absent.Officer impact: Dave Liu or Jeff Chang can approve the staging identity check without handling a cloud key.
Officer documentation:
OFFICER_START_HERE.md,docs/officers/README.md,docs/officers/ACCESS_CONTINUITY.md,docs/officers/PUBLISH_AND_CHECK.md, and matching root design/runbook records.Deployment evidence: source changed, tests passed, code merged, staging IAM/WIF and GitHub environment configured, and the protected read-only run verified. Website not published; Firebase Hosting unchanged; Auth/Firestore/Rules/indexes/Functions/App Check not deployed; outside providers not configured; billing unchanged; production unchanged.
Residual scope: #133 remains open for reviewed Firebase deployment roles and production protection. This issue grants no backend deployment authority.