diff --git a/docs/deployment/README.md b/docs/deployment/README.md index b20022a..eeebdd7 100644 --- a/docs/deployment/README.md +++ b/docs/deployment/README.md @@ -13,6 +13,9 @@ These templates are deployment-time placeholders for membership-gated commerce. 3. `secretapi-deploy.md` - Backend deployment runbook for membership + governance install APIs. +4. `local-e2e-smoke.md` +- Local launcher + backend smoke sequence before live deployment. + ## Usage 1. Copy templates to environment-specific files. diff --git a/docs/deployment/local-e2e-smoke.md b/docs/deployment/local-e2e-smoke.md new file mode 100644 index 0000000..8082e04 --- /dev/null +++ b/docs/deployment/local-e2e-smoke.md @@ -0,0 +1,49 @@ +# Local E2E Smoke (Launcher + Secret API) + +This smoke path validates wallet intent, membership, member channel, and governance install flow locally before live server wiring. + +## 1) Start Secret API + +```bash +cd "/Users/vsg/Documents/VSG Codex/web/backend/secretapi" +cp .env.example .env.local +go run . +``` + +Default bind is `http://127.0.0.1:8080`. + +## 2) Start Launcher Harness + +```bash +cd "/Users/vsg/Documents/VSG Codex/launcher" +make serve +``` + +Open `http://127.0.0.1:4310`. + +## 3) Run Deterministic Flow + +1. Enter wallet + chain id. +2. Click `Create intent`. +3. Sign typed data in local wallet tooling and paste signature. +4. Click `Verify signature`. +5. Click `Get quote`. +6. Confirm tx hash (local/test hash if RPC verification disabled). +7. Click `Confirm membership tx`. +8. Register member channel and poll events. +9. Ack an event. +10. Request governance install token and check install status. + +## 4) Expected Results + +1. Membership status resolves to `active`. +2. Event polling returns deterministic event envelopes with stable `event_id`. +3. Event ack is idempotent for `event_id + device_id`. +4. Owner role can open support ticket; workspace member is rejected with `owner_role_required`. +5. Governance install token is owner-gated and blocked when availability is parked. + +## 5) Troubleshooting + +1. If CORS fails, set `SECRET_API_ALLOWED_ORIGIN=*` locally. +2. If tx confirmation blocks, set `SECRET_API_CHAIN_RPC_URL=` empty for local non-chain smoke. +3. If member channel returns `membership_inactive`, re-run wallet intent/verify and membership confirm.