Search

↑↓ to move↵ to openesc to closetop 6 documentation results

Book a demoTry TokenTriage

In development · Explore the product preview. Join the launch list or book a walkthrough.

Browse docs

Judge vocabularies

Every closed vocabulary the judge track prints — abstention reasons, validation floors, promotion states and disclosure fields, one plain line each.

ReferenceLast updated

On this page

You are looking at a token in a log line, a JSON field or a command’s output, and you need to know which set it came from and what else is in that set. Every list on this page is closed: a member is named, or the value is turned away at the boundary that produced it.

Each table quotes the Go constant that defines the token, with the file and the line. Tokens are printed the way the product prints them, because a paraphrase will not match a grep.

Some members below have no producer that a configuration this build accepts can reach. Those rows say so in their own column, since a list that names a token without saying whether anything emits it sends you hunting for output that will not arrive.

Where each vocabulary is defined

Vocabulary Members Defined at
Judge methods 5 internal/judgecore/method.go:50-54
Winner 3 internal/judgecore/method.go:76-78
Panel ballot tokens 2 internal/judgecore/panel.go:179-180
Abstention reasons 4 internal/judgecore/method.go:99,103,107,112
Judge disclosure fields 9 internal/declog/eval.go:82-172
Gold sources 2 internal/judgeval/goldset_types.go:29-30
Exclusion reasons 6 internal/judgeval/goldset_types.go:53-58
Assembler skip counters 6 internal/judgeval/assemble.go:365-391
IAA reason codes 5 internal/evaluator/validate.go:510-514
Validation refusal codes 13 internal/evaluator/validate.go:331-345
Applied floors 6 internal/evaluator/validate.go:103-130
Promotion states 3 internal/evaluator/validate.go:1364,1366,1370
Promotion timeline kinds 5 internal/evaluator/validate.go:1423-1427
Registry restore states 3 internal/judgeval/registry.go:86,88,95
Validation run reasons 4 internal/judgeval/runs.go:47,50,52,56
Selective-risk refusal codes 5 internal/judgeval/selective.go:112-136
Selective per-verdict outcomes 4 internal/judgecore/selective_hook.go:95-107
Selective scan outcomes 4 internal/judgeval/selective.go:395-403
Selective audit outcomes 6 internal/judgeval/runs.go:417-438
Drift outcomes 4 internal/judgeval/driftwatch.go:318-325
Drift refusal codes 12 internal/judgeval/driftwatch.go:332-348
Anchor attribution 5 internal/judgeval/anchor.go:424-428
Anchor arm 4 internal/judgeval/anchor.go:452-455
Anchor refusal codes 13 internal/judgeval/anchor.go:476-488
Sidecar judge fault reasons 12 internal/judgecore/sidecar_transport.go:151-190

Method, winner and ballot tokens

Three small sets that travel together on a graded row. The method token is read off the scorer that ran, not off the configuration that asked for it.

Set Members
MethodID pointwise-bool · pointwise-rubric · pairwise · reference · panel
Winner A · B · TIE
Panel ballot pass · fail

Two of the five method ids compose from a configuration file, and one of those two carries a condition. Which two, what the condition is, and what each method decides, is Judge methods. The ballot vocabulary has two tokens, which is why a panel’s tally has at most two buckets, and that fact governs the next table.

Abstention reasons

An abstention is a verdict with no winner. Each reason names what to fix rather than reporting only that the judge declined.

Reason What the judge is saying What has to be true for a producer to reach it
swap_inconsistent The two presentation orderings named different winners, so the verdict was partly a function of position and no winner is written Minted by NewPairwiseTrial (method.go:278) and by the shadow sampler (internal/shadow/judge_config.go:428), and re-derived on the read side over stored shadow rows (internal/api/dashsrv/evals_experiments.go:2167). Reached in production on the shadow-duplicate plane, through shadow.duplicate.pairwise
below_conformal The verdict’s confidence feature fell below the risk-controlled accept threshold Two sites mint it, and a configuration this build accepts reaches neither. SelectiveGate (internal/judgecore/selective_hook.go:264) needs a fitted accept region, and NewSelectiveGate has one non-test call site, under if region != nil, whose one non-test caller passes nil (internal/shadow/judge_config.go:152-153 and sampler.go:336), pinned by TestShadowSamplerNeverInstallsARegion. The other site reads the token off a container’s self-report, and a sidecar_judge: block is refused at tokentriage validate and again at boot
panel_split A panel’s members disagreed too evenly for the rule to name a verdict Minted by panel.go:745. The one of the four that composes from a configuration file, and it needs an even seat count: panelTally decides whenever 2 × top > n over a two-token ballot (panel.go:805-821), so an odd panel always decides. EvalsPanelMinMembers is 3 with no maximum, so four seats is the smallest shape that can split
out_of_scope The input fell outside the scope the promotion evidence covers One site mints it, and it reads the token off a container’s self-report (sidecar_transport.go:923-931, used at :732 and :833). An evals.evaluators[].sidecar_judge block is refused at tokentriage validate and again at boot, so nothing a configuration file composes can report one

