Skip to content

OAUTH-001A2J — Safely admit Strava HTTP success markers - #605

Merged
daliu merged 1 commit into
mainfrom
codex/issue-604-strava-response-status
Aug 2, 2026
Merged

daliu merged 1 commit into
mainfrom
codex/issue-604-strava-response-status

Conversation

@daliu

@daliu daliu commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Closes #604

Officer impact: After a future protected Firebase Functions release, an unexpected internal result while the website talks to Strava will remain behind the existing fixed authorization, refresh, or activity-loading outcome. There is no current officer-visible change and no new officer action.

Officer documentation: None — this is a server-only transport-object admission boundary. It changes no public page, officer duty, collected field, permission, account, deployment step, or recovery procedure. Existing Strava SOURCE ONLY / NOT LIVE failure guidance remains accurate.

Deployment evidence: Source and local-test evidence only at PR creation. Nothing is merged or live. No website publication, runmprc.com change, Firebase deployment, Strava/provider configuration or contact, production-data change, or live-behavior verification occurred. A green workflow will not prove that a Function is deployed.

Outcome

Generalizes the existing safe disconnect response-success helper and routes all five Strava HTTP status decisions through it:

  • authorization exchange;
  • token refresh;
  • recent activities;
  • optional athlete statistics;
  • disconnect revocation.

Only an ordinary plain record with an own data ok exactly equal to Boolean true, or a genuine exact-prototype native Response whose captured native getter reports success, is admitted.

Failure behavior

  • Authorization invalid status remains fixed invalid-argument.
  • Refresh invalid status remains fixed failed-precondition.
  • Activities invalid status remains fixed internal.
  • Optional statistics retain valid activities with null totals.
  • Disconnect preserves its fixed unavailable result and local records.
  • Accessors, inherited markers, custom prototypes, live/revoked Proxies, non-Boolean markers, and malformed values fail closed before body access.
  • A Proxy already revoked before Promise assimilation is contained by the existing fixed unavailable transport boundary.
  • No rejected status, body, or raw error is logged or returned.

Ordinary provider wire bytes cannot create an accessor or Proxy. This is defense-in-depth containment for malformed or instrumented resolved transport objects.

Trustworthy RED

Exact base: dff1a40

Test-only diff SHA-256: c4c73b8cbfc4d6f3b65e066e271c91e1678f365852d6f463eaf24a54907d660f

Pinned Node 20 result on old runtime: 692 total / 691 passed / exactly the new activities-accessor test failed because the direct status read invoked and returned the hostile error by identity.

Verification

Exact reviewed head: 604e51c

Exact patch SHA-256: 6d740feb8f55d9ce2afc2db56f1ddfeabf7fdc8a193e7be54127dbf5a837881f

  • Focused Strava: 699/699 passed.
  • Full Functions: 69 suites passed with 2 intended skips; 7,502 passed / 64 intended skips.
  • Functions lint: passed.
  • Frontend: 951/951 passed.
  • TypeScript: passed.
  • Diagnostic build: passed.
  • Static SPA/workflow/release/dependency/artifact gates: 104/104 passed.
  • Firestore Rules emulator: 418/418 passed.
  • Real commerce emulator: 63/63 passed.
  • Dependency audits: zero critical; no dependency changed.
  • git diff --check: passed.
  • Diff: exactly functions/strava.js and functions/strava.test.js.
  • Three independent reviews: GO for security/compatibility, RED/tests, factual scope, and no-documentation determination.

Migration and residual risk

No schema, dependency, client contract, data migration, or production fallback change. Existing plain test transports and genuine native fetch responses retain behavior. Exotic response wrappers now fail closed.

Response-byte streaming limits, JSON projection, lossless ID transport, refresh concurrency, provider policy/configuration, Firebase deployment, production data, and live verification remain explicitly outside this PR.

@netlify

netlify Bot commented Aug 2, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for luminous-fox-7c393f ready!

Name Link
🔨 Latest commit 604e51c
🔍 Latest deploy log https://app.netlify.com/projects/luminous-fox-7c393f/deploys/6a6ed7dab8a874000894d193
😎 Deploy Preview https://deploy-preview-605--luminous-fox-7c393f.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@daliu

daliu commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

SELF-REVIEW — GO, no findings on exact head 604e51c.

I re-read the complete remote diff and all five status call sites. The shared helper admits only an ordinary own-data Boolean true or a genuine exact-prototype native Response through the captured native getter. It rejects accessors, inherited values, custom wrappers, live/revoked Proxies, coercion, and malformed markers before body access.

Path mappings remain distinct and compatible: authorization invalid-argument, refresh failed-precondition, activities internal, optional statistics null totals, and disconnect fixed unavailable with local records preserved. The two revocation timing tests correctly separate pre-assimilation transport failure from post-fulfillment status rejection. No raw error/status/body/token is exposed or logged, and no extra writes, deletes, timestamps, or provider calls are introduced.

Exact base remains dff1a40. Remote patch SHA-256 remains 6d740feb8f55d9ce2afc2db56f1ddfeabf7fdc8a193e7be54127dbf5a837881f. The file list is exactly the two claimed Strava files. There is no base drift, no late reviewer finding, and all five required CI jobs are green.

Preview 6a6ed7dab8a874000894d193 is ready from the exact head, HTTP 200, x-robots-tag noindex, and unpublished. GitHub deployments are empty. This is preview/source evidence only; it does not prove a Firebase deployment, provider change, production-data action, or live Function behavior.

Officer impact: no current visible change; the fixed containment becomes relevant only after a future protected Firebase Functions release.

Officer documentation: None — existing SOURCE ONLY / NOT LIVE Strava guidance remains accurate.

Deployment evidence: exact-head CI and unpublished preview only. No website publication, runmprc.com change, Firebase deployment, Strava/provider configuration or contact, production-data change, or live verification.

@daliu
daliu merged commit a62c147 into main Aug 2, 2026
9 checks passed
@daliu
daliu deleted the codex/issue-604-strava-response-status branch August 2, 2026 05:42
@daliu

daliu commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

MERGED / FINAL — exact reviewed head 604e51c is now exact main a62c147 with identical tree 77715f25ff475a572fa4a8ad3bd676d6f8ec1333 and patch SHA-256 6d740feb8f55d9ce2afc2db56f1ddfeabf7fdc8a193e7be54127dbf5a837881f.

PR CI 30734480554 and post-main CI 30734583158 passed all five required jobs. Preview 6a6ed7dab8a874000894d193 was exact-head, ready, HTTP 200, noindex, and unpublished.

Officer impact: no current visible change; the containment applies only after a future protected Firebase Functions release.

Officer documentation: None — existing Strava SOURCE ONLY / NOT LIVE guidance remains accurate.

Deployment evidence: exact-main GitHub deployments are empty. Exact-main Netlify production attempt 6a6ed8aafd3a8300085bf55c errored with published_at null. The live runmprc.com release marker remains #473 control/source, and no Firebase deployment, Strava/provider action, production-data change, or live verification occurred. No green CI result is represented as deployment evidence.

No review finding remains; #604 is complete and every claim is released.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OAUTH-001A2J — Safely admit Strava HTTP success markers

1 participant