Context
Issue #25 was closed as "Done" after agent review, but the implementing PR #26 has merge conflicts and was never actually merged. The fix is not in the codebase.
PR with conflicts: #26
Closed issue: #25
mergeable: CONFLICTING
What was fixed in this PR
When a node in PROBE state successfully completes an inference (RecordCBResult(success=true)), the old code deleted the CB entry entirely. When UpdateCBStateForBlock ran in EndBlock of the same block, Pass 2 found this node as HEALTHY with stale high miss-rate stats and immediately re-excluded it — undoing the probe recovery.
Fix: Added LastRestoredBlock int64 field to CircuitBreakerEntry. On probe success, instead of deleting the entry, set State=CBStateHealthy + LastRestoredBlock=blockHeight. In Pass 2, skip nodes where LastRestoredBlock == blockHeight (one-block grace period).
This was one of two reasons x0152 closed upstream PR gonka-ai#974:
"even a successful probe can get immediately undone in the same block"
Acceptance criteria
Context
Issue #25 was closed as "Done" after agent review, but the implementing PR #26 has merge conflicts and was never actually merged. The fix is not in the codebase.
PR with conflicts: #26
Closed issue: #25
mergeable: CONFLICTING
What was fixed in this PR
When a node in PROBE state successfully completes an inference (
RecordCBResult(success=true)), the old code deleted the CB entry entirely. WhenUpdateCBStateForBlockran in EndBlock of the same block, Pass 2 found this node as HEALTHY with stale high miss-rate stats and immediately re-excluded it — undoing the probe recovery.Fix: Added
LastRestoredBlock int64field toCircuitBreakerEntry. On probe success, instead of deleting the entry, setState=CBStateHealthy+LastRestoredBlock=blockHeight. In Pass 2, skip nodes whereLastRestoredBlock == blockHeight(one-block grace period).This was one of two reasons x0152 closed upstream PR gonka-ai#974:
Acceptance criteria
feature/25-fix-probe-re-exclusion