2.0.1
Released
Fixes
POST /api/billing/checkoutrefuses an account that already holds a Pro-granting subscription, with a 409 pointing at the Billing Portal. Hiding the buy buttons is not enforcement: a double click, a retry, or a direct call would open a second Checkout session, and Stripe will happily run two independent subscriptions for one customer (#486).Stripe customer creation carries an idempotency key derived from the user id, so two concurrent first checkouts converge on one customer. Without it both saw no mapping, both created a customer, and the losing upsert left one holding a live Checkout session and its invoices that neither the mapping nor the Billing Portal could find again (#486).
Locked personas in the model picker render as plain cards rather than disabled buttons. The "Upgrade to Pro" link was interactive content nested inside a disabled
<button>— invalid HTML, and unreachable by pointer and assistive technology alike, so the one control that could unlock the card was the one control that could not be used (#486).The dev TUI re-checks for a live-mode context after an account switch. The guard ran before the switch was offered, so choosing a live account from the picker walked straight past it into fetching a live webhook signing secret into
.envand forwarding production events at localhost (#486).Synced
pnpm-lock.yamlwithapps/web/package.jsonto include@vitest/coverage-v8@^2.1.2, resolvingERR_PNPM_OUTDATED_LOCKFILEin CI when runningpnpm install --frozen-lockfile.Added
E2E_SUPABASE_URLandE2E_SUPABASE_SERVICE_ROLE_KEYto thetest:e2eenv array inturbo.json, resolvingturbo/no-undeclared-env-varslint warnings acrosse2e/auth.spec.ts,e2e/fixtures.ts,e2e/global-setup.ts, ande2e/helpers/auth.ts.Suppressed false-positive
react-hooks/rules-of-hookswarnings ine2e/fixtures.ts— Playwright'susecallback is not a React hook.Renamed unused
_configparameter to_ine2e/global-setup.tsto satisfy@typescript-eslint/no-unused-vars.Fixed
reorderTaskIdstests insrc/lib/tasks/types.edge.test.tsto passQuestTaskobjects via thetask()helper instead of plain strings, resolving aTypeError: Cannot read properties of undefined (reading 'localeCompare')caused by the function'ssortOrder/createdAtfields being absent.Fixed a TypeScript build error in
e2e/fixtures.tswhereauthenticatedPagewas typed asReturnType<typeof base>['page'](which resolves tonever); replaced with the correctPagetype imported directly from@playwright/test.