AbstainPanelSplit’s own doc comment (method.go:104-107) says a split fires when the margin was “under the configured quorum”. There is no quorum leaf: PanelRuleMajority is the single aggregation rule at this freeze (panel.go:167-170), and the comment describes a knob a later card would add.

The judge disclosure block

JudgeDisclosure travels on every judge-produced outcome, so a judge score cannot pass as anonymous ground truth. Three fields are always present; six are pointers, and an absent pointer is a statement about measurement rather than a zero.

Field Go type What it says What absence means
model string The judge model that graded the row Always present
prompt_sha string sha7 of the judge template Always present
validated bool A promotion stands for this judge on this metric and segment Always present. false is a reading, not a gap
kappa *float64 Judge-to-human Cohen’s κ from the promoting run Absent means not measured. 0.0 is a measurement, and means agreement at chance level
swap_flip *float64 Position-swap flip rate Absent means not measured. 0.0 is a measurement, and is the best result
validated_n *int64 The validation set’s size Absent means no validation run stands
iaa *float64 Inter-annotator κ of the gold set the judge was validated against Absent means agreement was not measured. Which of four situations applied is the next table
method string The method that graded this row, read off the built scorer Absent means a binary older than the field, or a disclosure rebuilt from the promotion registry rather than emitted by a run. It is not backfilled
abstain_feature *float64 This verdict’s own scalar abstention feature, an input to a conformal fit Absent means this verdict’s method published no feature. The shadow producer writes it only at self_consistency_k > 1

IAA reason codes

GoldAdmission.IAAReason says why iaa is null. The closed set has five members: one covers the measured case and four cover the null, so four is the number of ways agreement can go unmeasured.

IAAReason What happened
measured κ_h was computed, so iaa carries a number
single_annotator One annotator over the admitted rows. Admitted, and disclosed
no_annotators The gold set holds no attributable label
overlap_below_floor Two or more annotators, and no pair shares IAAOverlapMinN rows
undefined_on_overlap A pair does share enough rows, and κ_h has a zero denominator on them

Validation refusal codes

Refusal.Code is machine-readable and stable; Refusal.Text beside it is what an operator reads, and it is built so it cannot be constructed without the floor, the need and the have. A floor refusal names the constant it applied in Refusal.Floor; a shape code names none.

Code What did not pass Floor cited
gold_set_empty Every offered row was excluded or unattributable, so no annotator survives JudgeValidationMinN
iaa_below_floor The annotators’ κ_h is under the gold-set admission floor. The fix is adjudicating the disagreeing rows, which the refusal names GoldSetIAAFloor
iaa_unmeasured κ_h could not be measured and evals.validation.require_iaa is on IAAOverlapMinN
iaa_undefined κ_h has a zero denominator on the overlap (shape)
validation_below_n Fewer admitted human-labeled rows than the judge-validation floor JudgeValidationMinN
kappa_below_floor Judge-to-human κ is under the promotion floor JudgeKappaFloor
kappa_undefined κ has a zero denominator (shape)
swap_below_min_pairs Fewer pairs run in both orderings than the swap set needs SwapSetMinPairs
swap_pair_incomplete A pair is missing one of its two orderings (shape)
swap_flip_above_ceiling The measured flip rate is over the position-swap ceiling SwapFlipCeiling
subject_incomplete The subject does not name all of B.7’s coordinates (shape)
rubric_invalid The rubric’s scale is unusable as a binary verdict (shape)
drift_upper_bound_below_floor The post-promotion confidence sequence’s upper bound fell under the transferred floor DriftTransferredFloor

Twelve of the thirteen are reachable from tokentriage evals validate, and subject_incomplete is not. evaluator.ValidateJudge has one non-test call site (internal/judgeval/runs.go:346), and every gold set that reaches it was built by the assembler, which screens each subject with the same Complete() predicate first (internal/judgeval/assemble.go:638 and :725). An incomplete subject is dropped there and counted, so what an operator meets is incomplete_subject=N on the skipped: line rather than the code.

