fix: preserve unbounded heartbeat compatibility
Summary
- keep nullable
node.heartbeat.loaddecoding in place for the coordinated Relaycast rollout - temporarily emit legacy numeric
load: 0whenmax_agents == 0, so deployed Relaycast engines accept the whole heartbeat - add a producer serialization regression test covering
loadandactive_agents - correct the changelog: remove the unshipped claim from 11.4.2 and describe the compatibility fix under Unreleased
Root cause
Relay #1445 began omitting load for unbounded providers. Fleet E2E pins Relaycast v6.0.1, which rejects heartbeats without a numeric load. Spawn and brief delivery still complete, but the entire heartbeat is discarded, so active_agents and load never update. This is the same wire-contract boundary addressed by Relaycast PR #307; it is a product compatibility defect, not a stale harness assertion.
The decisive comparison used the same local Node 22.14.0, Relaycast commit 58a9342, and release broker build:
1ae49812(post-#1464, pre-#1445): Fleet E2E exit 0, 14/14 passed0b43dbe3(post-both): Fleet E2E exit 1, 12/14 passed; five-agent heartbeat and least-loaded placement both timed out withlast=null
Validation
- patched Fleet E2E against pinned Relaycast v6.0.1: 3 consecutive passes / 0 failures, exit codes
0, 0, 0, 14/14 each - full broker suite: exit 0; 868 unit tests passed, 4 ignored; all broker integration tests passed
- focused heartbeat tests: exit 0; 5 passed
cargo fmt --all -- --check: exit 0git diff --check: exit 0
Release sequencing
Relaycast PR #307 must merge and deploy before Relay can safely switch unbounded heartbeat load back to omitted/null. Until then, numeric emission preserves active-agent and liveness updates across currently deployed engines without weakening Fleet E2E.