Job governance
Requisitions, approval chains, intake forms, job templates, and AI job post generation under the job_governance flag.
Jobs governance is a suite of hiring controls gated by the job_governance per-tenant feature grant. When enabled, org admins get two new settings tabs — Approvals and Intake Forms — plus requisition and template workflows across the app.
Flag slug: job_governance
What's included
| Capability | Primary surface |
|---|---|
| Requisitions & headcount | /dashboard/requisitions |
| Multi-step approvals | /dashboard/approvals, Settings → Approvals |
| Job templates | Position create → "Start from template" |
| Hiring manager intake forms | Settings → Intake Forms, linked from requisitions |
| AI job description generation | Position/requisition editors |
Everything is additive: without the grant, existing position flows are unchanged. Mutations throw PRECONDITION_FAILED when the grant is missing.
Requisitions
Requisitions represent approved headcount before a live job exists.
Typical flow:
flowchart TD
A[Hiring manager submits requisition] --> B{Approval chain}
B -->|Approved| C[Requisition APPROVED]
B -->|Rejected| D[Requisition REJECTED]
C --> E[Recruiter opens position from requisition]
E --> F[Position published]Requisition fields include title, department, location, employment type, headcount, salary range, and reason. Fill tracking compares approved headcount vs positions opened and hires made.
Requisition owners and approvers gain read access during the approval window — see Roles & permissions.
Approval chains
Settings → Approvals (/dashboard/settings/approvals) builds approval chains for two target types:
| Target type | Applies to |
|---|---|
JOB | Position publish / major edits |
REQUISITION | New headcount requests |
Chain rules
- One active chain per target type — activating a chain deactivates siblings server-side
- Steps run in order; each step requires
minApprovalssign-offs - Approvers are either specific users (
USERS) or everyone with a role (ROLE) - Conditional steps (v2) skip unless all conditions match — fields include department, location, employment type, headcount, salary min/max, and requisition reason
Condition operators: eq, neq, in, not_in, gt, gte, lt, lte, contains.
Approval inbox
Approvers work pending items from /dashboard/approvals. Decisions record on the approval request; approved requisitions flip status automatically. Approved jobs stay DRAFT — publishing remains an explicit recruiter action.
Intake forms
Settings → Intake Forms defines hiring-manager kickoff questionnaires tied to requisitions or job creation:
- Capture structured requirements before approval
- Map answers to position fields and custom fields (requires
custom_fieldsfor extended metadata) - Reduce back-and-forth between HM and recruiter
Intake submissions attach to the requisition or job record and appear in the approval packet for approvers.
Job templates
Templates store reusable position snapshots:
- Title patterns, description boilerplate, requirements
- Default journey attachment
- Custom field defaults (with
custom_fieldsgrant) - Pipeline template reference (with
custom_pipelinesgrant)
Create templates from an existing position or from scratch in the governance API. Recruiters start new positions from template to enforce consistency across similar roles.
New orgs with job_governance receive seeded default templates via org-default-seeds.
AI job post generation
The governance namespace includes AI-assisted job description tools:
- Generate full descriptions from title + bullet inputs
- Hygiene checks (biased language, missing sections, length)
- Regenerate sections without losing manual edits
AI output is always editable before publish. Generation respects org industry and size from Settings → Organization.
API namespace
All procedures live under trpc.governance:
| Sub-router | Purpose |
|---|---|
capabilities | Gate probe |
approvals.* | Chain CRUD, request lifecycle, decisions |
requisitions.* | Requisition CRUD, status, headcount |
jobTemplates.* | Template CRUD, instantiate position |
intakeForms.* | Form definitions and submissions |
Dependencies and recommended flag order
| Grant | Why |
|---|---|
custom_fields | Rich templates and intake metadata |
custom_pipelines | Template default pipeline stages |
job_governance | Core governance suite |
job_governance alone unlocks requisitions and approvals; pair with custom_fields for full template value.
Settings paths summary
| Page | Path |
|---|---|
| Approval chain builder | /dashboard/settings/approvals |
| Intake form editor | /dashboard/settings/intake-forms |
| Approvals inbox | /dashboard/approvals |
| Requisitions list | /dashboard/requisitions |
Troubleshooting
| Symptom | Check |
|---|---|
| Settings tabs missing | job_governance platform switch + org grant |
| Approval stuck | Step minApprovals vs approver count; conditional step conditions |
| Cannot publish job | Pending approval on JOB target; complete or cancel request |
| Template missing fields | custom_fields grant for custom field defaults |

