Build a fixture that can witness what a tree changes
The stress fixture is sized from production and exists to weigh bytes, so it leaves every column it does not weigh at its default. Checked against a freshly built one, that is exactly the set phase 14 has to migrate: state_before and world_state_before NULL on all 600 rows, no scenario and so no RPG layer, no adventure scripts, both cursors 0, and a hundred retry histories whose two attempts carry byte-identical text with variant_index pinned at 0. That last one matters most. "Which attempt is live?" is the question SP4's migration answers when it decides which sibling node becomes the head of a turn, and against that fixture the question had no observable answer -- a migration that picked wrong would have looked correct. --rich fills in those columns and no others. A real RPG scenario read from the seed data rather than invented, with a world state played forward so hp declines and flags flip; monotonic per-action state snapshots, so a rollback that does not happen reads as a wrong number instead of as nothing; a gold script, story cards, non-zero cursors, pinned and forgotten memories; retry attempts with distinct texts, counts of two and three, and a live attempt that is often not the last written. Plus a second adventure, because a branch clause that forgot its adventure still looks right on a database holding one. The invariant SP4 reads -- text mirrors variants[variant_index] -- is asserted at build time rather than assumed. The plain fixture is untouched and re-measured unchanged at 1.8 kB, so the egress ceilings stay comparable. All six shapes run clean on --rich, including the turn path with the RPG layer and script pipeline now live. 283 tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Dvvqn9ZDR4ixeFPHNbww7
This commit is contained in:
committed by
Parth
co-authored by
Claude Opus 5
parent
1940e222a7
commit
5c1bcf7305
@@ -178,6 +178,42 @@ A pre-migration (**schema 45**) fixture is needed too, built by a script rather
|
||||
committed as a binary — but its only consumer is the SP1 migration test, so it lands
|
||||
there.
|
||||
|
||||
#### `--rich`: a correctness fixture beside the scale one
|
||||
|
||||
The measuring fixture is sized from production and leaves every column it does not weigh
|
||||
at its default. Checked against a freshly built one, that is exactly the set of columns a
|
||||
tree has to migrate: `state_before`/`world_state_before` NULL on all 600 rows, no
|
||||
scenario and so no RPG layer, no adventure scripts, both cursors 0, and 100 retry
|
||||
histories whose two attempts carry **byte-identical text with `variant_index` always 0** —
|
||||
so "which attempt is live?", the one question SP4's migration answers, had no observable
|
||||
answer.
|
||||
|
||||
`tools.stress_session --rich` fills in precisely those and nothing else:
|
||||
|
||||
```
|
||||
cd backend
|
||||
.venv/Scripts/python.exe -m tools.stress_session --rich --actions 30 --memories 12
|
||||
```
|
||||
|
||||
An RPG scenario built from the real seed schema with a world state played forward (hp
|
||||
100 → 71, flags flipping partway); per-action `state_before`/`world_state_before`
|
||||
snapshots that are monotonic, so a bad rollback reads as a wrong number rather than as
|
||||
nothing; a gold script on the adventure; story cards; non-zero memory and summary
|
||||
cursors with a real `story_summary`; pinned and forgotten memories; retry attempts with
|
||||
distinct texts, counts of 2 *and* 3, and a live attempt that is **often not the last one
|
||||
written**; and a second adventure, so "does this leak across adventures?" is answerable —
|
||||
a branch clause that forgot its adventure would still look correct on a database holding
|
||||
exactly one.
|
||||
|
||||
It is a correctness fixture, so prefer it small: what it is for is variety per row, not
|
||||
rows. **Its byte figures are not comparable to a plain run** and it does not replace the
|
||||
scale fixture — the plain one still holds the egress ceilings, and was re-measured
|
||||
unchanged (1.8 kB, actions 1.7 kB) after `--rich` was added.
|
||||
|
||||
The invariant `text == variants[variant_index]["text"]` holds on every retried row, and
|
||||
is asserted when the fixture is built. SP4's migration reads exactly that to decide which
|
||||
sibling becomes the head.
|
||||
|
||||
### SP1 — Schema and migration *(no behaviour change)*
|
||||
|
||||
| File | Change |
|
||||
|
||||
Reference in New Issue
Block a user