docs(#655): history is server-side only; rewrite OPC-009 and stale driver-history references

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
Joseph Doherty
2026-10-08 23:36:25 -04:00
parent f7f7d948cd
commit 67059e479f
21 changed files with 72 additions and 97 deletions
+7 -11
View File
@@ -10,7 +10,7 @@ projects, the Runtime, and the ControlPlane. Each subsection below gives the
purpose, the key members, and where it is implemented/used.
The capability interfaces a driver opts into (`IReadable`, `IWritable`,
`ITagDiscovery`, `ISubscribable`, `IAlarmSource`, `IHistoryProvider`,
`ITagDiscovery`, `ISubscribable`, `IAlarmSource`,
`IHostConnectivityProbe`, `IPerCallHostResolver`, `IRediscoverable`) are
covered elsewhere and discovered by the server via `is`-checks on the
`IDriver` instance. The interfaces here are the *plumbing* the server uses to
@@ -560,18 +560,14 @@ the interface currently has the contract defined but no implementations.
The server-side historian read surface. Registered with the server's history
router and resolved **per OPC UA namespace**, independent of any driver's
lifecycle. This is distinct from the driver capability `IHistoryProvider`:
- `IHistoryProvider` is a *driver capability* — the server dispatches to it via
the driver instance.
- `IHistorianDataSource` is a *server registration* — the server resolves it by
namespace and calls it directly, so one historian (the HistorianGateway) can
serve many drivers' nodes, and drivers can restart without dropping history
availability.
lifecycle. It is a *server registration*, not a driver capability: drivers carry
no history surface (there is no `IHistoryProvider`; deleted in Gitea #655). The
server resolves the data source by namespace and calls it directly, so one
historian (the HistorianGateway) can serve many drivers' nodes, and drivers can
restart without dropping history availability.
The interface is `: IDisposable` and declares the full read surface as
**required** members (unlike `IHistoryProvider`, where at-time/event reads are
optional default-impl methods so legacy drivers can stay raw-only):
**required** members:
- `ReadRawAsync(fullReference, startUtc, endUtc, maxValuesPerNode, ct)` — raw
historical samples over a time range.