diff --git a/.claude/skills/sister-project-history/otopcua.md b/.claude/skills/sister-project-history/otopcua.md index fa923ea..24a8a76 100644 --- a/.claude/skills/sister-project-history/otopcua.md +++ b/.claude/skills/sister-project-history/otopcua.md @@ -278,3 +278,17 @@ AddRoute of the dev Mac (`oee-tagdump-mac`, `10.181.206.245.1.1`) on the two tes - **Follow-ups:** #681 (Gateway per-sample aggregates from raw), #682 (advertise per-backend aggregates), #683 (QuestDB data-range lookup cost), #684 (Average/Min/Max include Uncertain). - **ScadaBridge impact:** none — it issues no processed history reads. +- **2026-10-12 batch #681–#684 (OtOpcUa `70fb1f1f`).** #682/#683/#684 closed; #681 open only for the live AVEVA leg + (VPN). Live gate 9 passed on docker-dev (both centrals); its one defect (a SqlServer plan cliff) was fixed before push. + - **#681 (Gateway):** the ten per-sample aggregates (incl. Average, Count) are back, computed from raw AVEVA reads by + the shared SQL-backend evaluator — same semantics as SqlServer/QuestDB. ⚠️ Min/Max now come from raw (were AVEVA + modes); reads are capped by `MaxTimeWeightedRawRows`. Every gateway stream is drained — an abandoned stream evicts + the gateway's shared historian session (historiangw#26). + - **#682:** `HistoryServerCapabilities/AggregateFunctions` lists only the backend's aggregates (SqlServer/QuestDB + 17, Gateway 12, none without a historian); `ServerCapabilities/AggregateFunctions` keeps the SDK's 37. ⚠️ No + historian ⇒ processed reads `BadAggregateNotSupported` (was `GoodNoData`). + - **#683:** QuestDB `tag` SYMBOL indexed (added to existing tables at boot); SqlServer Start/End via a FORCESEEK PK + join-back (1 d @ 1 min 60 s timeout → 0.13 s on a long-history tag). + - **#684:** ⚠️ Average/Min/Max/Range/*ActualTime use Good samples only (Part 13); Uncertain values beyond the Good + extreme make Min/Max `Uncertain_DataSubNormal`. + - **ScadaBridge impact:** none — no processed history reads.