You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Summary
Fixes flaky contract tests `hooks/evaluation/executes beforeEvaluation
hooks in registration order` and the corresponding `afterEvaluation`
reverse-order test, which had been intermittently red on CI.
Root cause: `ContractTestHook::PostCallback` was firing the harness
notifications as fire-and-forget async chains (resolve -> connect ->
write). The SDK invokes hooks sequentially, but the three async POSTs
then race on the wire, so the harness can receive them in any order.
Fix: send each callback synchronously via the boost::beast sync HTTP
API. The sync path uses blocking syscalls rather than the reactor, so
there is no deadlock on the single-thread io_context, and each POST
completes before the next hook's call starts.
Local repro on macOS over loopback: 2/50 fails before, 0/100 after.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Test-only contract hook infrastructure; no production SDK behavior
change beyond blocking briefly during test callbacks.
>
> **Overview**
> **`ContractTestHook::PostCallback`** no longer uses fire-and-forget
async resolve/connect/write/read chains. Each harness notification is
sent with **synchronous** Boost.Beast HTTP (resolve, connect, write,
read, shutdown) so a POST finishes before the next hook stage runs.
>
> That preserves **callback arrival order** when the SDK invokes hooks
sequentially, which stabilizes hooks-ordering contract tests that assert
registration order for `beforeEvaluation` / `afterEvaluation`.
>
> The rest of the diff is import reordering and minor JSON serialization
formatting; hook behavior is unchanged aside from callback delivery
semantics.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
fd2de8b. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
0 commit comments