Offline CI retains 417 distinct test-project build warnings #725

Open
opened 2026-10-13 16:03:28 -04:00 by dohertj2 · 11 comments
Owner

Observed baseline

Successful offline CI run 983/job3604, exact head 8828e999c41057ae7b9d84573228ab8caf71fe06, reports 417 distinct diagnostic location/code/message tuples, all under tests/. The log repeats most diagnostics in its build summary; 835 matching warning lines are not 835 distinct warnings. No production-source warning is established by this inventory.

Counts: xUnit1051 371; CS8602 20; xUnit1031 10; CS4014 5; xUnit1030 3; CS0219 2; CS8604 2; NU1510 2; CS0618 1; CS0649 1.

Examples include client CLI cancellation-token diagnostics (AlarmsCommandTests.cs), nullable diagnostics, blocking-task analyzer diagnostics and unawaited-call compiler diagnostics. The warnings do not by themselves prove behavioral bugs or a cause for historical CI failures. Full run983 was green: 14,648 executed tests /573 individual skips /zero failures.

Deduplication check: existing closed #595 covers OTOPCUA0001 capability analyzer suppression, #621 covers production obsolete SDK API migration, and #606 requires TreatWarningsAsErrors for source projects. None records this remaining test-project baseline. Existing #718 historical-run cause remains separate; no common-cause claim.

Acceptance

  • Preserve an exact reproducible baseline by rule/project/location against a committed head; prioritize nullable, unawaited-call and blocking-task sites for semantic review rather than treating every warning as a demonstrated defect.
  • Fix verified defects with meaningful regression coverage. Preserve assertions, intentional deadlines, hermetic/live gates and cancellation behavior; use TestContext cancellation only where it matches the tested contract.
  • Remove obsolete/unused code or dependencies only after confirming their intended test use. Document any necessary narrow suppressions; do not blanket-disable analyzers or introduce broad NoWarn.
  • Establish a reviewed remaining baseline/ratchet with no unexplained additions, and publish local/hosted validation. Keep unresolved rule/project groups explicitly tracked until disposition is verified.

Root inventory evidence: work/lmx-ci-test-warning-baseline.json, extracted from retained authoritative run983 build log. This is a new follow-up, not a blocker for already verified #719 or the approved #721/#722 fixes. No test/source changes are part of filing this issue; implementation needs its own bounded design review.

## Observed baseline Successful offline CI run [983/job3604](https://gitea.dohertylan.com/dohertj2/lmxopcua/actions/runs/983/jobs/3604), exact head `8828e999c41057ae7b9d84573228ab8caf71fe06`, reports **417 distinct diagnostic location/code/message tuples**, all under `tests/`. The log repeats most diagnostics in its build summary; 835 matching warning lines are not 835 distinct warnings. No production-source warning is established by this inventory. Counts: xUnit1051 371; CS8602 20; xUnit1031 10; CS4014 5; xUnit1030 3; CS0219 2; CS8604 2; NU1510 2; CS0618 1; CS0649 1. Examples include client CLI cancellation-token diagnostics (AlarmsCommandTests.cs), nullable diagnostics, blocking-task analyzer diagnostics and unawaited-call compiler diagnostics. The warnings do not by themselves prove behavioral bugs or a cause for historical CI failures. Full run983 was green: 14,648 executed tests /573 individual skips /zero failures. Deduplication check: existing closed #595 covers OTOPCUA0001 capability analyzer suppression, #621 covers production obsolete SDK API migration, and #606 requires TreatWarningsAsErrors for source projects. None records this remaining test-project baseline. Existing #718 historical-run cause remains separate; no common-cause claim. ## Acceptance - [ ] Preserve an exact reproducible baseline by rule/project/location against a committed head; prioritize nullable, unawaited-call and blocking-task sites for semantic review rather than treating every warning as a demonstrated defect. - [ ] Fix verified defects with meaningful regression coverage. Preserve assertions, intentional deadlines, hermetic/live gates and cancellation behavior; use TestContext cancellation only where it matches the tested contract. - [ ] Remove obsolete/unused code or dependencies only after confirming their intended test use. Document any necessary narrow suppressions; do not blanket-disable analyzers or introduce broad NoWarn. - [ ] Establish a reviewed remaining baseline/ratchet with no unexplained additions, and publish local/hosted validation. Keep unresolved rule/project groups explicitly tracked until disposition is verified. Root inventory evidence: `work/lmx-ci-test-warning-baseline.json`, extracted from retained authoritative run983 build log. This is a new follow-up, not a blocker for already verified #719 or the approved #721/#722 fixes. No test/source changes are part of filing this issue; implementation needs its own bounded design review.
Author
Owner

