master-zapier-plan-draft/research/zapier/verae-zapier-api/docs/plans/phase-gates.md
George Lambert b4150c8250 Milestone 0: import zappier billing, Verae middleware, and Zapier research
Compose-ready workspace: packages/zappier (rate card, portal, Stripe),
packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier
(CLI app), vendor/zapier-platform, and research/zapier vendor corpus.

Gate 0 structure checks pass. Product code and research are not yet wired.
2026-09-09 02:37:36 -04:00

189 lines
3.8 KiB
Markdown

# Phase Gates — Commands and Acceptance Criteria
Gates enforce **test-before-next-step**. Run from repository root:
```bash
cd /Users/marchon/datacubes/verae-zapier-api
npm run gate:N
```
`npm run gate:all` runs gates `0``12` sequentially and **exits non-zero** on first failure.
## Gate 0 — Structure and documentation
```bash
npm run gate:0
```
| Check | Requirement |
|-------|-------------|
| Layout | `TODO.md`, `README.md`, middleware + zapier dirs, docs tree |
| Architecture | `docs/architecture/overview.md`, `nats-subjects.md` |
| Developer | `docs/developer/debugging.md`, `docs/developer/modules/*.md` |
| Plan | `docs/plans/phase-gates.md` |
## Gate 1 — Debug facility
```bash
npm run gate:1
```
Tests: `verae-zapier-middleware/test/unit/debug*.test.js`
| Check | Requirement |
|-------|-------------|
| Off by default | No output when `DEBUG_VERAE` unset |
| Namespace filter | `auth` does not emit `nats` lines |
| Redaction | Tokens/passwords not present in formatted output |
| Trace | Child spans inherit `traceId` |
## Gate 2 — HTTP shell
```bash
npm run gate:2
```
| Check | Requirement |
|-------|-------------|
| Health | `GET /health` → 200 `{ status: "ok" }` |
| Errors | Thrown `AppError` → JSON `{ error, code }` |
| Config | Reads NATS and debug env keys |
## Gate 3 — Stores
```bash
npm run gate:3
```
| Check | Requirement |
|-------|-------------|
| Tenants | API key maps to tenant |
| Limits | Plan + enterprise contract |
| Webhooks | Tenant isolation |
| Persist | Reload preserves state |
## Gate 4 — Tokens + Verae client
```bash
npm run gate:4
```
| Check | Requirement |
|-------|-------------|
| HMAC | Bad signature rejected |
| Mock job | create → wait → completed |
| HTTP debug | No Authorization values logged |
## Gate 5 — Auth + entitlements
```bash
npm run gate:5
```
| Check | Requirement |
|-------|-------------|
| Me | Valid API key |
| 401 | Invalid key |
| 402 | Over quota |
## Gate 6 — Sync HTTP API (NATS off)
```bash
NATS_ENABLED=false MOCK_VERAE=true npm run gate:6
```
| Check | Requirement |
|-------|-------------|
| Timestamp | 202 + jobId |
| Wait | completed status |
| Verify | boolean valid |
| Webhooks | subscribe stored |
## Gate 7 — NATS infrastructure
```bash
npm run gate:7
```
| Check | Requirement |
|-------|-------------|
| Streams | Created/idempotent ensure |
| Pub/sub | One message round-trip |
| Flag off | App boots without NATS |
## Gate 8 — Workers
```bash
NATS_ENABLED=true MOCK_VERAE=true npm run gate:8
```
| Check | Requirement |
|-------|-------------|
| Watch→event | Terminal event published |
| Webhook | Mock receiver got POST |
| Queue group | No double complete |
## Gate 9 — Wait via NATS
```bash
npm run gate:9
```
| Check | Requirement |
|-------|-------------|
| Success | Wait returns completed |
| Timeout | Returns pending + jobId |
## Gate 10 — Tenancy
```bash
npm run gate:10
```
| Check | Requirement |
|-------|-------------|
| Signup | free + apiKey |
| Enterprise | requires contract |
## Gate 11 — Zapier package
```bash
npm run gate:11
```
| Check | Requirement |
|-------|-------------|
| Auth module | fields + test URL |
| Creates | correct middleware paths |
| Trigger | subscribe shapes |
## Gate 12 — E2E local compose
```bash
npm run gate:12
```
| Check | Requirement |
|-------|-------------|
| Stack | health green |
| Paths | async + wait + hook |
## Gate 13 — Production smoke (opt-in)
```bash
PRODUCTION_SMOKE=1 npm run gate:13
```
Requires real secrets; skipped in default `gate:all`.
## Gate 14 — Human acceptance
Manual checklist in `TODO.md` (not automated).
## Gate 15 — Hardening
Checklist + load notes in `TODO.md`.
## Recording results
After each green gate, update the **Gate log** table in `TODO.md` with date and `pass`.