Publieke docs zijn functioneel volledig en canoniek, maar bevatten geen broncode, geen private accountdetails en geen reproduceerbare tuning.
Observability Snapshot Contract (Bot ↔ Website)
DOC_STATUS: SSOT
DOC_ROLE: observability_contract
Contract version: 1.2
Doel: Versioned contract tussen KRAKENBOTMAART (export) en KapitaalBot-Website (BFF). De website leest uitsluitend deze snapshots; geen directe queries op execution-tabellen.
1. Algemeen
- Elk snapshot-bestand bevat een veld
contract_version(string, bijv."1.0"). - Export schrijft naar een configureerbare directory (bijv.
/srv/krakenbot/observability_export/ofOBSERVABILITY_EXPORT_DIR). - Bestandsnamen:
{snapshot_family}.json(bijv.public_status_snapshot.json). - Vertraging (Tier 1): Publieke snapshots gebruiken afgeronde/vertraagde timestamps (bijv. kwartier of uur); geen realtime regime-switch events.
- Aggregatie: Tier 1 alleen geaggregeerde tellers en samenvattingen; geen raw order- of fill-ID’s.
- Publieke veiligheidsgrens: functionele uitleg en observability-uitkomsten zijn publiek; broncode, reproduceerbare tuningwaarden en private accountdetails zijn expliciet uitgesloten.
2. Snapshot-families
| Bestand | Tier | Beschrijving |
|---|---|---|
public_status_snapshot.json | 1 | Runtime health, laatste snapshot_ts, data freshness, run_id, epoch status |
public_regime_snapshot.json | 1 | Actieve regimes (geaggregeerd), regime-switch samenvatting, dominant regime per periode (vertraagd) |
public_strategy_snapshot.json | 1 | Actieve strategieën, strategy count, geaggregeerd |
public_market_snapshot.json | 1 | Market context (ondersteunend): suitability/spread-overzicht; niet de hoofdwaarheid van runtime-beslissingen |
public_trading_snapshot.json | 1 | Route-/decision-centric outcomes: orders/fills counts, reject reasons, why-no-trade, route wins, equity trend (vertraagd), drawdown |
public_demo_trades.json | 1 | Geselecteerde demo trades; lifecycle, exit reason, resultaat |
tier2_execution_snapshot.json | 2 | Order/fill-detail, expected vs realized (alleen bij Tier 2 sessie) |
tier2_latency_snapshot.json | 2 | Submit→ack, fill→exit, histogrammen |
tier2_pnl_snapshot.json | 2 | PnL-detail, exposure |
tier2_safety_snapshot.json | 2 | Symbols per mode, quiet/hard-block |
tier2_data_bundle.json | 2 | Route-/decision-centric observability-bundle: intake/universe, route/no-trade, risk, entry, path/lineage, infra, edgeboard; dual-DB; zie §3.8 |
admin_observability_snapshot.json | 3 | Full observability, raw lifecycle (alleen admin) |
3. Velden per familie (v1.0)
3.1 public_status_snapshot
contract_version: "1.0"exported_at: ISO8601 (UTC)run_id: number | nullrun_started_at: string | null (ISO8601, afgerond voor Tier 1 indien gewenst)run_ended_at: string | nulllatest_epoch_id: number | nullepoch_status: "valid" | "degraded" | nullepoch_run_id: number | null (optioneel).ingest_epochs.run_idvan de laatste epoch-rij; zelfde run als waarepoch_symbol_countbij hoort.epoch_symbol_count: number | nulldata_freshness_secs: number | null (max ts_local vs now, run-consistent over ticker/trade/L2/L3 voor dezelfde status-run).ticker_count,trade_count,l2_count,l3_count: numbers voor één status-run:epoch_run_idwanneer die bestaat, anders de freshest activerun_id.l3_symbol_count: L3-statistiek voor diezelfde status-run. Zo is "L3 availability %" = (l3_symbol_count / epoch_symbol_count) × 100 consistent wanneerepoch_run_idaanwezig is.safety_normal_count,safety_exit_only_count,safety_hard_blocked_count: numbers
3.2 public_regime_snapshot
contract_version,exported_atactive_regimes: array van { regime: string, count: number } (geaggregeerd)dominant_regime: string | nullregime_switches_last_hour: number (afgerond/vertraagd)regime_stability_summary: string (bijv. "stable" | "volatile") (optioneel)
3.3 public_strategy_snapshot
contract_version,exported_atactive_strategies: array van { strategy: string, count: number }strategy_count: number
3.4 public_market_snapshot
contract_version,exported_atrun_id: number | nullpairs: array van { symbol, trade_count, avg_spread_bps, suitability_score } (van pair_summary_24h of L2/trade agg)symbol_count: number
3.5 public_trading_snapshot (route-/decision-centric)
contract_version,exported_attrades_24h_count: number — aantal fill-rijen in DB metCOALESCE(ts_exchange, ts_local)in de laatste 24h (beurstijd waar bekend).orders_24h_count: number — orders metcreated_atin de laatste 24h (werkelijk geplaatste orders in het venster).equity_trend_delayed: array van { ts_bucket: string, value: number } (vertraagd, optioneel)drawdown_pct: number | null (optioneel)recent_orders(optioneel, leeg weggelaten): max 10 nieuwste rijen uitexecution_orders, tijdts_bucket= 15 min afgerond;order_ref= verkorte client-order-ref (suffix), geen volledige exchange ids. Optioneelroute_namevoor explainability.recent_fills(optioneel, leeg weggelaten): max 10 nieuwste rijen uitfills, tijdts_bucket= 15 min afgerond; qty/prijs als string (decimal).top_reject_reasons_last_hour(optioneel): top reject-verdeling voor explainability.why_no_trade_top_last_hour(optioneel): geaggregeerde no-trade oorzaken.route_wins_last_hour(optioneel): geaggregeerde verdeling van route-keuzes.symbol_pnl_day_utc_top_winners/symbol_pnl_day_utc_top_losers(optioneel): top 3 per lopende UTC-dag (realized_pnl).slippage_variance_24h(optioneel): decision-DB, Δ = fill-slippage minus CDVslippage_bps_estimate(funnel →decision_vector_id);notable_examplesmet grootste |Δ|.hold_time_vs_horizon_24h(optioneel): geslotenrealized_pnl24h; median/p90 hold en % boven 1m/3m/15m benchmarks (nog niet per-route horizon).fee_impact_24h(optioneel): som fees uit fills 24h, netto PnL 24h, ratio fees/|net PnL|.
3.6 public_demo_trades
contract_version,exported_atdemo_trades: array van { symbol, side, outcome, result_bps, lifecycle_summary } (geen exacte prijzen/tijden indien disclosure)
3.7 tier2_* en admin_observability_snapshot
- Zelfde
contract_version+exported_at; inhoud uitgebreider (order/fill/latency/PnL/safety detail). Exacte velden in volgende iteratie of in code (Rust structs) gedefinieerd. tier2_pnl_snapshotbevat vanaf nu ook risk-adjusted velden:sharpe_like_24h(optioneel)sortino_like_24h(optioneel)max_drawdown_duration_buckets_24h(optioneel, aantal 15m buckets)
admin_observability_snapshotkan optioneel een compacteedgeboardsamenvatting bevatten:available,snapshot_ts,visible_symbols,positive_edge_symbols,max_expected_net_edge_bps,training_examples_24h,outcomes_24h.
3.8 tier2_data_bundle (contract 1.2+)
-
Doel: één JSON voor KapitaalBot route-/decision-centric observability: geaggregeerde, querybare uitkomsten over ingest- en decision-DB (gecombineerd in export; geen cross-database SQL).
-
contract_version:"1.2"(gebundeld metCONTRACT_VERSIONin bot-export). -
disclosure_policy: object met o.a.kind("delayed"),bucket_minutes,as_of_utc,explanation_nl— opzettelijke vertraging t.o.v. live trading (copytrading-bescherming); geen foutieve latentie. -
source_db:{ "intake_role": "ingest", "decision_role": "decision" }— welk DB-role per subsysteem. -
Subsecties (elk met eigen
source_dbveld"ingest"|"decision"):intake_universe: epoch-criteria, optioneelrun_id+run_symbol_state/raw sums.route_no_trade: funnel stage/decision_code/reason/path_tape tellingen 24h; optioneel shadowblocker_reason-verdeling voor geselecteerde run.risk_capital:symbol_safety_stateper mode;capital-stage funnel count 24h.entry_execution: execution/fill funnel counts 24h; rijen metcorrelation_id24h.path_doctrine:execution_ordersperpath_tape_class24h; funnel met path_tape 24h.infra: recovery requests 24h; laatste watchdogstate; optioneel event-buffer unknown voor run.market_forecast_15m: per symbool afgeleide 15m-forecast uit route/path engine (expected_direction_15m,expected_move_15m_bps,confidence_15m,recommended_route_*,reason_code,soft_gate_score,forecast_basis).
-
edgeboard: RESEARCH-gevoede delayed Edgeboard-samenvatting metavailable, laatste zichtbaresnapshot_ts,visible_rows,visible_symbols,positive_edge_symbols,avg_confidence,avg_expected_net_edge_bps,max_expected_net_edge_bps,training_examples_24h,outcomes_24h, plustop_signals[]metrank,symbol,route_name,horizon_sec,expected_net_edge_bps,confidence,sample_size,boost, en optioneeldominant_reason_code/feature_coverage_class/freshness_msplus pooled-semantics veldenstatistical_gross_bps,expected_gross_move_bps,pooled_semantic_gross_scale. -
Belangrijk:
market_forecast_15mis een afgeleide soft signal (ranking/weging), geen harde prijsvoorspelling of hard execution-block. -
Belangrijk:
edgeboardis eveneens read-only ranking observability. Het toont welke delayed RESEARCH-snapshots live blend zouden voeden; het is geen directe order- of gate-truth. -
Belangrijk: publieke fields blijven bewust op explainabilityniveau en bevatten geen reproduceerbare fine-tuning.
4. Vertraging en aggregatieregels (Tier 1)
- Timestamps: Afronden naar 15 min of 1 uur voor public snapshots.
- Regime-switch: Geen realtime event feed; alleen aantal per periode en dominante regimes.
- Strategy/regime counts: Alleen tellers; Tier 1 mag wel samengevatte laatste orders/fills tonen (
recent_orders/recent_fills) zoals hierboven, geen realtime feed.
5. Backward compatibility
- Nieuwe velden: optioneel toevoegen zonder contract_version te bumpen.
- Breaking changes: contract_version verhogen (bijv. 1.1); documenteer in dit bestand.
- Website kan meerdere versies ondersteunen tijdens overgang.