# Phase 0 Gate — Agent Decision Session

**Purpose:** One-page gate for Cursor agents before product code.  
**Authority:** [DECISIONS.md](DECISIONS.md) (Dani Roxberry, September 7, 2026).  
**Status:** **Gate closed for implementation** — proceed to [Phase 2 kickoff](PHASE2-KICKOFF.md).

Do not re-decide rows marked **Closed**. Human-only rows stay blocked until Dani completes the listed task.

---

## Gate Table

| Area | Decision (use in code) | ID | Agent status |
|---|---|---|---|
| Freeze + launch | **Sep 10, 2026, 11:59 PM US Eastern** — same day as public launch | D-01, D-03 | Closed |
| Milestone scope | Signup/login, uploads (partial OK), browser playback, **simulated streamer**, **Stripe test checkout** | D-02 | Closed |
| Acceptance owner | **Dani** | D-04 | Closed |
| Capacity | **Solo + Cursor agents**; cut **metadata auto-match** first if slipping | D-05, D-06 | Closed |
| API host | **Servarica Linux VPS**; public **`https://api.audiovau.lt`** | D-10, D-121 | Closed (local Compose first: D-135, D-136) |
| Database | **PostgreSQL** on same VPS (Compose locally) | D-11 | Closed |
| Object storage | **Cloudflare R2, US jurisdiction**, private bucket | D-12, D-17 | Closed |
| Static/PWA | **Cloudflare Pages** on apex; no audio on apex | D-16 | Closed |
| Auth at freeze | **Password + magic link**; passkeys **post-freeze** | D-20, D-144, D-152 | Closed |
| Sessions | **90-day rolling**, **30-day idle**; logout = session only | D-22, D-26 | Closed |
| Plan economics | **$49/mo**, **$490/yr USD**, **2 TB** included; **20 TB** engineering ceiling | D-30–D-32 | Closed |
| Stripe | **Test mode** through freeze; live needs explicit auth | D-39 | Closed |
| Launch geo | **Worldwide where Stripe supports** | D-40 | Closed |
| Upload limits | **10 GB** file, **3/6** concurrency, **30-day** resume, **16 MiB** parts | D-50–D-53, D-60 | Closed |
| Source identity | **SHA-256 + size + relative path** | D-54 | Closed |
| Collisions / changes | **User confirm** before replace/overwrite | D-55, D-56 | Closed |
| Sidecars | **`.cue`, `.log`, cover images** (images catalog-only) | D-57 | Closed |
| Paths | **NFC**, max **4096** chars, depth **20** | D-59, D-127 | Closed |
| Metadata | **AcoustID + MusicBrainz**, auto ≥ **80%** | D-70–D-74 | Closed |
| Trash / delete | **30-day trash** (counts toward quota); account delete **30-day** soft, **Stripe cancel first** | D-80–D-82, D-134 | Closed |
| Playback bytes | **Short-lived R2 presign** + Range; simulated streamer at freeze | D-110, D-119 | Closed |
| Browser floors | Baseline Widely available **2026-09-07**; configurable via `.env` | D-117, D-130 | Closed |
| Owner-only library | **No sharing** or public links | D-116 | Closed |
| Scale / soak | **2 TB**, **100k files**, all AV-R12 formats; **25 Mbps** uplink UX | D-125–D-128 | Closed |
| Calculator refresh | **Defer** until after music MVP | D-90–D-92 | Closed (do not block Phase 2) |

---

## Human-Only (Do Not Invent)

| Item | Task | Agent action |
|---|---|---|
| Production VPS + R2 + TLS | AV-T21 | Use Docker Compose + untracked `.env` locally |
| Stripe Price IDs | AV-T20 | **Done** — test prices in `.env.example`; smoke `scripts/stripe-checkout-smoke.sh` ([VALIDATION.md](VALIDATION.md#av-t20-stripe-test-prices-and-checkout-september-7-2026)) |
| Counsel sign-off | AV-T22 | Use draft policies in `docs/legal/`; no compliance claims |
| DNS import | AV-T34–T38 | No production DNS changes |
| Mailboxes live | AV-T43 | Document Resend + iCloud; do not send production mail |

---

## Config Source of Truth

| File | Role |
|---|---|
| [.env.example](../../.env.example) | Default keys and values for local dev |
| [CONFIG.md](CONFIG.md) | Full variable reference |
| [DECISIONS.md](DECISIONS.md) | Why each default exists |

---

## Phase 0 Plan Checkboxes

All Phase 0 items in [PLAN.md](PLAN.md#phase-0--establish-the-baseline-and-resolve-release-inputs) are checked with pointers to **D-*** rows above. Agents **must not** block Phase 2 on re-interviewing Phase 0 unless Dani explicitly revises [DECISIONS.md](DECISIONS.md).

**Next:** [PHASE2-KICKOFF.md](PHASE2-KICKOFF.md)
