From 2dabb07a5960b0521284865a36dfb7585f21ef22 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 10 Nov 2026 22:31:37 -0500 Subject: [PATCH] =?UTF-8?q?docs(index):=20OtOpcUa=20#796/#797/#798/#806=20?= =?UTF-8?q?history=20=E2=80=94=20#797=20scripted-alarm=20equipment-scope?= =?UTF-8?q?=20authorization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/skills/sister-project-history/otopcua.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.claude/skills/sister-project-history/otopcua.md b/.claude/skills/sister-project-history/otopcua.md index 3b69673..498ae72 100644 --- a/.claude/skills/sister-project-history/otopcua.md +++ b/.claude/skills/sister-project-history/otopcua.md @@ -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.