From 827c2e2d0f9eb81c55ef957d43f0a9e11985b421 Mon Sep 17 00:00:00 2001 From: Andy Howard Date: Thu, 10 Sep 2026 16:21:06 +0100 Subject: [PATCH] Pin SDK 10.0.401. Isolate Xamarin project. --- AGENTS.md | 2 +- SaCommonVS.LegacyXamarin.sln | 30 ++++++++++++++++++++++++++++++ SaCommonVS.sln | 8 +------- docs/README.md | 1 + docs/component-reviews.md | 3 ++- docs/legacy-xamarin.md | 7 +++++++ docs/topics.md | 5 +++-- global.json | 7 +++++++ 8 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 SaCommonVS.LegacyXamarin.sln create mode 100644 docs/legacy-xamarin.md create mode 100644 global.json diff --git a/AGENTS.md b/AGENTS.md index 7b13621..5ccc42a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ## Project Structure & Module Organization -`SaCommonVS.sln` contains the shared Sarand libraries. `SacsStandardBase` provides core types and utilities; `SacsStandardDbas` provides database support; `SacsStandardProc` provides process and file-processing support; `SacsCoreWeb` provides ASP.NET components; and `SacsStandardAccounts` provides accounting integrations. Mobile support is in `SacsMobileMaui` and `SacsMobileXamarin`. Tests live in `SacsCoreUnitTests` and generally mirror the corresponding source area under `Standard`. +`SaCommonVS.sln` contains the supported shared Sarand libraries. `SacsStandardBase` provides core types and utilities; `SacsStandardDbas` provides database support; `SacsStandardProc` provides process and file-processing support; `SacsCoreWeb` provides ASP.NET components; and `SacsStandardAccounts` provides accounting integrations. Supported mobile code is in `SacsMobileMaui`. The retained `SacsMobileXamarin` source is isolated in `SaCommonVS.LegacyXamarin.sln` for reference and is excluded from normal builds and the .NET 10 migration; see `docs/legacy-xamarin.md`. Tests live in `SacsCoreUnitTests` and generally mirror the corresponding source area under `Standard`. These projects are consumed by sibling workspaces, including `..\..\BusinessMgr\Workspace`, `..\..\PippinApps\Repositories\Sandtrap`, and `..\..\PippinApps\Repositories\Sandalwood`. Preserve the relative layout because downstream solutions use direct project references. diff --git a/SaCommonVS.LegacyXamarin.sln b/SaCommonVS.LegacyXamarin.sln new file mode 100644 index 0000000..f12f083 --- /dev/null +++ b/SaCommonVS.LegacyXamarin.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34316.72 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardBase", "SacsStandardBase\SacsStandardBase.csproj", "{3A8EE4B3-2335-420B-9619-D1622AF511FA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsMobileXamarin", "SacsMobileXamarin\SacsMobileXamarin.csproj", "{8DB58994-2E78-4F87-8630-63A3C7F5D8BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3A8EE4B3-2335-420B-9619-D1622AF511FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A8EE4B3-2335-420B-9619-D1622AF511FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A8EE4B3-2335-420B-9619-D1622AF511FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A8EE4B3-2335-420B-9619-D1622AF511FA}.Release|Any CPU.Build.0 = Release|Any CPU + {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E3E1BFED-83C0-46CC-B86F-B5D3B04230D4} + EndGlobalSection +EndGlobal diff --git a/SaCommonVS.sln b/SaCommonVS.sln index af93996..b64ba15 100644 --- a/SaCommonVS.sln +++ b/SaCommonVS.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.8.34316.72 @@ -20,8 +20,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardAccounts", "Sac EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardProc", "SacsStandardProc\SacsStandardProc.csproj", "{3988EE9F-FFCD-481A-AF5E-AA7E5DB5A415}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsMobileXamarin", "SacsMobileXamarin\SacsMobileXamarin.csproj", "{8DB58994-2E78-4F87-8630-63A3C7F5D8BD}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SacsMobileMaui", "SacsMobileMaui\SacsMobileMaui.csproj", "{F167BCF8-8B99-4103-A710-D4B8FD5518A7}" EndProject Global @@ -54,10 +52,6 @@ Global {3988EE9F-FFCD-481A-AF5E-AA7E5DB5A415}.Debug|Any CPU.Build.0 = Debug|Any CPU {3988EE9F-FFCD-481A-AF5E-AA7E5DB5A415}.Release|Any CPU.ActiveCfg = Release|Any CPU {3988EE9F-FFCD-481A-AF5E-AA7E5DB5A415}.Release|Any CPU.Build.0 = Release|Any CPU - {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DB58994-2E78-4F87-8630-63A3C7F5D8BD}.Release|Any CPU.Build.0 = Release|Any CPU {F167BCF8-8B99-4103-A710-D4B8FD5518A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F167BCF8-8B99-4103-A710-D4B8FD5518A7}.Debug|Any CPU.Build.0 = Debug|Any CPU {F167BCF8-8B99-4103-A710-D4B8FD5518A7}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/docs/README.md b/docs/README.md index f7bd34f..443edf3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,6 +8,7 @@ An optional informational overview of sibling workspaces is available in `../../ - `topics.md` tracks prioritised work, work in progress, and completed work. - `component-reviews.md` records which projects, paths, and classes have been reviewed. +- `legacy-xamarin.md` explains how the retained Xamarin source is isolated from the supported build. ## Project Trackers diff --git a/docs/component-reviews.md b/docs/component-reviews.md index ae007fb..a7e71ff 100644 --- a/docs/component-reviews.md +++ b/docs/component-reviews.md @@ -11,7 +11,8 @@ Last updated: 2026-09-10 | Component | Scope | Status | Date reviewed | Next steps | Notes | |---|---|---|---|---|---| -| `SaCommonVS.sln` | Pre-migration restore, Debug build, and tests | Baseline captured; passing with warnings | 2026-09-10 | Pin the SDK, address the MailKit advisory, decide the Xamarin disposition, and begin the coordinated .NET 10 migration. | SDK 10.0.401 restored and built all eight projects with 110 warnings and no errors. `SacsCoreUnitTests` passed 94 of 94 tests. MAUI 9 Android is out of support and MAUI API obsolescence warnings are tracked in the project-specific docs. | +| `SaCommonVS.sln` | Pre-migration restore, Debug build, and tests | Baseline captured; passing with warnings | 2026-09-10 | Address the MailKit advisory and begin the coordinated .NET 10 migration. | SDK 10.0.401 restored and built the pre-isolation eight-project solution with 110 warnings and no errors. `SacsCoreUnitTests` passed 94 of 94 tests. MAUI 9 Android is out of support and MAUI API obsolescence warnings are tracked in the project-specific docs. | +| `SacsMobileXamarin` | Migration disposition | Isolated; retained for reference | 2026-09-10 | Keep outside the supported build unless a separately scoped resurrection or migration is approved. | Source is unchanged and available through `SaCommonVS.LegacyXamarin.sln`; see `docs/legacy-xamarin.md`. | | [`SacsMobileMaui`](../SacsMobileMaui/docs/component-reviews.md) | Project | Tracked in project docs | 2026-09-10 | Continue in the project component register and topic tracker. | Project-specific findings have been moved to `SacsMobileMaui/docs`. | | `SacsStandardBase/Base/Procs/SaProcess_Base.cs` | Class | In progress | 2026-09-09 | Complete the Process Base actions recorded in `topics.md`; review derived processes separately for cooperative polling. | Lifecycle state ownership and cancellation lock ordering were changed. Five focused tests pass. Remaining concerns include mixed sync/async execution, durable cancellation outcome, cancellation exception handling, disposal, and status synchronization. | | `SacsStandardBase/Base/Email/SaEmailConsole.cs` | Class | Reviewed; action required | 2026-09-08 | Restore SMTP certificate validation and require the configured TLS mode. Add invalid-certificate and unavailable-TLS tests. | The current SMTP client accepts every server certificate. | diff --git a/docs/legacy-xamarin.md b/docs/legacy-xamarin.md new file mode 100644 index 0000000..f6601bf --- /dev/null +++ b/docs/legacy-xamarin.md @@ -0,0 +1,7 @@ +# Legacy Xamarin Reference + +`SacsMobileXamarin` is retained as source reference but is not part of the supported Common build or the .NET 10 migration. + +The project has been removed from `SaCommonVS.sln`, which is the supported solution used for normal restore, build, and test validation. Open `SaCommonVS.LegacyXamarin.sln` when the Xamarin implementation needs to be inspected or compared with the MAUI implementation. That legacy solution contains `SacsMobileXamarin` and its `SacsStandardBase` dependency. + +Do not add the Xamarin project back to the supported solution or retarget it as part of routine Common work. Any resurrection or migration should begin with a separate review of its consumers, Xamarin.Forms dependencies, platform requirements, and replacement scope. diff --git a/docs/topics.md b/docs/topics.md index 33580cb..7f56a61 100644 --- a/docs/topics.md +++ b/docs/topics.md @@ -13,8 +13,7 @@ Last updated: 2026-09-10 | Priority | Topic | Date noted | Next step | Notes | |---|---|---|---|---| -| 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 | Prepare Common libraries for the coordinated .NET 10 migration | 2026-09-10 | Temporarily target `net8.0;net10.0` in applicable shared libraries and validate both targets before migrating downstream consumers. | SDK 10.0.401 is pinned. 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`. | | 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. | @@ -49,3 +48,5 @@ Last updated: 2026-09-10 | Remove cancellation callbacks from the Process Base lifecycle lock | 2026-09-08 | 2026-09-08 | 2026-09-08 | Cancellation and task-data disposal use separate synchronization; worker cleanup detaches state before disposal. | | Add Process Base lifecycle tests | 2026-09-08 | 2026-09-08 | 2026-09-08 | Five focused MSTest cases cover completion, duplicate starts, stop timeout retention, cooperative cancellation, and cancellation callback lock behavior. | | Capture the pre-migration Common build and test baseline | 2026-09-10 | 2026-09-10 | 2026-09-10 | Using SDK 10.0.401, `dotnet restore SaCommonVS.sln` and the full Debug solution build succeeded. The build produced 110 warnings and no errors; most are repeated MAUI API obsolescence warnings across four targets, plus `NETSDK1202` for out-of-support MAUI 9 Android and `NU1902` for the moderate-severity MailKit 4.13.0 vulnerability. `SacsCoreUnitTests` passed 94 of 94 tests. | +| Pin the Common .NET 10 SDK | 2026-09-10 | 2026-09-10 | 2026-09-10 | Added `global.json` for SDK 10.0.401 with `latestPatch` roll-forward and prerelease SDKs disabled. | +| Isolate `SacsMobileXamarin` from the supported Common build | 2026-09-10 | 2026-09-10 | 2026-09-10 | Removed the project from `SaCommonVS.sln` while retaining all source. Added `SaCommonVS.LegacyXamarin.sln` and `docs/legacy-xamarin.md` for reference-only access. The project is outside the supported .NET 10 migration scope. | diff --git a/global.json b/global.json new file mode 100644 index 0000000..e1c5e99 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "10.0.401", + "rollForward": "latestPatch", + "allowPrerelease": false + } +}