The floors a validation run applies

All six print on every run, whether or not the run reached them, so floors applied: is the whole ladder and the code names the rung. AppliedFloorNames() (internal/judgeval/runs.go:92-97) returns them in this order.

Identifier Value Unit What it gates
JudgeValidationMinN 50 admitted human-labeled rows Rows required per subject before a κ may be computed at all
IAAOverlapMinN 20 rows two annotators both labeled Measured on the overlap sample, and not on the union
SwapSetMinPairs 30 pairs run in both orderings Pairs required before a flip rate may gate anything
JudgeKappaFloor 0.5 Cohen’s κ The promotion bar for judge-to-human agreement
GoldSetIAAFloor 0.6 Cohen’s κ_h The gold set’s own admission bar
SwapFlipCeiling 0.10 flips ÷ pairs Above this, promotion for pairwise use is refused

The evals.validation.min_kappa leaf moves JudgeKappaFloor, and moves it upward only. The configuration loader turns away a value below 0.5 or above 1 (internal/config/evals.go:1832-1841), while the library clamps instead of refusing (effectiveKappaFloor, internal/evaluator/validate.go:978-988). Two behaviours for the same out-of-range value, at two layers.

A refused run, with these tokens on it

The vocabularies above meet in one place. This is the middle of a refused run, from the harness capture at docs/judge-facts/transcripts/T4-validation-refused.md, with the assembly block and the selective-risk block elided.

$ tokentriage evals validate --config … --state-dir … --log …
promotion registry — D:\tt-jg-scratch\hwork2\run\state\dash\quality
  validation_state: empty
…
validation runs (1)
  [1/1] judge=judge-task-completion model=claude-haiku-4-5 prompt=1fc3923 eval_ver=judge-v1+cfg15acf67
      metric=task_completion segment=task_completion|tier=frontier|model=gpt-5|endpoint=chat
      reason: operator — operator-forced validation of 40 admitted label(s) at revision 8b39113
      gold: admitted=40 annotators=2 licenses=true iaa=unmeasured (overlap_below_floor) revision=8b39113
      kappa: NOT COMPUTED — a gate before it refused (the refusals below name which); validated_n=40
      floors applied: JudgeValidationMinN=50 IAAOverlapMinN=20 SwapSetMinPairs=30 JudgeKappaFloor=0.5 GoldSetIAAFloor=0.6 SwapFlipCeiling=0.1
      verdict: REFUSED   registry change: refused
      refusal validation_below_n: floor=JudgeValidationMinN need=50 have=40 admitted human-labeled rows
…
      reading: state=never_validated gold_revision=8b39113 auto_validate=false subjects_observed=1

Eight vocabularies are on those lines: validation_state, a run reason, an IAAReason, the six applied floors, a validation code with the floor it cites, the CLI verdict token, a promotion timeline kind and a promotion state. The paths, the digests, the eval_ver suffix and the fixture’s judge and segment are that machine’s; the floor constants, the code and the need/have arithmetic are not.

That capture came from a source build on Windows, and its ledger was produced by the documentation harness. The assembler, Cohen’s κ, the inter-annotator figure, every floor, the promotion registry and the artifact store are the shipped binary’s, while the judge verdicts came from a loopback stub and the human labels were designed by the harness. It shows what a refused run looks like, and not what any judge scores.

Promotion states, timeline kinds and restore states

Three sets answering three different questions: may this subject claim a measured basis, what did the last write do, and what happened to the registry at boot.

PromotionStatus is served as state on a judge reading.

Value Meaning
promoted Validated, and the version still matches
never_validated Nothing was ever stored for this identity. A run that refused reads this too
version_changed A promotion exists for this identity but was earned under a different judge model, prompt or evaluator version. The stale state is still returned, so a caller can say what was lost

PromotionChange.Kind is what the registry write did, and it is the kind on the timeline.

Kind Meaning
promoted A first promotion for this key
repromoted A promotion that was already standing, renewed by a fresh run
demoted A standing promotion removed, either because κ fell or because the bar rose
reset_version_change The subject’s version moved, so the promotion was reset rather than carried
refused The run refused and nothing was promoted. The record is still written

ValidationState is a fact about the whole registry at boot, so it sits on the collection envelope rather than on a per-subject reading.

Value Meaning
empty No jval_ artifact existed at boot. A fresh install, or a store whose artifacts were deleted. Every judge reads reported
restored The newest artifact restored cleanly
unrestorable An artifact existed and was turned away: an unversioned entry, an unknown artifact version, or corruption. The registry boots empty and keeps the refusal text for the operator

