Some checks failed
ci / check (push) Failing after 3s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
80 lines
3 KiB
Markdown
80 lines
3 KiB
Markdown
---
|
|
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.
|