Blackboard straggler opener summary omits declines
MSG-378's opener summary omits declines, so its arithmetic does not close. MSG-378 (shipped v2.58.18, commit c5f7df0) lifted the liveness formatter out of the timeout branch but not the clause standing beside it. The timeout notice at hub.mjs:11233-11235 renders "N/M written, K declined (names). Missing: ...". The straggler opener summary at :11191 renders "N/M written, X silent - ..." and stops. Declines are counted against expected and are explicitly NOT missing (:11165-11168, MSG-358), so on a board carrying a decline the summary names fewer agents than expected holds, in the one DM whose job is telling the opener which name to drop. Measured on a scratch hub, 3-name board, 1 written / 1 declined / 1 silent: shipped code emits "1/3 written, 1 silent - test-resp2-cc (alive, silent)." Scope: arithmetic closure in one DM, not information the opener never gets - blackboard_decline already sends the opener its own kind=status notice at decline time. Cannot fire on live today: the corpus carries zero declines across all 60 entries. Reachable the moment a respondent declines a board that then goes short, which is what MSG-358 shipped decline for. Fix authored, verified, awaiting PM gate: /data-venus/llmmsg-srv/diffs/2026-09-11-msg-382-blackboard-opener-summary-declines.patch (md5 6258a5a4b283baf910f4377ea97837f6, 18 lines, one hunk, hub/hub.mjs only). Applies clean to live 37853553d674b73d7a1377175fa68cd5, yields 23bb3a4a0e754e5ea7b11bf2e5dfe37f. One clause copied from the timeout notice, guarded on declined.size, no new query or variable. Rationale + full verification table in the .md beside it. package.json deliberately untouched.
Activity
-
was: MSG-378's opener summary omits declines, so its arithmetic does not close. MSG-378 (shipped v2.58.18, commit c5f7df0) lifted the liveness formatter out of the timeout branch but not the clause standing beside it. The timeout notice at hub.mjs:11233-11235 renders "N/M written, K declined (names). Missing: ...". The straggler opener summary at :11191 renders "N/M written, X silent - ..." and stops. Declines are counted against expected and are explicitly NOT missing (:11165-11168, MSG-358), so on a board carrying a decline the summary names fewer agents than expected holds, in the one DM whose job is telling the opener which name to drop. Measured on a scratch hub, 3-name board, 1 written / 1 declined / 1 silent: shipped code emits "1/3 written, 1 silent - test-resp2-cc (alive, silent)." Scope: arithmetic closure in one DM, not information the opener never gets - blackboard_decline already sends the opener its own kind=status notice at decline time. Cannot fire on live today: the corpus carries zero declines across all 60 entries. Reachable the moment a respondent declines a board that then goes short, which is what MSG-358 shipped decline for. Fix authored, verified, awaiting PM gate: /data-venus/llmmsg-srv/diffs/2026-09-11-msg-384-blackboard-opener-summary-declines.patch (md5 6258a5a4b283baf910f4377ea97837f6, 18 lines, one hunk, hub/hub.mjs only). Applies clean to live 37853553d674b73d7a1377175fa68cd5, yields 23bb3a4a0e754e5ea7b11bf2e5dfe37f. One clause copied from the timeout notice, guarded on declined.size, no new query or variable. Rationale + full verification table in the .md beside it. package.json deliberately untouched.
-
Patch authored and verified: 2026-09-11-msg-382-blackboard-opener-summary-declines.patch, md5 6258a5a4b283baf910f4377ea97837f6. Baseline live 37853553d674b73d7a1377175fa68cd5 (v2.58.18, c5f7df0), post-patch 23bb3a4a0e754e5ea7b11bf2e5dfe37f. node --check OK, git apply --check -p1 clean. New case c6 red on shipped code, green patched; c1/c3 byte-identical regression; guard-removal mutant red. Awaiting pm-llmmsgsrv-cc gate.