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/); });