feat(crewing): Phase 3a — candidates / talent pool (flagged) #66
No reviewers
Labels
No labels
bug
claude-failed
claude-pr
claude-queue
claude-working
epic
feature
interactive
portal
triaged
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: shad0w/pelagia-portal#66
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/crewing-candidates"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Crewing — Phase 3a (Candidates / talent pool)
First slice of Phase 3 (Candidate intake + 7-stage pipeline + onboarding), which ships as stacked sub-PRs — 3a candidates → 3b pipeline → 3c onboarding. Stacks on #65 (Phase 2 requisitions); base branch is
feat/crewing-requisitions, so nothing reachesmasteryet. BehindNEXT_PUBLIC_CREWING_ENABLED(off by default).What's in
crewing_candidatesmigration):CrewMember— the talent-pool spine, one row per person kept throughCANDIDATE → EMPLOYEE → EX_HAND(CrewStatus);employeeIdis assigned only at onboarding (3c), so it's nullable here.CandidateType/CandidateSourceenums;currentRankId(rank held) +appliedRankId.CrewActiongains a nullablecrewMemberId;CrewActionType += CANDIDATE_ADDED/UPDATED.crewing/candidates/actions.ts):addCandidate/updateCandidate— guard flag +manage_candidates, write aCrewAction, optional CV upload viabuildStorageKey("cv", …)+uploadBuffer. EX_HAND source ⇒type/status = EX_HAND; an edit never downgrades anEMPLOYEE./crewing/candidates(master list — search / source / rank-applied / min-experience filters as removable chips + match count + Clear all; Add-candidate modal) and/crewing/candidates/[id](profile; the 7-stage pipeline/stepper is 3b). Candidates added to the flag-gated Crewing nav (Manager + MPO).Tests & docs
candidates.test.ts(7) — add/update, ex-hand derivation, employee no-downgrade, permission gating.type-checkclean; full unit (225) + integration (153) suites green.CLAUDE.md"Crewing" section updated with the Phase 3a surface.Deferred
🤖 Generated with Claude Code
Closes Epic B — Candidate intake (#76).
First slice of Phase 3 (Epics B/C/D shipped as stacked sub-PRs). Adds the CrewMember talent-pool spine and the Candidates screens. Behind NEXT_PUBLIC_CREWING_ENABLED; production unchanged. Stacks on the requisitions branch (Phase 2). What's in - Schema (crewing_candidates migration): CrewMember (spine) + CrewStatus, CandidateType, CandidateSource enums; CrewAction gains a nullable crewMemberId; CrewActionType += CANDIDATE_ADDED/UPDATED. employeeId is assigned at onboarding (3c), so it's nullable here. - Actions (crewing/candidates/actions.ts): addCandidate / updateCandidate — guard flag + manage_candidates, write a CrewAction, optional CV upload via buildStorageKey("cv", …) + uploadBuffer (no parsing — A2 deferred). EX_HAND source ⇒ type/status EX_HAND; edits never downgrade an EMPLOYEE. - Screens: /crewing/candidates (master list with search/source/rank-applied/ min-experience filters as removable chips + match count + Clear all; Add-candidate modal) and /crewing/candidates/[id] (profile; pipeline stepper is 3b). Candidates added to the flag-gated Crewing nav (Manager + MPO). Tests & docs - Integration: candidates.test.ts (7) — add/update, ex-hand derivation, employee no-downgrade, permission gating. type-check clean; full unit (225) + integration (153) suites green. - CLAUDE.md "Crewing" section updated with the Phase 3a surface. Deferred: public careers intake API (A2, §13 open question); CV parsing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>f3ce2d5da2tobe6db075dc136cb798f5tobe6db075dc