Approved first cleanup is verified and committed locally as 5310a7e07a, tree72fe0ebece70f511161fae0442a87ba01c3d3d54. Exactly five _ = prefixes in four reinitialize test files; root independent diff/byte comparison confirms every other byte preserved. ShouldNotBeNull still runs synchronously; no probe task is awaited at these assertions, no warning suppression or production changes.

All four cache-only restores and project builds passed. Existing fake-client reinitialize tests: AbCip1/1, AbLegacy1/1, FOCAS1/1, TwinCAT1/1, zero failures/skips; root independently parsed original TRX and inspected logs. No CS4014 remains in the affected logs. These four project builds still emit45 other distinct diagnostics (44xUnit1051 plus1xUnit1031). This is bounded verification, not a fresh complete-solution warning baseline.

Local checkout is clean; no push/PR yet. Publication explicitly waits until PR #724 clears its required hosted CI/merge gate, so this work cannot supersede its queued run. #725 remains open for other warning groups. The separately identified fixture teardown gaps are tracked in #726 and unchanged by this batch.

Evidence: work/lmx725-assertion-verification.md, lmx725-assertion-commands.json, lmx725-assertion-root-scope.json, original build/test logs and four TRX files. No solution rerun, dependency upgrade or live calls.

Approved first cleanup is verified and committed locally as 5310a7e07a8b619f9c7d81da6d2ed35f80406d73, tree72fe0ebece70f511161fae0442a87ba01c3d3d54. Exactly five `_ = ` prefixes in four reinitialize test files; root independent diff/byte comparison confirms every other byte preserved. ShouldNotBeNull still runs synchronously; no probe task is awaited at these assertions, no warning suppression or production changes. All four cache-only restores and project builds passed. Existing fake-client reinitialize tests: AbCip1/1, AbLegacy1/1, FOCAS1/1, TwinCAT1/1, zero failures/skips; root independently parsed original TRX and inspected logs. No CS4014 remains in the affected logs. These four project builds still emit45 other distinct diagnostics (44xUnit1051 plus1xUnit1031). This is bounded verification, not a fresh complete-solution warning baseline. Local checkout is clean; no push/PR yet. Publication explicitly waits until PR #724 clears its required hosted CI/merge gate, so this work cannot supersede its queued run. #725 remains open for other warning groups. The separately identified fixture teardown gaps are tracked in #726 and unchanged by this batch. Evidence: work/lmx725-assertion-verification.md, lmx725-assertion-commands.json, lmx725-assertion-root-scope.json, original build/test logs and four TRX files. No solution rerun, dependency upgrade or live calls.
Author
Owner

Additional read-only audit mapped all22 nullable diagnostics from the recorded baseline (20 CS8602,2 CS8604) to current test source:18 nullable child-model accesses after connection,2 SQL skipped-tag reports after initialization, and2 error-string expectations. No actual null failure or production null defect was reproduced. Candidate bounded follow-up: capture ShouldNotBeNull return values and retain every existing behavioral assertion; no blanket null-forgiving/suppression or production contract changes. The read-status test currently completes inline through its synchronous fake/dispatcher; an awaited read would be separate harness behavior and is not included in the candidate assertion cleanup. No nullable edits or new test-pass claims in this audit. The approved five Task-assertion discards remain locally committed5310a7e0; #725 stays open for remaining warning groups.

Additional read-only audit mapped all22 nullable diagnostics from the recorded baseline (20 CS8602,2 CS8604) to current test source:18 nullable child-model accesses after connection,2 SQL skipped-tag reports after initialization, and2 error-string expectations. No actual null failure or production null defect was reproduced. Candidate bounded follow-up: capture ShouldNotBeNull return values and retain every existing behavioral assertion; no blanket null-forgiving/suppression or production contract changes. The read-status test currently completes inline through its synchronous fake/dispatcher; an awaited read would be separate harness behavior and is not included in the candidate assertion cleanup. No nullable edits or new test-pass claims in this audit. The approved five Task-assertion discards remain locally committed5310a7e0; #725 stays open for remaining warning groups.
Author
Owner

