fix(historian): record the real status code and typed values; backend-supported kinds gate capture

The recorder now appends the typed HistorianValue and the mux's own StatusCode instead of a
double + hard-coded Good, and drops any kind not in the backend's SupportedKinds (resolved
optionally from IHistorianBackendProvider; absent => {Double, Int64, Boolean}, today's behaviour).
RecorderStatus.DroppedNonNumeric -> DroppedUnsupportedKind; GoodQuality const removed; stale
"mux carries no quality" remarks rewritten (comms-loss node stamps are not historized).

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
Joseph Doherty
2026-10-09 12:49:05 -04:00
parent ff7c6c531a
commit 04b882f5c6
5 changed files with 326 additions and 54 deletions
@@ -509,7 +509,11 @@ public static class ServiceCollectionExtensions
maxWriteAttempts: continuousOptions.MaxWriteAttempts,
// Bounded-parallel per-tag drain: the groups in one pass are independent
// gateway round-trips, so a sequential pass costs `tags × latency`.
drainConcurrency: continuousOptions.DrainConcurrency),
drainConcurrency: continuousOptions.DrainConcurrency,
// The backend states which value kinds it can store; the recorder drops the
// rest at capture. No provider registered ⇒ null ⇒ the recorder's numeric
// default {Double, Int64, Boolean} (the gateway's historic behaviour).
supportedKinds: resolver.GetService<IHistorianBackendProvider>()?.SupportedKinds),
ContinuousHistorizationRecorderActorName);
registry.Register<ContinuousHistorizationRecorderKey>(continuousRecorder);
}