## What it does

The skill lives in `.claude/skills/remove-billing` and removes the Stripe slice, the in-app purchase
path, the pricing page and the associated specs. What it deliberately keeps is the seam:

```ruby
def for(account) = Entitlement::Open.new(account)
```

`app/models/entitlement.rb` ships an `Open` strategy that gates nothing. Switching to it means every
controller with `include RequireEntitlement` still compiles, still runs, and simply lets everyone
through. Nothing is edited, and turning a feature paid again later is one line rather than an audit.

## Stop if you have ever charged a real card

This is the warning the skill leads with, and it is the right one. Removing the webhook handler while
live subscriptions exist means Stripe keeps billing customers and your app stops hearing about it.
Cancel the subscriptions in Stripe first, let the refunds settle, and then remove the code.

## The files agents skip

Removing a slice is mostly deletion, and deletion is the easy part. The residue is in shared files
that only partly relate to billing: a route, a nav link, a line in the CSP for Stripe's host, a
seeded subscription in `db/seeds.rb`. The skill has a section listing exactly these, because they are
what gets left behind and they are invisible until something breaks.

## Verify rather than assume

```bash
bin/check
```

Green means the specs that referenced the removed slice are gone and nothing left behind references
it. Then boot the app and walk the flow a paying user would have taken. A dangling link to a removed
pricing page is a 404 that no spec covers.

## The alternative, if you are unsure

Do not remove anything. Point `Entitlement.for` at the open strategy and leave the code in place. The
app is free, nothing is gated, and the day you want to charge you change one line back. The cost is
some unused code; the benefit is that you have not made a decision you cannot cheaply reverse.
