feat(debugview): DV-1 native-binding linkage on AlarmStateChanged contract chain
Add two additive init-only fields to AlarmStateChanged so the Debug View can
nest live native conditions under their configured source-binding node:
- NativeSourceCanonicalName (binding canonical name, e.g. "Motor1.MotorAlarms")
- IsConfiguredPlaceholder (quiet-binding placeholder flag; default false)
Flow on BOTH cross-process paths:
- Live: proto AlarmStateUpdate fields 22/23 -> StreamRelayActor packs ->
SiteStreamGrpcClient unpacks (regenerated SiteStreamGrpc/Sitestream.cs).
- Snapshot (Newtonsoft): record defaults carry through; no special handling.
NativeAlarmActor.Emit now stamps NativeSourceCanonicalName = _source.CanonicalName.
Additive-only: no existing positional constructor or wire frame changed.
Tests: StreamRelayActorTests round-trips both fields pack->unpack;
NativeAlarmActorTests asserts the emitted event carries the binding canonical name.
This commit is contained in:
@@ -71,4 +71,18 @@ public record AlarmStateChanged(
|
||||
|
||||
/// <summary>Limit/threshold value for native limit alarms (display-only); empty otherwise.</summary>
|
||||
public string LimitValue { get; init; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Canonical name of the native alarm SOURCE BINDING this condition belongs to
|
||||
/// (e.g. "Motor1.MotorAlarms"). Lets the Debug View nest live native conditions
|
||||
/// under their configured binding node. Empty for computed alarms. Additive.
|
||||
/// </summary>
|
||||
public string NativeSourceCanonicalName { get; init; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// True when this row is a placeholder emitted for a CONFIGURED native source
|
||||
/// binding that currently has no active conditions, so the Debug View tree can
|
||||
/// show the binding node as "no active conditions". Additive; default false.
|
||||
/// </summary>
|
||||
public bool IsConfiguredPlaceholder { get; init; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user