Add end-to-end ProcessAsync test for transient-pause (required + non-required)
Summary
- The P1b transient-pause fix (#434) was covered only compositionally: unit tests mock the phase to throw the transient directly, and
HalibutResumeReattachTestscalls the strategy directly — neither runs the realExecuteSingleActionAsyncper-action catch through the runner to the pause outcome. The non-required path (which has no per-target catch) was the exact gap the adversarial review flagged. - New
IntegrationTransientPausedrives the real pipeline: a fullIDeploymentTaskExecutor.ProcessAsyncover a seeded deployment (KubernetesAgent target → the realHalibutMachineExecutionStrategyrecords the in-flight pointer), with only the Halibut RPC transport faked (GetStatusthrows a transientHalibutClientException). For both required and non-required steps it asserts: task Paused (not Failed), checkpoint preserved, in-flight pointer preserved. - Test only — the fix already shipped in #434; this closes the end-to-end coverage gap.
Test plan
-
Both [InlineData(true)](required) and[InlineData(false)](non-required) green against the real pipeline -
Red-green verified: neutering the ExecuteSingleActionAsynctransient catch makes the NON-required case fail (Paused→Failed, checkpoint deleted — the swallow bug) while the required case still passes (covered by the per-target catch) — proving the test specifically guards the non-required propagation the fix added -
Pure test addition; Execute.csunchanged