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>
262 lines
11 KiB
Markdown
262 lines
11 KiB
Markdown
---
|
||
id: CB-RES-0010
|
||
capability: design.space.aspects
|
||
status: adopted — terminology and structure for ground-game catalog schema 2
|
||
tier: M
|
||
date: 2026-08-08
|
||
upstream: ground-game editions/ASPECTS.md, editions/CATALOG.md
|
||
related: CB-RES-0009 (extensive form), CB-RES-0007 (design instrument), ADR-0012
|
||
---
|
||
|
||
# CB-RES-0010 — Game aspects, design space, and composable rules modules
|
||
|
||
Research digest for **clay-borg** as the simulator and design environment.
|
||
ground-game owns edition content and the normative catalog; this note
|
||
records the **concepts and sources** so selection APIs, panels, and
|
||
recordings evolve around a shared model of **design dimensionality**.
|
||
|
||
---
|
||
|
||
## 1. Problem this solves
|
||
|
||
GROUND rules experiments began as **monolithic packages** (H1, H2): each
|
||
bundled several independent design decisions. That blocked:
|
||
|
||
- measuring one change at a time;
|
||
- combining two good ideas without rewriting a third package;
|
||
- naming *what point in design space* a trial actually played.
|
||
|
||
ground-game schema 2 replaces mega-experiments with:
|
||
|
||
```text
|
||
configuration = baseline content
|
||
× aspect₁ (one module)
|
||
× aspect₂ (one module)
|
||
× …
|
||
```
|
||
|
||
clay-borg must select, apply, record, and report configurations in those
|
||
terms.
|
||
|
||
---
|
||
|
||
## 2. Core vocabulary (normative for this fleet)
|
||
|
||
| Term | Meaning | Clay-borg duty |
|
||
|------|---------|----------------|
|
||
| **Aspect** | Orthogonal **design dimension** of the game (e.g. end condition, problem→stress routing) | List known aspects; enforce ≤1 module each |
|
||
| **Module** | One concrete design on one aspect (`problem_stress.scoped`) | Load `rules_delta` + overlays; implement kernel deltas |
|
||
| **Default module** | Printed / r0 answer when no experiment is selected | Implicit when aspect omitted from selection |
|
||
| **Profile** | Named list of modules (`h2`, `scoped_plus_attack_soothe`) | Expand to modules; do not treat as separate rules source |
|
||
| **Baseline** | Content package (`ground-darvo-r0`) | Vendor CSVs; pin digests (ADR-0011) |
|
||
| **Configuration** | Baseline + **resolved** module list | **Persist on every game / replay / panel cell** |
|
||
|
||
**Independence rule:** a module owns only its aspect. Cross-aspect
|
||
behaviour is an explicit profile (or a new aspect), never a hidden
|
||
dependency.
|
||
|
||
**Synonym:** early ground-game drafts said *axis* for aspect. Prefer
|
||
**aspect** in UI, docs, and state fields; accept `axis` only as a deprecated
|
||
alias when reading old configs.
|
||
|
||
Authoritative inventory for GROUND:
|
||
`../ground-game/editions/ASPECTS.md` (sibling checkout) or the vendored
|
||
copy when present under `editions/`.
|
||
|
||
---
|
||
|
||
## 3. Is there an established concept? (sources)
|
||
|
||
There is **no single standard named “aspects of a game”** with a fixed ISO
|
||
list. Several traditions describe the same idea: **games as a point in a
|
||
multi-dimensional design space**.
|
||
|
||
### 3.1 Game design (primary fit)
|
||
|
||
| Source | Idea | Use for us |
|
||
|--------|------|------------|
|
||
| **Tracy Fullerton**, *Game Design Workshop* — formal elements | Players, objectives, procedures, rules, resources, conflict, boundaries, outcome | Coarse checklist; maps to Structure / Economy groups in ASPECTS.md |
|
||
| **Hunicke, LeBlanc, Zubek** — **MDA** (Mechanics–Dynamics–Aesthetics) | Mechanics generate dynamics; dynamics produce aesthetics | Module = mechanic change; panel = dynamics; design intent = aesthetics. Findings (ADR-0012) sit on dynamics. |
|
||
| **Elias, Garfield, Gutschera** — *Characteristics of Games* | Games differ along **independent dimensions** (player count, outcome type, information, length, skill/chance, diplomacy, …) | Closest published match to “dimensionality of a game” as separable choices |
|
||
| **Design space / possibility space** (common practice; e.g. Salen & Zimmerman *Rules of Play* discourse; modern “explore the design space”) | Varying parameters yields a space of games | Configuration = coordinates; modules = values on coordinates |
|
||
| **BoardGameGeek mechanics taxonomy** | Named mechanisms (worker placement, …) | Vocabulary only — overlapping, not an orthogonal basis |
|
||
|
||
### 3.2 Game theory (analysis substrate, not the aspect list)
|
||
|
||
| Source | Idea | Use for us |
|
||
|--------|------|------------|
|
||
| **Extensive-form games** (von Neumann–Morgenstern lineage; modern texts e.g. Osborne, *An Introduction to Game Theory*) | Histories, information sets, chance, terminal payoffs | Formal object for *analysis* (see CB-RES-0009). Simultaneous moves = sequenced + hidden. |
|
||
| **Normal / strategic form** | Players, action sets, payoff matrices | Too coarse for multi-round DARVO sequences and hidden Problems |
|
||
| **Mechanism design** | Choosing rules to induce outcomes | Useful metaphor for “we design modules to shift incentives”; not a list of aspects |
|
||
|
||
**Do not** derive the aspect list from game theory alone. Derive aspects
|
||
from **what designers vary**; use game theory to **measure incentives**
|
||
inside a fixed configuration (e.g. “does ATTACK pay?”).
|
||
|
||
### 3.3 AI / general game playing (implementation relatives)
|
||
|
||
| Source | Idea | Use for us |
|
||
|--------|------|------------|
|
||
| **Ludii GDL** / general game systems | Declarative game description; universality results for extensive form | Confirms EFG as lingua franca (CB-RES-0009); not a substitute for aspect modularity |
|
||
| **OpenSpiel**, **RBG**, etc. | Multi-game research APIs | Comparable “game + parameters” thinking; our parameters are *design modules*, not only RNG seeds |
|
||
|
||
### 3.4 What we claim (and do not)
|
||
|
||
**Claim:** Treating GROUND rules variation as **modules on aspects** is
|
||
consistent with design-space practice and *Characteristics of Games*
|
||
dimensional thinking, operationalized for edition + simulator work.
|
||
|
||
**Do not claim:** That “aspect” is a reserved term in game theory, or that
|
||
our aspect list is complete for all games forever.
|
||
|
||
---
|
||
|
||
## 4. GROUND aspect groups (summary)
|
||
|
||
Full tables live in ground-game `editions/ASPECTS.md`. Groups:
|
||
|
||
| Group | Examples | Modular today? |
|
||
|-------|----------|----------------|
|
||
| **A. Structure** | end condition, turn structure, setup, information | `end_condition` modular; others mostly fixed r0 |
|
||
| **B. Content economy** | problem deal, solution economy, action set | `problem_deal` modular (proposed pressure deck) |
|
||
| **C. Pressure & regulation** | problem_stress, attack_relief, DARVO, GROUND | `problem_stress`, `attack_relief` modular |
|
||
| **D. Relationships** | bonds, rivalry, network scoring | fixed r0; bond-scope via problem_stress.scoped |
|
||
| **E. Product / frame** | scenario fiction, safety, difficulty, medium | mostly content / process |
|
||
|
||
Registered modular aspects (must be in selection validation):
|
||
|
||
1. `problem_stress` — default `none`; also `flat_any_open`, `scoped`
|
||
2. `attack_relief` — default `none`; also `self_soothe_ge4`
|
||
3. `end_condition` — default `fixed_rounds_5`; also `hybrid_clear_collapse` (proposed)
|
||
4. `problem_deal` — default `fixed_setup`; also `pressure_deck` (proposed)
|
||
|
||
---
|
||
|
||
## 5. Implications for clay-borg (design environment)
|
||
|
||
### 5.1 Selection API
|
||
|
||
Prefer:
|
||
|
||
```yaml
|
||
baseline: ground-darvo-r0
|
||
modules: [problem_stress.scoped]
|
||
# or
|
||
profile: h2
|
||
```
|
||
|
||
Legacy experiment ids (`h1-problem-stress`, `h2-scoped-problem-stress`)
|
||
remain aliases → expand to profiles. Prefer module/profile ids in new code.
|
||
|
||
### 5.2 Application order
|
||
|
||
Apply module `rules_delta` in the order of `aspects:` in
|
||
`ground-game/editions/catalog.yaml`. Refuse two modules on the same aspect.
|
||
|
||
### 5.3 Recording and panels
|
||
|
||
Every trial cell, replay, and `cb-play` session should store:
|
||
|
||
- `baseline_id`
|
||
- `modules: [ ... ]` fully resolved (defaults filled or explicit)
|
||
- optional `profile_id` if one was requested
|
||
|
||
Panel reports should **facet by aspect** when comparing (e.g. all configs
|
||
with `problem_stress.scoped` vs `none`), not only by legacy experiment
|
||
name.
|
||
|
||
### 5.4 Measurement hygiene (ties to design instrument)
|
||
|
||
- Prefer **one non-default module** when isolating a mechanism (alone).
|
||
- Use **profiles** when the hypothesis is interaction (scoped × hybrid end).
|
||
- Criterion tables in evidence should name **module ids**, not only “H2”.
|
||
- Policies that cannot see an aspect (e.g. bots that ignore bond scope)
|
||
cannot test aspect-specific *motivation* claims — report untested, not
|
||
failed (CB-EV-0032 criterion 4 pattern).
|
||
|
||
### 5.5 Kernel / UI evolution
|
||
|
||
| Surface | Direction |
|
||
|---------|-----------|
|
||
| `cb-play` / trials | `--profile` / `--module` flags; show active modules on the table |
|
||
| State hash / recordings | include configuration identity |
|
||
| HTML table | label which modules are live (CB-WP-0044 family) |
|
||
| Finding register | findings may be scoped to an aspect or module |
|
||
| Future | aspect-aware policy panel; “compose and sweep” harness |
|
||
|
||
### 5.6 Proposed modules (draft only)
|
||
|
||
Until `status` leaves `proposed` and a kernel path exists:
|
||
|
||
- `end_condition.hybrid_clear_collapse`
|
||
- `problem_deal.pressure_deck`
|
||
|
||
Do not report measurements for unimplemented modules. `allow_proposed`
|
||
should refuse or no-op loudly.
|
||
|
||
---
|
||
|
||
## 6. Legacy map
|
||
|
||
| Legacy experiment | Profile | Modules |
|
||
|-------------------|---------|---------|
|
||
| `h1-problem-stress` | `h1` | `problem_stress.flat_any_open` + `attack_relief.self_soothe_ge4` |
|
||
| `h2-scoped-problem-stress` | `h2` | `problem_stress.scoped` |
|
||
|
||
H1 mixed two aspects; H2 was already one aspect. Schema 2 makes that
|
||
decomposition explicit so the next change is not H3-the-blob.
|
||
|
||
---
|
||
|
||
## 7. Relation to other clay-borg research
|
||
|
||
| Doc | Relationship |
|
||
|------|----------------|
|
||
| **CB-RES-0007** design instrument | Findings attach to configurations; aspects name *which* rules class moved |
|
||
| **CB-RES-0008** could-we-have-won | Winnability is one dynamic; hold aspect coords when comparing |
|
||
| **CB-RES-0009** extensive form | Formal analysis language *under* a fixed configuration |
|
||
| **ADR-0011** vendor edition | Baseline content; modules add deltas on top |
|
||
| **ADR-0012** design instrument | Admissible findings still need failing reproductions |
|
||
|
||
---
|
||
|
||
## 8. Bibliography (digest-level)
|
||
|
||
Primary design:
|
||
|
||
1. Fullerton, T. *Game Design Workshop* — formal elements of games.
|
||
2. Hunicke, R., LeBlanc, M., Zubek, R. “MDA: A Formal Approach to Game Design and Game Research.”
|
||
3. Elias, G. S., Garfield, R., Gutschera, K. R. *Characteristics of Games*. MIT Press.
|
||
4. Salen, K., Zimmerman, E. *Rules of Play* — rules, play, culture; design space discourse.
|
||
|
||
Game theory / GGP (analysis, not aspect inventory):
|
||
|
||
5. Osborne, M. J. *An Introduction to Game Theory*.
|
||
6. Piette et al. / Ludii literature on GDL universality and extensive form (see CB-RES-0009).
|
||
7. OpenSpiel documentation — multi-game research environments.
|
||
|
||
Fleet documents:
|
||
|
||
8. ground-game `editions/ASPECTS.md`, `editions/CATALOG.md`, `editions/catalog.yaml` (schema_version: 2).
|
||
9. ground-game `history/260808-modular-variants.md`.
|
||
|
||
---
|
||
|
||
## 9. Adoption checklist (clay-borg)
|
||
|
||
- [ ] Parse ground-game catalog schema 2 (`aspects`, `modules`, `profiles`).
|
||
- [ ] Selection: `profile` or `modules[]` + baseline; fill defaults.
|
||
- [ ] Validate one module per aspect.
|
||
- [ ] Apply deltas in aspect order; `with_variant`-style setup for modules that assign owners.
|
||
- [ ] Persist resolved module list on state / replay / panel output.
|
||
- [ ] UI: show active modules.
|
||
- [ ] Deprecate bare experiment-only APIs only after alias coverage.
|
||
- [ ] Optional: panel sweep “hold all aspects fixed, vary one.”
|
||
|
||
---
|
||
|
||
## 10. One-sentence summary
|
||
|
||
**A GROUND rules configuration is a point in a multi-aspect design space;
|
||
clay-borg’s job is to select, run, record, and compare those points
|
||
without collapsing independent aspects into opaque experiment blobs.**
|