32 KiB
chat-verifier-agent Specification
Purpose
TBD - created by archiving change chat-verifier-agent. Update Purpose after archive.
Requirements
Requirement: Verifier SHALL fact-check Executor answers
The system SHALL have a Verifier Agent that reads only Gatekeeper-projected structured Executor claims and verified claim-local evidence, then produces a structured verdict based on claim derivability.
Scenario: PASS verdict when all claims have evidence
- WHEN all critical claims in
verified_executor_output.claimshave direct observation or reasonable inference support inverified_evidence - AND at least one critical claim has direct observation
- AND no critical claim is contradicted, unsupported, external unknown, or overstated
- AND verdict ceiling is PASS
- THEN the Verifier MAY output model verdict="PASS" with groundedness_score ≥ 0.5
Scenario: LOW_CONFID verdict with partial evidence
- WHEN no critical claim contradicts verified evidence
- AND some critical claims are
unsupported,external_unknown, oroverstated - THEN the Verifier SHALL output model verdict="LOW_CONFID"
Scenario: LOW_CONFID verdict with only inference support
- WHEN no critical claim contradicts verified evidence
- AND all critical claims are only
reasonable_inference - THEN the Verifier SHALL output model verdict="LOW_CONFID"
Scenario: REJECT verdict when claims contradict evidence
- WHEN any critical claim in
verified_executor_output.claimscontradicts verified evidence - OR the claim fabricates a key entity, error code, or conclusion that does not exist in verified evidence
- THEN the Verifier SHALL output model verdict="REJECT"
Scenario: Verified structured claims are the only verification target
- WHEN
verified_executor_output.claimsis present - THEN Verifier SHALL verify each structured claim against matching
verified_evidencethroughclaim_checks - AND each claim's evidence references SHALL match existing claim/invocation/tool/path identifiers when available
- AND a claim without matching verified evidence SHALL NOT be classified as
direct_observation - AND Verifier SHALL NOT receive or add confirmed facts from raw Executor text
Scenario: Executor output is invalid
- WHEN Executor does not return a legal structured contract
- THEN the Graph SHALL route directly to pre-verification Fallback
- AND Verifier SHALL NOT execute or fabricate a diagnostic verdict
Requirement: Verifier SHALL output structured JSON
The Verifier SHALL output a JSON object with verdict, groundedness_score, claim_checks array, compatibility facts_checked array, and rationale.
Scenario: claim-level verifier output is accepted
- WHEN the Verifier checks Executor V2 structured output
- THEN the output SHALL contain
verdict,groundedness_score,critical_fact_count,claim_checks,facts_checked, andrationale - AND
claim_checksSHALL be the primary V2 verification result - AND
facts_checkedSHALL remain available for compatibility
Scenario: Output format validation
- WHEN the Verifier completes its analysis
- THEN the output SHALL contain "verdict", "groundedness_score", "claim_checks", "facts_checked", and "rationale" fields
- AND groundedness_score SHALL be a float between 0.0 and 1.0
- AND verdict SHALL be one of "PASS", "LOW_CONFID", or "REJECT"
Scenario: strict schema output
- WHEN the Verifier returns its result
- THEN it SHALL output exactly one JSON object
- AND it SHALL NOT output Markdown, code fences, or explanatory text outside the JSON object
- AND the JSON object SHALL include
critical_fact_count - AND each
claim_checksitem SHALL includeclaim_id,verification,detail, andevidence_refs - AND each
facts_checkeditem SHALL includefact,is_critical,verification, anddetail
Requirement: facts_checked SHALL use a fixed classification set
The system SHALL continue to expose compatibility facts_checked using its fixed verification classification set.
Scenario: claim checks are mapped to legacy facts
- WHEN Verifier output contains
claim_checks - THEN the shared Verifier protocol parser SHALL derive compatibility
facts_checkedwhen the model did not provide them - AND
direct_observationSHALL map todirect_evidence - AND
reasonable_inferenceandoverstatedSHALL map toindirect_support - AND
unsupportedandexternal_unknownSHALL map tono_evidence - AND
contradictedSHALL map tocontradicted
Requirement: groundedness_score SHALL be derived from fact classifications
The groundedness score SHALL be computed from critical fact classifications instead of being freely chosen by the model.
Scenario: contradicted fact forces reject
- WHEN any critical fact is labeled
contradicted - THEN the Verifier SHALL output verdict="REJECT"
- AND groundedness_score SHALL be
0.0
Scenario: score derived from supported facts
- WHEN no critical fact is contradicted
- THEN groundedness_score SHALL be computed from the mapped values of critical facts
- AND the implementation SHALL use the fixed mapping
direct_evidence=1.0,indirect_support=0.6,no_evidence=0.0 - AND the result SHALL be clamped into
[0.0, 1.0]
Requirement: ChatService SHALL route based on Verifier verdict
The system SHALL use Diagnosis StateGraph conditional edges, rather than a ChatService outer loop, to route explicit Verifier execution status and effective verdict.
Scenario: PASS routes to Composer
- WHEN Verifier completes with effective verdict="PASS"
- THEN the Graph SHALL invoke Composer with filtered Verifier-allowed material
- AND the final user-facing answer SHALL NOT pass through raw Executor output
- AND the final user-facing answer SHALL NOT read Executor
user_facing_answer
Scenario: LOW_CONFID does not qualify for evidence retry
- WHEN Verifier completes LOW_CONFID but ceiling is LOW_CONFID, no valid critical evidence gap exists, or evidence retry count is already one
- THEN the Graph SHALL route to Composer without another Planner cycle
- AND the final answer SHALL distinguish confirmed information, possible directions, and evidence gaps
Scenario: LOW_CONFID qualifies for evidence retry
- WHEN Verifier completes LOW_CONFID with ceiling PASS, at least one critical valid evidence gap, and evidence retry count zero
- THEN the Graph SHALL invoke one EVIDENCE_GAP_ONLY Planner cycle
- AND it SHALL NOT use groundedness threshold or a ChatService feature flag to decide the retry
Scenario: REJECT does not enter retry round
- WHEN Verifier completes with effective verdict="REJECT"
- THEN the Graph SHALL NOT start an evidence supplementation round
- AND it SHALL route to Composer-safe output
Scenario: REJECT produces bounded output
- WHEN effective verdict is REJECT
- THEN the system SHALL output a degraded result indicating current evidence cannot support a reliable conclusion
- AND it SHALL NOT pass through raw Executor answer
- AND it SHALL NOT include an unsupported root-cause conclusion
Scenario: Verifier execution fails
- WHEN Verifier exhausts technical retry or returns a non-retryable failure
- THEN the Graph SHALL route to pre-verification Fallback
- AND no execution status string SHALL be used as model or effective verdict
Requirement: Verifier SHALL be observable
The Verifier execution, effective verdict, and downstream final-answer composition SHALL be persisted in the current Diagnosis Run self-evaluation container.
Scenario: claim checks written to self_evaluation
- WHEN a completed Verifier evaluation is persisted
- THEN
diagnosis_run.self_evaluation.verifier_evaluationSHALL includeclaim_checks - AND it SHALL continue to include compatibility
facts_checked - AND it SHALL include
verifier_status,model_verdict,effective_verdict,verdict,groundedness_score,rationale, verified output/evidence, and Gatekeeper audit
Scenario: composer output written to self_evaluation
- WHEN final answer composition completes
- THEN
diagnosis_run.self_evaluation.verifier_evaluationSHALL include compactcomposer_outputwhen available - AND handled Composer fallback SHALL remain observable through orchestration trace and status/reason fields
- AND existing claim/fact and Gatekeeper fields SHALL be preserved
Scenario: verdict written to self_evaluation
- WHEN Verifier completes
- THEN Graph result mapping SHALL write effective verdict under
diagnosis_run.self_evaluation.verifier_evaluation.verdict - AND existing
rule_evaluationandaiops_rule_evaluationchannels SHALL be preserved
Scenario: pre-verification fallback is persisted
- WHEN Graph reaches Fallback before Verifier completes
- THEN verifier evaluation SHALL include available status, Gatekeeper audit, failure reason, and Prompt audit
- AND it SHALL NOT fabricate
model_verdictoreffective_verdict
Scenario: gatekeeper result written to self_evaluation
- WHEN Graph result mapping persists available Gatekeeper state
- THEN
diagnosis_run.self_evaluation.verifier_evaluationSHALL includegatekeeper_result - AND the result SHALL retain status, severity, checked bindings, rules, failed rules, warnings, and errors when provided by Gatekeeper
Scenario: prompt audit written to verifier evaluation
- WHEN a complex Chat Graph result is persisted
- THEN the system SHALL include a
prompt_auditobject underdiagnosis_run.self_evaluation.verifier_evaluation - AND
prompt_audit.versionSHALL identify the Chat Prompt audit catalog version - AND
prompt_audit.promptsSHALL include Planner, Executor, Verifier, and Composer Prompt names and versions - AND full Prompt text SHALL NOT be persisted
Scenario: prompt audit available on fallback paths
- WHEN Planner, Executor, Gatekeeper, Verifier, or Composer reaches a handled Fallback
- THEN the persisted verifier evaluation SHALL still include
prompt_audit
Scenario: evaluation payload is inspected
- WHEN Graph verifier evaluation is persisted
- THEN it SHALL NOT contain raw Executor text or complete
tool_trace_summary - AND compatibility
executor_structured_outputSHALL contain at most the verified projection
Requirement: self_evaluation SHALL be a container object
The diagnosis_session.self_evaluation field SHALL store multiple evaluation channels in one JSON object.
Scenario: rule evaluation stored separately
- WHEN the rule-based evidence scoring completes
- THEN the EvaluationService SHALL write the result under
rule_evaluation - AND existing
verifier_evaluationdata SHALL be preserved
Scenario: verifier evaluation stored separately
- WHEN the Verifier completes
- THEN the ChatService SHALL write the result under
verifier_evaluation - AND existing
rule_evaluationdata SHALL be preserved
Scenario: no whole-object overwrite after initialization
- WHEN either evaluation channel updates
self_evaluation - THEN the implementation SHALL use read-modify-write semantics
- AND it SHALL NOT replace the whole JSON object except when initializing from null
Requirement: Verifier SHALL consume explicit verification inputs
The Verifier SHALL receive a Graph-built verified-only payload rather than inferring business inputs from conversation history, ThreadLocal state, raw Executor text, or complete tool history.
Scenario: explicit input blocks available to Verifier
- WHEN the Verifier Graph Node starts
- THEN the payload SHALL provide
diagnosis_context,verified_executor_output,verified_evidence,gatekeeper_audit, andverdict_ceiling - AND permitted structured
retry_contextSHALL be provided only after evidence retry preparation
Scenario: Verifier remains isolated from intermediate and raw material
- WHEN the Verifier input is serialized
- THEN it SHALL exclude Planner reasoning, Executor intermediate reasoning, raw Executor text, complete tool trace summary, Prompt text, and unrelated parent Graph State
Scenario: only passed bindings are available
- WHEN Gatekeeper returns mixed passed and failed checked bindings
- THEN
verified_executor_outputandverified_evidenceSHALL contain only claims/material matching passed bindings - AND the Verifier SHALL NOT receive failed or unreferenced tool material
Scenario: verified evidence preserves precise references
- WHEN the system prepares Verifier input
- THEN each verified evidence item SHALL preserve claim id, source invocation id, tool name, raw path, and matched text
- AND the item SHALL be traceable to current-run Gatekeeper validation
Scenario: gatekeeper audit and ceiling are available
- WHEN the system prepares Verifier input
- THEN the payload SHALL include raw Gatekeeper audit separately from normalized verdict ceiling
- AND a LOW_CONFID ceiling SHALL prevent effective PASS
Scenario: technical retry occurs
- WHEN the first Verifier attempt returns invalid output or a retryable invocation failure
- THEN the second attempt SHALL receive byte-identical serialized input
- AND Executor, Gatekeeper, and tools SHALL NOT rerun
Requirement: Verifier facts SHALL be auditable
Verifier claims and facts SHALL be linkable to the verified binding projection used during verification.
Scenario: claim checks contain evidence refs
- WHEN the Verifier emits
claim_checks - THEN each check SHALL include an
evidence_refsarray - AND any non-empty evidence ref SHALL correspond to existing verified evidence by claim id, source invocation id, tool name, or raw path
- AND it SHALL NOT reference a failed or unverified binding
Scenario: verifier evaluation persists traceability snapshot
- WHEN Graph result mapping persists verifier evaluation
- THEN it SHALL include
traceability_version - AND it SHALL include the bounded
verified_evidencesnapshot used by the Verifier - AND it SHALL NOT persist a complete tool trace summary as Verifier input
Requirement: Verifier inputs SHALL tolerate hardened no-evidence semantics
The verifier integration SHALL continue to work when evidence summaries distinguish failed calls, no-hit calls, and deduped retrievals more explicitly.
Scenario: Failed evidence remains a verifier-visible gap
- WHEN an evidence-bearing tool invocation fails
- THEN the verifier-facing trace summary SHALL preserve that failure as a gap
- AND the verifier flow SHALL continue without crashing
Scenario: Deduped retrievals do not count as fresh support
- WHEN the verifier-facing trace summary contains deduped
lookup_knowledgeentries - THEN those entries SHALL be treated as no-new-evidence
- AND they SHALL NOT be interpreted as fresh direct support for the answer
Requirement: Verifier evidence summaries SHALL preserve concrete supporting facts
The verifier-facing tool_trace_summary SHALL preserve compact concrete facts from persisted evidence-tool outputs so direct evidence is not misclassified as missing merely because raw output was truncated.
Scenario: Log evidence contains a concrete matching message
- WHEN a persisted
query_logsinvocation output contains a concrete log message matching a critical fact - THEN the generated
tool_trace_summarySHALL include that message or a bounded excerpt of it inoutput_summary - AND Verifier SHALL be able to reference the invocation id as direct evidence
Scenario: Metrics evidence contains concrete alert fields
- WHEN a persisted
query_metricsinvocation output contains alert names, services, or metric values - THEN the generated
tool_trace_summarySHALL include the relevant alert names, services, and bounded metric values - AND it SHALL NOT imply unsupported alerts that are absent from the tool output
Scenario: Summary remains bounded
- WHEN a tool output is large
- THEN the generated
tool_trace_summarySHALL remain bounded - AND it SHALL preserve concrete facts before generic boilerplate or low-value formatting
Requirement: Verifier low-confidence output SHALL not present unsupported claims as confirmed
When Verifier returns LOW_CONFID, user-facing output SHALL clearly separate confirmed facts from evidence gaps and SHALL NOT leave unsupported Executor claims formatted as confirmed findings.
Scenario: LOW_CONFID with critical evidence gaps
- WHEN Verifier labels critical facts as
no_evidence - THEN the final user-facing response SHALL identify those gaps from verifier output
- AND unsupported raw Executor claims SHALL NOT be presented as confirmed conclusions
Requirement: Executor SHALL output an evidence-attribution contract
The Chat Executor SHALL produce a machine-checkable final output that separates confirmed claims from hypotheses, recommendations, and missing information.
Scenario: Executor V2 final output contains only structured diagnostic fields
- WHEN Executor completes a Chat diagnosis step under the V2 contract
- THEN its final output SHALL contain
answer_version,claims,hypotheses,recommended_actions, andmissing_info - AND
answer_versionSHALL equalexecutor_evidence_v2 - AND the output SHOULD be parseable as one JSON object without Markdown fences
- AND the output SHALL NOT contain
diagnosis_summary - AND the output SHALL NOT contain
user_facing_answer
Scenario: Confirmed claims carry evidence bindings
- WHEN Executor emits an item under
claims - THEN the item SHALL include
claim_id,claim_type,claim_text,support_level, andevidence_bindings - AND
support_levelSHALL be one ofdirectorindirect - AND
evidence_bindingsSHALL contain at least one evidence binding
Scenario: Evidence bindings support multiple tool types
- WHEN Executor binds evidence to a claim
- THEN each binding SHALL include
source_type,tool_name,source_invocation_ids, andevidence_excerpt - AND the binding MAY include
source_id - AND the binding SHALL be able to reference
lookup_knowledge,query_logs,query_metrics, or other evidence-bearing tool traces - AND the binding SHALL NOT rely only on a RAG-specific
chunk_id
Scenario: Unsupported conclusions are not confirmed claims
- WHEN a possible root cause, detail, or remediation lacks current-session tool evidence
- THEN Executor SHALL place it under
hypotheses,recommended_actions, ormissing_info - AND Executor SHALL NOT present it as a confirmed claim
Scenario: Runbook and skill guidance do not become incident facts
- WHEN Executor uses runbook, skill, or historical-case guidance
- THEN the guidance MAY influence
recommended_actions - AND the guidance SHALL NOT be emitted as a current incident fact unless current-session tool evidence supports it
Requirement: User-facing Chat answers SHALL remain readable Chinese
The system SHALL preserve a readable Chinese answer for normal Chat users even when Executor emits a machine-checkable contract.
Scenario: V2 machine contract is not exposed as normal user answer
- WHEN Executor emits
executor_evidence_v2 - AND Verifier returns
PASS - THEN normal user output SHALL be rendered as readable Chinese from the structured contract or a safe fallback template
- AND normal user output SHALL NOT be the raw Executor JSON object
Scenario: Machine contract remains available for trace inspection
- WHEN the Chat trace or verifier evaluation is inspected
- THEN the structured Executor contract MAY be shown for debugging or audit
- AND normal user output SHALL use the existing verifier-routed display path rather than exposing raw JSON by default
Requirement: Structured Executor output SHALL degrade safely
The StateGraph runtime SHALL tolerate malformed or absent structured Executor output without crashing the Chat flow or invoking Verifier with untrusted material.
Scenario: Malformed Executor JSON is classified
- WHEN Executor returns malformed JSON or text outside the expected contract
- THEN Executor Node SHALL set INVALID_OUTPUT
- AND the Graph SHALL route directly to deterministic pre-verification Fallback
- AND Gatekeeper, Verifier, and model Composer SHALL NOT execute
Scenario: Structured parse failure remains observable
- WHEN Executor output parsing fails
- THEN orchestration events and verifier evaluation status/failure fields SHALL make the parse failure visible
- AND the failure SHALL NOT be treated as a successful evidence-attribution contract or diagnostic verdict
Requirement: Executor Gatekeeper SHALL validate deterministic structured-output failures
The system SHALL run deterministic Gatekeeper checks as an explicit Graph Node after legal Executor output parsing and before Verifier model execution.
Scenario: schema rule rejects removed fields
- WHEN Executor structured output contains
diagnosis_summaryoruser_facing_answer - THEN
gatekeeper_result.statusSHALL befail - AND
gatekeeper_result.failed_rulesSHALL containschema.executor_v2
Scenario: schema rule rejects missing evidence bindings
- WHEN a confirmed claim has no
evidence_bindings - THEN
gatekeeper_result.statusSHALL befail - AND
gatekeeper_result.failed_rulesSHALL containschema.executor_v2
Scenario: invocation rule rejects fabricated invocation ids
- WHEN a claim evidence binding references an invocation id absent from current-run
tool_invocationrows - THEN
gatekeeper_result.statusSHALL befail - AND
gatekeeper_result.failed_rulesSHALL containevidence.invocation_ref
Scenario: invocation rule rejects tool name mismatch
- WHEN a claim evidence binding references an existing current-run invocation id
- AND binding
tool_namedoes not match persisted invocationtool_name - THEN
gatekeeper_result.statusSHALL befail - AND
gatekeeper_result.failed_rulesSHALL containevidence.invocation_ref
Scenario: valid structured output passes initial gatekeeper rules
- WHEN Executor emits legal
executor_evidence_v2 - AND each claim has evidence bindings pointing to current-run invocations with matching tool names and paths
- THEN
gatekeeper_result.statusSHALL bepass - AND
gatekeeper_result.failed_rulesSHALL be empty
Scenario: gatekeeper reject bypasses Verifier
- WHEN normalized Gatekeeper status is REJECT
- THEN the Graph SHALL route directly to pre-verification Fallback
- AND Verifier SHALL NOT execute
Scenario: gatekeeper low confidence is bounded
- WHEN normalized Gatekeeper status is LOW_CONFID with at least one passed binding
- THEN verified input SHALL contain only passed bindings
- AND effective verdict SHALL NOT exceed LOW_CONFID
Requirement: Verifier claim checks SHALL use a fixed derivability classification set
The Verifier SHALL classify each structured claim using a fixed derivability classification set.
Scenario: claim check verification values are constrained
- WHEN Verifier emits
claim_checks - THEN each item SHALL use one of
direct_observation,reasonable_inference,overstated,unsupported,external_unknown, orcontradicted
Scenario: claim check evidence references remain auditable
- WHEN Verifier emits
claim_checks - THEN each claim check SHALL include
claim_id,verification,detail, andevidence_refs - AND every evidence ref SHALL preserve available
trace_ref,tool_name, andsource_invocation_ids
Requirement: User-facing verifier outputs SHALL follow Composer-safe protocols
The system SHALL use Composer or fixed safe templates for PASS, LOW_CONFID, and REJECT user-facing responses.
Scenario: PASS uses Composer-safe output
- WHEN the final verdict is
PASS - THEN the user-facing response SHALL be generated from Verifier-allowed material through Composer or a safe fixed template
- AND it SHALL NOT use Executor
user_facing_answer - AND it SHALL NOT expose raw Executor JSON
Scenario: LOW_CONFID uses Composer-safe uncertainty output
- WHEN the final verdict is
LOW_CONFID - THEN the user-facing response SHALL include only confirmed facts, possible directions, evidence gaps, and next-step suggestions derived from Verifier-allowed material
- AND optional evidence gaps, if present, SHALL come only from verifier-identified gaps
- AND unsupported raw Executor claims SHALL NOT be presented as confirmed conclusions
Scenario: REJECT uses degraded template
- WHEN the final verdict is
REJECT - THEN the user-facing response SHALL use a degraded template or Composer-safe degraded output
- AND it SHALL include only confirmed facts, evidence gaps, and next-step suggestions
- AND it SHALL NOT include unverified raw answer content
- AND it SHALL NOT include a root-cause conclusion
Requirement: Executor evidence bindings SHALL support precise evidence references
Executor V2 evidence bindings SHALL support precise evidence references that locate evidence inside a persisted tool invocation.
Scenario: Precise evidence binding contains invocation path and excerpt
- WHEN Executor binds evidence to a claim
- THEN the binding SHOULD include singular
source_invocation_id - AND the binding SHOULD include
raw_path - AND the binding SHALL include
tool_nameandevidence_excerpt - AND the
raw_pathSHALL be interpreted relative to the referenced tool invocation'sretrieval_details.evidence_refs
Scenario: Legacy plural invocation ids remain compatibility only
- WHEN Executor emits legacy
source_invocation_ids - THEN the system MAY read them for compatibility
- AND they SHALL NOT be sufficient for a precise Gatekeeper pass without
raw_path
Requirement: Gatekeeper SHALL validate evidence reference fidelity
Gatekeeper SHALL validate that Executor evidence bindings point to real current-session evidence references before Verifier uses them as primary evidence.
Scenario: Valid precise binding passes
- WHEN a binding's
source_invocation_idexists in the current session - AND the binding's
tool_namematches the persisted invocation - AND the binding's
raw_pathexists inretrieval_details.evidence_refs - AND the binding's
evidence_excerptis supported by the matching evidence ref text - THEN Gatekeeper SHALL return
status=pass - AND Gatekeeper SHALL return
severity=none
Scenario: Missing raw path is low confidence
- WHEN a binding references an existing invocation
- AND the binding omits
raw_path - THEN Gatekeeper SHALL return
status=fail - AND Gatekeeper SHALL return
severity=low_confid - AND the effective verifier result SHALL NOT be
PASS
Scenario: Old invocation without evidence refs is low confidence
- WHEN a binding references an existing invocation
- AND the invocation does not contain
retrieval_details.evidence_refs - THEN Gatekeeper SHALL return
status=fail - AND Gatekeeper SHALL return
severity=low_confid - AND the effective verifier result SHALL NOT be
PASS
Scenario: Unknown raw path is rejected
- WHEN a binding references an existing invocation
- AND the binding's
raw_pathis absent from that invocation'sretrieval_details.evidence_refs - THEN Gatekeeper SHALL return
status=fail - AND Gatekeeper SHALL return
severity=reject - AND
failed_rulesSHALL includeevidence.raw_path
Scenario: Mismatched excerpt is rejected
- WHEN a binding references an existing invocation and raw path
- AND the binding's
evidence_excerptis not supported by the matching system-side evidence ref text - THEN Gatekeeper SHALL return
status=fail - AND Gatekeeper SHALL return
severity=reject - AND
failed_rulesSHALL includeevidence.excerpt_mismatch
Requirement: Verifier SHALL use verified claim-local evidence for derivability
Verifier SHALL judge structured claims only against Gatekeeper-verified claim-local evidence excerpts and their precise current-run references.
Scenario: Verified excerpt supports direct observation
- WHEN verdict ceiling is PASS
- AND a claim's verified evidence matched text directly contains the claim's concrete facts
- THEN Verifier MAY classify that claim as
direct_observation
Scenario: Verified evidence is complete Verifier context
- WHEN verified claims and evidence are available
- THEN Verifier SHALL use them as its evidence context
- AND it SHALL NOT require or request a complete tool trace summary
- AND it SHALL NOT read raw Executor or unreferenced tool material
Requirement: Gatekeeper severity SHALL constrain effective verdict
Runtime effective verdict calculation SHALL treat normalized Gatekeeper ceiling as a hard upper bound independent from Verifier model output.
Scenario: Reject severity bypasses Verifier
- WHEN
gatekeeper_result.severity=reject - THEN the Graph SHALL route to pre-verification Fallback without invoking Verifier
- AND it SHALL NOT fabricate an effective diagnostic verdict
Scenario: Low confidence severity prevents PASS
- WHEN
gatekeeper_result.severity=low_confid - AND the Verifier model returns
verdict=PASS - THEN deterministic effective-verdict calculation SHALL downgrade the result
- AND effective verdict SHALL be
LOW_CONFID
Scenario: Gatekeeper audit includes severity
- WHEN Graph verifier evaluation is persisted
- THEN
diagnosis_run.self_evaluation.verifier_evaluation.gatekeeper_resultSHALL include availablestatus,severity,checked_bindings,failed_rules,warnings, anderrors
Requirement: Verifier input hook SHALL only perform narrow compatibility backfill
The verifier input hook SHALL avoid converting broad tool summaries into precise evidence references.
Scenario: Unique invocation candidate may be backfilled
- WHEN an evidence binding omits
source_invocation_id - AND exactly one current-session invocation exists for the binding's
tool_name - THEN the hook MAY backfill
source_invocation_id - AND it SHALL add a Gatekeeper warning describing the auto-backfill
Scenario: Raw path is never backfilled
- WHEN an evidence binding omits
raw_path - THEN the hook SHALL NOT synthesize
raw_path - AND Gatekeeper SHALL treat the binding as not precise enough to pass
Requirement: Executor prompt SHALL constrain narrow-scope over-expansion
The Executor prompt SHALL instruct Executor to keep narrow confirmation questions focused on observation-level claims.
Scenario: Narrow scope produces minimal observation claims
- WHEN the user asks to confirm one specific service, alert, or symptom
- THEN Executor SHOULD output the minimum necessary claims, normally one and at most two
- AND those claims SHALL be
observationornegative_observationunless current-session evidence proves more - AND Executor SHALL NOT emit unrelated root-cause, remediation, or excluded-topic claims as confirmed facts
Requirement: Gatekeeper SHALL expose rule catalog metadata in audit output
Gatekeeper SHALL include the rule catalog version and enabled rule metadata in its validation result.
Scenario: Gatekeeper pass includes rule metadata
- WHEN Gatekeeper returns
status=pass - THEN the result SHALL include
rule_set_version - AND it SHALL include a rule metadata summary
Scenario: Gatekeeper fail includes rule metadata
- WHEN Gatekeeper returns
status=fail - THEN the result SHALL include
rule_set_version - AND it SHALL include a rule metadata summary
Scenario: Gatekeeper fallback pass includes rule metadata
- WHEN the Verifier input hook returns a fallback Gatekeeper pass because no Gatekeeper service is available
- THEN the result SHOULD still include the default rule set version and an empty or default rule metadata summary
Requirement: Gatekeeper rule catalog SHALL remain deterministic
The Gatekeeper rule catalog SHALL configure metadata and simple parameters only; validation behavior SHALL remain deterministic Java code.
Scenario: Rule metadata is lightweight
- WHEN rule metadata is loaded
- THEN each enabled rule SHOULD expose an id, description, enabled flag, and default severity or relevant parameter
- AND rule metadata SHALL NOT execute dynamic scripts