Add critical-tier E2E coverage for IIS HTTPS, SCM restart, and circuit breaker
Summary
- 6 new test files, +1893 LOC, closing the production-safety gaps the deep audit (2026-05-20) identified. Every single feature already has component coverage, but cross-feature composition, real-OS process crashes, and cross-step output-variable resolution had no end-to-end pin. These six tests pin the operator-facing invariants the existing suite leaves implicit.
- Pure additions — no production code touched, no shared test infrastructure modified, no existing test renamed / deleted / changed. Zero regression risk to the existing suite.
-
All Rule 12-compliant: skip-on-non-OS guards, GUID-suffixed resource names, IDisposable contexts with best-effort cleanup, real production classes (no mocks),
[Trait(\"Category\", ...)]on every E2E, loopback ports viaTcpListener(0), descriptive failure messages with manual-diagnose instructions.
Tests added
| File | LOC | Tier | What it pins |
|---|---|---|---|
IISDeployRealWorldHttpsE2ETests.cs |
519 |
|
Runtime PFX + cert-import + AppPool ACL + live HTTPS GET 200 |
IISDeployRealWorldFailureRecoveryE2ETests.cs |
401 |
|
Unresolved-token failure → journal Status=Failed → recovery deploy flips Status=Success + PostDeploy fires |
HalibutCircuitBreakerE2ETests.cs |
244 |
|
Breaker Open → dispatch < 5s + stub never receives script |
WindowsServiceHostAutoRestartE2ETests.cs |
272 |
|
Real Process.Kill → SCM auto-restart within 30s + NEW PID |
OutputVariableCrossStepE2ETests.cs |
268 |
|
5-link emit→parse→merge→expand→agent chain on real Kind |
StickyFailureBatchPropagationTests.cs |
189 | unit | OR-merge + sticky fail propagates to all targets (9 cases) |
Test plan
-
dotnet buildall four affected projects (Squid.E2ETests,Squid.UnitTests,Squid.WindowsTentacleE2ETests) — 0 errors -
xUnit discovery confirms all 6 test classes + theory cases registered -
Runtime execution: StickyFailureBatchPropagationTests— 9/9 passed locally on macOS in 12ms -
CI: Squid.UnitTestsfull suite stays green (unit tier, runs on every push) -
CI (Windows + IIS feature): IISDeployRealWorldHttpsE2ETests,IISDeployRealWorldFailureRecoveryE2ETests,WindowsServiceHostAutoRestartE2ETests -
CI (Postgres + Kind): HalibutCircuitBreakerE2ETests,OutputVariableCrossStepE2ETests -
First Windows CI execution confirms cert-import + ACL + HTTPS request chain works end-to-end -
First Kind CI execution confirms ##squid[setVariable]round-trip and circuit breaker fail-fast
Out of scope (Phase 2/3 backlog)
- Real-failure path for circuit breaker (kill stub → record real
HalibutClientException) — needs Halibut's 30-min poll timeout override outside current fixture surface. - Network blip / agent reconnect mid-
GetStatus. - Multi-instance concurrent crash + restart on Windows.