test(historian): live gate PASSED on docker-dev (SqlServer backend); CLI prints node-level HistoryUpdate result

Gate: Primary-only typed recording with real status, raw+UNS HistoryRead/Processed parity, HistoryUpdate
insert/duplicate/replace/delete + WriteOperate-only and anonymous denied, failover at 1x, Modbus device loss
stored as BadCommunicationError then a BadNoCommunication outage marker. Gate found the CLI hid the
node-level refusal code (fixed + pinned) and a pre-existing OpcUaClient comms-loss gap (filed separately).
docker-dev compose gains ServerHistorian__Backend / __SqlServer__ConnectionString (default Gateway).

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
Joseph Doherty
2026-10-09 15:14:46 -04:00
parent e2011a653e
commit 5fdf205caa
4 changed files with 168 additions and 0 deletions
@@ -198,6 +198,10 @@ public class HistoryUpdateCommand : CommandBase
}
else
{
// Print the node-level result too: a node the server refuses outright (e.g. BadUserAccessDenied)
// carries its reason HERE with no per-item results, so the table alone shows only "(no result
// returned)" and hides why.
await console.Output.WriteLineAsync($"Node result: {StatusName(outcome.ResultStatus[0])}");
failed |= !StatusCode.IsGood(outcome.ResultStatus[0]);
}