chore: keep the fixture generator scripts and the replay-sample bot
scripts/fixtures/ holds the scripts that produced the 2026-11-11 fixtures, with a README on running them safely into a copy. Run in order they reproduce the content of every fixture they touch. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This commit is contained in:
1 parent
1e3cea5eac
commit
5062838604
17 files changed
+432
-3
No files matched your search
@@ -0,0 +1,29 @@
|
||||
# Fixture regeneration aids
|
||||
|
||||
The files in `fixtures/` are the contract (see `docs/contract.md`). They were produced by the small scripts in this folder, which import the JavaScript reference solutions from `js/solutions`, compute the expected value of each case, and write the JSON. The scripts are kept so that the *inputs* chosen for each case are not lost and so that new cases can be added the same way. They are maintainer aids, not part of any check.
|
||||
|
||||
**Before running one, read it.** Each writes into `fixtures/` unless the environment variable `FIXTURES_OUT` names another directory (with a trailing slash). The safe way to use them:
|
||||
|
||||
```sh
|
||||
tmp=$(mktemp -d) && cp fixtures/*.json "$tmp/"
|
||||
FIXTURES_OUT="$tmp/" node scripts/fixtures/m13-life.mjs
|
||||
diff -r fixtures "$tmp" # read the difference by hand before copying anything back
|
||||
```
|
||||
|
||||
A changed expectation in an existing case is a contract change: decide it on purpose, port it to Scala and F#, and record it in the build log.
|
||||
|
||||
| Script | Writes | Notes |
|
||||
|---|---|---|
|
||||
| `audit-frame-pong-tick-cases.mjs` | `m10-update` (the `frame-…` cases), `m04-tick` (`eating-the-last-free-cell-wins`), `m11-pong-update` (restart and edge cases) | Replaces cases by name inside existing files. |
|
||||
| `m12-violations.mjs` | `m12-violations` | The base cases; overwrites the file. Run the queue cases after it. |
|
||||
| `add-queued-field.mjs` | every fixture that contains a game state | One-off migration that added `"queued": null`. Idempotent. |
|
||||
| `m10-update-queue-cases.mjs` | `m10-update` (the 16 turn-queue cases) | Replaces by name, appends at the end. |
|
||||
| `m12-violations-queue-cases.mjs` | `m12-violations` (the 3 queue cases) | Replaces by name, appends at the end. |
|
||||
| `m10-session-and-golden.mjs` | `m10-session-update`, `m10-session-view`, `m10-golden` | The golden cases replay the event lists in `golden-events/` through `play(main, …)`. |
|
||||
| `m10-viewer.mjs` | `m10-viewer-update`, `m10-viewer-key`, `m10-viewer-view` | Overwrites the three files. |
|
||||
| `m13-life.mjs` | `m13-life-step`, `-update`, `-key`, `-click`, `-view` | Overwrites the five files, one case per line. `m13-life-update.json` in the repo has the same content in the indented format. |
|
||||
| `replay-sample-bot.mjs [seed]` | `replay-sample.json` when a seed is given | A greedy bot that plays the pure game. Without an argument it only lists seeds whose game has 150–400 actions and at least 5 apples. The shipped sample is seed 1. |
|
||||
|
||||
Run in the order of the table (the first five build on each other), into a copy of the current fixtures, they reproduce the content of every file they touch. This was checked on 2026-11-11.
|
||||
|
||||
Fixtures from before 2026-11-11 (`m00`–`m09`, `m10-input`, `m10-moves-every`, `m11-pong-key`, `m11-pong-view`, and the original cases of the others) have no generator here; their scripts were not kept. Add cases to them with a small script in the same style.
|
||||
Reference in new issue
Block a user