The evidence model is a critical variable.
If the framework only exposes traces, SQL, and Redis results directly to the model, it becomes "LLM with tools". The real value appears when those outputs are normalized into evidence objects with stable semantics.
Each evidence item should follow a normalized schema.
Required fields:
id: unique evidence identifiersource: adapter source, such astrace,db,redisentity_id: business or technical entity this evidence refers totimestamp: time the evidence was observed or fetchedfinding_type: semantic category of the findingsummary: short fact statementconfidence: confidence in normalization, not root-cause certaintyraw_ref: stable pointer to the underlying raw payload or query result
Recommended fields:
query: the query or lookup input used to fetch the evidenceservice: related service namespan_id: related span when source is tracetable: related table when source is dbkey: related key when source is redisseverity: informational, warning, errornormalization_status: complete, partial, ambiguoustags: domain-specific labels
The framework should not let every adapter invent its own wording. Start with a small taxonomy:
trace_foundtrace_missingspan_missingstatus_mismatchdb_row_founddb_row_missingcache_key_existscache_key_missingcache_ttl_positivedownstream_errormessage_not_delivered
Runbooks should declare minimum evidence requirements for conclusions.
Examples:
- "request reached service" requires
trace_foundor a log/dependency equivalent - "expected row missing" requires a
db_row_missingitem with explicit query reference - "stale cache suspected" should require at least one cache item plus one contradictory source
The model must not flatten conflicts.
When evidence conflicts, the report should:
- mark the conflict explicitly
- preserve both evidence items
- downgrade confidence
- recommend the next best discriminating check
Evidence should be interpreted relative to the incident window.
Important cases:
- delayed async systems can create misleading "missing" conclusions
- stale cache observations may be true now but irrelevant at incident time
- trace timestamps and database commit timestamps may differ
The evidence object should therefore carry timestamps and, when possible, collection time versus event time.