feat(streaming): carry AckTime on DebugAlarmStateDto (21) (ScadaBridge#84)

The live AlarmStateUpdate already carried ack_time (24) but the Debug View
snapshot DTO did not, so snapshot-seeded alarm rows showed a null ack time
until the next live update. Additive google.protobuf.Timestamp ack_time = 21
(absent => null, including from a pre-#84 site), vendored C# regenerated with
docker/regen-proto.sh sitecommand, mapped both ways in SiteCommandDtoMapper.
The native golden sample now sets AckTime (the computed one leaves it null),
so the round-trip golden pins both the present and the absent decode.

Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
This commit is contained in:
Joseph Doherty
2026-11-09 12:45:21 -05:00
parent 03de3dcc14
commit d36825633b
5 changed files with 282 additions and 210 deletions
@@ -85,6 +85,11 @@ public record AlarmStateChanged(
/// null while a native condition is unacknowledged; cleared on re-raise, because a
/// re-raise transition carries <c>Acknowledged = false</c>.
/// </para>
///
/// <para>
/// On the wire: <c>AlarmStateUpdate</c> field 24 (live stream) and
/// <c>DebugAlarmStateDto</c> field 21 (debug snapshot, Gitea #84) — absent decodes to null.
/// </para>
/// </summary>
public DateTimeOffset? AckTime { get; init; }