Cancelling a session holds the hours by default — they stay counted until an admin returns them, either at cancel time (checkbox) or later on the cancelled tile.
When a session is cancelled — whether by an admin (owner / manager) or by the instructor — the hours stay counted against the instructor's monthly allowance by default. Nothing is returned automatically. A cancellation never silently changes the instructor's contracted-hours total; it only moves the moment an admin chooses to credit hours back.
When you (an owner or manager) cancel a session, the Cancel dialog now has a "Return the hours to the instructor now" checkbox — tick it to credit the minutes back as part of the cancel, so the session never counts against their monthly hours. It's available on the single-session cancel, the per-row cancel, and the bulk-cancel dialog, and defaults OFF (hours stay held). This is exactly the case where you sub a room booking in for a cancelled class and don't want the cancelled class counted. If you leave it off, you can still return the hours later: every cancelled tile in a class's Upcoming Sessions list and the Bookings card on the instructor's own profile page carry the same Return hours / Hold hours toggle. The badge shows the current state ("Hours returned" / "Hours held") plus an attribution badge — now with the actual person's name ("By Jamie Bischoff") on the instructor's Bookings card, so you can tell who cancelled without guessing.
When an instructor cancels one of their own sessions, owners and can-manage managers get an email (the same "Instructor bookings" notification that covers new bookings — toggle it under Settings → Notifications). It flags that the minutes are still held against the allowance and links straight to the session so you can decide whether to return them. Admin-initiated cancellations don't send this — you already know about your own.
Whatever you set is reflected immediately on the next tier-overage report calculation for that instructor, and on the Contract Hours card total.