fix(code-review): resolve Batch 2 open findings (AbCip, AbLegacy, Galaxy, FOCAS)
- Driver.AbCip.Contracts-001: parse 'writable' from TagConfig JSON (default true) instead of hardcoding - Driver.AbCip.Contracts-002/-003: Dt type comment; drop dead [Display]/[Range] annotations - Driver.AbCip.Contracts-004: dedicated AbCipEquipmentTagParser test class (+15) - Driver.AbCip-017: document Tick severity Low-fallback on Bad severity read - Driver.AbLegacy.Contracts-002/-003/-004: isArray-scalar remarks (+tests), MaxTagBytes/ForFamily docs - Driver.Galaxy.Browser-003 + Driver.Galaxy.Contracts-003: extract ResolveApiKey -> GalaxySecretRef (dedup) - Driver.Galaxy-019: cache buffered-interval only on Ok + ILogger warnings + ClassifyIntervalReply (+tests) - Driver.FOCAS.Contracts-002: thread WriteIdempotent through DiscoverAsync (+test)
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
| Review date | 2026-06-19 |
|
||||
| Commit reviewed | `a19b0f86` |
|
||||
| Status | Reviewed |
|
||||
| Open findings | 3 |
|
||||
| Open findings | 0 |
|
||||
|
||||
## Checklist coverage
|
||||
|
||||
@@ -69,7 +69,7 @@ verified by build (no test project in this module).
|
||||
| Severity | Low |
|
||||
| Category | Documentation & comments |
|
||||
| Location | `src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Contracts/AbLegacyEquipmentTagParser.cs:15` |
|
||||
| Status | Open |
|
||||
| Status | Resolved |
|
||||
|
||||
**Description:** `AbLegacyEquipmentTagParser.TryParse` has an undocumented edge case: when
|
||||
`isArray` is the JSON literal `true` but `arrayLength` is absent, zero, or negative,
|
||||
@@ -85,7 +85,13 @@ without a valid positive `arrayLength` silently produces a scalar (null `ArrayLe
|
||||
Optionally add a unit test to `AbLegacyEquipmentTagTests` covering
|
||||
`isArray:true, arrayLength:0/absent -> null` for regression protection.
|
||||
|
||||
**Resolution:** _(empty until closed)_
|
||||
**Resolution:** Resolved 2026-06-20. Added a `<remarks>` block to `TryParse` in
|
||||
`AbLegacyEquipmentTagParser.cs` documenting that `isArray:true` without a valid positive
|
||||
`arrayLength` silently produces a scalar (`ArrayLength` is `null`), referencing the
|
||||
in-source review C-2 rationale. Added three regression unit tests to
|
||||
`AbLegacyEquipmentTagTests`: `IsArray_true_with_arrayLength_zero_produces_scalar`,
|
||||
`IsArray_true_with_no_arrayLength_produces_scalar`, and
|
||||
`IsArray_true_with_negative_arrayLength_produces_scalar`. Suite: 199 passed, 0 failed.
|
||||
|
||||
---
|
||||
|
||||
@@ -96,7 +102,7 @@ Optionally add a unit test to `AbLegacyEquipmentTagTests` covering
|
||||
| Severity | Low |
|
||||
| Category | OtOpcUa conventions |
|
||||
| Location | `src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Contracts/AbLegacyPlcFamilyProfile.cs:10` |
|
||||
| Status | Open |
|
||||
| Status | Resolved |
|
||||
|
||||
**Description:** `AbLegacyPlcFamilyProfile.MaxTagBytes` is a record constructor parameter
|
||||
populated with distinct values per family (240/232/240/240), but a global search finds zero
|
||||
@@ -111,7 +117,11 @@ produce off-by-one sizing. If reserved for future clamping, the intent is undocu
|
||||
clamping and is not currently enforced, or (b) remove the field and its four initialisers
|
||||
in a dedicated cleanup PR (signature change is out of scope for this review).
|
||||
|
||||
**Resolution:** _(empty until closed)_
|
||||
**Resolution:** Resolved 2026-06-20. Applied option (a): added XML doc on the `MaxTagBytes`
|
||||
constructor parameter in `AbLegacyPlcFamilyProfile.cs` noting it is reserved for future
|
||||
array-length clamping, is NOT currently enforced anywhere in the driver, and that the values
|
||||
are approximate PCCC packet payload caps (not libplctag fragment limits). Field and
|
||||
initialisers unchanged.
|
||||
|
||||
---
|
||||
|
||||
@@ -122,7 +132,7 @@ in a dedicated cleanup PR (signature change is out of scope for this review).
|
||||
| Severity | Low |
|
||||
| Category | Code organization & conventions |
|
||||
| Location | `src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Contracts/AbLegacyPlcFamilyProfile.cs:22` |
|
||||
| Status | Open |
|
||||
| Status | Resolved |
|
||||
|
||||
**Description:** `AbLegacyPlcFamilyProfile.ForFamily` has a catch-all arm `_ => Slc500`
|
||||
that silently returns the SLC 500 profile for any unrecognised `AbLegacyPlcFamily` value
|
||||
@@ -139,4 +149,8 @@ added), or (b) replace `_ => Slc500` with
|
||||
`_ => throw new ArgumentOutOfRangeException(nameof(family), family, null)` and apply it
|
||||
in a cleanup PR. Semantic change -- defer.
|
||||
|
||||
**Resolution:** _(empty until closed)_
|
||||
**Resolution:** Resolved 2026-06-20. Applied option (a): added a `<remarks>` block to the
|
||||
`ForFamily` XML doc in `AbLegacyPlcFamilyProfile.cs` documenting that any unrecognised
|
||||
`family` value silently returns the `Slc500` profile, and noting this is intentional for
|
||||
forward-compatibility with configs authored before a new family enum member is added. The
|
||||
switch body is unchanged.
|
||||
|
||||
Reference in New Issue
Block a user