Some checks failed
ci / check (push) Failing after 3s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
135 lines
5.2 KiB
Markdown
135 lines
5.2 KiB
Markdown
---
|
|
id: CB-WP-0036
|
|
kind: product
|
|
title: "Pace and ornamentation"
|
|
status: active
|
|
state_hub_workstream_id: "698651ed-cccd-46f2-84cc-07b0bdb85ad0"
|
|
---
|
|
|
|
# Purpose
|
|
|
|
```
|
|
structural tier M (a driver parameter and a declared vocabulary; the
|
|
animation architecture that made this L has moved
|
|
out of this repo)
|
|
chaos d8 = 7 → no override
|
|
declared tier M
|
|
```
|
|
|
|
**Re-declared 2026-08-07, declaration 8 of chaos window 3.**
|
|
|
|
## Why this was rewritten, and what it used to say
|
|
|
|
Declared on 2026-08-07 as **tier L**, covering an animation layer,
|
|
Rust-computed transitions over the journal delta, and a client/server
|
|
interaction able to animate other players' moves. Chaos was d8 = 7, no
|
|
override. **No code was written**, and the tier-L adversarial review was
|
|
never run — which is the only reason this could be re-scoped rather than
|
|
unwound.
|
|
|
|
**The maintainer moved the animation out of clay-borg**, and the reasoning
|
|
is now [`specs/Ornamentation.md`](../specs/Ornamentation.md):
|
|
|
|
> the basic simulator should have the relevant concepts of simulation and
|
|
> interaction, feedback mechanisms etc. with very simple ui concepts and
|
|
> frontend, backend interactions to keep the focus on the game and
|
|
> simulation core
|
|
|
|
So movement, timing and layering belong to a later, separate
|
|
**`clay-animate`**; material behaviour to **`clay-physics`** beyond that.
|
|
**What stays here is the vocabulary, the boundary and the pace knob** —
|
|
and the invariants that keep the boundary real once something downstream
|
|
exists to test it.
|
|
|
|
**Two terms changed and the change is not cosmetic.** "Ritual" became
|
|
**ornamentation**, because half the category is material rather than
|
|
ceremonial — card stock, a typeface, the drift of a discard. And the test
|
|
is no longer *"does it have a decision in it"*: choosing who deals is a
|
|
decision and is ornamental. **The test is whether the state hash moves**,
|
|
which is executable, and which settles the open question the previous
|
|
version of this workplan left for a reviewer.
|
|
|
|
## Task: the concept, in the spec that governs structure
|
|
|
|
```task
|
|
id: CB-WP-0036-T01
|
|
status: done
|
|
priority: high
|
|
state_hub_task_id: "e7602796-cdb7-44cf-a39d-697b1e8e2a7f"
|
|
```
|
|
|
|
**Controls:**
|
|
- the boundary has a **falsifier**, not just a diagram;
|
|
- ornamentation is defined by a test something can **run**, not by taste;
|
|
- it says what is deliberately **not** built and why.
|
|
|
|
**Done 2026-08-07.** [`specs/Ornamentation.md`](../specs/Ornamentation.md).
|
|
|
|
**§1.1 makes the line executable** by reusing `state_hash` — the same
|
|
instrument that binds a trial note to a position (ADR-0019 D3).
|
|
|
|
**§2 is the part that earns its place in this repo rather than a
|
|
renderer's stylesheet.** Calling something ornamentation is a claim that
|
|
it does not matter, and this project's register is a list of times that
|
|
claim was wrong — `quantity` in `Tokens.csv`, F18's four unread files,
|
|
SOLVE offered where it could not act. So a declaration carries a
|
|
falsifier, and *provisional* is a state it must be able to say out loud.
|
|
|
|
**§3.1 restates ADR-0007 D5 one level up:** downstream may read, may not
|
|
decide. **§3.2 refuses to design the port**, because no consumer exists
|
|
and an interface built against an imagined client is the same defect as a
|
|
gate that cannot go red.
|
|
|
|
**§5 gives five invariants, four of them checkable today.** I3 — the same
|
|
seed and decisions produce a byte-identical recording at any pace, through
|
|
any renderer — is the falsifier for the whole split.
|
|
|
|
## Task: the pace parameter
|
|
|
|
```task
|
|
id: CB-WP-0036-T02
|
|
status: todo
|
|
priority: medium
|
|
state_hub_task_id: "e978b93b-fcbd-4853-a27d-5eca00f9ca19"
|
|
```
|
|
|
|
`--pace speed | interactive`, defaulting to **speed**, and **not**
|
|
`--mode` (taken by `ScoringMode`).
|
|
|
|
**Controls:**
|
|
- **I4 measured, not asserted**: `sim`, `trials` and the benchmarks are
|
|
unaffected — *nothing*, not *little*;
|
|
- `prefers-reduced-motion` behaves as speed;
|
|
- **the flag exists before anything reads it**, and that is deliberate:
|
|
it is the seam `clay-animate` will attach to, and a seam is cheap while
|
|
a retrofit is not.
|
|
|
|
## Task: declarations, once there are any to make
|
|
|
|
```task
|
|
id: CB-WP-0036-T03
|
|
status: todo
|
|
priority: low
|
|
state_hub_task_id: "bf2a68b0-5985-40ff-b4f5-33c40d92cff0"
|
|
```
|
|
|
|
Ornamentation declarations per §2.1 — what is ornamented, why it does not
|
|
bind, what would falsify it.
|
|
|
|
**Not started deliberately.** GameDesign §2's rule applies: **no kind
|
|
exists without an instance that instantiates it.** The first real
|
|
declarations are most likely to come from F18's unvendored files —
|
|
`Player_Mats` and `Glossary` are ornamentation-bearing data this engine
|
|
has never read — so **vendoring those is the trigger**, not a schema
|
|
designed in advance.
|
|
|
|
## No longer in this repo
|
|
|
|
- **the animation layer**, transitions over the journal delta, cards
|
|
summoned larger beside a seat and shrinking toward a target, discards
|
|
drifting — **`clay-animate`**;
|
|
- **material simulation** — **`clay-physics`**;
|
|
- **hand sorting**, which was T05 here: it is presentation of a hand whose
|
|
*contents* are mechanism, so it goes with the renderer. The constraint
|
|
survives the move and is now I1: sorting must not move `state_hash`,
|
|
because a hash that moved would break every trial note's binding.
|