The maintainer's observation decided the design: aspects partition the GAME, strata partition our apparatus, and they are orthogonal. A module is one coordinate change in aspect space with an obligation in every stratum. So aspect identity must NOT be Rust types -- an aspect ground-game adds would make clay-borg fail to parse a configuration rather than fail to run it, welding the two coordinate systems at the one place they must stay independent. Chosen: identity as data (Configuration round-trips anything the catalog names), behaviour exhaustive (Rules, no catch-all), resolve() between. Decisive argument: the catalog ALREADY ships modules with a rules_delta and status: proposed, so a per-aspect enum would report them as "unknown module" -- indistinguishable from a typo, a false statement about the edition, and this project's signature failure shape. Two facts need two errors. Federating design authority is permanent, so the representation must outlive the implementation. Legacy ids alias forever through the catalog's own legacy_experiment_id, on the standard-Np precedent: 26 recordings name them and the expansion is exact, so there is nothing to deprecate. T00 done: the schema-2 mirror had arrived with no digests (19 files) and edition-check was red. Digests are now generated by WALKING editions/, not typed -- two reviews already found hand-written lists that made their own controls vacuous, and a mirror that grows a directory is what breaks a maintained list. PROVENANCE-catalog.md was a file inside the mirrored tree that upstream does not have; folded into our own PROVENANCE.md, since provenance about the mirror does not belong inside the thing it describes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
149 lines
9.7 KiB
Markdown
149 lines
9.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 84d43ac110615a678276c318a64a26d9996a9f3f2edbb1b72c38c3e12cf68149 ../ASPECTS.md
|
|
sha256 684abb9856e81d456eb214efc7bcfc643e06200451daae1653c528a8b93f5c66 ../CATALOG.md
|
|
sha256 297c36c67f19a3ccdab152c928f94ff39c861c7ce836c9dfc10a773a7fe51ee2 ../catalog.yaml
|
|
sha256 7b1cc0149122b855e827bc930576ed165bf7dd8d62707e845a9e514ce3521f8e ../experiments/h1-problem-stress/Actions.csv
|
|
sha256 62785f5e7e245c60171624d15de2f40187a44fec54f93c7d9705cf52584b1078 ../experiments/h1-problem-stress/Rules_Text.csv
|
|
sha256 49897a68056643a8cfccff32c9e4a9811018b4e4689b90a85124a487f2318369 ../experiments/h1-problem-stress/VARIANT.md
|
|
sha256 443199db94601cc889557e5e86823f374dbfdf875962fc84f95c01865605101c ../experiments/h1-problem-stress/metadata.json
|
|
sha256 f58e81f84ea2b0d16e39932261eb3f3d9890345cdf37ad6f0b3abc00636840be ../experiments/h1-problem-stress/rules_delta.yaml
|
|
sha256 4c81bae21d2ecb70c7424fa17445246a9b551b10e258d448634816c564e28f09 ../experiments/h2-scoped-problem-stress/Problems.csv
|
|
sha256 8ed8deb7ad142de1bda70dc11add339f742e8c12ac1f02d5f7c7ec8f17f77b1d ../experiments/h2-scoped-problem-stress/Rules_Text.csv
|
|
sha256 b0ffea41820ef35960d8c75ff0a734370a29a738e49fda74851fe5c2daafe53e ../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 54678e312332ab999826710ae30565c0bba4da76b781ba4f391ace0c4341e484 ../modules/attack_relief/none/MODULE.md
|
|
sha256 0eec2ef761c5f6548085156248f182fa077ac5aee7c657bd6bfa6ba22d53446b ../modules/attack_relief/self_soothe_ge4/MODULE.md
|
|
sha256 91463363a482219109bb6d5033019135b5b10505f55f6272b912c7a51cd90173 ../modules/attack_relief/self_soothe_ge4/rules_delta.yaml
|
|
sha256 a02aa5ee860aca71d3e7c19975dd5eb1c66d7c8a0f3d3ceca8dd9914b85d6c7e ../modules/end_condition/fixed_rounds_5/MODULE.md
|
|
sha256 6d7d1f5b1d629b61dc35299606393cdac969379bb6207b5c1e741ddbbf50c06e ../modules/end_condition/hybrid_clear_collapse/MODULE.md
|
|
sha256 8dda4def373cd4aaaefdf764c915ad54ae7a1b4d885ee2cd623e81f752fdb907 ../modules/end_condition/hybrid_clear_collapse/rules_delta.yaml
|
|
sha256 5b809680afdf9282a457f8d7f70b111bf18590f4867622e332f49e1ee4a23b08 ../modules/problem_deal/fixed_setup/MODULE.md
|
|
sha256 d8ddf74127aa6adf32be6a9e30dac4e6b9ff14da1a9e0bb74d2faf22794e8a57 ../modules/problem_deal/pressure_deck/MODULE.md
|
|
sha256 c05addd208e9d2c287a8da8a2112e24a6b30aa163b19fe763362eae59598ce30 ../modules/problem_deal/pressure_deck/rules_delta.yaml
|
|
sha256 a5e66fd60abef1cf965b0b20892548c65f4005c45f4d44c025e4756eff579897 ../modules/problem_stress/flat_any_open/MODULE.md
|
|
sha256 95fa5d4ad811407eda1cf31d99d5dd984e9d1d9af8c284e10df598874d0f06e3 ../modules/problem_stress/flat_any_open/rules_delta.yaml
|
|
sha256 1e9cb6e2dac046a9f48beccb0ddc09c41608306711320159ecdce3572562e454 ../modules/problem_stress/none/MODULE.md
|
|
sha256 aae98322a70e51b639b8c39ac45604807f5311ae55edc75b47199056a483c963 ../modules/problem_stress/scoped/MODULE.md
|
|
sha256 4c81bae21d2ecb70c7424fa17445246a9b551b10e258d448634816c564e28f09 ../modules/problem_stress/scoped/Problems.csv
|
|
sha256 8ed8deb7ad142de1bda70dc11add339f742e8c12ac1f02d5f7c7ec8f17f77b1d ../modules/problem_stress/scoped/Rules_Text.csv
|
|
sha256 960e8a35f5f214ff9936ea95c4ca9a9145e2a01a8258b1c873251b89ee23972f ../modules/problem_stress/scoped/rules_delta.yaml
|
|
```
|
|
|
|
**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.
|
|
|
|
## The catalog & module mirror (CB-WP-0048)
|
|
|
|
`editions/catalog.yaml`, `ASPECTS.md`, `CATALOG.md` and `modules/` mirror
|
|
ground-game so tools resolve paths without requiring a sibling checkout.
|
|
**ground-game remains the authority** for every design decision in them.
|
|
|
|
They are recorded above like any other sibling. The digest block is
|
|
**generated by walking `editions/`**, not typed: CB-REV-0002 #8 and
|
|
CB-REV-0003 #8 both found hand-written lists that made their own controls
|
|
vacuous, and a mirror that grows a directory is the case that breaks a
|
|
list a human maintains.
|
|
|
|
This note used to be `editions/PROVENANCE-catalog.md` — a file inside the
|
|
mirrored tree that upstream does not have, which `edition-check` correctly
|
|
refused as unexplained. Provenance about the mirror is ours, so it lives
|
|
with our other provenance rather than inside the thing it describes.
|
|
|
|
Research framing: `research/CB-RES-0010-game-aspects-and-design-space.md`.
|