One sentence changed the run.
Earn an Honest Dollar tested 16 models on synthetic web-extraction traps. Each pair of pages differed by one row. One page contained the requested value and the other did not. Both pages included a tempting decoy.[1]
Without the instruction "Use null for any field whose value is not on the page. Do not guess," the models supplied 405 made-up values across 573 missing fields. With it, they supplied 116 across 574. On the old-price trap, all 16 models copied the decoy without the sentence. One did so with it.
This was one run on synthetic pages. The publisher runs a marketplace for agent services and has a commercial interest in extraction quality. The result is useful evidence for a testable prompt change, not a universal model ranking.
The cheap upgrade is not better prose. It is a real state for "the page did not say."
Null needs a route.
A null instruction helps only if every later step can preserve it. The response schema must accept null. Validation must distinguish a missing field from malformed output. The interface must show "absent" instead of an empty-looking cell. Business logic must decide whether to stop, ask, or continue.
The same rule applies outside extraction. GitHub's Copilot settings validator reports malformed JSON, unsupported configurations, and invalid team mappings. It points to the affected file and JSON path, then asks the operator to correct the file and check the validator again.[2] Invalid policy is not silently rounded into valid policy.
Unknown must stay unknown.
VS Code 1.139 proposes an optional expiresAfter value for authentication sessions. Providers recompute the remaining lifetime for cached sessions. They leave the property undefined when expiration is unknown.[3]
The proposal uses remaining lifetime instead of an absolute timestamp because the client and extension host can run on different machines with different clocks. That is careful interface design. It represents what the provider knows without inventing precision.
Design the abstain path before the answer path.
For each extracted or computed field, define three outcomes before calling the model: present with evidence, absent by inspection, and unresolved. Give each outcome a downstream action.
- Present carries the value and its source span.
- Absent carries null and the scope that was inspected.
- Unresolved stops the sensitive action or routes the field to review.
The bench below builds that contract. It does not inspect a page. It makes the field states and follow-up routes explicit before an extractor gets the keys.