Skip to content

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 deploy

Hace, en orden:

  1. Convex backendnpx convex codegen --typecheck=enable (FATAL si falla).
  2. Slash commandsnpx convex run register:run (re-registra, hash-guarded; no-op si no cambió).
  3. Web → Epinioepinio push --name aliens-panel --path web, sólo si web/ cambió (hash vs .last-web-deploy).
  4. 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 vivo

Kill-switch

  • Discord: /halt (operador) → cierra todo lo abierto + setea settings.tradingHalted=true. Es público. /resume lo reactiva.
  • Web: el banner de halt hace lo mismo.
  • Automático: si RISK_DAILY_LOSS_LIMIT_USD está 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 motor

Test 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 worker

Necesita 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-site

Build 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íntomaProbable causa
El feed no postea / no detecta opensCONVEX_MONITOR_ENABLED no es 1, o el cron monitor-poll está caído
Auto-copy no replicaalgún gate off (COPY_AUTO_ENABLED/COPY_DRY_RUN), houseLeaderAccount mal, o no hay subs activas
Slash commands desactualizados en Discordcorrer npx convex run register:run (o cambiar /symbols los re-registra)
ORDER_NOT_FOUND en cancel/lookupun id se redondeó — debe tratarse como string
Cierre falla en cuenta SEPARATEDusar closePositions, no el reduce-only genérico
Sizing 10000× / 7× grandecontractValue debe ser 1; el balance libre se lee de legacy_amount, no amount