| P1 |
Capture the pre-migration Common build and test baseline |
2026-09-10 |
Build the current non-MAUI projects and run SacsCoreUnitTests; record existing warnings, failures, SDK selection, and environmental limitations before changing targets. |
Depends on committing the current documentation changes separately so baseline and migration changes remain distinguishable. MAUI baseline work is tracked in the project-specific tracker. |
| P1 |
Prepare Common libraries for the coordinated .NET 10 migration |
2026-09-10 |
Repair and pin the .NET 10 toolchain, then temporarily target net8.0;net10.0 in applicable shared libraries and validate both targets before migrating downstream consumers. |
BusinessMgr still targets .NET 8 and consumes Common through direct project references. Remove the temporary .NET 8 targets only after all in-scope consumers have migrated. The separate MAUI migration is tracked under SacsMobileMaui/docs/topics.md. |
| P2 |
Decide the disposition of SacsMobileXamarin before the .NET 10 migration |
2026-09-10 |
Confirm whether to retire it, remove it from the main solution, or plan a separate migration; document the supported consumer path. |
The project remains in SaCommonVS.sln and references Xamarin.Forms 5. It should not be implicitly included in the normal .NET 10 retargeting. |
| P1 |
Prevent synchronous and asynchronous execution from overlapping in SaProcess_Base |
2026-09-09 |
Route RunProcess() and RunAsync() through one guarded start operation and extend the lifecycle tests. |
A synchronous call can currently reuse and dispose the asynchronous worker's task data. |
| P2 |
Retain cancellation as a completed process outcome |
2026-09-09 |
Store a durable cancellation result until the next process reset and test post-completion state. |
IsInterrupted currently loses token-based cancellation after task-data cleanup. |
| P2 |
Handle OperationCanceledException as cancellation |
2026-09-09 |
Catch cancellation separately in RunProcess() and avoid recording it as an error. |
The general exception handler currently consumes cancellation before RunAsync() can distinguish it. |
| P2 |
Observe background RunAsync() tasks in consumers |
2026-09-09 |
Review downstream fire-and-forget call sites and give their process consoles ownership of the returned task. |
Rebuilt consumers are binary-compatible, but some source call sites still discard the task. |
| P3 |
Define disposal and cross-thread status semantics |
2026-09-09 |
Decide whether to add asynchronous disposal and a synchronized process-status snapshot. |
Disposal currently requests cancellation without awaiting termination; several status properties are read across threads. |