The CLI prints its own two-token verdict beside these: PROMOTED or REFUSED (cmd/tokentriage/evals_judges.go:775,777).

Validation run reasons

Why a validation run happened. RunReasons() (internal/judgeval/runs.go:87) returns these four, in edge order.

Reason Fired when
boot The process started, or a judge tuple’s configuration changed, which is the same edge because every judge leaf is restart-required
new_labels New admitted human labels crossed the per-subject threshold, default 25
interval The periodic sweep’s cadence elapsed, default 24h
operator A human ran tokentriage evals validate

A fifth token, drift_breach, is defined at internal/judgeval/driftwatch.go:813 and reaches a record only inside a formatted detail string (driftwatch.go:601). RunReasons() does not return it, so a consumer that ranges the enumerator cannot see it.

Selective-risk vocabularies

Four sets around the risk-controlled accept region: why a fit declined to publish one, what one threshold candidate did during the scan, what the run did with a sealed sample, and what a region did to a single verdict.

SelectiveRefusalCode is why the fit published no region. Every one carries need, have and the (α, δ) pair.

Code Meaning
selective_no_feature The method publishes no scalar confidence feature, so there is nothing to threshold. This is what a pointwise-bool judge at self_consistency_k: 1 produces
selective_cal_n_below_floor The calibration slice holds fewer rows than SelectiveMinCalN(α, δ)
selective_no_admissible_threshold The scan ran and no tested candidate’s bound cleared α
selective_accepted_m_below_floor A threshold was selected, and the holdout’s accepted subset is under SelectiveMinAcceptedM(α, δ)
selective_holdout_verification_failed A threshold was selected and the accepted subset cleared its floor, and then the holdout’s own upper bound on error exceeded α

SelectiveScanOutcome is what the scan did with one candidate; SelectiveAuditOutcome is what the run did with one sealed sample.

Set Members
SelectiveScanOutcome skip (too few accepted rows to compute a bound) · pass (bound computed, cleared α) · fail (bound computed, exceeded α, and the scan stops here) · unreached (the scan stopped before this candidate)
SelectiveAuditOutcome not_requested · method_undeclared · method_unknown · fitted (first fit of this subject version in this process) · reused (the sealed sample is byte-for-byte the one already fitted) · resampled (new labels moved the split, so a fresh sample and a fresh look)

SelectiveOutcome is what a fitted region did to one verdict. Three of the four mean the region did not act, and they say why.

Value Meaning
accepted The feature was at or above the threshold and the verdict stands unchanged
refused The feature fell below the threshold, so the verdict is replaced by an abstention with reason below_conformal
no_feature The verdict published no feature, so there was nothing to threshold. The verdict stands
already_abstained The method had declined for its own reason. The first reason stands, because relabelling it would report the wrong cause

Drift vocabularies

Three sets belonging to the post-promotion agreement monitor. Read them as the shapes a reading can take rather than as output you can produce. Gate.ObserveAgreement has no call site outside its tests (internal/judgeval/driftwatch.go:590), so no shipped binary can fire a judge demotion from this path, and the drift codes below carry the product’s own note that no operator surface renders them today (driftwatch.go:329-330).

DriftOutcome Meaning
refused A named limb refused and nothing was evaluated. Not a demotion, and not a fabricated bound
insufficient The stream is shorter than DriftMinN, so nothing was evaluated
holding Evaluated, and the upper bound is not below the floor
breached Evaluated, and the upper bound is below the floor
Drift refusal code Meaning
p_e0_degenerate The frozen expected-agreement term leaves no usable denominator
p_e0_out_of_range The frozen expected-agreement term is outside its legal interval
accumulator_non_finite The running accumulator went non-finite
derived_disagrees_with_formula A stored derived value does not match a recomputation
stream_version_moved The subject’s version moved under the stream
no_lambda_weight The confidence sequence has no weight to apply
no_promotion_stands There is no standing promotion to monitor
no_stream_on_state The promotion carries no drift stream. The accumulator opens only under a single-annotator gold set (internal/evaluator/validate.go:1578), so a promotion earned with two annotators and an overlap has none
duplicate_request_in_batch The same request id appears twice in one batch
unnamed_request_in_batch An observation nothing can attribute to a request
p_e0_unit_mismatch The stream’s frozen term does not certify the request-unit reading
snapshot_write_failed The write failed after the stream had advanced in memory

DriftDisclosure.Reason carries two further tokens on a reading that was not refused: drift_min_n on insufficient (driftwatch.go:520), and upper_bound_below_floor on breached (driftwatch.go:551).

