Phase 7 Stream G — Address-space integration (NodeSourceKind + walker emits VirtualTag/ScriptedAlarm) #184
Reference in New Issue
Block a user
Delete Branch "phase-7-stream-g-addressspace-integration"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Per ADR-002, adds the
Driver/Virtual/ScriptedAlarmdiscriminator toDriverAttributeInfoso theDriverNodeManagerdispatch layer can routeRead/Write/Subscribeto the right runtime subsystem — drivers (unchanged),VirtualTagEngine(Phase 7 Stream B), orScriptedAlarmEngine(Phase 7 Stream C). All existing call sites keep working because every new parameter defaults.Changes
NodeSourceKindenum added toCore.Abstractions—Driver=0/Virtual=1/ScriptedAlarm=2.DriverAttributeInfogainsSource/VirtualTagId/ScriptedAlarmIdparameters; defaults preserve existing driver call sites.EquipmentNamespaceContentgains optionalVirtualTags+ScriptedAlarmscollections.EquipmentNodeWalkeremits:Source=Virtual,VirtualTagIdset,Historizeflag honored from the DB row.Source=ScriptedAlarm,ScriptedAlarmIdset,IsAlarm=true(triggers the node-manager's AlarmConditionState materialization path that Galaxy + AB CIP ALMD already use).Tests — 13/13 in
EquipmentNodeWalkerTests(5 new)Source=Virtual+VirtualTagId+HistorizeflagSource=ScriptedAlarm+IsAlarm=true+Booleandata typeVirtualTags/ScriptedAlarmscollections safe (back-compat for non-Phase-7 callers)Source=Driver(pins the no-discriminator-regression contract)Full solution builds clean.
Next (Stream G follow-up)
DriverNodeManagerdispatch —switch (attr.Source)routingRead/Write/SubscribetoIVirtualTagSource(Stream B) orIScriptedAlarmSource(Stream C) instead of the driverSealedBootstrapcomposition — load VirtualTag + ScriptedAlarm rows alongside existing Tag rows, hand to the walker + enginesPer ADR-002, adds the Driver/Virtual/ScriptedAlarm discriminator to DriverAttributeInfo so the DriverNodeManager's dispatch layer can route Read/Write/Subscribe to the right runtime subsystem — drivers (unchanged), VirtualTagEngine (Phase 7 Stream B), or ScriptedAlarmEngine (Phase 7 Stream C). ## Changes - NodeSourceKind enum added to Core.Abstractions (Driver=0/Virtual=1/ScriptedAlarm=2). - DriverAttributeInfo gains Source / VirtualTagId / ScriptedAlarmId parameters — all default so existing call sites (every driver) compile unchanged. - EquipmentNamespaceContent gains VirtualTags + ScriptedAlarms optional collections. - EquipmentNodeWalker emits: - Virtual-tag variables — Source=Virtual, VirtualTagId set, Historize flag honored - Scripted-alarm variables — Source=ScriptedAlarm, ScriptedAlarmId set, IsAlarm=true (triggers node-manager AlarmConditionState materialization) - Skips disabled virtual tags + scripted alarms ## Tests — 13/13 in EquipmentNodeWalkerTests (5 new) - Virtual-tag variables carry Source=Virtual + VirtualTagId + Historize flag - Scripted-alarm variables carry Source=ScriptedAlarm + IsAlarm=true + Boolean type - Disabled rows skipped - Null VirtualTags/ScriptedAlarms collections safe (back-compat for non-Phase-7 callers) - Driver tags default Source=Driver (ensures no discriminator regression) ## Next Stream G follow-up: DriverNodeManager dispatch (Read/Write/Subscribe routing by NodeSourceKind), SealedBootstrap wiring of VirtualTagEngine + ScriptedAlarmEngine, end-to-end integration test.