Review remediation: Lane H1 — HistoryRead raw cap (fable; review fable + paging fuzz) #736

Open
opened 2026-10-22 06:05:18 -04:00 by dohertj2 · 0 comments
Owner

From the 2026-10-21 Fable system review. Findings R0x:ID refer to docs/reviews/2026-10-21/0x-*.md (location, evidence, failure scenario, fix recipe). Plan: docs/superpowers/plans/2026-10-22-review-remediation.md.

Lane H1 — HistoryRead raw cap (fable; review fable + paging fuzz)

Owns: OpcUaServer/HistoryPaging.cs, RawPageLimit.cs, the ServerHistorian options type, and the ReadRawAsync methods of the three *HistorianDataSource.cs files.
Tests: OpcUaServer.Tests (paging), Historian.Conformance, the backend *.Tests

  • NumValuesPerNode = 0 ⇒ server page size ServerHistorian:MaxRawValuesPerRead (default 10 000), with a continuation point via the existing RawPageLimit paging. The cap is advertised as HistoryServerCapabilities/MaxReturnDataValues.
  • Backend TOP/LIMIT/max_values are bounded by the same cap (R08:1.1).
  • A paged-vs-unpaged fuzz test: random windows/caps against a wire-faithful fake for each backend, where the concatenated pages equal the unpaged truth, with boundary ties.

Lane gate: the fuzz runs 10k iterations green. The Wave 4 SqlServer/QuestDb fixture gate reads a year window at N=0 and gets pages of ≤ 10k with a CP, and heap stays < 500 MB.

From the 2026-10-21 Fable system review. Findings `R0x:ID` refer to `docs/reviews/2026-10-21/0x-*.md` (location, evidence, failure scenario, fix recipe). Plan: `docs/superpowers/plans/2026-10-22-review-remediation.md`. ### Lane H1 — HistoryRead raw cap (fable; review fable + paging fuzz) **Owns:** `OpcUaServer/HistoryPaging.cs`, `RawPageLimit.cs`, the `ServerHistorian` options type, and the `ReadRawAsync` methods of the three `*HistorianDataSource.cs` files. **Tests:** `OpcUaServer.Tests` (paging), `Historian.Conformance`, the backend `*.Tests` - `NumValuesPerNode = 0` ⇒ server page size `ServerHistorian:MaxRawValuesPerRead` (default 10 000), with a continuation point via the existing `RawPageLimit` paging. The cap is advertised as `HistoryServerCapabilities/MaxReturnDataValues`. - Backend `TOP`/`LIMIT`/`max_values` are bounded by the same cap (`R08:1.1`). - A paged-vs-unpaged fuzz test: random windows/caps against a wire-faithful fake for each backend, where the concatenated pages equal the unpaged truth, with boundary ties. **Lane gate:** the fuzz runs 10k iterations green. The Wave 4 SqlServer/QuestDb fixture gate reads a year window at N=0 and gets pages of ≤ 10k with a CP, and heap stays < 500 MB.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#736