Files
Klaus Landsdorf 2e91ba36cd Report JobOrderList and JobOrderResponseList changes to monitored items (#4607)
# Description

`JobOrderList` and `JobOrderResponseList` serve their value from a
snapshot that the job-control change streams refresh. The refresh
replaced the snapshot but never marked the variable as changed, so a
client subscribed to a list received the first value and then nothing
and had to poll.

The refresh now stamps a new source timestamp on the list variable while
it holds the refresh lock (the timestamp setter sets the Value change
mask) and calls `ClearChangeMasks` after releasing it — the monitored
items' change handlers read the list back through the read callback,
which takes the same lock. A refresh that loses the generation check
reports nothing, so an older snapshot never overwrites a newer
notification.

- `Isa95NodeManager.RefreshJobOrderListsAsync`: V1 and V2
`JobOrderList`.
- `JobManagementBuilder` (`Opc.Ua.Machinery.Server`): `JobOrderList` and
`JobOrderResponseList`.

Both tests listen on the notification path monitored items use
(`NodeState.StateChanged` with the Value mask) and fail without the
change:

-
`MachineryPartsBuilderTests.TheJobListsReportChangesToMonitoredItemsAsync`:
storing an order and receiving a response are both reported.
- `Isa95EndToEndTests.ServerFixtureAndTypedClientExerciseIsa95Async`:
the existing external-update step now also asserts that the change
reaches `JobOrderList`; it used to verify only with repeated reads,
which is why this went unnoticed.

Local results on the branch: `UA.slnx` Release builds on all target
frameworks with no new warnings; `Opc.Ua.ISA95.Tests` 144/144 and
`Opc.Ua.Machinery.Tests` 163/163 on net10.0 and net8.0; changed-line
coverage 100 % (`check-coverage.ps1`). Fork CI (full matrix incl. macOS)
and CodeQL: green — [CI run
36752366310](https://github.com/biancode/UA-.NETStandard/actions/runs/36752366310)
(189 jobs incl. macOS), [CodeQL run
36752372259](https://github.com/biancode/UA-.NETStandard/actions/runs/36752372259).

## Related Issues

- Fixes #4606

## Checklist

- [x] I have signed the
[CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf)
and read the
[CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md)
doc.
- [x] I have added tests that prove my fix is effective or that my
feature works and increased code coverage.
- [x] I have added all necessary documentation.
- [x] I have verified that my changes do not introduce (new) build or
analyzer warnings.
- [ ] I ran **all** tests locally using the **UA.slnx** solution against
at least .net **framework** and .net **10**, and all passed. (Affected
suites on net10.0 and net8.0 locally on macOS; .NET Framework is covered
by the fork CI's Windows net48 legs.)
- [ ] I fixed **all** failing and flaky tests in the CI pipelines and
**all** CodeQL warnings.
- [ ] I have addressed **all** PR feedback received.
2026-10-01 13:45:58 +00:00
..