Apariencia
Runbooks operativos
Procedimientos para operar la infra. Ningún secreto va acá — las credenciales viven en el env de Convex / Epinio.
Deploy
bash
npm run deployHace, en orden:
- Convex backend —
npx convex codegen --typecheck=enable(FATAL si falla). - Slash commands —
npx convex run register:run(re-registra, hash-guarded; no-op si no cambió). - Web → Epinio —
epinio push --name aliens-panel --path web, sólo siweb/cambió (hash vs.last-web-deploy). - Changelog — postea el bloque
[Unreleased]del CHANGELOG al webhook y lo sella bajo la fecha.
Flags: --web fuerza el push web · --no-web lo salta · --seed-web sólo registra el hash actual.
Verificar / correr funciones Convex
bash
npx convex dev --once # codegen + push a LIVE
npx convex run <module>:<fn> '<json>' # correr una función (incl. internal)
npx convex env get|set <KEY> [val] # leer/escribir env del deployment
npx convex logs # logs en vivoKill-switch
- Discord:
/halt(operador) → cierra todo lo abierto + seteasettings.tradingHalted=true. Es público./resumelo reactiva. - Web: el banner de halt hace lo mismo.
- Automático: si
RISK_DAILY_LOSS_LIMIT_USDestá seteado (off por default) y la pérdida del día ≤ -límite, el monitor cierra todo y setea halt. - Con halt activo, toda apertura queda bloqueada (Discord + web) hasta
/resume.
Habilitar copy-trading auto
Dinero real — doble gate
bash
# 1) Encender el motor en DRY-RUN (no manda órdenes, sólo audita planes)
npx convex env set COPY_AUTO_ENABLED 1
# (COPY_DRY_RUN sin setear = dry-run ON)
# 2) Verificar los planes en el audit
npx convex run state:recentAudit | grep -A4 copy-auto
# → action: copy-auto, params: { events, plans } ← deben tener sentido
# 3) Designar el líder de la casa (si no está)
# En Discord: /leader house account:@StopLoss
npx convex run settings:get | grep houseLeaderAccount
# 4) Recién entonces, ejecutar de verdad
npx convex env set COPY_DRY_RUN 0
# Para apagar:
npx convex env set COPY_DRY_RUN 1 # vuelve a dry-run
npx convex env set COPY_AUTO_ENABLED 0 # apaga el motorTest en vivo (mínimo): con el monitor corriendo (CONVEX_MONITOR_ENABLED=1, poll cada ~20s), abrí una posición pequeña en la cuenta líder y dejala abierta ≥1 ciclo de poll. El motor coloca órdenes proporcionales en las cuentas seguidoras. Verificá en /status, en el feed y en el audit (copy-auto). Recordá: las posiciones ya abiertas no se copian retroactivamente — sólo eventos nuevos del líder.
Worker (Epinio)
bash
epinio push --name aliens-worker --path workerNecesita en el env de Epinio: CONVEX_SITE_URL, WORKER_SECRET (igual al de Convex), DISCORD_BOT_TOKEN, DISCORD_GUILD_ID. Hasta que WORKER_SECRET esté seteado en Convex, /worker/ingest devuelve 503.
Docs site (este sitio)
bash
epinio push --name aliens-docs --path docs-siteBuild VitePress estático servido por un server mínimo en $PORT. Acceso interno opcional con basic-auth: setear DOCS_USER + DOCS_PASS en el env de Epinio (si faltan, el sitio queda abierto en su ruta no listada).
Troubleshooting
| Síntoma | Probable causa |
|---|---|
| El feed no postea / no detecta opens | CONVEX_MONITOR_ENABLED no es 1, o el cron monitor-poll está caído |
| Auto-copy no replica | algún gate off (COPY_AUTO_ENABLED/COPY_DRY_RUN), houseLeaderAccount mal, o no hay subs activas |
| Slash commands desactualizados en Discord | correr npx convex run register:run (o cambiar /symbols los re-registra) |
ORDER_NOT_FOUND en cancel/lookup | un id se redondeó — debe tratarse como string |
| Cierre falla en cuenta SEPARATED | usar closePositions, no el reduce-only genérico |
| Sizing 10000× / 7× grande | contractValue debe ser 1; el balance libre se lee de legacy_amount, no amount |