# 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_events` w 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-api` do odczytu control-plane ## Obiekty bazy Wymagane są trzy tabele: ### `bot_config` Desired state bota: - `name` - `market_name` - `market_type` - `mode` - `kill_switch` - `params` ### `bot_state` Heartbeat i ostatni stan runtime: - `last_heartbeat_at` - `last_action_at` - `last_error` - `state` - `updated_at` ### `bot_events` Append-only audit log: - `ts` - `type` - `payload` ## Hasura Hasura musi trackować: - `public.bot_config` - `public.bot_state` - `public.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/bots` - `GET /v1/bots/:id` - `GET /v1/bots/:id/state` - `GET /v1/bots/:id/events` ## Kryterium done Po wdrożeniu staging powinien spełniać: 1. Hasura zna `bot_config`, `bot_state`, `bot_events`. 2. `trade-api /v1/bots` zwraca `200` bez fallbacku `bot_control_plane_schema_missing`. 3. 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ć: 1. seed `bot_config` dla `SOL-PERP observer` 2. uruchomienie `bot-observer` 3. podgląd realnego stanu w UI ## Seed `SOL-PERP observer` Minimalny seed dla pierwszego observera: ```json { "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`: ```bash 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 ```