Repository navigation
v3.14.5 - one status, two reasons
A candidate held at unknown_requires_assessment is waiting on one of two things, and the previous release recorded only one of them properly.
It can be waiting on a field the profile does not carry. That is a hard-gate unknown: the interview could have collected it and did not, so it belongs in unknowns and evidenceRequired and it lowers confidence.
Or it can be waiting on a prerequisite path no question in this interview reaches. That is not the same thing, and v3.14.4 put it in evidenceRequired alone without saying why, which created a third category the contract never defined.
Recording it as an unknown was the alternative, and it was measured before choosing: 29 scenarios drop to low, including both evidence-complete scenarios, which state every field their name claims. A profile that answers everything would still read low, so the documented medium ceiling becomes unreachable and the confidence scale stops distinguishing anything.
Invariant 5b names the two reasons instead. The field kind lowers confidence because the interview could have settled it. The path kind does not, because no answer the user could give would change it, and it goes to evidenceRequired and nextActions as work for the prerequisite-plan skill.
Writing that found the hole underneath: several rules hold a candidate and record their reason under the winning method's name, or under none, so a held candidate could carry its reason in its own text and nowhere a reader looks. A gate now reads all 269 held candidates across the scenario set and fails on any whose reason appears in none of the three arrays.
75 gates, 117 scenarios, 3625 prerequisite checks.