Concept
Sessions have no shape: no cold-open recap, no engineered cliffhanger, no closing card. Serialized fiction runs on rhythm — this is cheap and enormous for "one more session."
Design
- "Previously on…": on session resume, the DM's first beat is prefixed by the engine recap (
recap.py already builds one — session_recap tool) rendered as a styled cinematic card in the chronicle BEFORE the new scene (viewer render of the recap text; the DM already receives it).
- Cliffhanger engine: when the player signals session end (or an inactivity threshold), the engine advises the DM: "CLOSING BEAT: end on an unresolved hook — name a looming threat, an unanswered question, or an arriving figure." Hook is logged (
scene_debt.py — the debt machinery is literally built for unresolved hooks) so the NEXT session's recap ends with it.
- Epilogue card: at session end render: XP gained, approval deltas (+reasons), world changes (top consequence lines — joint with the Consequence Surface issue), next hook. All from existing ledgers; zero new state.
Files
viewer/openworlds/ (recap + epilogue card components), servers/engine/server.py (an end_session_summary read-model), dungeon-master skill (CLOSING BEAT directive), scene_debt.py (hook logging — exists).
Acceptance
A two-session GUI run: session 1 ends with a logged hook + epilogue card showing real deltas; session 2 opens with the recap card ending on that hook. Behavioral gate unaffected.
Moves
cross_persona_sat, retention, story_craft (arc continuity).
Concept
Sessions have no shape: no cold-open recap, no engineered cliffhanger, no closing card. Serialized fiction runs on rhythm — this is cheap and enormous for "one more session."
Design
recap.pyalready builds one —session_recaptool) rendered as a styled cinematic card in the chronicle BEFORE the new scene (viewer render of the recap text; the DM already receives it).scene_debt.py— the debt machinery is literally built for unresolved hooks) so the NEXT session's recap ends with it.Files
viewer/openworlds/(recap + epilogue card components),servers/engine/server.py(anend_session_summaryread-model), dungeon-master skill (CLOSING BEAT directive),scene_debt.py(hook logging — exists).Acceptance
A two-session GUI run: session 1 ends with a logged hook + epilogue card showing real deltas; session 2 opens with the recap card ending on that hook. Behavioral gate unaffected.
Moves
cross_persona_sat, retention, story_craft (arc continuity).