feat(backend): label the GM's table admin instead of narrating it (#596) #599
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/596-table-admin-beats"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #596.
In the Gemma 4 replay, verified "events" included the GM fixing token positions, explaining a term, and working out which check reading a journal needs. They verify because the GM really said those lines. They clutter the event log, compete for the 30 events the summary is written from, and reach the prose: run 4 has "the group's positions were noted" and "When the GM asked if anyone other than Viquilonto (Viq) would examine the journal". #584 showed that telling this model to omit something doesn't hold, so this has it label instead.
What changes
table_adminbeat kind covers the table running the game: rules calls, which check to roll, token moves, sheet admin, and prompting the players.BEAT_TYPES. The prompt's type line and the json_schema enum llama.cpp enforces are both built from that one list, andtable_adminis last in it._coerce_beataccepts "table-admin" and "Table Admin".session_beats.kindis unconstrained text.table_adminunless the fiction changes, where it used to say not to record it. That was the omission instruction that didn't hold.select_beats_for_composeremovestable_adminbeats before the #589 time slicing, so they take no slice.render_beats_for_composeandunrepresented_beatsskip them too, so none can be narrated or retried as "dropped"._story_over_table_admin, in both ofdedupe_beats' rules): when two copies of one event differ only in that one istable_admin, the story copy wins. Verification still comes first, so a verified copy always beats an unverified one (#333).answer_shaped_beats(#584) skipstable_adminbeats, so its count keeps measuring answers that still pose as events.otherbeats that read like table admin ("The GM asks/explains/moves…", present or past tense). It shows whether the model uses the label, and changes nothing.SessionDetail.jsx):table_adminrows fold behind one quiet "N table-admin notes" line and expand in place in time order. The header counts story events only.table_admin_labelled.json), and fixtures can now list phrases the summary must not contain (expected.absent).Measurement plan
#598 (#595 and #588's exact duplicates) was merged and measured on its own first: that's run 4,
6d3e6f54. This one is measured on the next dev rerun against run 4. If the result is borderline, it gets a second rerun, since Gemma's event counts vary between runs.Checked
0935b7a.checkandformat --checkare clean.test_table_admin_beats.pycover:🤖 Generated with Claude Code