Next bounded batch proposed for owner design approval: fix the audited20CS8602+2CS8604 sites in MainWindowViewModelTests,ReadWriteViewModelTests,SqlCatalogGateDriverTests andModbusDriverProbeParityTests by capturing ShouldNotBeNull return values (or chaining the expected string assertion). Preserve all original value/status/count assertions, commands/read count/timing and production nullable contracts; no null-forgiving operators/suppression. Verification scope: build and run the three affected offline test projects (Client.UI,Sql,Modbus), review and local commit; publication remains behind PR724 CI/merge. No implementation until this design is approved. #725 remains open for other warning groups; no reproduced null defect is claimed.

Next bounded batch proposed for owner design approval: fix the audited20CS8602+2CS8604 sites in MainWindowViewModelTests,ReadWriteViewModelTests,SqlCatalogGateDriverTests andModbusDriverProbeParityTests by capturing ShouldNotBeNull return values (or chaining the expected string assertion). Preserve all original value/status/count assertions, commands/read count/timing and production nullable contracts; no null-forgiving operators/suppression. Verification scope: build and run the three affected offline test projects (Client.UI,Sql,Modbus), review and local commit; publication remains behind PR724 CI/merge. No implementation until this design is approved. #725 remains open for other warning groups; no reproduced null defect is claimed.
Author
Owner

Scoped warning evidence after the separate approved #726 cleanup: final cached builds of AbCip,AbLegacy,FOCAS,TwinCAT,MTConnect andModbus contain73distinct(location,code,message) diagnostics:68xUnit1051,3xUnit1030,1xUnit1031,1CS8604; no CS4014 at the five approved sites. This includes remaining/scoped test warnings and is not a replacement for run983 whole-solution baseline417. Build configuration/coverage differ from hosted whole-solution evidence, so no global warning reduction or ratchet pass is claimed. Source is locally committed eed7cc7d atop5310a7e0, clean/unpushed;3323offline tests passed and review was clean. Final hosted diagnostics must be captured on the eventual published head after PR724 gate. #725 stays open.

Scoped warning evidence after the separate approved #726 cleanup: final cached builds of AbCip,AbLegacy,FOCAS,TwinCAT,MTConnect andModbus contain73distinct(location,code,message) diagnostics:68xUnit1051,3xUnit1030,1xUnit1031,1CS8604; no CS4014 at the five approved sites. This includes remaining/scoped test warnings and is not a replacement for run983 whole-solution baseline417. Build configuration/coverage differ from hosted whole-solution evidence, so no global warning reduction or ratchet pass is claimed. Source is locally committed eed7cc7d atop5310a7e0, clean/unpushed;3323offline tests passed and review was clean. Final hosted diagnostics must be captured on the eventual published head after PR724 gate. #725 stays open.
Author
Owner

Read-only follow-up audit of the small remaining compiler/package groups: two CS0219 locals in Client.Shared tests are unused; private CompileCountingGate/Count in Core.Scripting tests is unused (CS0649); Browser pagination fixture uses obsolete no-telemetry ServiceMessageContext ctor (CS0618), with an existing internal BrowseTelemetry.Context and test IVT available. Candidate edits would remove only dead scaffolding and pass that existing telemetry context, preserving behavioral assertions. The two NU1510 exact-message baseline rows refer to one explicit Microsoft.Extensions.DependencyInjection PackageReference; one message includes the solution-path suffix. FrameworkReference Microsoft.AspNetCore.App is present and tests genuinely use DI. Removing that explicit reference needs controlled restore/build verification. These are proposals only; no implementation/build/test or fresh warning-elimination claim. Historical417baseline definition remains unchanged; these groups remain part of #725.

