scheduler agent never released the calendar hold when the candidate ghosted - the interviewer's calendar stayed...
Fixes schedulers that leave tentative calendar holds in place after a candidate ghosts. Use when holds have no expiry and no release path. Key trigger: an interviewer's calendar stays blocked for days after the candidate stopped responding.
TL;DR: Give every tentative hold an expiry and a release path, and auto-release holds when the candidate goes quiet. A hold is an optimistic lock; without a timeout, a ghosted candidate locks the interviewer's calendar indefinitely. Sweep for orphaned holds on a schedule as a safety net.
scheduler agent never released the calendar hold when the candidate ghosted - the interviewer's calendar stayed blocked for a week- List tentative holds older than your ghost threshold with no candidate response.
Expected: you find the stuck holds, including the week-old one blocking the interviewer.
- Release those holds and notify the interviewer that the slot is free again.
Expected: the interviewer's calendar clears and they get a short "slot released" note.
- Create all future holds with an explicit expiry (e.g. tentative events that lapse after 48 hours unless confirmed).
Expected: a new hold shows an end time after which it disappears on its own.
- Define ghost detection concretely: no reply to the invite or the confirmation nudge within the window counts as ghosted.
Expected: the rule is written down and the scheduler implements exactly that rule.
- Add a weekly sweep job that reports any hold past its expiry as a safety net.
Expected: the sweep returns empty in a healthy week and names the stuck holds when the auto-release misses.
Use this when
- Interviewer calendars stay blocked after candidates stop responding.
- Tentative holds are created without an end date or a cleanup path.
- The scheduler moves on to the next candidate and nobody owns the old hold.
Not for this skill when
- The hold is intentional and long-lived (e.g. a hiring manager block for interview weeks); those need a different lifecycle, not auto-release.
- The candidate responded and the interview is legitimately pending; the issue is slow confirmation, not ghosting.
- The calendar provider auto-expires tentatives and something else is holding the slot.
Variant phrasings
- calendar hold never released after candidate ghosted
- tentative interview block stuck on the calendar for a week
- scheduler left orphaned holds on interviewer calendars
- interviewer blocked by a hold for a candidate who vanished
Why it happens
A tentative hold is an optimistic lock on someone's time, and this implementation created the lock with no timeout and no owner for cleanup. Ghosting is the normal case in recruiting, not the exception, so "the candidate will respond" is not a release strategy. The scheduler moved on, the hold stayed, and the interviewer paid for the missing lifecycle.
Edge cases
- The candidate replies late, after the release: the scheduler should re-book cleanly instead of treating the slot as still held. Keep the release and the re-book as separate, explicit steps.
- The interviewer reused the freed slot before the candidate responded: the late reply needs a fresh slot search, not an assumption the old one is back.
- Holidays and weekends stretching the ghost window: count business days, or extend the threshold around known slow periods.
- Holds placed manually by recruiters: the agent should flag those for the recruiter rather than auto-releasing someone else's block.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_uW8f22nTHS4Fjpu4Xc9-Fg
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.