Manual recruiter flow
A recruiter opens a requisition and runs sourcing and engagement from /requisitions/[id].
Source of truth
The recruiter-facing lifecycle from inbound prime request through candidate search, candidate communication, RTR lock-in, package generation, internal approval, prime submission, and post-submit tracking.
First-class stage
Stage 3: Candidate search / sourcing
Search starts from a requisition, creates SourcingRun records, persists discoveries, ranks matches, and writes audit events.
First-class stage
Stage 5: Candidate communication / outreach
Outreach is drafted, reviewed, sent in-app, audited, and tracked through reply state before RTR.
Scope
The process covers the flow from prime intake through sourcing, engagement, RTR, package prep, internal approval, submission, and lifecycle tracking. Automation can start the flow, but the same lifecycle boundaries stay visible to the app.
A recruiter opens a requisition and runs sourcing and engagement from /requisitions/[id].
/watch-inbox or /api/cron/auto-ingest processes pending prime messages and runs configured portions of the same pipeline.
Process overview
Each stage names the user surface, implementation surface, data ownership, and expected output where the source document identifies them.
Stage 1
Turn a SOW email, RFQ, pasted SOW text, or manual requisition into structured recruiting work.
/watch-inbox/intake/requisitionssrc/lib/auto-ingest.tssrc/lib/ai-parse-sow.tssrc/app/watch-inbox/actions.tsPrimeInboxMessageContractRequisitionRequisitionVersionParseRunOne or more open requisitions with structured contract, LCAT, clearance, location, and deadline context.
Stage 2
Convert the raw opportunity into a usable requisition profile before candidate work starts.
A normalized requisition profile that downstream sourcing and outreach can reason over.
Stage 3
This is where actual candidate search happens, and it remains an explicit lifecycle stage.
/requisitions/[id]src/app/requisitions/[id]/SourcingPanel.tsxsrc/app/requisitions/[id]/sourcing-actions.tssrc/lib/sourcing-orchestrator.tssrc/lib/sourcing-connectors/*src/lib/ai-sourcing.tsCandidateSourcingRunCandidateMatchAuditEventRanked candidate matches with score, reasons, risks, and fit dimensions.
Stage 4
Prioritize candidates against the requisition context and explain why each person is or is not worth engaging.
A prioritized list of candidates worth engaging.
Stage 5
This is where candidate communication enters the process, as its own inspected stage.
/requisitions/[id]src/app/requisitions/[id]/EngagementPipeline.tsxsrc/app/requisitions/[id]/outreach-actions.tssrc/lib/ai-outreach.tsOutreachAttemptCandidate.engagementStateAuditEventCandidate moves from cold or search result into an active communication state.
Stage 6
Keep the lifecycle moving after outreach instead of stopping at sent email.
/inbox/requisitions/[id]src/lib/recruiter-auto-plan.tssrc/lib/inbox-counts.tssrc/app/inbox/*OutreachAttempt.sentAtOutreachAttempt.repliedAtOutreachAttempt.replySentimentReply state and next action are tracked for each candidate engagement.
Stage 7
Convert positive candidate interest into Right-to-Represent authorization for the opportunity.
requestRtrAction in src/app/requisitions/[id]/outreach-actions.tsRightToRepresentCandidate.engagementStateCandidate is locked to the opportunity and can move into package generation.
Stage 8
Prepare a submission package from the candidate record and requisition context.
src/app/requisitions/[id]/package-actions.tssrc/lib/ai-resume-tailor.tssrc/lib/package-html.tssrc/lib/package-docx.tsSubmissionSubmissionPackageScoreRunPackage-ready submission for internal review.
Stage 9
Require manager or approver review before prime submission by default.
/admin/notificationssrc/app/admin/*src/lib/approval-chain.tssrc/lib/notifications.tsApprovalActionNotificationContractReviewerApproved, rework-requested, or pending submission.
Stage 10
Submit approved packages to the prime while preserving the human gate by default.
submitToPrimeAction in src/app/requisitions/[id]/package-actions.tsforceAutoSubmitToPrime in src/app/requisitions/[id]/auto-actions.tsSubmission.stateSubmissionPackage.primeSubmittedAtSubmissionPackage.primeAckPrime acknowledgement and stopped time-to-first-submission timer.
Stage 11
Track what happens after the package reaches the prime through placement or rejection.
/admin/placements/dashboardSubmissionLifecycleEventSubmission.placedAtPlacement and revenue metrics.
Automation rules
Per-contract automation controls how much of the lifecycle runs without a human click. The default posture keeps final prime submission human-gated unless a contract rule intentionally says otherwise.
Board-stage mapping
Manager summaries and board briefs should report sourcing and outreach state, not just final submissions.
new
Open requisition with no candidate matches yet.
sourced
Candidate search produced matches, with no outreach yet.
engaging
Outreach sent; waiting on reply or RTR.
locked-in
RTR signed; package not sent to prime yet.
submitted
Package reached the prime; waiting on prime decision.
placed
Candidate accepted or revenue event recorded.
closed
Filled, rejected, or otherwise closed.
Source file
This in-app rendering follows docs/recruiting-process.md. Update that source document and this route together when the recruiting lifecycle changes.