Repository navigation
WEB-002B — Restore production after unexpected Netlify preview promotion #617
Description
Outcome
Restore the last independently verified bounded Netlify artifact after an unexpected deploy-preview promotion placed a backend-dependent current-main frontend on runmprc.com without its release marker or verified Firebase release.
Parent: #460
Related feature release: #504 / #507
Prior verified containment: #473
Incident evidence
At the 2026-08-07 audit:
- Netlify identifies production as deploy
6a6f038b9701b00008066000, a deploy preview for PR OAUTH-001A2K — Bound Strava OAuth token JSON responses before parsing #615 head165934dee32ecc1daaafb596bab16160ff52e6b0manually published on 2026-08-05. - That head has tree
3683a9ccb982b6a2bb1c67a8e0fd27a86f38bcc9, identical to current mainb94622bd42775d84704d5fc05ee87da81f5a76e0. - The public bundles expose the Account profile-photo/searchability controls and
/admin/member-directoryPeople finder. - The release marker path falls through to SPA HTML instead of returning the required JSON provenance record.
- The required directory callable endpoints return platform 404s; no directory Functions, Rules, or index deployment/readback exists.
- PR OAUTH-001A2K — Bound Strava OAuth token JSON responses before parsing #615 explicitly recorded the preview as unpublished, and the ordinary exact-main Netlify attempt failed unpublished.
This is a split frontend/backend production state, not a successful feature release.
Exact containment scope
- Change only the Netlify production pointer by restoring ready deploy
6a6dc9ea588b0c0008036312. - Require its exact marker after restoration:
- control
9ad6837756cdd409d296009fde5082eeeae5c059 - source
39ab8649df411262c8109a3c81a57bc38f1e168b - tree
d76b496cdc5e79015bc048cb961758abbe88b9ce - 60 files
- artifact SHA-256
07b10c7d5ff176a1ad893d7549b07042312df35f4a4126e8765824ca94eaefb8
- control
- Do not rebuild, merge, move a Git ref, alter the inactive release manifest, change Netlify configuration, change DNS, deploy Firebase, touch provider settings, sign in to the app, or read/write production member/payment/event data.
- Preserve the current published deploy ID, hashes, and timestamps in this issue before restoration so the action remains reversible and auditable.
Invariant and failure cases
- Production must not expose backend-dependent profile or People-finder UI until the corresponding Rules, indexes, Functions, authorization/privacy decisions, repair path, staging proof, and live readbacks are approved and complete.
- Stop if the target deploy is not ready and atomically restorable, its recorded source/tree/artifact differs, Netlify presents a build/configuration action instead of a pointer restoration, a newer production action appears, or any public verification differs from the exact WEB-002A — Publish bounded Shop and Events permissions containment #473 artifact.
- A failed verification does not authorize Firebase, DNS, configuration, data, or broad source changes.
Required verification
- Netlify identifies deploy
6a6dc9ea588b0c0008036312as the published production deploy. /.well-known/run-mprc-release.jsonreturns JSON with the exact control/source/tree/file-count/digest above and appropriate no-store/content-type headers.- The live asset manifest and JavaScript match the restored deploy and do not contain the directory/profile release UI or callable names.
- Signed-out
/shop,/events,/events/calendar,/account, and/admin/member-directorydeep routes load at phone and desktop widths; Shop retains the static pickup catalog and Events/Calendar retain the fixed retry-later containment without raw provider errors. - Firebase, Rules, indexes, Functions, DNS, provider configuration, account state, payment state, and production data remain unchanged/unverified.
- Re-read Netlify after the checks to prove no later attempt replaced the restored deploy.
Documentation impact
The rollback restores the exact production state already documented by #473. Record the unexpected promotion, restoration, exact evidence, approver, and residual release blockers in this issue. Do not reword current-behavior officer guidance unless post-restoration readback shows it differs.
Officer impact: Restore the documented static Shop and contained Events/Calendar website. Remove the prematurely published profile-photo and People-finder frontend until its backend, privacy, authorization, and protected-release gates are complete.
Officer documentation: None before restoration — this restores the exact #473 current behavior already described in OFFICER_START_HERE.md and docs/officers/; update those guides only if the verified result differs.
Deployment evidence: The incident audit and rollback evidence must separately identify Netlify, runmprc.com, Firebase, outside-provider configuration, and production behavior. No green source/CI result may be treated as proof of a live backend.
Activity
daliu commentedon Aug 8, 2026
CLAIMED by
/rootat 2026-08-08T06:52:26Z. No source branch exists because this incident owns no repository file or Git ref.Exact ownership is only the Netlify production pointer from unexpected published deploy
6a6f038b9701b00008066000to already-built, ready deploy6a6dc9ea588b0c0008036312, plus provider/public readback and this issue's evidence. Source, merge state, release manifest, Netlify configuration, DNS, Firebase, Rules, indexes, Functions, outside-provider settings, app sign-in, account/member/payment/event state, and production data are immutable.Independent technical reviews are GO:
ready, production-context, contains no Netlify or edge Functions, and exposes exact WEB-002A — Publish bounded Shop and Events permissions containment #473 control/source/tree/file-count/artifact provenance;Current preserved incident evidence:
6a6f038b9701b00008066000, contextdeploy-preview, PR OAUTH-001A2K — Bound Strava OAuth token JSON responses before parsing #615 head165934dee32ecc1daaafb596bab16160ff52e6b0, published2026-08-05T13:44:43.799Z;3683a9ccb982b6a2bb1c67a8e0fd27a86f38bcc9, identical to exact mainb94622bd42775d84704d5fc05ee87da81f5a76e0;addae38deda751ce2948e9933a14343b9af7824bbc4fa568765b0f0bae9f3597;/static/js/main.b796b13a.js, SHA-256a495df529699be41def092a413079d633822312b444620055f6f0dae4c65478b, with directory feature identifiers present;2978a162d55409fae343e9595871413b7d5887884d5a6158a8b2123537823b94;60552b724766751acb843acf1b70238f215fbae4c32ee008672e3e3a268cb604;/static/js/main.2a1afaac.js: 836,108 bytes, SHA-2560397d8dd2716884fc92e293d6082992edfaeae751bcd058093a7ee953c8a8ff0.UNDO / roll-forward: the displaced deploy and bytes remain preserved in Netlify and in the exact current-main tree, but a one-click preview-to-production roll-forward is not claimed. Restoration of the newer frontend must use a fresh protected production release after the Firebase/backend, privacy, authorization, staging, repair, and live-readback gates are complete.
STOP before production mutation: repository recovery procedure requires platform-owner approval plus one named backup officer. The repository owner explicitly authorized deployment in the current Codex task, but no backup officer approval has been named. The signed-in Netlify detail page for the target also does not currently expose a
Publish deployaction; it shows the exact successful production artifact and deploy log only. Do not use rebuild, retry, configuration, DNS, or an undocumented API path as a substitute.No production or repository state was changed by this claim. The claim remains active while the named approval/control-path gap is resolved.
daliu commentedon Aug 8, 2026
CONTROL-PATH AUDIT — 2026-08-08T07:08:01Z
No intervening state change: Netlify still publishes deploy-preview
6a6f038b9701b00008066000; the false-marker/root SHA-256 remainsaddae38deda751ce2948e9933a14343b9af7824bbc4fa568765b0f0bae9f3597; #617 has no new approval or release action.The missing supported control is now explained by access, not by target provenance:
jeffchang5, display nameJeffrey Chang's team.Page not found — You might not have permissions to see this pagefor Project configuration.6a6dc9ea588b0c0008036312remains successful/ready, but its detail page exposes noPublish deployaction in this session.Publish deployon a successful deploy detail page, without rebuilding, and that Developers can manage site deploys while an Internal Builder cannot publish to production.Therefore the supported handoff is concrete: a Team Owner for
Jeffrey Chang's teammust either perform the exact reviewedPublish deployrestoration or grant a named backup officer Developer access to this project and approve that exact action. Do not use rebuild/retry, DNS/configuration, token sharing, or an undocumented API workaround.This identifies the correct owner/workspace and access class, but it is not itself backup-officer approval. No production, repository, Firebase, provider-configuration, sign-in, or data state changed. #617 remains claimed and stopped before mutation.
daliu commentedon Aug 8, 2026
THIRD CONSECUTIVE AUDIT — BLOCKED / CLAIM RELEASED at 2026-08-08T07:10:46Z
The exact blocking condition is unchanged for a third resumed goal turn:
6a6dc9ea588b0c0008036312remains ready and independently approved, butPublish deployis not available to this session;6a6f038b9701b00008066000with the same missing-marker SPA bytes;The
/rootNetlify-pointer claim is RELEASED so a Team Owner or approved project Developer can take over without collision. #617 is owner-blocked, not technically blocked: a Team Owner forJeffrey Chang's teammust record the named backup approval and either perform the exact reviewedPublish deployaction or grant that approved operator project Developer access.Do not copy credentials, rebuild/retry, alter configuration or DNS, deploy Firebase from a laptop, sign in to the app, or touch production data as a substitute. Once approval/access exists, reclaim with a fresh timestamp, re-read production and the target immediately, perform only the exact pointer restoration, and run the recorded marker/hash/header/deep-route checks.
No repository, Netlify production, Firebase, provider-configuration, account, payment, event, or production-data state changed during this blocker audit.
daliu commentedon Aug 8, 2026
APPROVAL RECORDED / CLAIM RESUMED — 2026-08-08T07:44:36Z
Dave Liu explicitly approved the #617 recovery in the current Codex task.
/rootnow reclaims only the already-reviewed Netlify production-pointer restoration from published preview6a6f038b9701b00008066000to exact ready deploy6a6dc9ea588b0c0008036312, plus provider/public readback and incident evidence.This approval does not widen scope. Source, Git refs/merges, release manifest, Netlify configuration, DNS, Firebase, Rules, indexes, Functions, outside-provider settings, app sign-in, account/member/payment/event state, and production data remain immutable.
Before mutation, re-read current published deploy, target state/provenance, all newer issue comments, and the supported Netlify control. Proceed only if the target remains exact and the UI explicitly offers
Publish deployfor that existing artifact without rebuild/retry/configuration. If the current Netlify role still lacks that control, stop and retain the exact Team Owner/Developer handoff; do not substitute credentials, hidden API calls, or broader actions.daliu commentedon Aug 8, 2026
APPROVAL READBACK / ACCESS STOP — 2026-08-08T07:45:59Z
Approval is recorded and the immediate pre-action readback passed:
6a6f038b9701b00008066000with no intervening publish;6a6dc9ea588b0c0008036312remainsready, production-context, main9ad6837756cdd409d296009fde5082eeeae5c059, and unchanged;The approved action still cannot be executed by the current Netlify session. The exact successful target page exposes no
Publish deploycontrol, project navigation remains limited to Deploys and Agent runs, and Project configuration remains unavailable for this role. Approval does not create provider permission.No hidden API call, credential handling, rebuild/retry, configuration, DNS, Firebase, or data action was attempted. The claim remains active while a Team Owner for
Jeffrey Chang's teameither grants the current operator project Developer access or signs an authorized Team Owner/Developer session into the browser. After that external access change, re-read production and target again before one exactPublish deployaction.No production or repository state changed.
daliu commentedon Aug 13, 2026
FINAL COMPLETE / CLOSED / CLAIM RELEASED — 2026-08-13T05:32Z
The recovery outcome is now independently verified. This audit did not perform or attribute the Netlify mutation: Netlify's public site record shows that exact reviewed deploy
6a6dc9ea588b0c0008036312became the published production deploy at2026-08-09T18:55:25.440Z. Public metadata does not identify the operator, so this closure records an observed restoration, not a claim that this Codex turn performed it.Exact provider truth:
6a6dc9ea588b0c0008036312ready/production9ad6837756cdd409d296009fde5082eeeae5c0599ad6837756cdd409d296009fde5082eeeae5c059, source39ab8649df411262c8109a3c81a57bc38f1e168b, treed76b496cdc5e79015bc048cb961758abbe88b9ce, 60 files, digest07b10c7d5ff176a1ad893d7549b07042312df35f4a4126e8765824ca94eaefb82978a162d55409fae343e9595871413b7d5887884d5a6158a8b2123537823b9460552b724766751acb843acf1b70238f215fbae4c32ee008672e3e3a268cb604/static/js/main.2a1afaac.js: SHA-2560397d8dd2716884fc92e293d6082992edfaeae751bcd058093a7ee953c8a8ff0Public verification:
application/json,Cache-Control: no-store,max-age=0,nosniff, and HSTS;/shop,/events,/login,/shop/mprc-hat,/events/calendar,/account, and/admin/member-directoryload through the restored SPA;/admin/member-directoryis absent/404;member-directory,listDirectoryMembers,updateMemberDirectoryProfile,profilePhoto, orsearchableByMembers.Current repository main is the later source-only SHA
3af585077d665d7720b35b5b89505b1d90d9a007; exact-main CI 31670041767 passed all five jobs, but that later main is not the published website and is not claimed live.No repository edit, Git ref, rebuild, retry, Netlify configuration, DNS, Firebase, Rules, indexes, Functions, sign-in, provider configuration, payment/event/member record, or production-data action occurred during this closure audit. Firebase and other provider surfaces remain unchanged/unverified. The exact Netlify-pointer claim is RELEASED, the assignee/status are cleared, and #617 is closed. Future publication work must begin with a fresh claim and re-read this production marker before any preview or release action.
Officer impact: the documented #473 static Shop and contained Events/Calendar website is restored; the prematurely published profile/directory frontend is no longer public.
Officer documentation: None — public behavior exactly matches the already documented #473 artifact.
Deployment evidence: Netlify production and public route/marker/bundle readbacks are verified above; no Firebase or other provider deployment is claimed.