carlos / platform Public

hostrelocate: the Probe contract says a probe completes before it returns, and passed false is a failed attempt, never one still running

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 3cf1a68ba2b4c83440069bd5620b8abd43295abd parent cb7059c
1 file changed, +5 −1
  • internal/hostrelocate/participant.go +5 −1
diff --git a/internal/hostrelocate/participant.go b/internal/hostrelocate/participant.go
index c44ccabfd..b317417fb 100644
--- a/internal/hostrelocate/participant.go
+++ b/internal/hostrelocate/participant.go
@@ -60,7 +60,11 @@ type Effects interface {
// (§5.8, B2-5; rev 16, round 15).
VerifyReceipt(context.Context, hostclaim.Observed) (bool, error)
// Probe makes one cold probe admission (AdmitWriter, with coverage the
- // caller names) and runs the probe. passed is false while it runs.
+ // caller names), runs the probe and waits for it to complete before
+ // returning (R1: one attempt, its exact health). passed is the probe's
+ // result; false is a failed attempt, never a probe still running. The
+ // caller counts an attempt in the claim before each call, so a Probe
+ // that returned early would spend the attempts without probing.
Probe(ctx context.Context, obs hostclaim.Observed, coverage string) (session uint64, passed bool, err error)
// Retained lists the participations whose execution controllers this
// box still holds; Finish closes one and releases its lifetime lock.