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 (
reservedUntilpasses — 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 2hextended claim for 4hreleased 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.