57 lines
3.8 KiB
Markdown
57 lines
3.8 KiB
Markdown
# Original SDK aggregate oracle
|
|
|
|
This standalone .NET 10 process generates aggregate expectations from the published
|
|
`OPCFoundation.NetStandard.Opc.Ua.Server` **1.5.378.182** package. Its local build and
|
|
package properties isolate it from the application's SDK 2 graph. It is outside the
|
|
solution; never add its baseline SDK assemblies to a candidate test or production process.
|
|
Expectations must come from this original SDK, never from the compatibility calculators.
|
|
|
|
Run from the repository root with a fresh output path:
|
|
|
|
```bash
|
|
dotnet run --project scripts/validation/opcua-aggregate-baseline/Baseline.csproj \
|
|
-c Release -- /tmp/opcua-original-aggregates-new.json
|
|
```
|
|
|
|
An existing output path is refused. The JSON records the original aggregate assembly's
|
|
SHA-256, epoch and processing interval. The expected assembly hash is
|
|
`d8d9706dea577858325730cd89896826ed82f7bfcf9503ccd0260311663a69f4`.
|
|
Output uses compact metadata and data, followed by one vector per line for reviewable diffs.
|
|
|
|
The first **4,144 vectors** retain the original seven datasets and complete grid over 37
|
|
aggregate IDs, forward/reverse reads, stepped/sloped interpolation, uncertain-as-bad and
|
|
incremental/final processing. Their parsed objects and the seven original input datasets
|
|
are unchanged. The request window is epoch +0 through +70 seconds, reversed for reverse
|
|
vectors, with a 20,000 ms processing interval.
|
|
|
|
The next **2,000 focused vectors** avoid expanding every dataset into the complete grid:
|
|
|
|
| Cases | Coverage |
|
|
|---:|---|
|
|
| 1,628 | Eleven numeric datasets across all 37 IDs, both directions and both processing modes: all eight integer widths, Single, Double and mixed-type conversion. Includes narrow limits, Int64/UInt64 values around 2^53 and 2^63 and their full ranges, fractional interpolation, signed zero, nonfinite values and overflow. |
|
|
| 148 | Duplicate timestamp ties across all 37 IDs, both directions and processing modes; nonzero source/server picoseconds, independent server timestamp offsets and an exact source timestamp/picosecond tie. |
|
|
| 224 | Interpolative, TimeAverage/2, Total/2 and PercentGood/Bad over uncertain and sparse data, both directions and processing modes. Four explicit profiles cover PercentDataBad/Good 0/0, 1/99, 50/50 and 100/0, both uncertainty policies and sloped extrapolation. |
|
|
|
|
New vectors use sloped interpolation (`Stepped=false`); their `Configuration` object records
|
|
all five effective aggregate settings. `UseServerCapabilitiesDefaults=false` records the
|
|
resolved configuration passed directly to the calculator. Existing vectors retain their
|
|
original fields: omitted configuration means the vector's uncertainty policy, 100/100
|
|
thresholds, and both extrapolation and server-capability defaults disabled.
|
|
|
|
New samples may carry `SourcePicoseconds`, `ServerPicoseconds` and `ServerOffsetTicks`;
|
|
absent fields mean zero. The server timestamp is epoch + `Seconds` + `ServerOffsetTicks`.
|
|
Samples are sorted stably by `Seconds`, then the whole sequence is reversed for a reverse
|
|
read, preserving a fully specified tie order. `QueueAccepted` records each attempted
|
|
queue result through the point of any exception.
|
|
|
|
Each output retains its CLR type, round-trip value spelling, complete numeric status,
|
|
source/server timestamp ticks, source/server picoseconds, and whether it came from an
|
|
incremental (`PartialRequested=false`) or final (`true`) drain. `Exception` retains the
|
|
exact original exception type and any outputs already emitted. NaN, infinities and signed
|
|
zero are stored as strings so JSON does not change their numeric representation.
|
|
|
|
When importing fresh evidence into the candidate fixture, first compare the original
|
|
4,144 parsed vectors, seven datasets and metadata with the previous oracle. Investigate
|
|
candidate mismatches; do not regenerate expectations from candidate output or adjust
|
|
original exception types to make the comparison pass.
|