CB-WP-0036 done: the pace flag and the first ornament declarations
Some checks failed
ci / check (push) Failing after 4s
Some checks failed
ci / check (push) Failing after 4s
--pace speed|interactive, defaulting to Speed. Nothing reads it yet, and that is the point: it is the seam clay-animate attaches to, and a seam is cheap now where a retrofit would not be. A misspelt pace is refused rather than defaulting, because quietly falling back to Speed would look exactly like the renderer being broken. I3 is asserted rather than intended: the same scripted game at both paces must produce a byte-identical serialised recording and the same end state hash. Mutation-proven — leak the pace into the seed and it fails with "the recording differs by pace, so a renderer has become mechanism". specs/OrnamentRegister.md carries four declarations. This reverses the reasoning written in T03 earlier, which said the first declarations would come from F18's unvendored files: instances already existed. Hand order is what prompted the category, and "who deals" was the maintainer's own example. O3 is the interesting one — seat ORDER is mechanism because GR-R08 rotates Lead, while where a seat is drawn is not. I5 is executable: check_ornament_falsifier fails any row still declared that names no falsifier, mutation-proven red on O1. Presence, never adequacy, and the finding text says so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
b231c1b5e2
commit
bd9e168af5
7 changed files with 315 additions and 9 deletions
|
|
@ -2,7 +2,7 @@
|
|||
id: CB-WP-0036
|
||||
kind: product
|
||||
title: "Pace and ornamentation"
|
||||
status: active
|
||||
status: done
|
||||
state_hub_workstream_id: "698651ed-cccd-46f2-84cc-07b0bdb85ad0"
|
||||
---
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ any renderer — is the falsifier for the whole split.
|
|||
|
||||
```task
|
||||
id: CB-WP-0036-T02
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "e978b93b-fcbd-4853-a27d-5eca00f9ca19"
|
||||
```
|
||||
|
|
@ -104,11 +104,30 @@ state_hub_task_id: "e978b93b-fcbd-4853-a27d-5eca00f9ca19"
|
|||
it is the seam `clay-animate` will attach to, and a seam is cheap while
|
||||
a retrofit is not.
|
||||
|
||||
**Done 2026-08-07.** `--pace speed|interactive`, `Pace::Speed` the
|
||||
`Default`.
|
||||
|
||||
**I3 is asserted, not intended.** `pace_cannot_change_the_game` plays the
|
||||
same scripted game at both paces and compares the **serialised recording
|
||||
byte for byte**, plus the end state hash. Mutation-proven: leak the pace
|
||||
into the seed and it fails with *"the recording differs by pace, so a
|
||||
renderer has become mechanism"*.
|
||||
|
||||
**A misspelt pace is refused rather than defaulting.** `--pace cinematic`
|
||||
errors and names both values. Quietly falling back to Speed would look
|
||||
exactly like `clay-animate` being broken, and that is the seam this flag
|
||||
exists to be.
|
||||
|
||||
I4 needs no measurement yet and that is worth saying plainly: **nothing
|
||||
reads `pace`**, so the cost to `sim`, `trials` and the benchmarks is zero
|
||||
by construction rather than by benchmark. The measurement becomes real
|
||||
when something reads it.
|
||||
|
||||
## Task: declarations, once there are any to make
|
||||
|
||||
```task
|
||||
id: CB-WP-0036-T03
|
||||
status: todo
|
||||
status: done
|
||||
priority: low
|
||||
state_hub_task_id: "bf2a68b0-5985-40ff-b4f5-33c40d92cff0"
|
||||
```
|
||||
|
|
@ -116,12 +135,29 @@ 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.
|
||||
**Done 2026-08-07.** [`specs/OrnamentRegister.md`](../specs/OrnamentRegister.md),
|
||||
four declarations.
|
||||
|
||||
**This reverses the reasoning written here earlier**, which said the first
|
||||
declarations would come from F18's unvendored files and that vendoring was
|
||||
the trigger. That was wrong: **instances already existed.** Hand order is
|
||||
the one that prompted the whole category — the request to drag cards
|
||||
between slots — and *"who deals"* was the maintainer's own example. Waiting
|
||||
for F18 would have left the register empty while its instances sat in the
|
||||
conversation that created it.
|
||||
|
||||
The four: **O1 hand order** (provisional), **O2 who shuffles and deals**
|
||||
(provisional), **O3 where a seat is drawn** (`rule`-grounded — seat
|
||||
*order* is mechanism, GR-R08 rotates Lead; the drawn position is not),
|
||||
**O4 typography and illustration** (provisional, and **nothing may be
|
||||
declared about `Player_Mats` or `Glossary` until they are read** — F18).
|
||||
|
||||
**I5 is executable**: `check_ornament_falsifier` in `loop-lint` fails any
|
||||
row still `declared` that names no falsifier. Mutation-proven on O1 —
|
||||
strip its falsifier and the lint goes red. Three self-test controls: it
|
||||
catches a bare declaration, clears one that names a falsifier, and skips
|
||||
`refuted` rows as history. **Presence, never adequacy**, and the finding
|
||||
text says so — the same split as ADR-0018 D5.
|
||||
|
||||
## No longer in this repo
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue