clay-borg/editions/ground-darvo-r0/PROVENANCE.md
tegwick 04e26b3077
Some checks failed
ci / check (push) Failing after 4s
CB-WP-0042 T01-T04: H2's scoped stress, with the named defects caught
H2 is ground-game's answer to our H1 reading — that a flat +1 to every
seat is a solve-rate tax scaling with the number of Problems. Unclaimed
Problems now tick only the seats in scope: global (all), personal (the
owner), bond (the owner's Bond network over Bond edges only, degree 0
falling back to personal), assigned by hidden priority so 2p never has the
bond card in play.

T01: the package is vendored with digests, and H2's Problems.csv is r0's
with one column added and NOTHING else changed — checked, not assumed,
because the delta claims deal_and_thresholds unchanged and a silent
difference would make every H2-vs-baseline comparison a comparison of two
boards as well as two rule sets. Scopes are read from the column, not
derived from the priority in Rust: F25 exists because we hardcoded numbers
the edition already carried.

T02: owner and scope are new ProblemState fields, both Option and both
skipped when None, so a baseline state serialises without them and every
recorded scenario's hash is untouched — asserted on the JSON, not assumed.
with_variant() replaces the bare field write, because state.variant = v
would leave owners unassigned: a silently wrong game rather than a failing
one.

T03: every named defect is mutation-proven — traversing Rivalry edges,
applying stacking once, a degree-0 owner ticking everyone, personal
hitting everyone. The degree-0 mutation MISSED first: the fallback lives
inside bond_network and the mutation broke the None-owner arm instead, a
different branch. It stayed green until aimed at the path the test
exercises. A mutation that misses is not evidence the test works.

T04: ownership is not a permission. Filtering SOLVE to the owner turns it
red, which is the regression this task exists for — the engine had no
owner concept before T02 added one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 16:06:21 +02:00

112 lines
6.7 KiB
Markdown

