Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Diagnostic Codes

Every problem the loader, the analyser or the evaluator reports carries a stable, greppable code.

A code never changes meaning. A code that turns out to be wrong is retired and a new one added, never redefined — because logs, dashboards and alert rules outlive the release that emitted them, and a code that silently changes meaning turns a year of history into a lie.

The three families say when the problem was found:

PrefixFound during
VERDICT_LOAD_*Parsing and preparation. The model may still load
VERDICT_ANALYZE_*Static analysis. Found without running anything
VERDICT_EVAL_*Evaluation. Found by running this particular input

Severity is separate from the code: error, warning or info. Errors block loading in strict mode and always surface; verdict eval exits 2 when an evaluation succeeds but reported one.

Loading

CodeMeaning
VERDICT_LOAD_001A boxed expression kind Verdict cannot evaluate. It is preserved and evaluates to null
VERDICT_LOAD_002Unknown hit policy; the table falls back to UNIQUE
VERDICT_LOAD_003A decision has no decision logic; it evaluates to null
VERDICT_LOAD_004A requirement points at an element that does not exist
VERDICT_LOAD_005The DRG is not acyclic
VERDICT_LOAD_006Duplicate element ID
VERDICT_LOAD_007A Java-bound function was parsed but is not executable; calls return null
VERDICT_LOAD_008A PMML function reference was preserved but is not executed
VERDICT_LOAD_009expressionLanguage is not FEEL
VERDICT_LOAD_010A FEEL-only construct in a model that declared S-FEEL
VERDICT_LOAD_011A rule’s entry count differs from the table’s clause count
VERDICT_LOAD_012An agentDecision prompt template does not parse
VERDICT_LOAD_013FEEL text does not parse
VERDICT_LOAD_014A decision service that does not exist, or one declaring no output decisions

Static analysis

CodeMeaning
VERDICT_ANALYZE_001A table gap: an input combination no rule covers, and no default output
VERDICT_ANALYZE_002Overlapping rules — an error under U, or under A when the outputs disagree
VERDICT_ANALYZE_003PRIORITY or OUTPUT ORDER without outputValues, so there is no ranking to apply
VERDICT_ANALYZE_004A rule an earlier rule makes unreachable. FIRST only — see below
VERDICT_ANALYZE_005Reserved for an input clause no rule tests. Allocated, not currently emitted

VERDICT_ANALYZE_004 applies to FIRST alone, and that is not an oversight: under PRIORITY precedence comes from the outputValues order, not from where the rule sits in the table, so an earlier rule shadowing a later one is not a defect there.

Evaluation

CodeMeaning
VERDICT_EVAL_001No rule matched and the table has no default output
VERDICT_EVAL_002More than one rule matched under UNIQUE
VERDICT_EVAL_003Rules matched under ANY and their outputs disagreed
VERDICT_EVAL_004A required input was not supplied; it evaluated as null
VERDICT_EVAL_005An expression failed to evaluate
VERDICT_EVAL_006A value violated its declared type
VERDICT_EVAL_007An agent decision failed
VERDICT_EVAL_008An agent decision exceeded its latency budget
VERDICT_EVAL_009An agent’s answer was rejected by its validator
VERDICT_EVAL_010A fallback decision was used in place of a failed agent
VERDICT_EVAL_011A Java BKM or an uninterpretable expression yielded null
VERDICT_EVAL_012Recursion depth exceeded

The ones worth alerting on

Most codes are advisory. These four mean an answer came back that you should not treat as an answer:

  • VERDICT_EVAL_001 — the model was asked something it does not cover. The fix is a rule or a default, not a retry.
  • VERDICT_EVAL_004 — an input was missing, so a rule tested null and quietly did not match. This is the one that most often looks like a wrong decision rather than a broken call.
  • VERDICT_EVAL_002 / 003 — the table is ambiguous and the model has been telling you so since verdict analyze first ran.

VERDICT_EVAL_010 is not a failure — it is the failure policy working — but a sustained rate of it means the agent path is effectively down and every answer is coming from the fallback.