merge: close #489 — raw rename rebinds live, fixed by #516's respawn
v2-ci / build (push) Successful in 4m39s
v2-ci / unit-tests (push) Failing after 14m38s

Claude-Session: https://claude.ai/code/session_015p7wGqy3YpZNCpDzTpGMKo
This commit is contained in:
Joseph Doherty
2026-07-31 12:00:17 -04:00
2 changed files with 13 additions and 1 deletions
+7
View File
@@ -32,6 +32,13 @@ points at it — the error names the referencing equipment). Renames return non-
**warnings**: renaming a node changes the RawPath of every historized / UNS-referenced tag
beneath it (its historian tagname / UNS projection path moves).
**A rename rebinds live data on the deploy — no node restart is needed** (Gitea #489, live-gated
2026-07-31 for both a tag rename and a device rename). The mechanism is #516's respawn: a rename
changes the merged `DriverConfig`, and `DriverSpawnPlan.Compute` stops and respawns the driver child
on any `DriverConfig` change, so the driver rebuilds against the new RawPaths and re-subscribes.
⚠️ The flip side is that **a rename reconnects the driver** — briefly dropping every tag on it, not
just the renamed one. That is the accepted cost #516 documents; it is not specific to renames.
## Endpoint → DeviceConfig (the channel/device split)
v3 moves the **connection endpoint** off the driver and onto the **Device** (`DeviceConfig`),
+6 -1
View File
@@ -81,6 +81,11 @@ dedup/02-S13 semantics intact; M1/M2/LOW-3 closed.
renamed tag live (3610→3611 Good); the **absolute** RawPath script literal (`Cval`) now fails **Bad
0x80000000**. (Caveat: a raw-tag rename needs a node recreate/restart to hot-rebind the renamed tag's live
driver value — the pre-existing deploy-THEN-recreate pattern for structural edits.)
> **Superseded 2026-07-31 — the caveat above no longer holds.** #516 turned a `DriverConfig` change into a
> stop-and-respawn of the driver child (`DriverSpawnPlan.Compute`), and a rename changes the merged
> `DriverConfig`, so the child is rebuilt against the new RawPaths and re-subscribes on the same deploy.
> Re-gated live on docker-dev: renaming a tag *and* renaming a device each rebound to live ~1 Hz data with
> the node at `0 restarts`. Issue #489 closed as fixed-by-#516.
7. **Redundancy** — ServiceLevel split **central-1 = 250 / central-2 = 240** (both Good) — the Primary/Secondary
differentiation is intact with the second namespace present; single-emit-per-condition is unit-covered (the
alarm-emit gate is Primary-only).
@@ -113,7 +118,7 @@ dual-namespace + event-delivery), Runtime 377 (+ VT reassert regression), AdminU
historian issue). Proposed shape: a host-driven, node-only `AlarmStateUpdate` re-assert in `OnAlarmsLoaded`
(same safe post-materialise ordering as the VT fix), reusing `_engine.GetState(alarmId)` + `LoadedAlarmIds`,
**never touching the `alerts` topic**.
- Raw-tag rename hot-rebind of the renamed tag's live value without a recreate (today: deploy-THEN-recreate). Filed as issue #489.
- ~~Raw-tag rename hot-rebind of the renamed tag's live value without a recreate (today: deploy-THEN-recreate). Filed as issue #489.~~ **CLOSED 2026-07-31** — fixed as a side effect of #516's config-change respawn; live-re-gated, no code change needed.
- Absolute-path Monaco completion → RawPath (from Batch 3; the `{{equip}}/` completion works). Filed as issue #490.
- Cross-repo (post-merge): ScadaBridge Data-Connection-Layer NodeId/namespace cutover (raw `s=<RawPath>` /
UNS `s=<Area>/<Line>/<Equipment>/<EffectiveName>`, retired `EquipmentNodeIds`) — tracked in the