This PR moves over the last method on `StripeBilling` to use the
`StripeClient` trait, allowing us to fully mock out Stripe behaviors for
`StripeBilling` in tests.
Release Notes:
- N/A
This PR updates the `StripeBilling::checkout_with_zed_pro` and
`StripeBilling::checkout_with_zed_pro_trial` methods to use the
`StripeClient` trait instead of using `stripe::Client` directly.
Release Notes:
- N/A
This PR updates `StripeBilling` to use the `StripeClient` trait to
retrieve prices and meters from Stripe instead of using the
`stripe::Client` directly.
Release Notes:
- N/A
This PR introduces a new `StripeClient` trait to abstract over
interacting with the Stripe API.
This will allow us to more easily test our billing code.
This initial cut is small and focuses just on making
`StripeBilling::find_or_create_customer_by_email` testable. I'll follow
up with using the `StripeClient` in more places.
Release Notes:
- N/A
This PR makes it so the Zed Free plan cannot be canceled.
We were already preventing this on the zed.dev side, but this will make
it more airtight.
Release Notes:
- N/A
This PR makes it so we always prefer the plan on the subscription.
The plan stored on the subscription usage is informational only.
Release Notes:
- N/A
https://github.com/zed-industries/zed/issues/30972 brought up another
case where our context is not enough to track the actual source of the
issue: we get a general top-level error without inner error.
The reason for this was `.ok_or_else(|| anyhow!("failed to read HEAD
SHA"))?; ` on the top level.
The PR finally reworks the way we use anyhow to reduce such issues (or
at least make it simpler to bubble them up later in a fix).
On top of that, uses a few more anyhow methods for better readability.
* `.ok_or_else(|| anyhow!("..."))`, `map_err` and other similar error
conversion/option reporting cases are replaced with `context` and
`with_context` calls
* in addition to that, various `anyhow!("failed to do ...")` are
stripped with `.context("Doing ...")` messages instead to remove the
parasitic `failed to` text
* `anyhow::ensure!` is used instead of `if ... { return Err(...); }`
calls
* `anyhow::bail!` is used instead of `return Err(anyhow!(...));`
Release Notes:
- N/A
This PR makes it so we create a Zed Free subscription when issuing an
LLM token, if one does not already exist.
Release Notes:
- N/A
---------
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
This mostly affects local development. It fixes a bug where we would
only process one Stripe event per polling period (5 seconds) when
hitting old events.
Release Notes:
- N/A
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
This PR makes it so a user can initiate a checkout session for a Zed Pro
trial while on the Zed Free plan.
Release Notes:
- N/A
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
This PR adds a sanity check to ensure that we only subscribe the user to
Zed Free if they don't already have an active subscription.
Release Notes:
- N/A
This PR makes the `product` field required in the request body for `POST
/billing/subscriptions`.
We were already passing this everywhere, in practice.
Release Notes:
- N/A
This PR adds a new `POST /billing/subscriptions/sync` endpoint that can
be used to sync a user's billing subscriptions from Stripe.
Release Notes:
- N/A
This PR updates the `GET /billing/preferences` endpoint to return the
user's `trial_started_at` timestamp alongside the billing preferences.
Release Notes:
- N/A
This PR removes the code related to syncing token-based billing events
to Stripe.
We don't need this anymore with the new billing.
Release Notes:
- N/A
This PR improves the `GET /billing/usage` endpoint.
We now return the usage with the default plan limits when there is no
usage record.
Release Notes:
- N/A
This PR updates the billing migration endpoint to work for users who do
not have an active subscription.
This will allow us to use the endpoint to migrate all users.
Release Notes:
- N/A
This PR adds a new `POST /billing/subscriptions/migrate` endpoint for
migrating users to the new billing system.
When called with a GitHub user ID this endpoint will:
1. Find the active billing subscription for this user (if they have one)
2. Cancel the subscription and send a final invoice
3. Ensure the user is in the `new-billing` and `assistant2` feature
flags
Release Notes:
- N/A
This PR renames the symbols for the existing Stripe synchronization.
This will make things clearer once the new synchronization job for the
new billing is added.
Release Notes:
- N/A
This PR makes it so we check for an existing Stripe customer by email
address before attempting to create a new one.
This should avoid the case where we end up creating multiple Stripe
customers for the same user.
Release Notes:
- N/A
This PR adds support for transferring any existing usage from a trial
subscription to a Zed Pro subscription when the user upgrades.
Release Notes:
- N/A
---------
Co-authored-by: Mikayla <mikayla@zed.dev>
The old one wasn't linking, and
https://github.com/zed-industries/zed/pull/29081 has a bunch of merge
conflicts. Wanted to start simple/small.
## Todo
* [x] Remove low-signal examples
* [x] Make the eval run on a cron, on main, and on any PR with the
`run-eval` label
* [x] Noise in logs about failure to write settings
```
[2025-04-21T20:45:04Z ERROR settings] Failed to write settings to file
"/home/runner/.config/zed/settings.json"
Caused by:
No such file or directory (os error 2) at path
"/home/runner/.config/zed/.tmpLewFEs"
```
* [x] `Agentic loop stalled`
(https://github.com/zed-industries/zed/actions/runs/14581044243/job/40897622894)
* [x] Make sure that events are recorded in snowflake
* [ ] Change judge criteria to be more explicit about meanings of scores
Release Notes:
- N/A
---------
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Co-authored-by: Agus Zubiaga <hi@aguz.me>
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Thomas Mickley-Doyle <tmickleydoyle@gmail.com>
This PR adjusts the upgrade from a Zed Pro trial to Zed Pro to do so by
ending the trial period early.
This will transition the subscription to `active` and bill the user
without needing to send them through a Stripe Checkout flow.
Release Notes:
- N/A