--- id: CB-WP-0043 kind: product title: "A Problem sits where its Stress lands" status: done state_hub_workstream_id: "9b80b371-d947-41e4-a027-4c3ee9dbc542" --- # Purpose ``` structural tier M (adds a field to the projection, which is a canonical interface) declared tier M ``` **No chaos roll** — retired by [ADR-0021](../decisions/ADR-0021-the-chaos-roll-is-retired.md). ## The report > *"We need to place the problems next to the player that is affected. > Only global problems affecting all should go to the middle of the table. > Problems attached to people that also affect their bonds should be > placed close to the bond lines of the player."* **The picture had become a lie.** A row of Problems across the middle says *these are the table's*, which is true under the baseline and false under H2, where three of five cards fall on particular seats. ## Task: place them where the Stress lands ```task id: CB-WP-0043-T01 status: done priority: high state_hub_task_id: "9e7a24de-b392-402a-aa08-8b20906c1f0f" ``` | scope | where | |---|---| | `global` | the middle — it really is everyone's | | `personal` | beside its owner, 52% of the way from the seat to the table centre | | `bond` | the mean midpoint of the owner's Bond edges — *on the lines* | **Controls:** - **the baseline page is unchanged.** A variant that redraws the baseline invalidates every prior look at it — the scoped layout is taken only when a non-global scope exists; - **a bond Problem with no Bonds is drawn as personal**, because that is the *rule* (`bond_network` falls back to the owner at degree 0) and the picture must agree with the arithmetic; - the placement is asserted, not the fact that something was drawn. **Done 2026-08-08.** **The scope reaches the view as a separate marker**, not as a field on `ProblemView`: the delta says *"place owner marker on the card"* — a token beside a card — and it is **public while the card is face down**, which a variant of `ProblemView` could not express. **The coverage probe forced a real improvement.** It demanded a text token for the new fields, and a *position* is not a token. That is the probe being right: **position alone is invisible to `text_of` and to a screen reader, and illegible when two anchors coincide.** So each scoped Problem now *says* whose it is — "everyone's", "P1's alone", "P2's Bond network", and "P1's alone — no Bond to share it" at degree 0. **The fixture gained a third Problem.** With two, one of the three placement rules was unexercised and the probe unsatisfiable — a fixture that cannot reach a branch is how a rule ships untested. ## Not done - **Nothing tells a player what the scope *means*** — that an unclaimed personal card ticks only its owner. The position and the label say *whose*, not *what happens*. That is a rules-legibility question and the edition's `Rules_Text.csv` for H2 is vendored and unread. - **No felt-play.** Whether the placement reads as intended at a table is exactly the class ADR-0010 D5 says only a human answers.