Skip to content

Phase 12.J.E.2: capabilities probe E2E (4 tests, P0-unblocked)

Placeholder ppxd requested to merge phase12.J.E.2-capabilities-probe into main

Summary

Phase 12.J.E.2 was BLOCKED by the Halibut 8.1 cache-key bug fixed in PR #194. With that fix landed, the capabilities-probe round-trip is now E2E-testable.

Tests added (4)

  • F1.h Listening_CapabilitiesProbe_ReturnsAgentReportedVersion
  • F1.h2 Polling_CapabilitiesProbe_ReturnsAgentReportedVersion
  • F3.cache Listening_RepeatedProbes_WithinCacheTtl_ReturnCachedResponse — pins the documented 60-second [CacheResponse(60)] TTL behavior
  • F1.metadata Listening_CapabilitiesResponse_CarriesMetadataDictionary — pins Dictionary<string,string> round-trip

Test plan

  • 75/75 on macOS (4 new genuinely run, not skip-guarded)
  • 75/75 on Windows runner (run 25441003521)

Why this is the unblock test

If PR #194's fix ever regresses (CapabilitiesRequest loses its IEnumerable<string> implementation), these 4 E2E tests fail with the same ArgumentOutOfRangeException as the unit reproducer in HalibutCacheKeyBugReproductionTests. Triple defense:

  1. Reproducer test (unit, full Halibut runtime, no service registered)
  2. Type-shape Rule-8 pin (unit, reflection-based)
  3. This file (E2E, real RPC, real cache behavior)

All three must pass for the bug to stay fixed.

Infrastructure additions

  • StubAgent registers ICapabilitiesService → StubCapabilitiesService (configurable AgentVersion)
  • StubSquidServer.ProbeCapabilities{Listening,Polling}Async mirror production HalibutClientFactory.CreateCapabilitiesClient exactly

🤖 Generated with Claude Code

Merge request reports

Loading