From 5e06a7d01edd0e445113bdbe0b4766cdcaaee1ba Mon Sep 17 00:00:00 2001 From: tegwick Date: Mon, 3 Aug 2026 20:08:09 +0200 Subject: [PATCH] Declare CB-WP-0020: the table you can read, tier S (chaos 8 override) The perceptual check found seven items; item 1 passes. Chaos d8=8 fired the FIRST override at the new rate, on the second roll, and drew S -- which is what the structural derivation said, so it changed nothing. That is one half of window 2's retirement condition (retire if an override changes nothing twice running). The maintainer's design instruction is adopted directly: a legal drop target should change its EXISTING border to dashed rather than draw a new outline. That explains the hidden top/left edges (an outline on an SVG is clipped by the viewport) and the oversized seat highlight. The ghost is a textContent copy, which is why the linebreak collapses and it reads as a second card, and why showing the explanation destroys the label -- one cause, two reports. T03 carries an explicit instruction not to fix a message that already works: the 'nothing droppable' path may simply be unreachable because almost every part of the page is a card. Reproduce before changing. T05 records that 0 scores and no winner is very likely the stand-in dataset rather than a scoring bug, now that GROUND-WP-0002 T01 has ruled the edition data authoritative. The import is its own pass. Co-Authored-By: Claude Opus 5 --- .../CB-WP-0020-the-table-you-can-read.md | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 workplans/CB-WP-0020-the-table-you-can-read.md diff --git a/workplans/CB-WP-0020-the-table-you-can-read.md b/workplans/CB-WP-0020-the-table-you-can-read.md new file mode 100644 index 0000000..fa82d5c --- /dev/null +++ b/workplans/CB-WP-0020-the-table-you-can-read.md @@ -0,0 +1,185 @@ +--- +id: CB-WP-0020 +kind: product +title: "The table you can read: the card in your hand, the border that moves, the game that ends" +status: ready +--- + +# Purpose + +``` +structural tier S (presentation inside an existing capability — no new + port, no canonical interface, no new dependency) +chaos d8 = 8 → OVERRIDE, tier drawn: S +declared tier S (structural S, chaos 8 → S) +``` + +Declaration 3 of chaos window 2, and **the first override at d8** — it +fired on the second roll at the new rate. It changed nothing, which is +the first half of window 2's retirement condition (*retire if an override +changes nothing twice running*). **One.** + +## What the perceptual check found + +The maintainer ran it on 2026-08-03. **Item 1 passes** — the resting +affordance reads. Everything else has a defect, and several are defects in +things the tests call green, because no test here can see a layout. + +Quoted, because the wording carries the diagnosis: + +1. **Pickable is legible.** ✅ Nothing to do. +2. *"the card is picked up but the linebreak vanishes and the card below + does not vanish. So it is a little as if we have two cards now"* +3. *"the upper and left borders of the dashed lines seem to be hidden for + some items. Also for players the rectangle is quite large. Maybe we + should not have a new dashed line but just set the existing borderline + to dashed so that the layout is more stable and less complicated"* +4. *"replacing the content of the picked up card breaks the visual clue + about a card being moved"* +5. *"the orange status line does not change as you describe. It seems to + switch only if i put back a card"* +6. *"I cant follow the actions of the other players too well because they + do not visualize on the board other than by result and the log"* +7. *"maybe should read 'Game finished' if the players have been + successful… There is no button to start a new game"* + +## Task: the border moves, nothing else does + +```task +id: CB-WP-0020-T01 +status: todo +priority: high +``` + +**Adopt the maintainer's design instruction**: a legal drop target changes +its **existing border** to dashed and coloured. No second box. + +The current `outline: 2px dashed; outline-offset: 3px` draws a *new* +rectangle outside the element. That is why the top and left edges vanish +on some items — an `outline` on an SVG `` is clipped by the SVG +viewport, and on a card it collides with the neighbour's margin. It is +also why a seat's highlight is *"quite large"*: it outlines a whole card +when only the border needed to change. + +- HTML targets: restyle `border-style`/`border-color` in place. +- SVG targets: change the existing `stroke`, not an added outline. + +**Control:** the marked set must still equal the set Rust emitted +(ADR-0010 D2 property 1) — the mutation that derives targets instead of +reading them must stay red. This is a style change and must not become a +behaviour change. + +## Task: the thing in your hand looks like a thing in your hand + +```task +id: CB-WP-0020-T02 +status: todo +priority: high +``` + +Two reports, one cause. The ghost is a `textContent` copy of the card, so +(2) the `
` collapses and it reads as a *second card*, and (4) the +explanation **replaces** the label, so the only thing identifying what you +are carrying disappears exactly when you need it. + +- The ghost must not impersonate a card. Make it read as a held token: + smaller, distinct, and it may keep the line break. +- The explanation is **additional**, never a replacement. Carrying + *"Attack"* and hovering P2 should show both — the label and *"commit + Attack against P2"*. +- The element left behind must look **left behind**, so there are not two + cards. + +**Control:** the description shown must still be the one Rust wrote for +that pair (ADR-0010 D1) — the neighbouring-pair mutation stays red. And a +new one: the ghost must still name what is held when an explanation is +showing, so a mutation that drops the label goes red. + +## Task: say why a drop was refused, in words + +```task +id: CB-WP-0020-T03 +status: todo +priority: high +``` + +Reported: the status line *"seems to switch only if i put back a card"*, +and then reads `action-attack -> action-attack is not a legal move here`. + +Two defects. + +**The refusal is written in element ids.** `resolve` returns +`"{down} -> {up} is not a legal move here"`, which is the vocabulary of +the DOM, not of the game. A player reads *"you cannot Attack yourself"*. + +**And the no-target path apparently never fires.** CB-WP-0018 added +*"took … , let go over nothing droppable"* for a drop on nothing, and the +maintainer did not see it. Find out why before changing anything — +the likely answer is that there is almost no bare background to drop on, +every part of the page being a card, in which case the message is correct +and unreachable, and the fix is elsewhere. **Do not "fix" a message that +already works; reproduce the report first.** + +## Task: show what the other players did + +```task +id: CB-WP-0020-T04 +status: todo +priority: medium +``` + +Reported: *"I cant follow the actions of the other players"*. + +After Reveal, selections are public (GR-R04) and the seat card **does** +carry them — as `Selection { action: Solve, target: None, problem: Some(1) }`. +That is a `Debug` impl on a player-facing surface, which is the same +defect the log fixed in CB-WP-0018 and did not fix here. + +Render a seat's revealed selection in the same words the log uses. Reuse, +do not re-phrase: a second vocabulary drifts from the first. + +**Control:** a seat's rendered selection must match the log's phrasing for +the same command, asserted rather than eyeballed. + +## Task: the game ends in a way you can act on + +```task +id: CB-WP-0020-T05 +status: todo +priority: medium +``` + +Three things, in the order they matter: + +- **"game over" is the wrong headline when the group succeeded.** It + should say what happened — the outcome carries `group_success`, so use + it. +- **A new game.** Reported as *"would be nice"*, and it is more than that: + the only way to play twice today is to go back to a terminal, which + makes the browser a strictly worse client than the CLI it was meant to + replace. +- **The scores read 0 and the winner is nobody.** That is very likely the + stand-in dataset, not a scoring bug — GROUND-WP-0002 T01 has now ruled + the edition data authoritative. **Do not fix scoring here.** Confirm the + cause and record it; the import is its own pass. + +## Task: evidence + +```task +id: CB-WP-0020-T06 +status: todo +priority: high +``` + +`evidence/CB-EV-0018-*.md`. + +- **What the perceptual check bought this time**, and the running count: + four runs, four sets of defects no test could reach. +- **Which of these the test suite called green**, and whether any of them + *could* have been caught mechanically — for those that could, say why + they were not, and for those that could not, say so plainly rather than + proposing a check that would not work. +- **Chaos: the first override at d8**, and that it changed nothing. That + is one half of window 2's retirement condition; record it as such. +- **Quote CB-WP-0019's cost by re-running the instrument**, per the rule + it wrote.