docs(code-review): close Driver.Calculation-005 + Driver.Calculation.Contracts-001
Both modules go to 0 open findings. -005 records the concurrency guarantee the fix rests on (at most one evaluation at a time: single pump + _evalGate, lock order _evalGate -> _lock), the RED evidence, why the dependency snapshot is taken at trigger time, why the timer path was left on its own scheduler, and the unbounded-queue trade. -001 records that the equivalence is exact (Inspect's pre-checks already establish TryReadTagConfig's) and that its new pin was verified against the pre-refactor code.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
| Review date | 2026-08-10 |
|
||||
| Commit reviewed | `b990adae` |
|
||||
| Status | Reviewed |
|
||||
| Open findings | 1 |
|
||||
| Open findings | 0 |
|
||||
|
||||
## Checklist coverage
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
| Severity | Low |
|
||||
| Category | Performance & resource management |
|
||||
| Location | `src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Calculation.Contracts/CalculationTagDefinitionFactory.cs:107-160` (`Inspect`) |
|
||||
| Status | Open |
|
||||
| Status | Resolved |
|
||||
|
||||
**Description:** `Inspect` parses `reference` with `JsonDocument.Parse` once directly (to check the root
|
||||
kind and read `changeTriggered`/`timerIntervalMs` for the "present-but-discarded" warnings), and then —
|
||||
@@ -52,4 +52,24 @@ and `AdminUI`'s `CalculationTagConfigModel.cs`), so widening it safely is a smal
|
||||
a same-file one-liner, and the current cost is one extra JSON parse per calc tag at deploy time — not a
|
||||
runtime cost.
|
||||
|
||||
**Resolution:** _(Open — Low severity, record-only per review policy; deploy-time only, not a hot path.)_
|
||||
**Resolution (2026-08-10):** Fixed in `73230a42` — and it turned out to be a same-file change after all,
|
||||
because widening the *public* signature was never necessary. The field-by-field read moved into a private
|
||||
`TryReadRoot(JsonElement root, out CalculationTagConfigFields fields)`; `TryReadTagConfig(string, …)` keeps
|
||||
its exact signature (still the entry point `Driver.Calculation`'s `CalculationTagDefinition.TryFromTagConfig`
|
||||
and AdminUI's `CalculationTagConfigModel` consume) and now does nothing but parse, guard `JsonException`, and
|
||||
delegate. `Inspect` calls `TryReadRoot(root, …)` over the root it has already parsed, so the blob is parsed
|
||||
exactly once per gate pass while the scriptId rule stays owned by one authority — the "one authority" design
|
||||
the finding names is preserved, not traded away.
|
||||
|
||||
Equivalence is exact rather than argued: by the time `Inspect` reaches that call it has already returned early
|
||||
for a blank blob, a non-`{`-prefixed blob, and a `JsonException`, and has already established
|
||||
`root.ValueKind == Object` — precisely the three pre-checks `TryReadTagConfig` performs before its own
|
||||
field read, over the same default-options parse of the same string.
|
||||
|
||||
Pinned by a new `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Calculation.Tests/CalculationTagDefinitionFactoryInspectTests.cs`
|
||||
(17 cases: exact warning wording, the rejection-vs-advisory split and its ordering, the blank/non-object
|
||||
pre-filter, and a falsification control that every advisory-drawing blob is still ACCEPTED by
|
||||
`TryReadTagConfig` — the "never stricter than the runtime read" invariant). `Inspect` previously had no
|
||||
coverage outside the DB-backed AdminUI parity corpus, so these were written against the **pre-refactor**
|
||||
code and verified to pass there (production change stashed) before the refactor landed — a pin, not a
|
||||
description of the new code. Behaviour is byte-identical; no accept/reject/advisory outcome changed.
|
||||
|
||||
Reference in New Issue
Block a user