Event corrections, round two: relabel story vs table note, and emphasise an event into the summary #607

Closed
opened 2026-09-11 18:51:38 +00:00 by claude-bot · 2 comments
Collaborator

Follow-up to #424's correct-and-regenerate (PR #602). The owner used it on the dev replay and asked for two more corrections on 2026-09-11.

1. Relabel: story ↔ table note

The model's labels are the remaining source of error. It gives some table-side lines a story kind (run 8: "the group searched for a map…", "learned about the nature of a thresher"), and occasionally folds a fiction-bearing GM line away as table_admin (the perception results, the distance to the entry point).

  • The GM can switch any event between story and table note in the event log.
  • It follows the #424 model: it's held on the page until Regenerate summary, and recorded on the new run's copied beat with the original kind kept, so the model's label and the GM's decision both survive.
  • Relabelled to a table note: folded, and never narrated.
  • Relabelled to story: narrated like any story event, with a kind the GM picks, or a default.

2. Emphasise: make sure an event is in the summary

  • The GM marks an event as one the summary must include.
  • Owner decision: emphasis goes ON TOP of the compose cap (_COMPOSE_MAX_BEATS, 36), not inside it. Emphasised events never take a slot from the time-stratified pick (#589, #603). The pick runs over the rest with its normal limit, and the summary grows a little with each emphasis. The owner is fine with it being longer.
  • Compose gets the emphasised events marked as required, and the existing dropped-event retry (recover_dropped_events) treats a missing emphasised event as dropped.
  • Precedence: struck beats emphasis. A struck event is never narrated, so emphasis on it is ignored, and the UI doesn't offer both. Emphasis combines with rewrite (narrate the corrected text) and with relabel to story.

Storage and behaviour

  • Two new columns on session_beats: the relabel's original kind, and an emphasis flag. gm_action is single-valued (struck or rewritten), and a beat can be both rewritten and emphasised, so these are separate columns rather than new gm_action values.
  • The corrections are copied forward, like #424's. The source run is untouched, and players see the result: relabelled events folded or shown accordingly, never struck ones, and no emphasis markers.
  • They're also labelled data for #586's evaluation work: the model's kind against the GM's, and the events the GM insists on.

Known limitation, inherited from #424

Corrections belong to a run. A full reprocess (new extraction) produces new beats without them, which is the same as for strike and rewrite today.

Follow-up to #424's correct-and-regenerate (PR #602). The owner used it on the dev replay and asked for two more corrections on 2026-09-11. ## 1. Relabel: story ↔ table note The model's labels are the remaining source of error. It gives some table-side lines a story kind (run 8: "the group searched for a map…", "learned about the nature of a thresher"), and occasionally folds a fiction-bearing GM line away as `table_admin` (the perception results, the distance to the entry point). - **The GM can switch any event between story and table note** in the event log. - **It follows the #424 model:** it's held on the page until *Regenerate summary*, and recorded on the new run's copied beat with the **original kind kept**, so the model's label and the GM's decision both survive. - **Relabelled to a table note:** folded, and never narrated. - **Relabelled to story:** narrated like any story event, with a kind the GM picks, or a default. ## 2. Emphasise: make sure an event is in the summary - **The GM marks an event as one the summary must include.** - **Owner decision: emphasis goes ON TOP of the compose cap** (`_COMPOSE_MAX_BEATS`, 36), not inside it. Emphasised events never take a slot from the time-stratified pick (#589, #603). The pick runs over the rest with its normal limit, and the summary grows a little with each emphasis. The owner is fine with it being longer. - **Compose gets the emphasised events marked as required,** and the existing dropped-event retry (`recover_dropped_events`) treats a missing emphasised event as dropped. - **Precedence:** struck beats emphasis. A struck event is never narrated, so emphasis on it is ignored, and the UI doesn't offer both. Emphasis combines with rewrite (narrate the corrected text) and with relabel to story. ## Storage and behaviour - **Two new columns on `session_beats`:** the relabel's original kind, and an emphasis flag. `gm_action` is single-valued (struck or rewritten), and a beat can be both rewritten and emphasised, so these are separate columns rather than new `gm_action` values. - **The corrections are copied forward**, like #424's. The source run is untouched, and players see the result: relabelled events folded or shown accordingly, never struck ones, and no emphasis markers. - **They're also labelled data for #586's evaluation work:** the model's kind against the GM's, and the events the GM insists on. ## Known limitation, inherited from #424 Corrections belong to a run. A full reprocess (new extraction) produces new beats without them, which is the same as for strike and rewrite today.
Author
Collaborator

Picking this up (2026-09-11). Branch feat/607-relabel-emphasise, stacked on PR #606: #606 touches the same event-log component, so it will be rebased onto main once #606 merges.

The design follows the body above, plus these details:

  • Corrections compose. The recompose request keeps its existing strike and rewrite entries and gains relabel (with a kind) and emphasise. A beat can take several of them.
    • Strike excludes the rest.
    • Emphasis on a beat relabelled to a table note is rejected, since it would never be narrated.
    • Invalid combinations get a 422.
  • Emphasis sits on top of the cap (owner decision). Emphasised story events are taken first, the usual time-stratified pick runs over the rest with its normal limit, and the union is re-sorted. So k emphasised events over the cap gives 36 + k.
  • Compose sees the emphasised events marked as essential, with a rule that marked events must appear, and the dropped-event retry treats a missing one as dropped.
  • Migration a0f1a2b3c4d5 adds session_beats.gm_original_kind and gm_emphasised.

After merge, it will be measured on the dev replay: relabel the "searched for a map" and "thresher" lines to table notes, emphasise one event the time-sliced pick left out, regenerate, and check the prose.

**Picking this up** (2026-09-11). Branch `feat/607-relabel-emphasise`, stacked on PR #606: #606 touches the same event-log component, so it will be rebased onto main once #606 merges. The design follows the body above, plus these details: - **Corrections compose.** The recompose request keeps its existing `strike` and `rewrite` entries and gains `relabel` (with a kind) and `emphasise`. A beat can take several of them. - Strike excludes the rest. - Emphasis on a beat relabelled to a table note is rejected, since it would never be narrated. - Invalid combinations get a 422. - **Emphasis sits on top of the cap** (owner decision). Emphasised story events are taken first, the usual time-stratified pick runs over the rest with its normal limit, and the union is re-sorted. So k emphasised events over the cap gives `36 + k`. - **Compose sees the emphasised events marked as essential,** with a rule that marked events must appear, and the dropped-event retry treats a missing one as dropped. - **Migration `a0f1a2b3c4d5`** adds `session_beats.gm_original_kind` and `gm_emphasised`. **After merge,** it will be measured on the dev replay: relabel the "searched for a map" and "thresher" lines to table notes, emphasise one event the time-sliced pick left out, regenerate, and check the prose.
Author
Collaborator

Merged (PR #608, main 4c9cc56) and deployed to dev (migration a0f1a2b3c4d5; gm_original_kind and gm_emphasised are present).

As built:

  • Relabel: story ↔ table note, with a kind picker for story. The model's kind is kept in gm_original_kind.
  • Emphasise and un-emphasise: emphasised events go on top of the 36-event cap, so k emphasised events over the cap gives 36 + k. Compose sees them marked, and the dropped-event retry prefers drafts that keep them.
  • Combination rules: each refusal is a 422 with a test. Players see only the result, with no markers.

Deliberately not done: I didn't run a test regenerate on the dev replay myself. The owner has corrected and regenerated that summary by hand, and a test would replace their version. The behaviour is covered by the suite: 3397 backend tests, including a request-level test of the compose prompt, and 868 frontend tests. The owner will try it on their own corrected summary.

Inherited limitation: corrections belong to a run, so a full reprocess (new extraction) starts without them.

**Merged (PR #608, main `4c9cc56`) and deployed to dev** (migration `a0f1a2b3c4d5`; `gm_original_kind` and `gm_emphasised` are present). **As built:** - **Relabel:** story ↔ table note, with a kind picker for story. The model's kind is kept in `gm_original_kind`. - **Emphasise and un-emphasise:** emphasised events go on top of the 36-event cap, so k emphasised events over the cap gives `36 + k`. Compose sees them marked, and the dropped-event retry prefers drafts that keep them. - **Combination rules:** each refusal is a 422 with a test. Players see only the result, with no markers. **Deliberately not done:** I didn't run a test regenerate on the dev replay myself. The owner has corrected and regenerated that summary by hand, and a test would replace their version. The behaviour is covered by the suite: 3397 backend tests, including a request-level test of the compose prompt, and 868 frontend tests. The owner will try it on their own corrected summary. **Inherited limitation:** corrections belong to a run, so a full reprocess (new extraction) starts without them.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#607
No description provided.