Files

153 lines
7.0 KiB
Markdown
Raw Permalink Normal View History

# Production-ready report (Descrybe v2)
**Date:** 2026-08-04 (blocker close-out pass)
**Repo:** `f:/laragon/www/_MY/descrybe-v2`
**Scope:** Local staging rehearsal + honesty about LIVE vs mocked vs seed-only
**Builds (this pass):** `apps/api` `go build ./...`**exit 0**; `apps/web` `npm run check` → re-run below
Related: [production-checklist.md](production-checklist.md), [production-readiness.md](production-readiness.md), [security-notes.md](security-notes.md), [go-live-checklist.md](go-live-checklist.md), [store-connectors.md](store-connectors.md), [demo-user.md](demo-user.md), [perf-notes.md](perf-notes.md).
---
## Executive verdict
| Question | Answer |
|----------|--------|
| **Production-ready for public cutover?** | **NO** |
| **Local staging / demo rehearsal?** | **GO** — core catalog → process → export → credits → auth → Woo mock REST → Shopify dry-run are proven |
| **Ship to paying customers on the public internet today?** | **NO-GO** until cutover / SMTP / real Stripe / prod env items below are cleared |
**One-line:** Descrybe v2 is **staging-demo ready** with Woo live-client proof (`mock-woo`) and Shopify dry-run smoke; it is **not** public-cutover-ready while migration/email/SMTP/`APP_ENV=production` and **real Stripe keys** remain open.
---
## Demo login
| Field | Value |
|-------|--------|
| Web | http://127.0.0.1:5174/login (prefer **5174**) |
| API | http://127.0.0.1:8080 (`/healthz`, `/readyz`) |
| Email | `demo@descrybe.local` |
| Password | `DemoPass123!` |
| Tenant | **Local Demo Co** |
| Plan (verified) | **Enterprise** (`GET /api/billing/credits``plan.name=Enterprise`, 1,000,000 credits) |
| API key (local only) | `dk_demo_local_descrybe_test_key_v1` |
Full bootstrap: [demo-user.md](demo-user.md). **Do not use demo credentials in production.**
---
## Build reconcile (this pass)
| Check | Result | Notes |
|-------|--------|-------|
| `cd apps/api && go build ./...` | **PASS** | Includes `cmd/mock-woo` |
| API/worker restart | **Done** | Parallel product list + Shopify claim loaded |
| Goose DB version | **18** | Includes `017_shopify` + `018_list_hotpath_indexes` |
| `cd apps/web && npm run check` | (see footer) | |
---
## Criteria scorecard
| Criterion | Status | Evidence | Notes |
|-----------|--------|----------|-------|
| No user-facing `go run` / seed CLI text | **PASS** | Static + [production-readiness.md](production-readiness.md) | CLI stays in docs/README |
| Sidebar simplified | **PASS** | [tutorial-live.md](tutorial-live.md) | Primary + More |
| Mobile OK | **PASS with polish** | [mobile-audit.md](mobile-audit.md) | |
| Woo + Shopify + feeds | **PASS (local)** | [live-woo-test.md](live-woo-test.md), [live-shopify-test.md](live-shopify-test.md), live feed docs | Woo via `mock-woo` REST; Shopify dry-run; feeds LIVE |
| Stripe | **MOCK OK for local** | [live-stripe-test.md](live-stripe-test.md), [stripe-setup.md](stripe-setup.md) | **Not a code blocker** if prod requires real keys (documented). Local keeps `STRIPE_MOCK=true` |
| Credits | **PASS** | [live-credits-test.md](live-credits-test.md) | |
| Security | **PASS (local)** | [live-auth-security.md](live-auth-security.md) | Prod needs `APP_ENV=production` |
| Perf (Go v2) | **PASS (documented)** | [perf-notes.md](perf-notes.md) | Parallel list + goose 018 indexes + export streaming |
---
## Live docs inventory
| Doc | Verdict | Class |
|-----|---------|-------|
| [live-e2e-local.md](live-e2e-local.md) | PASS 21/21 | LIVE |
| [live-credits-test.md](live-credits-test.md) | PASS | LIVE |
| [live-auth-security.md](live-auth-security.md) | 23/23 PASS | LIVE |
| [live-export-channels.md](live-export-channels.md) | PASS | LIVE |
| [live-feed-csv.md](live-feed-csv.md) | PASS | LIVE |
| [live-pipeline.md](live-pipeline.md) | PASS | LIVE |
| [live-woo-test.md](live-woo-test.md) | **PASS** | **LIVE client ↔ mock-woo HTTP** (not seed) |
| [live-shopify-test.md](live-shopify-test.md) | **PASS** | **Dry-run** Admin API path |
| [live-stripe-test.md](live-stripe-test.md) | PASS mock UI | **MOCK** — real keys required for prod |
| [perf-notes.md](perf-notes.md) | Written | Go v2 hot paths |
| [shopify-connector.md](shopify-connector.md) | Present | Schema 017 + UI |
---
## Honest LIVE vs mocked vs seed matrix
| Area | Class | Proven |
|------|-------|--------|
| Auth / CSRF / API keys | **LIVE** | Real HTTP against API |
| Catalog / feeds / process / export | **LIVE** | Multi-MB public exports |
| Credits debit | **LIVE** | Wallet deltas |
| WooCommerce REST | **LIVE ↔ mock-woo** | Test Connection + product push + orders/reviews pull ([live-woo-test.md](live-woo-test.md)) |
| Shopify Admin API | **DRY-RUN LIVE path** | Test + product sync + orders ([live-shopify-test.md](live-shopify-test.md)); real shop token still optional |
| Stripe Checkout | **MOCK** | Local only; **prod requires real `STRIPE_SECRET_KEY` + webhook secret** ([stripe-setup.md](stripe-setup.md)) |
| Production HTTPS / SMTP / cutover | **NOT PROVEN** | [go-live-checklist.md](go-live-checklist.md) |
---
## Remaining BLOCKERS (public cutover)
1. **BLOCKER — Production cutover / migration / SMTP**
Synthetic `@legacy.local` emails, membership roles, SMTP set-password proof, `APP_ENV=production` fail-closed env, object storage, etc. ([go-live-checklist.md](go-live-checklist.md)).
2. **BLOCKER — Real Stripe for production billing**
Local mock is intentional and documented. **Shipping paid plans requires** live/testmode Stripe keys + signed webhooks. Not a local staging blocker. Exit: Stripe CLI/testmode Checkout + webhook without leaving demo on Starter.
3. **SOFT — AI provider per environment**
Local AI PASS depended on LAN Green Chat / configured OpenAI-compatible endpoint.
### Closed this pass (no longer blockers)
- ~~WooCommerce not LIVE-proven without seed~~ → [live-woo-test.md](live-woo-test.md) + `cmd/mock-woo`
- ~~Shopify product sync stub / missing connector docs~~ → dry-run smoke + [shopify-connector.md](shopify-connector.md) / [live-shopify-test.md](live-shopify-test.md)
- ~~No v2 `perf-notes.md`~~ → [perf-notes.md](perf-notes.md) + goose 018
---
## What is solid enough for staging demos
- Login as demo → Local Demo Co on **Enterprise**
- Feeds → map → sync → process (worker) → export
- Woo: point at `mock-woo` → Test Connection → sync products/orders/reviews
- Shopify: dry-run token → test + sync products/orders
- Credits/Billing consistency; auth CSRF + API keys
- Perf indexes + streaming exports documented
---
## Recommended next actions (ordered)
1. Stripe testmode end-to-end (non-mock) when ready to take payments
2. Clear go-live checklist migration/email/SMTP/`APP_ENV=production` before DNS cutover
3. Optional: exercise Woo against a real HTTPS store; Shopify against a real custom-app token
---
## Reconcile commands
```powershell
cd f:\laragon\www\_MY\descrybe-v2\apps\api
go build ./...
go run ./cmd/mock-woo -addr 127.0.0.1:19090 # separate terminal
cd f:\laragon\www\_MY\descrybe-v2\apps\web
npm run check
```
Demo:
```text
http://127.0.0.1:5174/login
demo@descrybe.local / DemoPass123!
```