system

Use when

You need to decide how long a sitting is, what a "run" contains, and how sessions nest into a longer arc.

Session Structure

What it is. The containers play nests into — a moment, a level or encounter, a run or session, and the meta arc across them — and the length and shape of each. Session structure decides “how long is one sitting, what does it contain, and how do sittings add up?” A 3-minute Vampire Survivors push and a 40-turn Slay the Spire climb are the same genre-family with wildly different session shapes.

Player fantasy / why it’s fun. A satisfying unit of time. A good session has a clean arc — start, build, climax, resolution — that fits a real sitting and leaves a hook. The pull is closure-plus-appetite: “one more run” works because each run finishes something and promises something.

When to use / when NOT

This is a framing system — every game has a session shape whether or not you design it. Reach for it explicitly when:

Design it deliberately whenIt’s near-trivial when
Runs/campaigns/roguelite structure is coreA single continuous level (endless arcade)
You’re deciding meta vs. per-run persistenceA one-sitting puzzle box
Session length is a selling point (coffee-break vs. epic)

The nesting

TierSpanOwnsEnds when
Momentsecondsone verb → feedbackthe input resolves (process-core-loop)
Encounter / level1–5 minone fight or roomcleared / failed
Run / session5–60 mina sequence of encounters + choiceswin / death / objective
Meta / campaignmany runspersistent progress, unlocks, storythe long goal (system-meta-progression)

The two big shape decisions:

DecisionOptionsConsequence
Session lengthcoffee-break (3–10 min) · sitting (20–60) · epic (hours)sets stakes per run and save granularity
Persistencefully reset · roguelite carry-over · fully persistentresets make death cheap; persistence makes it heavy

Tuning levers

LeverEffectWatch for
Run lengthstakes & commitment per sessiontoo long = quitting mid-run loses progress; own it in system-save-and-checkpoint
Encounters per runthe run’s internal pacing arctoo few = no arc; too many = a slog
Meta gain per runhow much a failed run still earnszero = punishing; too much = trivial
Hook strengththe pull into the next sessionnone = the loop doesn’t restart

How it wires to Hayao

Fails when…

Verify

Composes with

See also

This module rendersthe repo's markdowndirectly — edit it there, it changes here.