diff --git a/archreview/plans/R2-03-vt-failure-quality-plan.md b/archreview/plans/R2-03-vt-failure-quality-plan.md index 44421932..506e74ea 100644 --- a/archreview/plans/R2-03-vt-failure-quality-plan.md +++ b/archreview/plans/R2-03-vt-failure-quality-plan.md @@ -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.