# Vendored edition data — provenance
**Not ours.** This directory holds a copy of content owned by the
`ground-game` repository, vendored under ADR-0011 Decision 2 because the
build must not depend on a sibling checkout that CI does not have.
| | |
|---|---|
| upstream repo | `ground-game` |
| upstream repo path | `editions/ground-darvo-r0/` |
| authoritative? | **yes** — ruled by ground-game, GROUND-WP-0002 T01 |
## Files, and why each is here
| file | vendored | upstream revision | why |
|---|---|---|---|
| `Problems.csv` | 2026-08-04 | `9fd27a51` | the deal (ADR-0011) |
| `Actions.csv` | 2026-08-06 | `4fa3b8ed` | the five action cards' own words (ADR-0015 D2) |
| `Solutions.csv` | 2026-08-06 | `4fa3b8ed` | Solution titles and microcopy |
| `Modes.csv` | 2026-08-06 | `4fa3b8ed` | mode text and `scoring_tiebreak` |
| `Tokens.csv` | 2026-08-07 | `4fa3b8ed` | the components: `front_text`, `quantity`, `sides` (ADR-0016) |
| `DARVO.csv` | 2026-08-08 | `8886543` | **the DARVO sequence as rules**: `mandatory_effect`, `target_memory`, `advance` (CB-WP-0037 T02) |
| `Relations.csv` | 2026-08-08 | `8886543` | **how Bonds and Rivalries form and break**: `formation`, `breaking`, `rules_text` |
| `Scenarios.csv` | 2026-08-08 | `8886543` | the four scenarios and their setups — the engine deals one |
| `Player_Mats.csv` | 2026-08-08 | `8886543` | **`choice_rule` is GR-R03**, the stress gate — mechanism on a mat (CB-WP-0037 T03) |
| `Glossary.csv` | 2026-08-08 | `8886543` | the game's own words for its own terms, and `Relation slot` restates GR-L01's two |
**Why these three, now.** The engine already implements the DARVO
sequence and relation formation/breaking — from `GroundRules.md`, never
from the edition's own statement of them. That is not inert display data;
it is **rules taken from a secondary source and never checked against the
primary one**, and CB-WP-0037 T02 exists to check them.
**`Player_Mats.csv` is the reason a file is not the unit.** It is mostly
ornamentation — a symbol, a colour, a title per seat — and one column,
`choice_rule`, is GR-R03 itself: *"At Stress 0-3 choose any action. At
Stress 4-5 choose ATTACK or GROUND unless you spend a ready Freedom
token."* Classifying the file would have thrown the rule away with the
colour swatches (see [`Ornamentation.md`](../../specs/Ornamentation.md) §1.4).
**Deliberately absent**: `BOM`, `Print_Manifest`, `Back_Designs`,
`Symbols`, `Design_Tokens` — production artifacts for a physical print
run, meaningless to a simulator, and now declared as ornamentation with
falsifiers rather than merely skipped
([`OrnamentRegister.md`](../../specs/OrnamentRegister.md) O5-O7). And `Extensions.csv`, which names content
the designer placed *outside* the core; importing it would break the claim
that this engine plays the edition as printed (ADR-0015 D2).
## The catalog and the H1 experiment package
Vendored 2026-08-08 from `ground-game` `8886543` (CB-WP-0038). These are
**outside this directory**`editions/catalog.yaml` and
`editions/experiments/h1-problem-stress/` — because the catalog selects
*between* packages and does not belong inside one.
**Digests were claimed for these by CB-WP-0038 T01 and not recorded**;
the adversarial review ([CB-REV-0001](../../reviews/CB-REV-0001-h1.md))
reported it unverified and it was a real gap.
```
sha256 c469f984c3147861815e8fbd67cf1254de73368fad1654f4177f740c0c280499 ../catalog.yaml
sha256 4c81bae21d2ecb70c7424fa17445246a9b551b10e258d448634816c564e28f09 ../experiments/h2-scoped-problem-stress/Problems.csv
sha256 8ed8deb7ad142de1bda70dc11add339f742e8c12ac1f02d5f7c7ec8f17f77b1d ../experiments/h2-scoped-problem-stress/Rules_Text.csv
sha256 b2db91edc6798efca1ccf0b048bb0d7cb324e808e01d636ebca813527bcd0db2 ../experiments/h2-scoped-problem-stress/VARIANT.md
sha256 abf994f585fdfa9b2822614a7961e98141cded6a91c446916ff7fd48642de0a7 ../experiments/h2-scoped-problem-stress/metadata.json
sha256 8dc569b2ae62f88f7f64e282bc6bba3dbcc3ffcad276591baafbdd24cb6c16b7 ../experiments/h2-scoped-problem-stress/rules_delta.yaml
sha256 f58e81f84ea2b0d16e39932261eb3f3d9890345cdf37ad6f0b3abc00636840be ../experiments/h1-problem-stress/rules_delta.yaml
sha256 7b1cc0149122b855e827bc930576ed165bf7dd8d62707e845a9e514ce3521f8e ../experiments/h1-problem-stress/Actions.csv
sha256 62785f5e7e245c60171624d15de2f40187a44fec54f93c7d9705cf52584b1078 ../experiments/h1-problem-stress/Rules_Text.csv
sha256 b2714210c142f1d6d5bed8f9a795019e51829c627f9599ac0ebfa04ef60a37a5 ../experiments/h1-problem-stress/VARIANT.md
sha256 443199db94601cc889557e5e86823f374dbfdf875962fc84f95c01865605101c ../experiments/h1-problem-stress/metadata.json
```
**H2 vendored 2026-08-08** (CB-WP-0042). Its `Problems.csv` is r0's with
**one column added**`stress_scope` — and **nothing else changed**: same
rows, same `point_value`, `required_solution`, `visibility` and
`hidden_priority`. That is checked, not assumed, because the delta's
`unchanged:` list claims `deal_and_thresholds` and a silent change there
would move every baseline hash.
**`rules_delta.yaml` is the load-bearing one**: it is the executable
statement of H1, and the kernel implements it. A silent change there is a
silent change to what we measured.
## Digests
```
sha256 7a7a302aabecdeb419c562a029bec3e3576a306b0bd1175d1200de60d9530073 Actions.csv
sha256 0afb882dc8001f03bc48a152c9d8c36ad492ceeff2d30ef6a3a690937317f77b DARVO.csv
sha256 d06924a19f805feb9e2557fd5c06254ae2054e1f865265f45c26eb293f53bf12 Glossary.csv
sha256 565431571bc06adafb67edefd4b368839b6b94134c2289877384688cc643390b Modes.csv
sha256 ad2bfbf897bbb3878691cbdbfec739adc58d28cad3923a989dd46b426cce1395 Player_Mats.csv
sha256 0a04830c93b62dcb2f4411a9fbde576368a7427fe9e63c5015e606e4d42d23a0 Problems.csv
sha256 cd84c3b131c1b7a541e9e42529fdce2b7911f0832cce8c50cfcb8462d01dc551 Relations.csv
sha256 f830de9ca44417a7510e04a39ea24a070a81969b33a31fa68361fba132ad40cd Scenarios.csv
sha256 0bda1ee97de726b5e8c4404ab15ecc53a359e6c23db74fb41ecb51d78f9884ad Solutions.csv
sha256 25273bb6e74c9ad545c5e89dfe0f76b294d0a6cbef51f80d548039d5f0943484 Tokens.csv
```
`make edition-check` compares this against `../ground-game` when that
repository is present, and reports **`upstream not checked out`** as a
distinct outcome when it is not — never a pass. An absent check is
reported absent, not treated as satisfied (the shape ADR-0009 used for
`node`).
## What may not change under this revision
Per GROUND-WP-0002 T01's contract: `point_value` and
`required_solution` are **authoritative and frozen within `r0`**. The
engine hashes game state and both values are *in* that state, so a silent
change would rot every recorded scenario expectation. A change to either
is a new revision (`-r1`), and this digest is what notices.