docs(index): OtOpcUa #796/#797/#798/#806 history — #797 scripted-alarm equipment-scope authorization

This commit is contained in:
Joseph Doherty
2026-11-10 22:31:37 -05:00
parent ed122145ed
commit 2dabb07a59
@@ -410,3 +410,9 @@ AddRoute of the dev Mac (`oee-tagdump-mac`, `10.181.206.245.1.1`) on the two tes
- **2026-11-10 SDK1 terminal server ownership repaired independently on master `efb9197a` (lmxopcua#807 closed).** Investigation for #799 found the old host stopped the application but omitted the SDK server's terminal Dispose. Exact original1.5.378.182 publications show five server-graph weak targets survive normal stop; one separately gated public Dispose releases all five (timers7→2), without rewriting the original failed diagnostic. Master now guarantees terminal server disposal, elects one cleanup owner and makes repeated/concurrent Dispose callers await shared completion; new startup after disposal is rejected. Five causal REDs became five GREENs; owning server suite1,032passed/0failed/1existing skip and whole solution Release0warnings/errors. Astra verified source, raw TRX, hashes and security/same-PKI two-boot checks. Consumer impact is bounded cleanup on in-process host replacement; namespaces, NodeIds, API-key/ACL behavior and certificate identity are unchanged. This does not claim general concurrent async Start/Dispose support. Frozen83ed880e publications and aggregate oracles remain unchanged; no new RSS denominator or #799/G4 acceptance was adopted. SDK2 remains separate on draftPR#802 and under release HOLD; this master repair does not merge or deploy SDK2. Candidate shared-completion/pre-adoption ownership refinements and native import attribution remain under separate review.
- **2026-11-10 OPC UA SDK2 #799 follow-up (draft PR #802; release HOLD).** The Astra-reviewed, tracked Linux ARM64 diagnostic at `b18f9723` (.NET 10.0.14, OPC UA SDK 2.0.1, HistorianGateway Client/Contracts 1.0.0) completed 7,201.014 seconds, 1,937 cycles and 484 restarts. No cold cap tripped; peak quiescent RSS was 338.99 MiB, 4.20 MiB below the unchanged cap, with late RSS fit +0.194 MiB/hour and zero quiescent PKI descriptors. Shutdown/container cleanup verified. This one run has `acceptance=false` and preserves the prior cold failures. Matched performance and the macOS native import retention remain unresolved; Windows/live gates remain separate. No SDK2 master merge, deployment, or change to ScadaBridge's consumer contract.
- **2026-11-11 issue batch #796/#797/#798/#806 resolved (master `308b1b3b`, on top of the SDK 2.0.1 merge `b36e688f`).** Pushed and closed. Follow-ups #808–#814.
- **#797 — ScadaBridge-visible authorization change (ACL on only).** Scripted-alarm Part 9 commands now authorize at the OWNING EQUIPMENT: a live condition→EquipmentId binding in the node manager, checked against the authority generation's `EquipmentScopePaths` + `ScriptedAlarmOwners`, per call, uncached. Equipment/Line/Area grants now permit Ack/Confirm/AddComment/Shelve/Enable/Disable on that equipment's scripted alarms; sibling-equipment and tag grants are denied. **Fail-closed even for Cluster grants** on unbound/replaced/undeployed/line-less owners (previously allowed via the realm root). No wire change: opaque NodeIds and `AlarmCommand.AlarmId` unchanged; native alarms (RawPath) and ACL-off unchanged. An independent review's moved-alarm stale-binding window was closed in `4620e542`. ⚠️ Narrow principals still cannot obtain the EventId Ack/Confirm/AddComment need (UNS folders/condition children split opaque ids for Read/Browse/Subscribe/Server-object events) — #808; until then ScadaBridge keys need a Cluster or UNS-namespace grant to ack.
- **#796** test-oracle only (1.5.378.182 PercentGood counted Uncertain as Good); HistoryRead unaffected. **#809 (owner decision):** live AggregateFilter PercentGood/DurationGood still count Uncertain as Good, unlike HistoryRead — ScadaBridge uses neither.
- **#806** AdminUI OPC UA browser keeps the configured host/port behind NAT (shared `OpcUaEndpointUrlRewriter` with the runtime driver); live-gated on docker-dev.
- **#798** ScriptWorker shadow test made causal (barrier, not stopwatch). CLAUDE.md corrected: `Scripting:Runner` Shadow is implemented.