docs(plans): tasks.json sync

This commit is contained in:
Joseph Doherty
2026-10-07 17:46:19 -04:00
parent 52670447ca
commit d1ad2600d1
@@ -156,7 +156,7 @@
{
"id": 17,
"subject": "Task 17: AbCip + AbLegacy integration suites on both transpo",
"status": "pending",
"status": "completed",
"description": "**Goal:** Every existing `ab_server` integration test runs once per transport, and the native run is green wherever the libplctag run is green, against every compose profile.\n\n**Files:**\n- Modify: `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests/AbCipReadSmokeTests.cs` and every other test in that project that constructs `AbCipDriverOptions` (`grep -rln \"new AbCipDriverOptions\" tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests`)\n- Create: `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests/TransportMatrix.cs`\n- Modify: `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.IntegrationTests/AbLegacyReadSmokeTests.cs` and siblings\n- Create: `tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.IntegrationTests/TransportMatrix.cs`\n- Modify: `docs/plans/2026-10-07-native-ab-transport-gate-results.md` (created empty by Task 1; this task fills only its `## ab_server suites (T17)` section)\n\n**Acceptance Criteria:**\n- [ ] `TransportMatrix.Profiles` yields `(profile, transport)` for every profile \u00d7 both transports. The theories switch from `MemberData(nameof(Profiles))` to `MemberData(nameof(TransportMatrix.Profiles), MemberType = typeof(TransportMatrix))`, and options get `Transport = transport`.\n- [ ] **The AbLegacy matrix is its own class** in the AbLegacy integration project, using `AbLegacyTransport`, and it **preserves the existing `AB_LEGACY_COMPOSE_PROFILE` filter** that `AbLegacyReadSmokeTests.Profiles` applies today (`AbLegacyReadSmokeTests.cs:26-35`): it must filter `KnownProfiles.All` by that env var before crossing with transports. The AbCip snippet below does not apply to AbLegacy verbatim (review finding 20).\n- [ ] Run against `10.100.0.35`, one compose profile at a time:\n - AbCip: `controllogix`, `compactlogix`, `micro800`, `guardlogix`.\n - AbLegacy: `slc500`, `micrologix`, `plc5`.\n - **For each profile, the set of passing tests under `Native` \u2287 the set under `Libplctag`.**\n- [ ] Any native-only failure is fixed in the transport task's code (reopen that task's files) and is not skipped. The only allowed exception is the PLC-5 `Unsupported` path from Task 8, marked `Skip = \"PLC-5 framing unverified \u2014 see Task 8\"` **only if** Task 8 set `Plc5Verified = false`.\n- [ ] The results doc records, under its `## ab_server suites (T17)` heading, per profile \u00d7 transport, the pass/fail/skip counts plus the `ab_server` image tag and the commit.\n\n**Verify:** for each profile P (AbCip stack directory as established in Task 4's `Captures/README.md`; AbLegacy at `~/otopcua-ablegacy` with `AB_LEGACY_COMPOSE_PROFILE=P`): `ssh dohertj2@10.100.0.35 'cd <abcip stack dir> && docker compose --profile P up -d'` then `AB_SERVER_ENDPOINT=10.100.0.35:44818 dotnet test tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests --logger \"trx;LogFileName=P.trx\"` \u2192 the Native pass set \u2287 the Libplctag pass set (compare the two trx files with `grep -o 'testName=\"[^\"]*\" .*outcome=\"[^\"]*\"'`).\n\nSteps + code: docs/plans/2026-10-07-native-ab-transport.md \u00a7 Task 17.\n\n```json:metadata\n{\"files\": [\"docs/plans/2026-10-07-native-ab-transport-gate-results.md\", \"tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests/AbCipReadSmokeTests.cs\", \"tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests/TransportMatrix.cs\", \"tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.IntegrationTests/AbLegacyReadSmokeTests.cs\", \"tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.IntegrationTests/TransportMatrix.cs\"], \"verifyCommand\": \"AB_SERVER_ENDPOINT=10.100.0.35:44818 dotnet test tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests --logger \\\"trx;LogFileName=P.trx\\\" && grep -o 'testName=\\\"[^\\\"]*\\\" .*outcome=\\\"[^\\\"]*\\\"'\", \"modelTier\": \"standard\", \"model\": \"sonnet\", \"acceptanceCriteriaCount\": 5}\n```",
"blockedBy": [
15,