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
{{ message }}
Repository navigation
Follow-up: batch-status owner route validates a stale heartbeat and coalescing tracks the wrong prior fingerprint #791
PR #680 (Make cross-runner blocker owner routes navigable, merged 2026-09-07 10:07 UTC) added owner-route validation to skills/batch-status/bin/batch-status and a coalescing contract for blocker messages in docs/user-facing-coordination.md, workflows/pr-processing.md, and skills/pr-batch/bin/user-facing-coordination-contract-test.rb. Two review findings posted after the final refresh were triaged as advisory for the merge and are tracked here.
Problems
Route validation can pick a stale heartbeat. In skills/batch-status/bin/batch-status (around line 475 and 505 at merge time), heartbeats.find selects the first same-agent heartbeat and validates the owner route against it. Coordination heartbeats are append-only telemetry (see skills/post-merge-audit/bin/completed-batch-publication-preflight around lines 818-820), so an earlier stale or previous-instance heartbeat can mark the new route inconsistent and clear a valid owner link while a later live heartbeat matches the active claim. Source: Codex P2 thread on Make cross-runner blocker owner routes navigable #680 at skills/batch-status/bin/batch-status:505.
Coalescing tracks the prior observation, not the prior emitted message. The documented rule (doc line 174, workflow line 1276 at merge time) says to emit only when the fingerprint differs from the prior emitted message. The replay formula in user-facing-coordination-contract-test.rb around line 344 reassigns previous_fingerprint on every observation, emitted or not. Sequence: fingerprint A emits, a non-actionable observation moves the fingerprint to B without emitting, an actionable observation returns to A, and A is emitted again as a duplicate. The fixture owner-route-pr383-replay.json only exercises the monotonic A, A, B case. Source: claude thread on Make cross-runner blocker owner routes navigable #680 at skills/pr-batch/bin/user-facing-coordination-contract-test.rb:344.
Proposed fix
Select the latest heartbeat for the target and current claim instance before route validation, or fail closed when that identity is ambiguous. Add a batch-status test with two same-agent heartbeats where only the later one matches the active claim.
Track previous_emitted_fingerprint, updated only when a message is actually emitted, in both the contract-test replay formula and any implementation that mirrors it. Extend the replay fixture with an A, B (non-actionable), A sequence and assert a single emission of A.
Context
PR #680 (Make cross-runner blocker owner routes navigable, merged 2026-09-07 10:07 UTC) added owner-route validation to
skills/batch-status/bin/batch-statusand a coalescing contract for blocker messages indocs/user-facing-coordination.md,workflows/pr-processing.md, andskills/pr-batch/bin/user-facing-coordination-contract-test.rb. Two review findings posted after the final refresh were triaged as advisory for the merge and are tracked here.Problems
skills/batch-status/bin/batch-status(around line 475 and 505 at merge time),heartbeats.findselects the first same-agent heartbeat and validates the owner route against it. Coordination heartbeats are append-only telemetry (seeskills/post-merge-audit/bin/completed-batch-publication-preflightaround lines 818-820), so an earlier stale or previous-instance heartbeat can mark the new routeinconsistentand clear a valid owner link while a later live heartbeat matches the active claim. Source: Codex P2 thread on Make cross-runner blocker owner routes navigable #680 atskills/batch-status/bin/batch-status:505.user-facing-coordination-contract-test.rbaround line 344 reassignsprevious_fingerprinton every observation, emitted or not. Sequence: fingerprint A emits, a non-actionable observation moves the fingerprint to B without emitting, an actionable observation returns to A, and A is emitted again as a duplicate. The fixtureowner-route-pr383-replay.jsononly exercises the monotonic A, A, B case. Source: claude thread on Make cross-runner blocker owner routes navigable #680 atskills/pr-batch/bin/user-facing-coordination-contract-test.rb:344.Proposed fix
previous_emitted_fingerprint, updated only when a message is actually emitted, in both the contract-test replay formula and any implementation that mirrors it. Extend the replay fixture with an A, B (non-actionable), A sequence and assert a single emission of A.Verification
LC_ALL=en_US.UTF-8 ruby skills/batch-status/bin/batch-status-test.rbLC_ALL=en_US.UTF-8 ruby skills/pr-batch/bin/user-facing-coordination-contract-test.rbFiled from the integration pass tracked on #742.