docs(r2-03): record execution deviations (T7 stress config, test-run scope)
v2-ci / build (pull_request) Successful in 3m55s
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (pull_request) Failing after 4m14s
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (pull_request) Failing after 1m44s
v2-ci / unit-tests (pull_request) Failing after 9m13s

This commit is contained in:
Joseph Doherty
2026-07-13 10:18:40 -04:00
parent 534e03bc74
commit 6bb91e8d1f
@@ -673,3 +673,30 @@ T4, T5, T8, T10 ──► T11 (sweep + docs) ──► T12 (live /run gate)
estimate for action item #3. **Overall risk:** Low-Medium, concentrated in S13's deliberate behavior
change (nodes that used to freeze Good now go Bad — the point of the fix) and the one inverted legacy
test expectation, both explicitly task-tracked.
## Execution deviations (R2-03)
Executed on branch `r2/03-vt-failure-quality` off master `1676c8f4` (not `f6eaa267` — the plan's verified
tree; `1676c8f4` is the current master and includes the round-2 plan/docs merge, so the code anchors are
unchanged). Deviations, all reversible:
- **T7 stress-test config retuned for a reliable RED on fast hardware.** The plan's prescribed shape
(single loop × 300 sequential evaluations racing a back-to-back `Thread.Yield` clear loop) did **not**
reproduce the ObjectDisposedException on this dev machine (arm64 macOS, many idle cores → the
fetch→Task.Run-hop→disposed-guard window is sub-microsecond and the Task.Run body dispatches instantly).
Escalating to a back-to-back clear loop instead compile-swamped the run into a 60 s `WaitAsync`
timeout (every evaluation recompiles under constant clearing) — and a back-to-back clear also risks
double-disposal within one evaluation, which a single retry cannot heal (would make the fix's GREEN
flaky). Final config: **12 concurrent evaluation loops × 400 iterations** (thread-pool pressure widens
the fetch→run window) racing a clear loop that clears then `Thread.SpinWait(4000)` (~tens of µs —
frequent but not back-to-back, so at most one clear lands inside a single evaluation and the warm cache
keeps compile cost bounded). This reproduces reliably (133 disposed-reason failures observed on the
unfixed tree) and is deterministically green post-fix (verified stable across 3 repeat runs). The
assertion was **not** weakened — it still requires every evaluation to succeed with no "disposed" reason.
- **Test-run scope narrowed per controller memory constraint.** A mid-execution controller directive
flagged a ~16 GB/run memory leak in the `*.IntegrationTests` suites and forbade whole-project/whole-
solution `dotnet test`. Verified locally instead: `dotnet build ZB.MOM.WW.OtOpcUa.slnx` clean; the whole
`Runtime.Tests` unit project (372/372); and `RoslynVirtualTagEvaluatorTests` filtered (20/20). **T11**
(full cross-suite sweep) and **T12** (docker-dev live-`/run` gate) are marked `deferred-live` in
`.tasks.json` for the controller's serialized heavy pass — the build + STATUS/tasks bookkeeping portion
of T11 was completed and committed.