feat(streaming): carry IsMesReportable on AlarmStateUpdate (25) and DebugAlarmStateDto (20) (ScadaBridge#60)

Central's Debug View live stream and Alarm Summary cache always saw false
because neither wire message had the field. Additive proto fields, vendored
C# regenerated with docker/regen-proto.sh (sitestream + sitecommand), mapped
both ways in StreamRelayActor/SiteStreamGrpcClient and SiteCommandDtoMapper.
The live stream publishes Alarm Actor events, which never carried the flag,
so InstanceActor.HandleAlarmStateChanged now stamps it before retaining and
publishing. A pre-#60 site sends the proto3 default. No UI badge yet.

Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
This commit is contained in:
Joseph Doherty
2026-11-09 12:31:37 -05:00
parent 6bd1fd3072
commit 5310fd0e26
14 changed files with 489 additions and 294 deletions
@@ -95,6 +95,14 @@ field 20, manual `regen-proto.sh`) plus mapper changes. Not needed for the scrip
inbound API, so it is **deferred** (register row) to keep this slice free of wire changes.
Design-time surfaces (template Alarms tab, Instance Configure overrides) DO show the flag.
**Update (Gitea #60, 2026-11-09): the wire half is done.** `AlarmStateUpdate` field 25 and
`DebugAlarmStateDto` field 20 (`is_mes_reportable`) carry the flag, mapped both ways in
`StreamRelayActor`/`SiteStreamGrpcClient` and `SiteCommandDtoMapper`. Because the live stream
publishes Alarm Actor events, `InstanceActor.HandleAlarmStateChanged` now also stamps the flag
before retaining and publishing (the snapshot projection still re-applies it, so retained and
fallback rows agree). A pre-#60 site sends the proto3 default `false`. No central surface renders
a "MES" badge yet — that is a UI decision left for when operators ask for it.
### 2.5 The inbound API method (deployed config, rig)
`AlarmStatus` — the full-filter endpoint from the legacy spec, minus the BTDB machine lookup