← Files AkinatorARCHIVED FILE

evals/results/workspaces/2026-08-26-03-business-void/docs/standards/quotas.md

1.32 KB · Oct 3, 2026 · 06:33 UTC

↓ Download file

# Quotas

## Plans

| Plan | Members | Items | Exports / month |
|---|---|---|---|
| free | 3 | 100 | 3 |
| team | 10 | 5000 | 25 |

Decided by the founder, 2026-02-01.

## How quota is consumed

An export consumes one unit at the moment the job is queued, not when it
completes. A failed export refunds its unit automatically.

Quota resets on the team's billing anniversary. Unused units do not carry over.

## Implemented in

`src/quota.py` - `consume` and `refund_failed`. `refund_failed` returns a quota
unit for an export that failed; it is not a money refund - those are
[refunds](refunds.md).

## Edge cases decided

| Date | Situation | Decision |
|---|---|---|
| 2026-02-14 | Team exhausts quota mid-export | The in-flight export completes; the next is blocked |
| 2026-03-02 | Team upgrades mid-period | New limit applies immediately; used count carries over |

## Edge cases OPEN

| Date raised | Situation | Blocked on |
|---|---|---|
| 2026-08-26 | A team is refunded for the current period. Does it keep the `team` limits until its anniversary, drop to `free` limits immediately, or keep the plan and lose its remaining exports? | Undecided - nobody has answered it. A team refunded after 20 exports would be over the `free` limit of 3 with no way to reduce the count. See [refunds](refunds.md). |

SHA-256: 18d29181f8915d803429fd0f485ef477c0da2e1acfe21261351020250ac2c7b2