From 3cfd48e01621dba73cf6195051c8752984790f12 Mon Sep 17 00:00:00 2001 From: philipp Date: Mon, 18 May 2026 14:15:02 +0200 Subject: [PATCH] Wire dashboard request limit clearing Proof: node --test test/operator-dashboard-app-static.test.mjs verifies dashboard controls forward nullable request limit fields. Assumptions: operator-approved DB config updates may clear request_max_notional and request_max_slippage_bps by sending null through the dashboard control API. Still fake: request settlement truth still depends on inventory-delta attribution instead of venue-native terminal fill events. --- src/apps/operator-dashboard.mjs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/apps/operator-dashboard.mjs b/src/apps/operator-dashboard.mjs index 26047b9..ef4c6d3 100644 --- a/src/apps/operator-dashboard.mjs +++ b/src/apps/operator-dashboard.mjs @@ -627,6 +627,9 @@ async function invokeControl(control, body) { pairId: body.pair_id || body.pair, edgeBps: Number(body.edge_bps), maxNotional: body.max_notional, + requestDefaultNotional: bodyField(body, 'request_default_notional', 'requestDefaultNotional'), + requestMaxNotional: bodyField(body, 'request_max_notional', 'requestMaxNotional'), + requestMaxSlippageBps: bodyField(body, 'request_max_slippage_bps', 'requestMaxSlippageBps'), changedBy: body.changed_by || 'operator', reason: body.reason || 'dashboard pair strategy config update', }); @@ -653,6 +656,9 @@ async function invokeControl(control, body) { mode: body.mode, edgeBps: body.edge_bps, maxNotional: body.max_notional, + requestDefaultNotional: bodyField(body, 'request_default_notional', 'requestDefaultNotional'), + requestMaxNotional: bodyField(body, 'request_max_notional', 'requestMaxNotional'), + requestMaxSlippageBps: bodyField(body, 'request_max_slippage_bps', 'requestMaxSlippageBps'), changedBy: body.changed_by || 'operator', reason: body.reason || 'dashboard pair mode update', }); @@ -693,6 +699,12 @@ function lookupServiceBaseUrl(serviceName) { return service.base_url; } +function bodyField(body, snakeKey, camelKey) { + if (Object.hasOwn(body || {}, snakeKey)) return body[snakeKey]; + if (Object.hasOwn(body || {}, camelKey)) return body[camelKey]; + return undefined; +} + function buildRuntimeConfig(tradingConfig) { return { ...config,