From 1a071c5b10b822ae6fe4eb5fb7bcbdd95aa9ad29 Mon Sep 17 00:00:00 2001 From: philipp Date: Mon, 18 May 2026 22:05:49 +0200 Subject: [PATCH] Surface relay submission errors in lifecycle Proof: npm test passes 238/238; operator-dashboard static UI test covers Relay response error_message and note rendering; operator-dashboard bundle builds successfully. Assumptions: executor trade_result payloads already persist relay submission error.message and note fields for lifecycle rows, so this change only exposes stored evidence in the expanded dashboard detail. Still fake: venue-native terminal fill ids and realized fee/PnL attribution remain unavailable. --- src/operator-dashboard/static/pages/StrategyPage.jsx | 6 +++++- test/operator-dashboard-ui-static.test.mjs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/operator-dashboard/static/pages/StrategyPage.jsx b/src/operator-dashboard/static/pages/StrategyPage.jsx index 07c66f5..77f4ca6 100644 --- a/src/operator-dashboard/static/pages/StrategyPage.jsx +++ b/src/operator-dashboard/static/pages/StrategyPage.jsx @@ -133,7 +133,11 @@ function LifecycleDetails({ item }) {
{item.execution?.result_code || 'No executor result code stored'}
-
Submitted means the relay accepted the response; it does not prove a trade.
+ {item.execution?.error_message ?
{item.execution.error_message}
: null} + {!item.execution?.error_message && item.execution?.note ?
{item.execution.note}
: null} + {item.execution?.status === 'submitted' ? ( +
Submitted means the relay accepted the response; it does not prove a trade.
+ ) : null}
diff --git a/test/operator-dashboard-ui-static.test.mjs b/test/operator-dashboard-ui-static.test.mjs index f6a6b35..1195700 100644 --- a/test/operator-dashboard-ui-static.test.mjs +++ b/test/operator-dashboard-ui-static.test.mjs @@ -27,6 +27,9 @@ test('strategy page owns consolidated quote lifecycle and successful trade table assert.match(strategySource, /Pause display/); assert.match(strategySource, /Resume display/); assert.match(strategySource, /setDisplayItems\(items \|\| \[\]\)/); + assert.match(strategySource, /item\.execution\?\.error_message/); + assert.match(strategySource, /item\.execution\?\.note/); + assert.match(strategySource, /item\.execution\?\.status === 'submitted'/); assert.match(strategySource, /Submitted means the relay accepted the response; it does not prove a trade\./); assert.doesNotMatch(strategySource, /Actionable|actionable/); });