Observations
21A directly observable trace left by the hiring process.
observation · finding
Registry counts
How many barriers, mechanisms and observations the registry holds, and how they spread across funnel stages and agency zones.
Single source of truth
176 canonical entities across 11 collections. Scenarios compose them, archetypes are presentation-only overlays, and the formal substrate is always recomputed.
A directly observable trace left by the hiring process.
observation · finding
A gate where the nominal hiring path can stop or diverge.
barrier · finding
A causal force compatible with one or more observations and barriers.
mechanism · finding
A recurring, rule-defined combination of observations and compatible mechanisms.
pattern · finding
A validated reinforcing cycle among mechanisms.
loop · finding
An actor-owned change aimed at a barrier, mechanism, pattern, or loop.
intervention · finding
A decision seat with explicit controls, blind spots, and incentives.
actor · context
A state machine naming the subject, states, owners, transitions, and expected timing.
process · context
A sourced period of hiring economics: capital, hiring behavior, entry paths, and its ending.
era · context
A language-neutral source supporting registry claims.
evidence · support
A durable budget, contract, funding, fee, payroll, subscription, or runway state with explicit flows.
record · support
Situations, formats, and tools: usage guide.
This is a lower bound: a coordinate counts only when it is structured or explicitly reviewed in a scenario.
0 coordinates have no example, 17 are thin, and 21 reviewed scenario coordinates remain unknown.
coordinate:arrangement
higharrangement is thin: 2/6 values touched across 5 source(s).
Needed: scenario, case_assignment, evidence
scenario_unknown:scenario.downlevelling_trap:arrangement
highscenario.downlevelling_trap explicitly marks arrangement as unknown: Down-levelling and delayed starts can occur in permanent, contract, or contract-to-hire arrangements.
Needed: case_assignment, evidence
value:arrangement:contract_to_hire
higharrangement.contract_to_hire has no current example.
Needed: scenario, case_assignment, evidence
value:arrangement:freelance
higharrangement.freelance has no current example.
Needed: scenario, case_assignment, evidence
value:arrangement:internship
higharrangement.internship has no current example.
Needed: scenario, case_assignment, evidence
Every mechanism, cross-tabbed by what kind of force it is and who could remove it. Unlike the /archetypes grid, every cell here is counted from the registry — an empty one is a claim (no mechanism of that nature is that removable), not a placement nobody got to yet.
3
3
0
none recorded
3
5
0
none recorded
0
none recorded
| Stage | Barriers | Mechanisms | Observations |
|---|---|---|---|
| Before posting | 1 | 5 | 1 |
| Sourcing | 1 | 2 | 4 |
| Intake | 2 | 8 | 5 |
| Screening | 1 | 9 | 5 |
| Recruiter | 1 | 8 | 8 |
| Technical | 2 | 5 | 8 |
| Hiring manager | 1 | 8 | 1 |
| Team | 1 | 7 | 8 |
| Client approval | 1 | 0 | 0 |
| Compensation | 1 | 2 | 2 |
| Offer | 1 | 2 | 5 |
| Post-offer | 3 | 4 | 3 |
Where a mechanism operates and where its trace is read are different questions, and only the first is recorded for 0 of 68 emissions. 0 of those conflict outright: the observation is never seen at any stage the mechanism acts on, so no intersection could stand in for the missing answer.
A cause is settled only when nothing else emits everything it does. For 10 of 28 that never holds: another cause leaves every trace this one leaves, so it survives whatever is observed. Listed with what covers it.
8 of 21 observations are consistent with exactly one cause. The rest narrow to a set, never to one.
Each group below leaves the same trace. No observation in the registry separates its members, so narrowing to one of them has in fact narrowed to all. 2 groups, 4 of 28 mechanisms. This is a limit of the observation vocabulary, not a defect in the causes.
obs.generic_closer_alignment_rejection_templateobs.position_closed_after_final_interview_without_hireobs.rejection_naming_an_internal_hire_as_the_outcome
obs.complete_silence_after_submissionobs.republished_job_posting_with_refreshed_date_and_identical_requirement_bodyobs.unsolicited_recruiter_outreach_followed_by_ghosting
A registry is worth what its gaps are worth knowing, so they are counted here rather than described. Every number below is derived from the registry on each build.
Gates with no proposed change0
A barrier the atlas documents but for which it names nothing anyone could do. 0 of 16.
None.
Causes with no proposed change0
A mechanism no intervention targets. 0 of 28.
None.
Entries citing no published source4
4 of 96. An entry without a citation still carries its evidence level, which says how far it is supported.
Stages a candidate can observe nothing at
Not a gap to fill: before a role is posted, and inside the hiring manager’s own review, there is by construction nothing for a candidate to witness. It is recorded because the silence is the finding.
Two limits the counts do not show. The registry describes technical hiring, and the era evidence is drawn from US macro series, so the figures on the eras page describe one market. Neither is a claim about hiring everywhere.
Every contradiction pattern is formally evaluated over the substrate graph. A pattern is classified as computed_empty if its joint condition set is provably unsatisfiable under monotonic evaluation, and prose_asserted if its satisfying set depends on unobserved hidden state.
| Pattern | Status | Satisfying Set Formulation | Algebraic Contradiction |
|---|---|---|---|
| pat.closed_then_reposted_requisition_motif Closed-Then-Reposted Requisition Motif | computed_empty (provably empty) | { C in Candidates | Qual(C, Req) = false and Qual(C, Req) = true } = empty set under monotonic qualification equality and identical requirement hash | Under identical requirement text hashes, an organization cannot simultaneously establish that the applicant cohort is unqualified and that the requisition requirements remain genuinely unchanged without unobserved hidden state. |
| pat.compensation_double_bind Compensation Double Bind | computed_empty (provably empty) | { s in R+ | Pr(s in [B_min, B_max] | I(Candidate; Band) = 0) = 1 } = empty set under opaque uniform prior without feedback | Under 0-bit mutual information regarding the employer compensation band, the set of guaranteed non-disqualifying, non-underbidding candidate bids is algebraically empty. |
| pat.experience_age_impossibility Experience-Age Impossibility | computed_empty (provably empty) | { exp in R+ | exp >= Y_req and exp <= Age(tech) } = empty set since Y_req > Age(tech) | Automated threshold requirement strictly exceeds the elapsed creation age of the underlying technology. |
| pat.seniority_double_bind Seniority Double Bind | computed_empty (provably empty) | { level in Z | N < level < N+1 } = empty set over discrete rank lattice | Candidate experience simultaneously satisfies overqualification predicate (level > N) and underqualification predicate (level < N+1) at adjacent discrete levels. |
Turnaround bounds defined across all canonical workflows (4 state machines). Dwell exceeding the maximum bound signals a stalled state driven by hidden queue eviction, ghost postings, or batching.
| Transition | Owner | Expected (days) | Max Bound (days) |
|---|---|---|---|
| submitted → parsing | actor.ats_vendor | 1 | 1 |
| parsing → scoring | actor.ats_vendor | 1 | 1 |
| scoring → queued | actor.ats_vendor | 1 | 2 |
| scoring → auto-rejected | actor.ats_vendor | 1 | 3 |
| queued → reviewed | actor.recruiter | 4 | 14 |
| queued → expired | actor.ats_vendor | 30 | 60 |
| reviewed → advanced | actor.recruiter | 2 | 5 |
| reviewed → human-rejected | actor.recruiter | 2 | 5 |
| Transition | Owner | Expected (days) | Max Bound (days) |
|---|---|---|---|
| demand → search-open | actor.client | 3 | 10 |
| search-open → vendor-screen | actor.recruiter | 5 | 14 |
| search-open → closed-unfunded | actor.client | 7 | 30 |
| vendor-screen → vendor-technical | actor.recruiter | 3 | 7 |
| vendor-screen → vendor-declined | actor.recruiter | 2 | 5 |
| vendor-technical → submitted | actor.hiring_manager | 4 | 10 |
| vendor-technical → vendor-declined | actor.hiring_manager | 3 | 7 |
| submitted → client-interview | actor.client | 5 | 14 |
| submitted → declined-by-client | actor.client | 5 | 14 |
| submitted → bench-filled | actor.employer_policy | 3 | 10 |
| submitted → closed-unfunded | actor.client | 7 | 30 |
| client-interview → offer | actor.client | 4 | 10 |
| client-interview → declined-by-client | actor.client | 3 | 7 |
| offer → verification | actor.recruiter | 3 | 7 |
| offer → closed-unfunded | actor.client | 4 | 14 |
| verification → placed | actor.employer_policy | 5 | 14 |
| Transition | Owner | Expected (days) | Max Bound (days) |
|---|---|---|---|
| drafted → authorised | actor.employer_policy | 7 | 21 |
| authorised → published | actor.recruiter | 2 | 7 |
| published → received | actor.candidate | 7 | 30 |
| received → machine-screened | actor.ats_vendor | 1 | 3 |
| machine-screened → recruiter-queue | actor.ats_vendor | 1 | 3 |
| machine-screened → rejected | actor.ats_vendor | 1 | 7 |
| recruiter-queue → recruiter-screen | actor.recruiter | 5 | 14 |
| recruiter-queue → lapsed | actor.ats_vendor | 30 | 60 |
| recruiter-screen → technical | actor.recruiter | 3 | 7 |
| recruiter-screen → rejected | actor.recruiter | 2 | 5 |
| technical → panel | actor.hiring_manager | 5 | 12 |
| technical → rejected | actor.hiring_manager | 3 | 7 |
| panel → levelling | actor.hiring_manager | 3 | 7 |
| panel → rejected | actor.hiring_manager | 3 | 7 |
| levelling → approval | actor.employer_policy | 2 | 5 |
| levelling → rejected | actor.employer_policy | 2 | 5 |
| approval → offer | actor.employer_policy | 3 | 7 |
| approval → frozen | actor.employer_policy | 3 | 14 |
| offer → verification | actor.candidate | 3 | 7 |
| offer → frozen | actor.employer_policy | 2 | 7 |
| verification → hired | actor.employer_policy | 5 | 14 |
| verification → rejected | actor.employer_policy | 3 | 7 |
| published → lapsed | actor.ats_vendor | 60 | 120 |
| rejected → published | actor.recruiter | 14 | 60 |
| Transition | Owner | Expected (days) | Max Bound (days) |
|---|---|---|---|
| real-need → published | actor.recruiter | 2 | 7 |
| published → applied | actor.candidate | 7 | 30 |
| applied → machine-check | actor.ats_vendor | 1 | 2 |
| machine-check → human-read | actor.ats_vendor | 2 | 5 |
| human-read → terms-check | actor.recruiter | 3 | 7 |
| terms-check → work-sample | actor.recruiter | 3 | 7 |
| work-sample → panel | actor.hiring_manager | 5 | 10 |
| panel → level-and-band | actor.hiring_manager | 3 | 5 |
| level-and-band → approval | actor.employer_policy | 2 | 4 |
| approval → offer | actor.employer_policy | 2 | 5 |
| offer → verification | actor.candidate | 3 | 7 |
| verification → hired | actor.employer_policy | 5 | 14 |
| human-read → declined | actor.recruiter | — | — |
| terms-check → declined | actor.recruiter | — | — |
| work-sample → declined | actor.hiring_manager | — | — |
| panel → declined | actor.hiring_manager | — | — |
| level-and-band → declined | actor.employer_policy | — | — |
| verification → declined | actor.employer_policy | — | — |
| published → closed | actor.employer_policy | — | — |
| approval → closed | actor.employer_policy | — | — |
| offer → closed | actor.employer_policy | — | — |
Parametric resource flows across all 108 financial records and 9 flows.
✓ 100% Flow Conservation Verified
Every outward split sums to ≤ 100.0% with zero negative allocations. Verified in Lean 4 kernel theorems and automated TypeScript derivations.