Files
krow_backend/knowledge/screening-and-hiring-standards.md
Aravind a222dcd3e4
Some checks failed
CI / test (push) Has been cancelled
CI / fixture (push) Has been cancelled
Add evals for every shipped agent, a policy corpus, and CI
§9 says no agent ships without evals. Eight of the nine had none: the two
other suites in evals/ are harness fixtures rather than agents in the
registry, so the rule was being met by one agent in nine.

Evals — 40 new cases, five per agent, every one carrying mustNotLeak:

  - the agent is loaded from its real spec in agents/*.md rather than
    written out again in Go. A hand-copied agent tests the copy: it keeps
    passing after somebody edits the spec, which is the moment it most
    needed to fail.
  - callNamed calls the tool a case names. toolThenAnswer always called
    tools[0], so seven of positions-agent's eight tools were unreachable,
    and a boundary nothing calls is a boundary nothing tests.
  - seedWorkspace fills BOTH tenants. A leak test against an empty second
    tenant cannot fail.

Verified by breaking workersByScore's org predicate: six cases across four
agents fail with LEAKED "RIVAL".

Knowledge — six policy documents, taking the corpus from 2 to 8 (34
chunks). Three restricted to admin and employer, five tenant-wide. They
cover what the tools cannot: a tool reports how many shifts went unworked,
a policy says what cover costs inside 24 hours.

corpus_test.go treats those documents as product rather than fixtures. The
first version was tautological — it read audience: from a file and checked
that file's audience was enforced, so opening a restricted document passed.
mustNotBeTenantWide now holds that judgement apart from the files, with the
reason recorded for each.

CI — the checks this repository already had, made unskippable. testutil
calls t.Skipf on an unreachable database, so a dead service container would
produce a green build over a suite that ran almost nothing. Simulated: go
test exits 0 with 74 tests skipped, including every tenant-isolation test.
The guard exits 1 and names them, while still allowing TestLive* to skip
without a model key.

This CI tests; it does not deploy. The README's claim that migrations are
run by CI against the target database remains aspirational.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186JgqQUCDS8ZwGmyw3ymWu
2026-08-28 13:52:46 +05:30

2.0 KiB

source, audience, title
source audience title
policy_docs role:admin, role:employer Screening and Hiring Standards

What the match score means

The AI match score is a reading of an application against a role's stated requirements. It is a starting point for a decision, not the decision.

Band Reading Expected action
80 and above Strong match on stated requirements Shortlist
70 to 79 Viable, usually with one gap Shortlist if the gap is trainable
50 to 69 Marginal Read the application before deciding
Below 50 Weak against this role Consider for other open roles
No score Not yet screened Screen before deciding anything

A candidate with no score has not been assessed. They are not a candidate who scored badly, and they must never be ranked as though they were — an unscored applicant sitting below a 40 in a sorted list is a reading error, not a judgement.

Screening is not a decision

Screening moves an application from applied to screened. It does not reject anybody. A rejection is a decision a person takes, records a reason for, and can explain to the candidate if asked.

Rejecting on the score alone is not a reason. "Below the bar for this role" without a stated requirement it failed is the same as no reason at all.

Time to decision

Every applicant gets a decision within ten working days of applying. Where a role is paused, the applicant is told it is paused rather than left in the pipeline — a candidate who hears nothing assumes a no and takes another job, which costs the same as a rejection while looking like nothing happened.

Candidates at interview stage get a decision within three working days of the interview.

Interviews

An interview is required before hiring into a supervisory role. For general staff it is optional and should be used where the application leaves a specific question open, not as a default gate.

Interview notes are recorded against the application. A hire with no notes is a hire nobody can explain in six months.