Skip to content

Promote develop to release (uat): seek hold overlay (#252), refund fixes (#253), credential cleanup (#251) - #254

Merged
rvegajr merged 27 commits into
releasefrom
develop
Oct 17, 2026
Merged

rvegajr merged 27 commits into
releasefrom
develop

Conversation

@rvegajr

@rvegajr rvegajr commented Oct 17, 2026

Copy link
Copy Markdown
Member

Promotes to UAT

No Prisma migrations. Each PR passed lint, type-check and tests in CI on develop.

To check on UAT

  • Hold a stream 2s: the skip strip opens, a tap elsewhere closes it.
  • Issue a manual refund from admin (sandbox): the purchase flips to refunded and the coach's ledger shows the reversal. A partial amount shows partially_refunded.

🤖 Generated with Claude Code

rvegajr and others added 27 commits July 22, 2026 20:47
Apply migrate-on-deploy to production (fix VeoIntegration P2021 drift)
Promote develop -> main (PROD): env-chrome + clone fix
Promote develop -> main (PROD): Traklet gate + env-label workflow
promote: env-aware email via relay → PROD
promote: crowdsourced sport overlay → PROD
promote: shared multi-channel stream toolbar → PROD
Inherit event scoreboard names, show the bootstrap title, and stop HLS waiting events from covering a working player after Mux 404s.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ships

Those tests assume /parent/event rewrite, which is not on production main yet.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…manager

Railpack 0.38 failed DEV deploys with "Failed to resolve version 8.15.0 of pnpm".
Vidstack can stay aria-busy while native HLS already has frames, which left
the Rayos page stuck on "Loading stream..." over a working player.

Co-authored-by: Cursor <cursoragent@cursor.com>
Safari was rendering a generic Pay label because the button used custom text instead of Apple's buy-with-Apple-Pay control.

Co-authored-by: Cursor <cursoragent@cursor.com>
…prod

promote: official Apple Pay button → PROD
UAT web and API are green on the relay paywall stack. Keep the official Apple Pay button from UAT.

Co-authored-by: Cursor <cursoragent@cursor.com>
promote: UAT → PROD (relay paywall + official Apple Pay)
Both files embedded the production Postgres URL, password included, for the
Railway `production` environment. This repo is PUBLIC, and the credential was
reachable in HEAD and in history since 2026-01-18.

The password has been rotated on Railway and the old one no longer
authenticates. It is stored in 1Password (Automation vault) and mirrored in the
Railway service variables; nothing reads it from source any more.

- apply-prod-migration.ts: read DATABASE_URL from the environment, exit if unset
  rather than silently targeting a hardcoded database
- _archive/test-dvr.sh: same, for the `prod` branch of the script

Rotating was required regardless of this change: history rewriting cannot
un-publish a credential that was public for eight months.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
FieldView already uses the relay for Square; this makes the same drop-in the rule for mail, SMS, and litellm-vm.

Co-authored-by: Cursor <cursoragent@cursor.com>
Apps should call the LiteLLM gateway, not the legacy nsk_* host.

Co-authored-by: Cursor <cursoragent@cursor.com>
Point LLM Relay docs at ai.noctusoft.com
promote: UAT → PROD (signed marketplace buy links, event v1 webhook)
Promote SMS compliance (#241) to production
Promote develop to production: public /sms opt-in page
Promote develop to production: public home page + operator line (#247, #249), health fleet metadata (#246)
The production Postgres URL was still in docs/DVR_TESTING_GUIDE.md, which
55ba7e1 missed. A Square sandbox access token and application ID were
still in docs/ENV_SETUP_GUIDE.md. Both are now placeholders.

Both values remain in git history, so they still have to be rotated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…redentials

security: remove the last committed credentials (and sync main into develop)
The seek strip used to open from a tap on the center 20% of the video,
which fired on ordinary taps meant for the player. It now opens only from
a 2s press anywhere above the native controls. A tap anywhere else,
including tabs and page chrome, dismisses it.

A one-time hint (SeekHoldHint, remembered in localStorage) teaches the
gesture, and the touch help text now says "Hold the video 2s to skip".

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…the ledger (#253)

- RefundService marked a purchase refunded before calling the marketplace
  store. If the store call failed, the purchase showed as refunded but no
  money went back, and the "already refunded" check blocked a retry. The
  status now changes only after the store accepts the refund.
- A refund left pending by a failed store call can now be retried. The
  retry reuses the refund id, which is the store's idempotency key, so it
  can't refund twice.
- Refunds now write the ledger reversal (createRefundLedgerEntries had no
  callers), once per refund id, so coach earnings drop after a refund.
- The marketplace webhook marked every refund event as a full refund. It
  now uses money.refundedCents to set partially_refunded.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@rvegajr
rvegajr merged commit b4cca48 into release Oct 17, 2026
5 of 6 checks passed

This branch had an error being deployed

1 failed deployment
fieldview-live / development — e71fe1c4 Deployed Oct 15, 2026 by railway-app[bot]
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.

1 participant