Merge fix/c3-worker-residuals: WRK-33 observed command-task wrapper, WRK-32 pre-baseline pump + recency contract documented, WRK-34 Watchdog CommandMethod label

This commit is contained in:
Joseph Doherty
2026-08-20 09:21:42 -04:00
4 changed files with 91 additions and 9 deletions
+24
View File
@@ -317,6 +317,30 @@ whose write workload is effectively fire-and-forget — no consumer reads the
reply's `statuses` — can lower it, or set `0` to skip the wait entirely and
reply on acceptance alone.
**Write-completion correlation is recency-based, not per-call.** MXAccess's
`OnWriteComplete` callback carries no correlation token — only the server/item
handle pair — so `MxAccessCommandExecutor` correlates a completion to a write
by *version*: it snapshots `MxAccessWriteCompletionCache.CurrentVersion` for
the handle as a baseline before the COM call, then reports the first
completion whose version exceeds that baseline as the write's outcome
(`AwaitWriteCompletion`). This is exact for the common case, but if an earlier
write to the same handle times out unconfirmed — its `OnWriteComplete` still
undelivered when the wait gives up — and the caller immediately issues another
write to the same tag, the stale callback can dispatch during the second
write's pump-wait and be reported as *its* outcome. The executor mitigates the
most common instance of this (`CaptureCompletionBaseline`) by running one
`pumpStep()` immediately before capturing the baseline, so a completion already
queued for the handle folds into the baseline instead of being available to
ride the next write's reply; this closes the gap for a callback that arrived
before the new write started, but a callback that MXAccess queues after that
pump step and before the COM call returns (or during the wait itself) is still
indistinguishable from the new write's own completion. Full closure is not
possible without an MXAccess-side correlation token, which does not exist —
this is a property of the COM surface, not a gap this worker introduced (a
native client correlating by handle has the identical ambiguity). The exposure
is bounded: `statuses` is an enrichment field, and `Hresult`/`ProtocolStatus`
stay acceptance-only regardless of which completion (if any) was attributed.
## COM Creation
The MXAccess analysis source at `C:\Users\dohertj2\Desktop\mxaccess` identifies