docs(ab): hw4 evidence fix round 1 - bit-write gap provenance, README/CLI/fixture docs, libplctag-deletion gap
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
@@ -539,23 +539,23 @@ pages** (controller scope 8 pages, then each of the 15 programs, up to 6 pages f
|
||||
alike; this is evidence only, no code changed.
|
||||
- One empty page (`Program:Auxiliary`, 0 entries) was observed and handled.
|
||||
|
||||
### ab_server PCCC bit-file write (`B3:0/5`): not an ab_server gap (no patch needed)
|
||||
### ab_server PCCC bit-file write (`B3:0/5`): the documented gap does not reproduce (no patch)
|
||||
|
||||
The reported failure `0x803D0000` is `BadNotSupported`. Reproduced with new `AbLegacyBitWriteTests`
|
||||
(writes `B3:0` = 0x0A0A, sets bit 5, clears bit 3, asserts the whole word each time so neighbour bits are proven preserved),
|
||||
local ab_server (libplctag v2.7.0 + patches 0001/0002, built in OrbStack), `AB_LEGACY_ENDPOINT` pinned to a lane-local port:
|
||||
Provenance: `AbLegacy.IntegrationTests/Docker/README.md` ("Bit-file writes on ab_server", May 2026, libplctag + `--plc=SLC500`,
|
||||
before the native transport) recorded `B3:0/5` -> `0x803D0000`. New `AbLegacyBitWriteTests` (writes `B3:0` = 0x0A0A, sets
|
||||
bit 5, clears bit 3, asserts the whole word each time so neighbour bits are proven preserved) against local ab_server
|
||||
(libplctag v2.7.0 + patches 0001/0002, OrbStack, `AB_LEGACY_ENDPOINT` pinned to a lane-local port):
|
||||
|
||||
| Family | Libplctag | Native |
|
||||
|---|---|---|
|
||||
| SLC500 | pass | pass |
|
||||
| MicroLogix | pass | pass |
|
||||
| PLC-5 | pass | `BadNotSupported` (0x803D0000), by design |
|
||||
|
||||
- The driver does a per-parent-word read-modify-write (typed read, then typed write of the word), never a masked CMD 0x0F/FNC
|
||||
0xAB write, so the bit write needs nothing ab_server lacks. (ab_server does implement FNC 0xAB, `handle_slc_rmw_request`, for
|
||||
16-bit elements; the driver simply does not use it.)
|
||||
- The 0x803D0000 is the **native PLC-5 write refusal** (#571, `NativeAbLegacyTagRuntime.WriteRefusal`: all PLC-5 writes are
|
||||
refused before the wire). The test pins it for PLC-5 + Native and requires success everywhere else. Because nothing was broken,
|
||||
there is no fix to revert for a red/green proof; the PLC-5 expectation was the part that failed first (red) when the test
|
||||
wrongly assumed success, which shows the assertions discriminate. No Dockerfile or patch change.
|
||||
| PLC-5 | pass | `BadNotSupported` (0x803D0000) |
|
||||
|
||||
- **Finding:** the originally documented gap does not reproduce on the current fixture and driver; the cause of the original
|
||||
failure is undetermined. No ab_server patch or Dockerfile change is needed. The driver does a per-parent-word read-modify-write
|
||||
(typed read, typed write of the word), not a masked FNC 0xAB write (ab_server does implement 0xAB for 16-bit elements).
|
||||
- The PLC-5 native `0x803D0000` is a **separate, intended** behaviour that merely shares the status code: all native PLC-5
|
||||
writes are refused before the wire (#571, `NativeAbLegacyTagRuntime.WriteRefusal`). The test pins it. It is not the original
|
||||
observation.
|
||||
- No fix, so no revert-to-red proof; the test would fail if the word RMW clobbered neighbour bits.
|
||||
|
||||
Reference in New Issue
Block a user