Reference

Reservations

The product is named StagingReservation — slots can be reserved by a team member for a bounded amount of time. Reservations are soft: they warn other users before status changes, but never block. Admins can release someone else's claim if needed.

Claiming a slot

On the board, every unreserved slot shows a "Claim for" pill row:

┌────────────────────────────────────┐
│ Claim for [30m] [1h] [4h] [1d]    │
└────────────────────────────────────┘

Click a preset to claim the slot for that duration. The slot card then shows who holds it and how long is left:

┌────────────────────────────────────┐
│ 👤 @nick claimed this · 2h left    │
└────────────────────────────────────┘

If the holder added a note (via the ?note= form field or future UI), it shows next to the timer.

Releasing

Only the holder or a workspace admin can release a reservation. The chip shows a "Release" button when the viewer is allowed:

  • Holder: sees "Release your claim".
  • Admin (not holder): sees "Release this claim (admin)".
  • Anyone else: read-only chip.

Releasing also fires when:

  • The reservation auto-expires (reservedUntil passes — no action needed, it just stops showing).
  • The slot is deleted.
  • The workspace is deleted.

Extending

A holder (or admin) can extend a live reservation by re-claiming with a longer preset. The chip's "Release" button covers the common case of "I'm done early." There's no dedicated extend UI yet; in practice extending = re-claim with a larger preset.

What "soft lock" means in practice

If you try to flip a slot's status while it's held by someone else, the board shows a warning panel (the ConfirmAction pattern from elsewhere in the app):

Override @nick's claim? This slot is claimed by @nick for another 45m. Setting status to Deploying won't release their claim, but they'll see the change.

You can still continue — but you saw the warning. Reservations are a coordination tool, not a permission system.

Auto-expiry

Reservations have a hard 7-day cap. Anything past that is treated as "someone forgot to release" and the slot reverts to free at read time. There's no cron job — the filter is applied every render.

If you genuinely need a slot held for longer, claim it again at the end of the day.

Activity feed

Every reservation event lands in the board's activity feed:

  • claimed slot Staging/staging-1 for 2h
  • extended claim for 4h
  • released claim

So you can always see who held what, when.

What about hard locks?

Out of scope for now. A "no one can change status until released" mode would be useful for production deploys but isn't in the current roadmap. If you need it, get in touch — we'll prioritise based on demand.