release: Stripe Connect Express — the platform mints the tenant account (E1-E7) - #235
Merged
Merged
Conversation
…2) (#228) * feat(payments): mint a tenant Express connected account, prefilled (E2) * docs(env): the platform key now needs Connect -> write, and only in the control plane (E2) * chore(payments): NON_IBAN_COUNTRIES is a Set (SonarCloud S7776)
…stry PR carries both halves (E3) (#229)
… Stripe link per request (E4) (#230) * feat(payments): the restaurant's own onboarding page, minting a fresh Stripe link per request (E4) * chore(payments): read-only props on the onboarding page (SonarCloud S6759)
…finished (E7a) (#233) * feat(payments): the registry entry carries the tenant payments link, finished (E7a) * chore(payments): build the payments link with URL(), not a backtracking regex (SonarCloud S5852)
…n Standard claim (E7) (#234)
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Release — Stripe Connect Express: the platform mints the tenant's account
Eight commits (#227–#234). This is the full E1–E7 migration from Connect Standard to Connect Express,
which is what ADR-011 always specified — the implementation
had drifted to Standard.
stripe_account:andonline-payments/onboarding/payments/<token>, minting a fresh Stripe link per requestReferrer-Policy: no-referreraccount.updated, so we learn when a restaurant finishespayments_link_url:THREE migrations, founder-run BEFORE the app rollout
20260905190000_stripe_connect_account20260905210000_connect_account_onboarding_token20260905230000_stripe_account_statusAll additive. Nothing in this release reads them until an account is minted, and none can be minted until the
owner-side prerequisites below exist.
Why E1 shipped first
No column stored
acct_anywhere. A crash between minting a live Stripe account and composing theregistry PR would have lost a real account with no record it existed. Idempotency measured against Stripe:
same key + same body returns the same account; a one-character key change returns a different one.
What is still inert
Every tenant is
flat/ 0 bps. No tenant has astripe_account— verified with a positive control. Themint cannot succeed until the platform key carries
Connect -> write, and until then every online-paymentstenant takes the last-resort deferral path, which is deliberately kept: without it a failed mint would
mean no tenant at all rather than a tenant without card payments.
Known product limitation, recorded not hidden
Stripe fixes an account's country permanently at creation and we store no country. Country is derived from
currency (CHF, GBP, USD, AED) and EUR is refused, because seven countries share it. A EUR restaurant does
not get card payments until a founder acts by hand. Filed in BACKLOG with the fix costed.
Rollout
Run the three migrations with
ghcr.io/piwas-21/sofra:migrate, thencompose pull sofra && up -d sofra.Verify
/api/healthreports this merge commit andPOST /api/webhooks/stripestill answers 400.