# Checkout preflight — first paid tenant (`hyp/itonami-smb-pay`)

**As-of**: 2026-07-17 (live probes)  
**Purpose**: one page before you open Stripe Checkout. No secrets. No invented metrics.

## Verdict

| Gate | Status | Evidence |
|---|---|---|
| Free path / productSurface | **GREEN** | `6140/6140` (100%) |
| Stripe wiring | **GREEN** | `readyForLiveCheckout: true`, `webhookReady: true`, `mode: live` |
| Free tenants | **GREEN** | external=4, selfRegisteredOwners=4 |
| Agent activity | **GREEN** | agentRuns7d ≈ 22,652 |
| **Paid tenant** | **RED — only open gate** | `paid-tenant.ok=false`, externalPaid=0 |
| Funnel URLs | **GREEN** | `/isco-1212/`, go-live, free-path docs all HTTP 200 |

**Bottleneck (API):**  
`run a real Stripe checkout via /isco-1212/ to clear hyp/itonami-smb-pay`

**Checklist false items:** exactly **1** → `paid-tenant`  
(`hyp/itonami-smb-pay: need ≥1 external paid org`)

---

## Live snapshot (re-run anytime)

```bash
curl -sS https://itonami.cloud/api/status | jq '{
  scores, bottleneck,
  paid: [.checklist[] | select(.id=="paid-tenant" or .id=="stripe-configured" or .id=="free-tenant-claim")]
}'

curl -sS https://itonami.cloud/api/billing/status | jq '{
  stripeConfigured, webhookReady, readyForLiveCheckout, readyForEntitlement, mode, missing, checkoutUi
}'

curl -sS https://itonami.cloud/api/fleet/metrics | jq '.tenants, .stripe'
```

### Captured values (2026-07-17)

**`/api/billing/status`**

| field | value |
|---|---|
| stripeConfigured | true |
| webhookReady | true |
| readyForLiveCheckout | true |
| readyForEntitlement | true |
| mode | **live** |
| missing | [] |
| checkoutUi | `/isco-1212/` |

**`/api/fleet/metrics` → tenants**

| field | value |
|---|---|
| externalTotal | 4 |
| externalPaid | **0** |
| selfRegisteredOwners | 4 |
| agentRuns7d | 22652 |

**`/api/status` scores**

| score | value |
|---|---|
| productSurface | 6140/6140 (100%) |
| fullIncludingPaid | 6069/6070 (100% rounded; paid bit open) |

---

## What you do (owner, ~5 minutes)

1. Open **https://itonami.cloud/isco-1212/**
2. Prefer a **non-`gftdcojp/*`** org/repo slug (prefilled unique is fine)
3. **Sign up with Passkey** (free claim) if not already a tenant
4. Click **Subscribe via Stripe Checkout**
5. Complete payment with a card matching **live** mode (`mode: live` above — not test cards unless you switch secrets back to test)
6. Wait for webhook → entitlement write

### Verify after payment

```bash
curl -sS https://itonami.cloud/api/fleet/metrics | jq '.tenants.externalPaid, .stripe'
curl -sS https://itonami.cloud/api/status | jq '.checklist[] | select(.id=="paid-tenant")'
# expect: paid-tenant.ok=true , externalPaid >= 1
```

Optional cockpit: https://itonami.cloud/#go-live

---

## What is already done (do not re-do)

- Stripe secrets present (booleans only; values never returned by API)
- Webhook endpoint documented: `https://itonami.cloud/api/stripe/webhook` (`checkout.session.completed`)
- Free claim path works (4 self-registered owners)
- Product surface free-path checklist effectively complete
- Occupation registry / product-face densify / free-path polish — not the bottleneck

## What this does *not* clear

| Still open after paid | Why |
|---|---|
| YC **distribution** (2) | Needs real acquisition channel (see `docs/distribution-drafts.md`) — one checkout alone may leave distribution unchanged |
| Portfolio BMC ledger re-score | Owner/agent runs `gftd score` after facts update |

## Failure modes (if Checkout fails)

| Symptom | Check |
|---|---|
| Checkout button dead / 5xx | `curl -sS https://itonami.cloud/api/billing/status` still green? |
| Payment succeeds, paid-tenant still false | Webhook delivery in Stripe dashboard; `STRIPE_WEBHOOK_SECRET`; KV entitlement write |
| Wrong mode (test card on live) | `mode` field must match card type |
| Claimed but wrong org | Avoid `gftdcojp/*` dogfood if you need *external* paid signal |

## Related docs

- [wedge-pages.md](./wedge-pages.md) — Lane D GitHub Pages catalog

- [go-live.md](./go-live.md) — full paid path
- [free-path.md](./free-path.md) — free claim only
- [stripe-billing-setup.md](./stripe-billing-setup.md) — secrets / prices
- [distribution-drafts.md](./distribution-drafts.md) — posts **not** sent
- Lane D polish: [haiku-loops/D-wedge-polish/](./haiku-loops/D-wedge-polish/)
