From 598cb133a8a5471313a1bcf4c04fc52c36828398 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 8 Oct 2026 17:03:14 -0400 Subject: [PATCH] docs(historian): document deferred non-numeric types and UInt16->UInt4 fallback (#600) Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe --- docs/Historian.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/Historian.md b/docs/Historian.md index ae1568b3..5b7fb1c2 100644 --- a/docs/Historian.md +++ b/docs/Historian.md @@ -273,6 +273,22 @@ for this node), which is the signal to check that `ServerHistorian:Enabled=true` > so a HistoryRead on it runs to the full `CallTimeout` (~30 s) before erroring. Auto-provisioning on deploy > keeps freshly-historized tags from hitting that slow path. See the `CallTimeout` row above. +### Deferred types and the UInt16 fallback (#600 item 4) + +Historization is **numeric-analog only** in v1. `HistorianTypeMapper` classifies exactly nine types as +historizable (`Boolean`, `Int16/32/64`, `UInt16/32/64`, `Float32`, `Float64`): + +- **Deferred: `String`, `DateTime`, `Reference`.** The historian's SQL analog write path cannot carry them. + Provisioning skips them (counted in the `skipped=` tally, via `IsHistorizable`), the mapper throws + `NotSupportedException` for them, and `ContinuousHistorizationRecorder` drops their values and counts them + in `DroppedNonNumeric`. A tag authored `isHistorized` with one of these types therefore silently records + nothing; HistoryRead on it returns whatever the historian holds (typically `GoodNoData`). +- **Fallback: `UInt16 -> Uint4`.** The historian's `UInt2` write path is unproven upstream, so UInt16 tags + are provisioned as the wider `UInt4`. Values are unaffected; only the historian-side storage type differs. + (`Boolean -> Int2` is the other fallback, below.) + +Lifting either needs gateway-side support first; neither is scheduled. + ### Boolean historization maps to Int2 (issue #441) `EnsureTags` is contract-documented (HistorianGateway 0.2.0+) as an **upsert** — *"creates or updates