3.2 KiB
Bot Control Plane Staging V1
Ten dokument opisuje minimalny deploy path potrzebny, żeby
SOL-PERP observer był widoczny w stagingowym UI i w
trade-api.
Cel
Zapewnić, że środowisko trade-staging ma:
- fizyczne tabele
bot_config,bot_state,bot_eventsw Postgresie - tracking tych tabel w Hasurze
- możliwość odczytu przez
trade-api
Bez tego frontend może tylko pokazać fallback:
Bot control plane is not deployed here
Zakres V1
V1 nie wdraża jeszcze seedów ani samego procesu observera.
V1 obejmuje tylko:
- schema SQL
- metadata Hasury
- gotowość
trade-apido odczytu control-plane
Obiekty bazy
Wymagane są trzy tabele:
bot_config
Desired state bota:
namemarket_namemarket_typemodekill_switchparams
bot_state
Heartbeat i ostatni stan runtime:
last_heartbeat_atlast_action_atlast_errorstateupdated_at
bot_events
Append-only audit log:
tstypepayload
Hasura
Hasura musi trackować:
public.bot_configpublic.bot_statepublic.bot_events
W V1 nie wymagamy publicznych permissionów do bezpośredniego odczytu
z frontendu, bo panel bota czyta przez trade-api.
Integracja z trade-api
trade-api czyta te tabele przez admin secret Hasury i
wystawia:
GET /v1/botsGET /v1/bots/:idGET /v1/bots/:id/stateGET /v1/bots/:id/events
Kryterium done
Po wdrożeniu staging powinien spełniać:
- Hasura zna
bot_config,bot_state,bot_events. trade-api /v1/botszwraca200bez fallbackubot_control_plane_schema_missing.- Frontend nie pokazuje już komunikatu o braku control-plane z powodu schema gap.
Następny krok po V1
Po tej zmianie można dopiero sensownie zrobić:
- seed
bot_configdlaSOL-PERP observer - uruchomienie
bot-observer - podgląd realnego stanu w UI
Seed SOL-PERP observer
Minimalny seed dla pierwszego observera:
{
"name": "sol-observer",
"market_name": "SOL-PERP",
"market_type": "perp",
"mode": "observe",
"kill_switch": false,
"params": {
"strategy": {
"type": "predictive_observer_v1"
},
"loop": {
"decision_interval_ms": 1000,
"candle_bucket_seconds": 1,
"candles_limit": 64
},
"features": {
"mom_fast_s": 3,
"mom_mid_s": 10,
"mom_slow_s": 30,
"vol_window_s": 30,
"depth_band_bps": 10,
"slippage_size_usd": 500
},
"gates": {
"freshness_max_ms": 800,
"spread_max_bps": 8,
"slippage_max_bps": 12,
"depth_band_min_usd": 3000
},
"sizing": {
"target_notional_usd": 500
},
"decision": {
"threshold": 1.2,
"horizon_s": 60
},
"scoring": {
"weights": {
"mom_fast": 0.9,
"mom_mid": 0.35,
"mom_slow_reversal": 0.55,
"imbalance": 5.0,
"mark_vs_oracle": 0.08,
"spread": 0.15,
"slippage": 0.12
}
}
}
}Po wdrożeniu schema + metadata seed można wstawić przez
trade-api:
curl -sS \
-H 'content-type: application/json' \
-H 'x-admin-secret: YOUR_API_ADMIN_SECRET' \
--data @seed-sol-observer.json \
http://localhost:8787/v1/bots