How-to
Position lifecycle: freeze, close, reopen
Open → Filled (auto on hire) → Open (auto on termination + keep_position_open). Freeze for cost-control hiring pauses. Close for true headcount cuts.
1 min readLast updated 25 May 2026
Jump to section
States
| State | Meaning |
|---|---|
| open | Budgeted, vacant, recruitable |
| filled | Has an active contract pointed at it |
| frozen | Temporarily paused (cost-control); recruitment can't target |
| closed | Permanently gone; not in current headcount |
Transitions
- open → filled — automatic when an offer is accepted (atomic hire) and links to this position
- filled → open — automatic when the employee is terminated WITH
keep_position_open=true - filled → closed — when termination has
keep_position_open=false(true headcount reduction) - open → frozen — manual, via Freeze button
- frozen → open — manual, via Unfreeze
- closed → open — manual, via Reopen
Freezing
- Open the position detail page.
- Click Freeze.
- Add an optional reason (cost control, restructure pending, etc.).
Frozen positions are excluded from the Vacancies view and recruitment can't create new jobs against them.
Closing
- Position detail > Close.
- Optional reason.
If the position has child positions reporting to it, the children's reports_to_position_id cascades up to the grandparent. No orphan subtrees.
Reopening
- Position detail > Reopen (only shown when status=closed).
- The position goes back to
openand can recruit again.
Audit trail
Every transition writes an audit log entry with actor, old status, new status, reason.