learning_ai_invt_trdg/backend/pre-deploy.md

143 lines
3.8 KiB
Markdown

# Pre-Deploy Validation
## Contract
Running `npm run check` guarantees:
**Build succeeds** - TypeScript compilation passes with no errors
**Security checks pass** - Schema, RLS, secrets, guards, tenant isolation verified
**Lifecycle checks pass** - Trade executor, lifecycle, order sync, persistence, failure injection, WebSocket contract verified
**Does NOT guarantee**:
- Unit test coverage (no unit tests configured)
- Runtime behavior
- Database connectivity
- External API availability
---
## Pre-Deploy Command
```bash
npm run check
```
**What it runs**:
1. `npm run build` - TypeScript compilation
2. `npm run lint` - Security checks (schema, RLS, secrets, guards, tenant)
3. `npm run format` - Lifecycle checks (executor, sync, persistence, injection, WebSocket)
---
## Individual Check Commands
### Build Check
```bash
npm run build
```
**Pass criteria**: TypeScript compiles with 0 errors
**Fail criteria**: Any TypeScript error
### Security Checks (Lint)
```bash
npm run lint
```
**Runs**:
- `check:schema-contract` - Database schema matches code expectations
- `check:rls-policies` - Row-level security policies are correct
- `check:secret-hygiene` - No secrets in code, env vars configured
- `check:security-guards` - Auth guards in place
- `check:tenant-isolation` - Multi-tenant data isolation verified
**Pass criteria**: All 5 checks pass
**Fail criteria**: Any check fails
### Lifecycle Checks (Format)
```bash
npm run format
```
**Runs**:
- `check:trade-executor-lifecycle` - Trade execution flow works
- `check:lifecycle-regressions` - No regressions in trade lifecycle
- `check:order-sync-regressions` - Order status sync works
- `check:supabase-order-persistence-regressions` - Orders persist correctly
- `check:failure-injection` - System handles failures gracefully
- `check:websocket-contract` - WebSocket events match contract
**Pass criteria**: All 6 checks pass
**Fail criteria**: Any check fails
---
## Pass/Fail Rules
### ✅ SAFE TO DEPLOY
All of the following must be true:
- `npm run build` exits with code 0
- `npm run lint` exits with code 0
- `npm run format` exits with code 0
### ❌ DO NOT DEPLOY
If any of the following are true:
- `npm run build` fails (TypeScript errors)
- `npm run lint` fails (security check failed)
- `npm run format` fails (lifecycle check failed)
---
## Current Issues (Must Fix Before Deploy)
⚠️ **Build is currently failing**:
```
src/scripts/verifyWebsocketContract.ts:83:5 - error TS2741:
Property 'health' is missing in type 'BotState'
```
**Action required**: Fix TypeScript error in `verifyWebsocketContract.ts` before deploying
---
## Quick Reference
| Command | Purpose | Time | Critical |
|---------|---------|------|----------|
| `npm run build` | Compile TypeScript | ~10s | YES |
| `npm run lint` | Security checks | ~30s | YES |
| `npm run format` | Lifecycle checks | ~45s | YES |
| `npm run check` | All checks | ~90s | YES |
---
## Troubleshooting
### Build fails
- Check TypeScript errors in output
- Fix type errors in code
- Ensure all imports are correct
### Lint fails
- Check which security check failed
- Review error output
- Fix schema/RLS/secret/guard/tenant issue
### Format fails
- Check which lifecycle check failed
- Review error output
- Fix trade executor/sync/persistence issue
---
## Notes
- **No unit tests**: This project uses integration-style checks instead of unit tests
- **Checks are mandatory**: All checks must pass before deploy
- **No shortcuts**: Do not skip checks or deploy with failures
- **Independent**: This project's checks are independent of the frontend
---
## Related
- Frontend pre-deploy: `../bytelyst-trading-dashboard-web/docs/pre-deploy.md`
- Deployment script: `deploy.ps1`