prosolis
d7d0230223
N3/P4: give every seat a row of its own
...
The turn engine seats a party since P3, but only seat 0 survived a
suspend: seats 1+ reopened from their Mods on every step, rearming their
once-per-fight one-shots -- a party Halfling rerolled a nat 1 every round.
Split CombatStatuses into the fight-scoped half (the enemy's stance, the
round cursor) and the per-character half, ActorStatuses. The embed is
anonymous and untagged, so statuses_json stays the same flat object it
always was and every in-flight prod row decodes unchanged.
Seat 0 keeps living on combat_session. Seats 1+ get combat_participant
rows. That asymmetry is the point: a solo fight -- which is every fight
that has ever run, and the whole balance corpus -- writes exactly the
bytes it wrote before, and no participant rows at all. roster_size
guards the read, so the solo loader never issues the second query.
Parties commit their seats in the same transaction as the session row;
solo keeps its single unwrapped UPDATE.
expedition_party is the co-op roster. No party_id on dnd_expedition:
expedition_id already identifies the party, and a second key would be a
second answer to "who is in this party". Absent means solo, in both new
tables, so neither needs a bootstrap backfill.
The combat characterization golden is byte-identical.
Also seeds and re-powers the two statistical subclass tests. They drew
from the package-global RNG, so their verdict depended on how much
randomness every test declared before them happened to consume -- which
is why they flaked on a clean tree. Sweeping 40 seeds: Precision Attack
had a mean margin of +127 wins against a +50 threshold but a worst case
of -42, and Assassinate averaged +12.8 with two seeds outright negative.
Both effects are real; the trial counts were too low to see them. Seeded,
and raised to 24000/6000 trials, where all 40 seeds clear.
2026-07-09 21:23:35 -07:00
..
2026-07-09 20:21:17 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-05-27 19:41:49 -07:00
2026-05-09 14:25:22 -07:00
2026-05-13 22:53:58 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-05-09 14:25:22 -07:00
2026-05-21 23:56:18 -07:00
2026-04-26 07:57:31 -07:00
2026-07-09 19:22:10 -07:00
2026-04-08 15:50:28 -07:00
2026-05-12 21:59:19 -07:00
2026-07-09 18:49:19 -07:00
2026-07-09 18:49:19 -07:00
2026-07-09 18:49:19 -07:00
2026-05-09 14:25:21 -07:00
2026-07-09 19:22:10 -07:00
2026-05-16 12:40:17 -07:00
2026-03-27 21:26:19 -07:00
2026-04-28 22:37:04 -07:00
2026-04-10 16:50:49 -07:00
2026-05-09 21:32:47 -07:00
2026-04-24 22:23:58 -07:00
2026-04-08 23:01:39 -07:00
2026-04-10 16:50:49 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-05-16 12:40:17 -07:00
2026-05-16 12:40:17 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-03-27 21:26:19 -07:00
2026-05-09 21:32:47 -07:00
2026-04-10 16:50:49 -07:00
2026-05-09 14:25:23 -07:00
2026-07-09 18:29:31 -07:00
2026-07-09 18:29:31 -07:00
2026-07-09 18:29:31 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:23 -07:00
2026-05-22 08:42:47 -07:00
2026-05-09 14:25:22 -07:00
2026-05-22 08:42:47 -07:00
2026-05-17 16:20:10 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:22 -07:00
2026-05-23 10:30:47 -07:00
2026-07-09 19:22:10 -07:00
2026-05-14 21:19:31 -07:00
2026-04-08 15:50:28 -07:00
2026-05-15 14:43:11 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-04-08 22:41:21 -07:00
2026-07-09 18:29:31 -07:00
2026-07-09 18:29:31 -07:00
2026-05-16 12:40:17 -07:00
2026-07-09 19:47:16 -07:00
2026-04-08 17:04:40 -07:00
2026-03-31 18:47:49 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 15:28:42 -07:00
2026-05-14 15:28:42 -07:00
2026-05-14 15:28:42 -07:00
2026-07-09 20:29:05 -07:00
2026-05-28 21:55:34 -07:00
2026-05-14 22:06:31 -07:00
2026-05-14 18:00:29 -07:00
2026-05-14 18:00:29 -07:00
2026-03-27 21:26:19 -07:00
2026-03-26 09:22:02 -07:00
2026-04-18 01:07:25 -07:00
2026-05-28 09:35:04 -07:00
2026-06-18 06:34:16 -07:00
2026-05-15 12:11:27 -07:00
2026-05-09 14:25:23 -07:00
2026-07-09 19:36:24 -07:00
2026-05-12 21:54:40 -07:00
2026-04-18 01:07:25 -07:00
2026-05-09 17:23:08 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:22 -07:00
2026-05-17 14:11:39 -07:00
2026-05-14 07:53:17 -07:00
2026-07-09 18:29:31 -07:00
2026-05-12 21:59:19 -07:00
2026-07-09 20:21:17 -07:00
2026-04-18 01:05:22 -07:00
2026-07-09 20:43:37 -07:00
2026-05-22 09:26:17 -07:00
2026-05-09 14:25:22 -07:00
2026-06-18 06:34:16 -07:00
2026-07-09 21:23:35 -07:00
2026-05-16 12:53:00 -07:00
2026-05-16 12:40:17 -07:00
2026-07-09 20:29:05 -07:00
2026-07-09 21:23:35 -07:00
2026-07-09 21:23:35 -07:00
2026-07-09 21:23:35 -07:00
2026-05-15 12:11:27 -07:00
2026-05-12 21:59:19 -07:00
2026-07-09 21:23:35 -07:00
2026-07-09 20:43:37 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 14:25:21 -07:00
2026-05-17 14:11:39 -07:00
2026-05-12 21:59:19 -07:00
2026-06-18 00:28:05 -07:00
2026-05-12 21:59:19 -07:00
2026-05-28 21:55:34 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 22:17:03 -07:00
2026-05-28 08:14:13 -07:00
2026-05-28 08:14:13 -07:00
2026-05-12 21:59:19 -07:00
2026-05-15 12:11:27 -07:00
2026-05-12 21:59:19 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-15 12:11:27 -07:00
2026-05-13 22:53:06 -07:00
2026-05-14 22:37:47 -07:00
2026-05-14 22:37:47 -07:00
2026-05-17 12:24:18 -07:00
2026-05-17 17:03:20 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 17:21:33 -07:00
2026-05-27 20:01:50 -07:00
2026-05-27 19:41:49 -07:00
2026-07-09 19:36:24 -07:00
2026-05-15 12:11:27 -07:00
2026-07-09 18:29:31 -07:00
2026-06-18 06:34:16 -07:00
2026-05-27 19:48:44 -07:00
2026-05-15 12:11:27 -07:00
2026-07-09 18:29:31 -07:00
2026-05-13 22:53:58 -07:00
2026-05-17 17:03:20 -07:00
2026-05-09 14:25:22 -07:00
2026-05-21 23:56:18 -07:00
2026-07-09 18:49:19 -07:00
2026-07-09 18:49:19 -07:00
2026-05-09 14:25:22 -07:00
2026-05-16 12:40:17 -07:00
2026-05-15 12:11:27 -07:00
2026-05-21 23:56:11 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-27 19:48:44 -07:00
2026-05-27 20:01:50 -07:00
2026-05-27 18:42:57 -07:00
2026-05-09 15:17:30 -07:00
2026-05-09 14:25:22 -07:00
2026-05-27 18:42:57 -07:00
2026-05-15 12:11:27 -07:00
2026-05-21 23:40:54 -07:00
2026-05-27 19:07:37 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-15 11:29:03 -07:00
2026-05-09 14:25:21 -07:00
2026-05-16 12:53:00 -07:00
2026-05-12 21:59:19 -07:00
2026-05-14 21:30:15 -07:00
2026-05-12 21:59:19 -07:00
2026-05-17 16:20:10 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 19:47:01 -07:00
2026-05-17 17:03:20 -07:00
2026-05-17 16:06:46 -07:00
2026-05-23 10:14:51 -07:00
2026-05-14 22:06:31 -07:00
2026-06-03 17:23:53 -07:00
2026-07-09 19:22:10 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-23 10:14:51 -07:00
2026-05-09 14:25:21 -07:00
2026-05-27 22:00:02 -07:00
2026-05-14 21:30:15 -07:00
2026-05-09 14:25:21 -07:00
2026-05-15 14:43:11 -07:00
2026-05-14 21:53:06 -07:00
2026-05-14 15:18:18 -07:00
2026-05-27 22:00:02 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:22 -07:00
2026-07-09 21:23:35 -07:00
2026-05-16 12:53:00 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 18:38:57 -07:00
2026-05-16 12:40:17 -07:00
2026-05-28 09:35:04 -07:00
2026-05-16 12:53:00 -07:00
2026-05-12 21:59:19 -07:00
2026-07-09 19:36:24 -07:00
2026-05-09 14:25:22 -07:00
2026-07-09 19:47:16 -07:00
2026-05-09 14:25:22 -07:00
2026-05-14 22:06:31 -07:00
2026-05-09 15:17:30 -07:00
2026-05-09 14:25:22 -07:00
2026-05-09 14:25:22 -07:00
2026-05-17 17:03:20 -07:00
2026-05-09 14:25:22 -07:00
2026-07-09 18:29:31 -07:00
2026-05-12 21:59:19 -07:00
2026-07-09 19:36:24 -07:00
2026-05-12 21:59:19 -07:00
2026-07-09 19:47:16 -07:00
2026-05-27 17:24:36 -07:00
2026-05-09 14:25:22 -07:00
2026-05-27 18:13:33 -07:00
2026-05-28 09:35:04 -07:00
2026-06-28 17:39:29 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 21:37:29 -07:00
2026-05-16 12:40:17 -07:00
2026-05-27 16:57:57 -07:00
2026-05-27 20:40:04 -07:00
2026-05-27 20:40:04 -07:00
2026-05-27 19:07:37 -07:00
2026-05-27 19:48:44 -07:00
2026-07-09 18:49:19 -07:00
2026-05-15 12:24:03 -07:00
2026-05-15 12:11:27 -07:00
2026-07-09 21:23:35 -07:00
2026-07-09 21:23:35 -07:00
2026-05-27 20:47:28 -07:00
2026-06-18 06:34:16 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 23:38:06 -07:00
2026-03-26 23:38:06 -07:00
2026-05-21 18:05:37 -07:00
2026-05-09 14:25:21 -07:00
2026-05-21 18:05:37 -07:00
2026-05-22 07:25:08 -07:00
2026-03-26 09:22:02 -07:00
2026-05-21 22:58:31 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-03-22 10:09:57 -07:00
2026-04-18 01:06:50 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-05-09 14:25:21 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-04-18 14:11:59 -07:00
2026-05-27 18:42:57 -07:00
2026-04-18 14:11:59 -07:00
2026-04-18 14:11:59 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-03-10 16:58:15 -07:00
2026-04-26 10:09:32 -07:00
2026-07-09 18:52:32 -07:00
2026-07-09 18:52:32 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 14:25:21 -07:00
2026-05-09 14:25:21 -07:00
2026-07-09 18:32:23 -07:00
2026-07-09 19:22:10 -07:00
2026-07-09 19:22:10 -07:00
2026-05-14 22:37:47 -07:00
2026-05-14 18:00:29 -07:00
2026-05-14 18:00:29 -07:00
2026-03-27 21:26:19 -07:00
2026-03-27 11:55:47 -07:00
2026-03-30 17:11:45 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-05-09 14:25:23 -07:00
2026-05-21 23:45:57 -07:00
2026-05-28 15:30:48 -07:00
2026-05-15 08:03:42 -07:00
2026-05-09 14:25:23 -07:00
2026-05-09 14:25:23 -07:00
2026-03-11 00:45:25 -07:00
2026-03-08 18:25:18 -07:00
2026-03-27 11:55:47 -07:00
2026-03-26 09:22:02 -07:00
2026-03-10 18:08:05 -07:00
2026-04-08 17:04:40 -07:00
2026-06-18 06:34:16 -07:00
2026-03-08 18:25:18 -07:00
2026-05-09 20:20:56 -07:00
2026-05-12 21:59:19 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-03-11 00:45:25 -07:00
2026-04-10 16:50:49 -07:00
2026-03-08 18:25:18 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-03-29 20:51:28 -07:00
2026-03-29 09:27:00 -07:00
2026-04-18 01:07:25 -07:00
2026-07-09 18:52:32 -07:00
2026-04-08 17:04:40 -07:00
2026-04-26 10:09:32 -07:00
2026-03-11 00:45:25 -07:00
2026-03-29 16:24:59 -07:00
2026-03-26 09:22:02 -07:00
2026-04-01 18:58:33 -07:00
2026-04-10 16:50:49 -07:00
2026-03-29 16:24:59 -07:00
2026-04-18 01:07:25 -07:00
2026-06-03 17:23:53 -07:00
2026-04-08 15:24:49 -07:00
2026-05-28 20:00:09 -07:00
2026-05-28 20:00:09 -07:00
2026-05-27 17:32:29 -07:00
2026-05-27 17:32:29 -07:00
2026-05-28 20:00:09 -07:00
2026-05-28 20:00:09 -07:00
2026-05-28 20:00:09 -07:00
2026-05-28 20:00:09 -07:00
2026-05-27 17:32:29 -07:00
2026-05-27 17:32:29 -07:00
2026-05-27 17:24:36 -07:00
2026-05-27 17:24:36 -07:00
2026-05-27 17:46:38 -07:00
2026-05-27 17:46:38 -07:00
2026-05-09 16:41:46 -07:00
2026-05-21 23:56:18 -07:00
2026-05-09 17:17:19 -07:00
2026-07-09 19:36:24 -07:00
2026-05-27 17:32:29 -07:00
2026-05-27 17:32:29 -07:00
2026-05-28 19:02:58 -07:00
2026-05-28 20:00:09 -07:00
2026-05-28 20:00:09 -07:00
2026-05-27 17:46:38 -07:00
2026-05-27 17:46:38 -07:00
2026-05-27 17:24:36 -07:00
2026-07-09 19:36:24 -07:00
2026-07-09 19:47:16 -07:00
2026-07-09 19:47:16 -07:00