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.
189 lines
3.8 KiB
Markdown
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/apps/zapier
|
|
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`.
|