Skip to content

Evidence Rules

Evidence is checked by declared rules on each Flight Sheet. Each rule passes or raises a flag. There are two real machine-evaluable shapes the live engine ships today:

1 · The evidence-non-empty pattern (app/executor.py, step 3). An evidence_check names an array (match_field) and an evidence field. The executor confirms every item in that array carries a non-empty value for one of evidence_reference · source_location · source. If any item is blank, it raises a flag; if the condition isn’t one of those machine-evaluable patterns, the check is honestly marked skip (not faked).

2 · The citations_present auto rule (app/eval.py). A free-text submission passes if it contains a citation marker (source, per the, according to, exhibit, rent roll, t12, page, [, cited, provided); otherwise it flags “No evidence citations detected.”

A Flight Sheet author might, for example, declare evidence rules like:

Illustrative rule (author-declared)What it would checkSuggested tier
evidence_references_presentEvery claims[] entry carries an evidence_reference.mid
all_claims_citedNo claim made without a source pointer.mid
missing_inputs_disclosedThe submission lists what it could not compute due to absent evidence.low
assumptions_labeledEvery assumption is labeled (not silently embedded in a calculation).low
no_fabricated_evidenceSource pointers map to evidence that was actually attached.high

Each rule is rule-shaped, not opinion-shaped. There is no continuous “how strong is this evidence” score. A claim either carries an evidence reference or it doesn’t. A calculation either labels its assumptions or it doesn’t.

A continuous dial is an opinion. “How strong is this evidence on a 0-1 scale?” requires judgment — exactly the thing the rulebook doctrine forbids on the receipt path.

The new model preserves what the dial tried to capture (depth of supporting context, source quality, recency) by making each dimension a declared rule with a binary pass/flag outcome. If a Flight Sheet wants stricter evidence handling, it adds rules — it does not turn a knob.

Old dial axisNew rule shape (illustrative — a Flight Sheet could declare it)
Color (operator-rich context)A sheet could require named operator context as a structure rule (e.g. an author-declared comp_set_present / tenant_credit_disclosed check).
Source weight (operator-verified > deeded > scraped)A sheet could declare a per-claim source field and require, say, confidence: provided for high-tier claims. (confidence: provided/inferred/missing is an example enum a sheet could declare — not a built-in engine field.)
FreshnessLanes that care about staleness could declare a data_as_of rule and a freshness window.

These are modeling examples, not fixed engine fields. The Flight Sheet is the rulebook: if the dimension matters in your lane, declare a rule for it — the engine runs whatever structured rules you declare, plus the two evidence patterns above.

Strong evidence is evidence that passes every rule the Flight Sheet declared for it.

Not a grade. Not a vibe. A binary pass against a declared rule list.


🐝 Declared rules. Binary outcomes. No dials. To the shed.