Summary ends with an empty "What's next?" heading on Gemma 4 #595
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
What happens
Both summary-only reruns with Gemma 4 26B (the router's
qwen3.5alias) on the dev replay session ended like this:The runs were on 2026-09-10 at 06:31 UTC (at #587) and 2026-09-11 at 03:28 UTC (at
6533fa1, which includes #591). In both, the heading is there with nothing after it. Prod is also on Gemma, because the router is shared, so a real session's summary will end the same way.Why
Both compose prompts ask the model to "end with a short 'What's next?' hook" (
beat_service.py~828,audio_service.py~139 and ~2879). Gemma reads the quoted phrase as a heading to print, prints it, and stops. The material for a hook was there. The last events are the party learning of a mid-sized city a few miles from an exit, and the circus rumour of a faster way between towns._WHATS_NEXT_REalready finds the hook fornote_unsummarised_windows, so the code can tell where it is.Fix
_WHATS_NEXT_RE), drop the empty heading rather than publish it. An empty heading reads as broken; a summary without a hook doesn't. Count it on the run record, the waytruncatedis, so it's visible rather than silent.Found while comparing summaries for #591.
Picking this up (2026-09-11), in one branch with #588's exact-duplicate case. Both changes are deterministic, so one dev rerun will show their effect.
The plan follows the body above:
note_unsummarised_windowsplaces its notes.hook_droppedcolumn onsummarisation_runs, so it's visible and not silent.#596 (the table-admin kind) is being built in parallel. It changes what the model produces, so it will be measured separately, after this one.
Fixed and measured. Merged in PR #598 (main
0935b7a) and deployed to dev, then checked with a summary-only rerun on the replay session (Gemma 4 26B, run6d3e6f54, 2026-09-11 05:45 UTC).The summary now ends with a real hook:
hook_droppedis false: the reworded instruction (HOOK_INSTRUCTION) was enough on its own, and the guard didn't need to fire. The guard stays for models that still print only the heading, and when it fires it's recorded on the run rather than hidden.Closing.