Anchor diagnosis vocabularies

Three sets belonging to the who-drifted question, which is planned rather than shipped: no shipped binary constructs the monitor that fills them in, so read them as the shape of an answer.

AnchorAttribution Meaning
judge_drifted The anchors moved and the live traffic held
traffic_drifted The anchors held and the live traffic moved
both Both arms moved
neither The instrument ran and found nothing. Distinct from undiagnosed, because “nobody ran it” must not serialize the same way
undiagnosed No diagnosis was produced
AnchorArm Meaning
moved The anchor arm fired
held A negative that could have been a positive: enough discordant items for an outcome to have fired, or an arithmetically identical pair of agreement counts
inconclusive Between those two, where no outcome could have rejected
refused The arm did not run, and says so

Thirteen anchor codes name the distinct causes: anchor_rescore_disabled · anchor_egress_not_allowed · anchor_no_rescorer · anchor_no_budget · anchor_no_budget_id · anchor_budget_refused · anchor_no_frozen_set · anchor_below_set_floor · anchor_incomplete_rescore · anchor_rescore_failed · anchor_live_arm_unavailable · anchor_underpowered · anchor_subject_mismatch. Eleven of the thirteen are assigned to a Reason; anchor_below_set_floor and anchor_subject_mismatch reach only an error string, because neither path produces a diagnosis for a reason to sit on (anchor.go:458-474).

Sidecar judge fault reasons

Twelve reasons a judging container’s answer was turned away. The transport discards the third party’s own message in every case and reports only the reason, so a container’s bytes cannot ride onto a row.

Reason Meaning
unreachable The request never completed: DNS, connect, TLS, reset or a deadline
status_not_ok A non-2xx status. The status travels; the body does not
malformed_response 2xx, and the body is not the documented shape
no_verdict_for_item The response carried no verdict for the id asked about. A different fact from malformed_response
verdict_shape_wrong The verdict does not match the method asked: a score where a winner belongs, both at once, or neither
score_out_of_range A score outside [0,1], or NaN, or ±Inf. Refused rather than clamped
winner_unknown A winner outside the closed A/B/TIE set
abstain_reason_unknown An abstention whose reason is outside what a container may claim. A container may claim out_of_scope or below_conformal, and neither swap_inconsistent nor panel_split, because those are facts about a trial only the core observes
version_unreported No model or no version in the response
subject_too_large An item side exceeds the per-side bound. Skipped, and not truncated
health_unreachable The /healthz probe never completed
health_status_not_ok The /healthz probe returned a non-2xx status

The two health reasons are separate from the ten judging reasons so a probe transcript cannot be misread as a judging one.

Gold-set sources, exclusions and skip counters

What the assembler admitted, what it excluded and what it skipped, before any of the above runs.

GoldSource Meaning
outcomes Human EvalRow submissions, under a server-derived actor identity
feedback FeedbackRow rows admitted under the DJ10 mapping, which admits only metrics whose rubric is the binary satisfaction question

ExcludedReason has six members, and the sixth is the empty string.

Value Meaning
"" Admitted. Absence of an exclusion is the zero value, so a row that says nothing is an admitted row
demo A tokentriage demo record. Excluded unconditionally
synthetic A dataset-import or synthetic marker. Excluded unconditionally
both Demo and synthetic
unattributed No actor or no request id, so the row cannot join an overlap sample
superseded Replaced by a later label from the same annotator

The six skip counters print on the skipped: line of every assembly block.

Counter Meaning
no_metric An outcome carrying no metric id, so it names no segment
unkeyable A segment coordinate containing a pipe or an equals sign, which the segment key turns away
no_pass_verdict The Pass field is nil. An absent pass verdict is not a false, so it is not a label
incomplete_subject A judge-produced outcome whose subject does not name every B.7 coordinate
pseudo_actor_outcome A human row carrying the shared bearer pseudo-actor. The shipped write door refuses bearer principals, so a non-zero count here means the row entered by another route
shadow_no_subject A graded shadow companion row recording no judge id or no metric, so no subject can be built from it

What this page does not cover

The tokens here are the ones the judge track defines. Three neighbouring vocabularies live elsewhere: the calibration and evals enums, including the basis values and the four-state eval verdict, are Calibration & evals vocabularies; the request and response shapes that carry these tokens over HTTP are Judge API; and what each method decides and costs is Judge methods.

This page states what a token means, and not how to act on one. For the symptom-to-fix walk, start at Validate and promote a judge.