CB-WP-0043: a Problem sits where its Stress lands
Some checks failed
ci / check (push) Failing after 4s

The picture had become a lie. A row across the middle says "these are the
table's" — true under the baseline, false under H2, where three of five
cards fall on particular seats.

Global goes to the middle, personal beside its owner, and bond on the mean
midpoint of the owner's Bond edges. A bond Problem whose owner has no Bond
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 baseline page is untouched: the scoped layout is taken only when a
non-global scope exists, so every prior look at the baseline still holds.

The scope reaches the view as a separate marker rather than a field on
ProblemView, because 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 ProblemView variant 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 — which 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.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-08 17:30:14 +02:00
parent 47e7941057
commit 3174c5507a
6 changed files with 373 additions and 12 deletions

View file

@ -0,0 +1,78 @@
---
id: CB-WP-0043
kind: product
title: "A Problem sits where its Stress lands"
status: done
---
# 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
```
| 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.