Read-only follow-up audit of the small remaining compiler/package groups: two CS0219 locals in Client.Shared tests are unused; private CompileCountingGate/Count in Core.Scripting tests is unused (CS0649); Browser pagination fixture uses obsolete no-telemetry ServiceMessageContext ctor (CS0618), with an existing internal BrowseTelemetry.Context and test IVT available. Candidate edits would remove only dead scaffolding and pass that existing telemetry context, preserving behavioral assertions. The two NU1510 exact-message baseline rows refer to one explicit Microsoft.Extensions.DependencyInjection PackageReference; one message includes the solution-path suffix. FrameworkReference Microsoft.AspNetCore.App is present and tests genuinely use DI. Removing that explicit reference needs controlled restore/build verification. These are proposals only; no implementation/build/test or fresh warning-elimination claim. Historical417baseline definition remains unchanged; these groups remain part of #725.
Author
Owner

Read-only bounded cancellation-warning audit completed. Historical run983 has371 xUnit1051 diagnostic locations across17projects/58files; these are not current compiler counts or371tests. Nineteen source sites in six files were mapped to current local eed7cc7d source. Ordinary API calls can accept runner cancellation, but controlled CTS tests, Task.Run concurrency actions, deadline oracles and mandatory cleanup require separate handling. Parent independently checked representative Client.Shared, CLI and Modbus patterns and the SQL GUID throwaway-database fixture gate; no external execution or source edits. Recommended next scope is an explicitly classified ordinary Client.Shared connection slice, excluding controlled cancellation/failover/gates/cleanup. This is a design recommendation, not authorization or a remediation claim. Existing nullable/small-compiler approval questions stay pending; no new token edits. A separate Modbus cache-reset fixture cleanup omission beyond #726 is recorded as #727, with source-only evidence and no CI-cause claim. #725 remains open.

Read-only bounded cancellation-warning audit completed. Historical run983 has371 xUnit1051 diagnostic locations across17projects/58files; these are not current compiler counts or371tests. Nineteen source sites in six files were mapped to current local eed7cc7d source. Ordinary API calls can accept runner cancellation, but controlled CTS tests, Task.Run concurrency actions, deadline oracles and mandatory cleanup require separate handling. Parent independently checked representative Client.Shared, CLI and Modbus patterns and the SQL GUID throwaway-database fixture gate; no external execution or source edits. Recommended next scope is an explicitly classified ordinary Client.Shared connection slice, excluding controlled cancellation/failover/gates/cleanup. This is a design recommendation, not authorization or a remediation claim. Existing nullable/small-compiler approval questions stay pending; no new token edits. A separate Modbus cache-reset fixture cleanup omission beyond #726 is recorded as #727, with source-only evidence and no CI-cause claim. #725 remains open.
Author
Owner

Approved #725/#726 fixes are published in PR #730 at exact head 4f537a5652 after merging verified main c89912a9. The integrated tree 189a116a7b exactly matches the reviewed merge preflight; only the same 14 test-only files differ from main. Six offline affected suites passed 3,323 tests; cleanup/helper failure-policy mutations and independent review passed. Required final-head hosted run 988/job3609 is waiting behind main run987. Not merged or closed yet. #725 remains a partial warning cleanup; PR resolves only #726. No live calls or production changes.

Approved #725/#726 fixes are published in PR #730 at exact head 4f537a5652eec807ccdc020c7b3ab08a6435fdaf after merging verified main c89912a9. The integrated tree 189a116a7bb4aa713cb3a86212972d7cde5100ab exactly matches the reviewed merge preflight; only the same 14 test-only files differ from main. Six offline affected suites passed 3,323 tests; cleanup/helper failure-policy mutations and independent review passed. Required final-head hosted run 988/job3609 is waiting behind main run987. Not merged or closed yet. #725 remains a partial warning cleanup; PR resolves only #726. No live calls or production changes.
Author
Owner

Required PR730 final-head run988/job3609 has started at exact published head4f537a5652eec807ccdc020c7b3ab08a6435fdaf, observed00:05 UTC14October. Main987/job3608 first completed successfully at00:04:45: all10steps, Runtime837pass/3existing skips, 62TRX/14,656executed/573skips, floor>=12,000 and finalized unit-trx upload. That main result does not replace PR730 final-head acceptance. #726 remains open until run988 passes and PR730 is merged; #725 remains partial. No test retries, cancellations or new source changes.

