Rendered from docs/obligations/0042-a-declared-invalid-when-reaches-no-check-and-two-live.md in the Headwater
corpus. Every document on this half of the site is typed by the taxonomy
the descriptor names: corpus.json.
A declared invalid_when reaches no check, and two live contradictory decisions pass in silence
Context
The base declares conflicts_with with invalid_when: {both: {status: current}}. Spec 2 lists that state first among the four checks that the decision-relation vocabulary brings. HW-EVAL-adjacent-work calls it a deterministic, blocking-eligible check that the design held all along. It also records that spec 4 gave the same job to the sampled sweep.
Obligation
No rule in this engine reads it. The declaration reaches one place in the resolver, where it makes the status facet count as read for the relevance canon.
Discharge
The fixture corpus of the second entry plants two current decisions that declare the edge against each other, and the run is clean. This is a different class of gap from a form that nothing states. Two specifications promise the check and no code performs it.
relation.pair.invalid discharges this record (#1535, for #1491). The rule is edge-scoped, and headwater_check::invalid_pair implements it. It reads invalid_when.both from the declaration of each relation, and it reads no relation name and no state facet. It reports a warning where every facet that the condition names holds its value at both ends. The finding carries no patch, because only a person can choose which side stands (Q18). Its remedy names only the edits that clear it: supersede one end where the facet is its status, or change the facet at one end. An overrides edge does not clear it, because the overridden decision stays current. A symmetric relation gives one finding for each entry that an author wrote, on the file that wrote it. So two decisions that each declare the conflict give two findings, and a one-sided entry gives one. engine/crates/check/tests/conflicting_pair.rs holds each case. The fixture corpus now reports its planted pair.
The new rule reached no obligation when it landed. The package release of #1492, headwater/standard 4.14.0, binds it: CT-REL-9 names relation.pair.invalid and discharges OB-REL-9, and a finding of the rule now names (OB-REL-9).