Windows service handler guard
Summary
- Added
WindowsServiceDeployActionHandler : IActionHandlerforSquid.DeployWindowsService, establishing the handler boundary for Windows Tentacle service deployment. - Declared static runtime requirements for Windows OS and PowerShell availability using the existing capability requirements model, so scheduling/validation can reject incompatible targets before execution where capability data is available.
- Added a dispatch-time OS guard that reads the Tentacle OS variable and blocks clearly non-Windows targets with an actionable error message, while allowing missing OS data to fall back to static capability validation.
- Centralized Windows OS string recognition through
WindowsOsStringHelper, including support for canonical and legacy Windows OS string forms. - Returned a stable PowerShell
RunScriptIntentshape with intent name, step/action observability fields, PowerShell syntax, and runtime bundle disabled; the script body remained a deliberate fail-fast placeholder for the following script-builder branch.
Test plan
-
Unit: WindowsServiceDeployActionHandlerTestsverifies the handler exposes the correct action type. -
Unit: handler static requirements include Windows OS and PowerShell presence. -
Unit: handler returns a RunScriptIntentwith stable name, step/action names, PowerShell syntax, and runtime bundle disabled. -
Unit: dispatch-time OS guard accepts Windows/canonical/legacy values and rejects non-Windows values with an actionable error. -
Regression: ActionTypesDriftTestsincluded in the targeted run to keep action type registration aligned with the handler. -
Targeted test run: DOTNET_ROLL_FORWARD=Major dotnet test tests/Squid.UnitTests/Squid.UnitTests.csproj --filter "FullyQualifiedName~WindowsServiceDeployActionHandlerTests|FullyQualifiedName~ActionTypesDriftTests"passed, 24 tests green.