CB-WP-0034: who you are bonding with
Some checks failed
ci / check (push) Failing after 4s

Reported three times across three sessions, two days apart, and it
survived a whole UI rebuild: "i cant see whos support i accept".

It was not styling. The move button's label was format!("{c:?}"), so the
player read `RespondToSupport { response: AcceptBond }` — Rust struct
syntax with no name in it. And the command does not carry the
counterparty, so nothing rendering it alone could have said who; it comes
off the view, as whoever played Support at this seat.

Four more seat-panel fields had the same defect, including `support
AcceptBond` — the one the report names. CB-WP-0020 fixed exactly this for
selections and left its four neighbours as they were.

command_label has no catch-all arm, and that earned its keep before any
test ran: GroundChoice::RejectReverse and SupportResponse::BreakRivalry
both failed to compile — two moves that would have shipped as struct
dumps. An offer the view cannot see is said to be unseen rather than given
an invented name.

The finding underneath: the coverage probe that exists to prove every view
field reaches the PLAYER was matching "player: Some(PlayerId(1))" and
"members: [PlayerId(1)". It was certifying the defect as coverage and
would have gone red had anyone fixed it. Second confirmation of
CB-WP-0024's finding, from the sharper side: a probe naming Debug output
does not merely fail to protect, it pins the defect in place.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-07 17:49:06 +02:00
parent edab11c0e4
commit c2a7e40b67
6 changed files with 495 additions and 16 deletions

View file

@ -89,6 +89,18 @@ pub fn view(viewer: Option<PlayerId>) -> GroundView {
}),
),
(p2, SelectionView::Hidden),
// CB-WP-0034: P3 offered P2 their Support, revealed. The
// fixture now carries the case the report was about, so the
// coverage probe for `support_responses` can name a SEAT
// rather than a response with nobody attached to it.
(
p3,
SelectionView::Shown(Selection {
action: Action::Support,
target: Some(p2),
problem: None,
}),
),
]),
ground_modes: BTreeMap::from([(p3, GroundMode::Gr)]),
ground_choices: BTreeMap::from([(p3, GroundChoice::ProtectProblem { problem: 7 })]),