Required PR730 final-head run988/job3609 has started at exact published head4f537a5652eec807ccdc020c7b3ab08a6435fdaf, observed00:05 UTC14October. Main987/job3608 first completed successfully at00:04:45: all10steps, Runtime837pass/3existing skips, 62TRX/14,656executed/573skips, floor>=12,000 and finalized unit-trx upload. That main result does not replace PR730 final-head acceptance. #726 remains open until run988 passes and PR730 is merged; #725 remains partial. No test retries, cancellations or new source changes.
Author
Owner

PR730 final-head run988/job3609 at4f537a5652eec807ccdc020c7b3ab08a6435fdaf passed the whole-solution build, observed00:11 UTC14October. Its completed build output emitted zero CS4014 warning lines, confirming the first five approved synchronous Task assertion discards in AbCip/AbLegacy/FOCAS/TwinCAT. Those five explicit discards remain in the published tree. Other warning groups remain open under #725; no claim of global warning removal/reduction. Hosted tests and final floor/artifact gates are still active/pending; PR730 is not yet merged.

PR730 final-head run988/job3609 at4f537a5652eec807ccdc020c7b3ab08a6435fdaf passed the whole-solution build, observed00:11 UTC14October. Its completed build output emitted zero CS4014 warning lines, confirming the first five approved synchronous Task assertion discards in AbCip/AbLegacy/FOCAS/TwinCAT. Those five explicit discards remain in the published tree. Other warning groups remain open under #725; no claim of global warning removal/reduction. Hosted tests and final floor/artifact gates are still active/pending; PR730 is not yet merged.
Author
Owner

PR730 merged as ebcbd81fca after required run988/job3609 passed all ten steps on exact final head4f537a5652eec807ccdc020c7b3ab08a6435fdaf. Merged tree189a116a7bb4aa713cb3a86212972d7cde5100ab equals the tested tree. Full gate:62TRX files,14,672executed tests,573individual skips, floor>=12,000 and finalized unit-trx artifact. Six affected suites:3,323passed/0failed/0skipped; helper exception policies/cleanup-removal mutations and independent review passed. Hosted build emitted zero CS4014 warnings. #726 is resolved and closed; #725 remains open for the other warning groups. Main checkout fast-forwarded with all ten user-owned file hashes freshly preserved. No production changes or live calls; Modbus evidence establishes cancellation/disposal/request completion, not a discarded probe-task join. #727/#728/#729 remain independent unresolved work.

PR730 merged as ebcbd81fcaa89e3a0bab8cc44d1d68049530f06d after required run988/job3609 passed all ten steps on exact final head4f537a5652eec807ccdc020c7b3ab08a6435fdaf. Merged tree189a116a7bb4aa713cb3a86212972d7cde5100ab equals the tested tree. Full gate:62TRX files,14,672executed tests,573individual skips, floor>=12,000 and finalized unit-trx artifact. Six affected suites:3,323passed/0failed/0skipped; helper exception policies/cleanup-removal mutations and independent review passed. Hosted build emitted zero CS4014 warnings. #726 is resolved and closed; #725 remains open for the other warning groups. Main checkout fast-forwarded with all ten user-owned file hashes freshly preserved. No production changes or live calls; Modbus evidence establishes cancellation/disposal/request completion, not a discarded probe-task join. #727/#728/#729 remain independent unresolved work.
Author
Owner

Additional merged-main verification: automatic run989/job3610 passed all ten steps at exact merged commit ebcbd81fca, completed02:07:59 UTC14October. Runtime837passed/0failed/3existing skips; all six affected driver suites3,323passed/0failed/0skipped. Floor62TRX/14,672executed/573individual skips>=12,000 and finalized unit-trx upload passed. This supports the completed #726 closure and merged first-five #725 slice; it does not resolve the remaining warnings or #727/#728/#729. No source changes, live calls, retries, cancellation or reruns were used for this observation.

Additional merged-main verification: automatic run989/job3610 passed all ten steps at exact merged commit ebcbd81fcaa89e3a0bab8cc44d1d68049530f06d, completed02:07:59 UTC14October. Runtime837passed/0failed/3existing skips; all six affected driver suites3,323passed/0failed/0skipped. Floor62TRX/14,672executed/573individual skips>=12,000 and finalized unit-trx upload passed. This supports the completed #726 closure and merged first-five #725 slice; it does not resolve the remaining warnings or #727/#728/#729. No source changes, live calls, retries, cancellation or reruns were used for this observation.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#725