Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/modules/staffing/classify.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | internal/modules/staffing/classify.go |
| Original SHA-256 | 89f992a2aabb0516279f10152619019dfc3e71f779b58326206e650e25334499 |
| Git blob SHA | 66cd722a303f215e9a12cd78de99208bf5e6dedf |
| Reading-copy SHA-256 | 89f992a2aabb0516279f10152619019dfc3e71f779b58326206e650e25334499 |
Every recorded occurrence
These 24 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / internal/modules/staffing/classify.go | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | per-tenant-routing | 9bde0f9a74b89d01980fa658e5253acda7528d0c | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws1-ontology-sync | b596f449a32a1016fbd403c36505cc00a1ac9ee6 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | w3-ai-staffing-recommendations | 43d56387270ef4da4cabd794d97ca6a49909bc7d | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws3-clearance | 4b8e7ce594c068621867f9c9deed0ec64ae6c553 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | deploy-and-ops | bdacd9d0b4d5998d25fc74bf4007f4c3ec538c7a | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws2-alias-relationship | e4dada4601c6eb101830f9d223a9655dfa120616 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | vendor-intelligence | fe9796a19c261951d3f2565206c0c1b5ac294465 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | ai-brain-live | aac32fc49c878cc5bca099459307611562d0bac1 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/modules/staffing/classify.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
Recovered source transcript
Download complete source text ↓107 lines · 3.7 KB
package staffing
import (
"sort"
"github.com/shopspring/decimal"
)
// ClassifyForGap classifies the scored bench against one gap requirement into ranked recommendations,
// purely from the frozen scores, the staffing floor, current commitment, and precomputed adjacency. It is
// the deterministic decision content of the gap view: no model, no I/O.
//
// In rank order it produces:
// - ASSIGN for a qualified, available candidate who is uncommitted (or already committed to this gap).
// - REASSIGN for a qualified, available candidate committed to a strictly lower priority requirement,
// with the priority delta recorded.
// - RESKILL for a near miss whose ONLY failure is the skills component (clearance is satisfied and the
// candidate is available) and who holds a skill adjacent to a missing one.
// - a single SOURCE note when the qualified, available, assignable bench cannot fill the open slots.
//
// It never disqualifies a candidate: qualification is the engine band floor, the optimizer and classifier
// only arbitrate among the qualified, and a person decides every row. Ranks are 1 based in the returned
// order.
func ClassifyForGap(cfg Config, gap GapContext, bench []ScoredCandidate) []Recommendation {
type tagged struct {
c ScoredCandidate
action Action
reassign *ReassignEvidence
}
var assigns, reassigns, reskills []tagged
for _, c := range bench {
qualified := c.Total.GreaterThanOrEqual(cfg.StaffingFloor)
switch {
case qualified && c.Available && (c.CommittedRequirementID == "" || c.CommittedRequirementID == gap.RequirementID):
assigns = append(assigns, tagged{c: c, action: ActionAssign})
case qualified && c.Available && c.CommittedRequirementID != "" && gap.Priority.GreaterThan(c.CommittedPriority):
reassigns = append(reassigns, tagged{c: c, action: ActionReassign, reassign: &ReassignEvidence{
FromRequirementID: c.CommittedRequirementID,
PriorityDelta: gap.Priority.Sub(c.CommittedPriority),
}})
case !qualified && c.ClearanceSatisfied && c.Available && c.Reskill != nil:
reskills = append(reskills, tagged{c: c, action: ActionReskill})
}
}
sortTagged := func(list []tagged) {
sort.SliceStable(list, func(i, j int) bool {
if d := list[i].c.Total.Cmp(list[j].c.Total); d != 0 {
return d > 0 // higher total first
}
return list[i].c.CandidateID < list[j].c.CandidateID // stable, unique tiebreak
})
}
sortTagged(assigns)
sortTagged(reassigns)
sortTagged(reskills)
recs := make([]Recommendation, 0, len(assigns)+len(reassigns)+len(reskills)+1)
rank := 0
add := func(t tagged) {
rank++
r := Recommendation{
RequirementID: gap.RequirementID,
CandidateID: t.c.CandidateID,
Action: t.action,
Rank: rank,
Confidence: Confidence(cfg, t.c),
Evidence: Evidence{
EngineTotal: t.c.Total.StringFixed(2),
Band: t.c.Band.Code(),
},
}
switch t.action {
case ActionReassign:
r.Evidence.Reassign = t.reassign
case ActionReskill:
r.Evidence.Reskill = t.c.Reskill
}
recs = append(recs, r)
}
for _, t := range assigns {
add(t)
}
for _, t := range reassigns {
add(t)
}
for _, t := range reskills {
add(t)
}
// SOURCE: if the qualified, available, assignable bench cannot fill the open slots, add one gap
// coverage note. It names no candidate and rejects no one. Its confidence is 1: it is a deterministic
// fact that the bench is short, not a graded fit.
if len(assigns) < gap.OpenSlots {
rank++
remaining := gap.OpenSlots - len(assigns)
recs = append(recs, Recommendation{
RequirementID: gap.RequirementID,
Action: ActionSource,
Rank: rank,
Confidence: decimal.NewFromInt(1),
Evidence: Evidence{OpenSlots: &remaining},
})
}
return recs
}