Add Phase 13 PR-2: WindowsTentacleBinaryFixture (real binary build)
Summary
- New
WindowsTentacleBinaryFixturemirroring Linux'sLinuxTentacleBinaryFixture— publishes realSquid.Tentacle.exe(self-containedwin-x64) viadotnet publish, caches it, exposesEnsureBuilt/EnsureBuiltV2/Run/StartLongRunningfor downstream tests - New
TentacleWindowsBinarySmokeE2ETestssmoke layer (Tier🔵 ) — pins build pipeline contract before Phase 13 PR-3 (real-binary-as-polling-agent) lands - New
WindowsUpgradeE2ECategories.TentacleBinary = "WindowsTentacleBinaryE2E"constant - CI:
tentacle-windows-e2e.ymlfilter now includesWindowsTentacleBinaryE2Eso the smoke test runs on both manual + nightly + push-to-main triggers
Why this matters
Existing Windows tests call into production command classes directly via the public seam (RegisterCommand.ExecuteAsync, ServiceCommand.ExecuteAsync — Rule 12.9). That's the right pattern for unit-of-CLI testing, but can't catch publish-pipeline regressions:
-
PublishSingleFiletarget produces a different output layout - RID drift (
win-x64vs portable) - Self-contained bundle missing a native dependency
Phase 13 PR-3 will be the first Windows test that needs the actual exe at the path stamped into the SCM binPath (mirroring Linux PR-1's systemd ExecStart pattern). The in-process production class won't suffice for that.
Convention parity with Linux
| Aspect | Linux fixture | Windows fixture |
|---|---|---|
BuildVersion |
99.99.99 |
99.99.99 (same — proves cross-OS AssemblyVersion.Canonical consistency) |
BuildVersionV2 |
100.0.0 |
100.0.0 |
| Publish flags | -r linux-x64 --self-contained true -p:PublishSingleFile=true |
-r win-x64 --self-contained true -p:PublishSingleFile=true |
EnsureBuilt |
bin/squid-tentacle-binary-fixture/linux-x64/Squid.Tentacle |
bin/squid-tentacle-binary-fixture/win-x64/Squid.Tentacle.exe |
| Cold build budget | 5 min | 5 min |
Coverage tier
-
Fixture itself:
🔵 Fixture-only (Rule 12) -
Smoke tests:
🔵 Fixture-only — proves the build pipeline works before downstream tests consume it -
Downstream PR-3 test:
🟢 High-fidelity (real binary + real polling channel + real script dispatch)
Test plan
-
CI on windows-latestrunsCategory=WindowsTentacleBinaryE2E:-
Binary_Version_PrintsBuildVersionStamppasses — proves cold publish +versionsubcommand contract -
Binary_Help_ProducesUsageOutputpasses — sanity that Program.cs's command-resolver doesn't crash
-
-
dotnet build tests/Squid.WindowsTentacleE2ETests/Squid.WindowsTentacleE2ETests.csproj— 0 errors
Phase 13 follow-ups
- PR-3 (next): Windows real-binary as polling agent (mirror Linux R1h)
- PR-4: Keep-alive / soak — multi-second probe stability for both OSes