SaaS fixes v1: checkout preselect/CTA, canvas loop fix, cloud delete fix, settings copy (#1336)
* feat(checkout): support preselecting a plan to skip the picker - Add optional preselectedPlan to CheckoutModal; when set it seeds the selection and auto-advances straight to the payment step - Extend the shell:subscribe event with an optional plan and thread it through CheckoutFlow so callers can request a preselected tier - Mirror the optional field in the app-sdk event map and document it Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(checkout): add per-plan CTA and GitHub link to PlanPicker - Add opt-in onPlanCta/ctaLabel so billable plan cards render a primary CTA button (used by the public pricing page) - Render a GitHub icon on action links pointing at github.com - Make a card interactive (pointer, radio role, keyboard) only when a selection handler is wired, so display-only pages render static cards Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(canvas): stop the Maximum update depth loop in the pipeline canvas - Memoize ProjectView's viewport handler so ReactFlow's onMoveEnd keeps a stable identity (an inline handler made StoreUpdater re-sync every render) - Add a circuit breaker to FlowGraphContext's reload effect as a backstop against non-converging content reloads Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(store): allow deleting cloud-backed files without an expected version - S3 and Azure delete_file enforce the version match only when an expected_version is supplied, matching the filesystem/memory backends - Fixes deletes failing in prod (cloud backends) while working locally Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(settings): change subscribe CTA copy to Subscribe to RocketRide Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(checkout): use a concrete plan type for the app-sdk subscribe event Address review (CodeRabbit): type the shell:subscribe event's optional plan as a concrete CheckoutPlan (mirroring the AppPrice row shape) instead of unknown, so invalid plan payloads fail at compile time rather than later in checkout logic that expects stripePriceId/appId. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
R
Ryan committed
a9531dbebb4d750dc1ef7fa78d987bc04cef06b2
Parent: e1b4da7
Committed by GitHub <noreply@github.com>
on 6/23/2026, 4:38:44 PM