Summary
Residual of #14. The condition-handling fix now correctly allows "[value] ... in the temperature
range" (so the Sessler 1.7 eV case ACCEPTs). But a bare "in the range" qualifier (as in
"electric fields in the range", "frequency range", etc.) still trips the scope-suffix guard, so a
supported value followed later in the clause by "in the range" is scored PARTIAL.
Affected code
src/ref_verify/numeric_claim.py — _has_unsupported_frame and its scope-suffix term set. The
whitelist added in #14 recognizes "in the temperature range" but not a trailing "in the range" whose
conditioned noun (electric field / frequency / …) appears earlier in the clause.
Evidence (token isolation on latest main)
Clause (OpenAlex abstract of 10.1149/1.2086797): "Measurements were carried out at 30°C with electric
fields in the range".
_has_unsupported_frame("...at 30°C with electric fields in the range") -> True (blocked)
_has_unsupported_frame("...at 30°C with electric fields") -> False
_has_unsupported_frame("...at 30°C in the range") -> True (<-- "in the range")
_has_unsupported_frame("...at 30°C") -> False
_has_unsupported_frame("...1.7 eV in the temperature range between ...")-> False (#14 fixed this one)
So "in the range" is the residual trigger; "in the temperature range" is already allowed.
End-to-end repro (reachable via OpenAlex, #13):
python3 -m ref_verify.cli check-claim 10.1149/1.2086797 \
--claim "The conductivity measurements were carried out at 30 °C." --json
# Actual: PARTIAL (abstract_source: openalex)
# Expected: ACCEPT
Suggested fix
Extend the condition whitelist so a trailing "in the/a range" (and "in the range of …",
"at … field", "at … frequency") is treated as a measurement condition, not a sub-population scope.
General principle from #14: in/at/for + (range | field | frequency | conditions | temperature | a
physical unit) = condition (do not void the value); in/at/for + (sample | device | case | group) =
sub-population scope (may void). The current fix covers "temperature range" but not the broader set.
Tracking
Covered by the CLI regression corpus as row A2-bellucci-30C in PR #15 (it already exercises #13
reachability via OpenAlex). The gate flips that row PENDING → PASS once this lands.
Summary
Residual of #14. The condition-handling fix now correctly allows "[value] ... in the temperature
range" (so the Sessler
1.7 eVcase ACCEPTs). But a bare "in the range" qualifier (as in"electric fields in the range", "frequency range", etc.) still trips the scope-suffix guard, so a
supported value followed later in the clause by "in the range" is scored PARTIAL.
Affected code
src/ref_verify/numeric_claim.py—_has_unsupported_frameand its scope-suffix term set. Thewhitelist added in #14 recognizes "in the temperature range" but not a trailing "in the range" whose
conditioned noun (electric field / frequency / …) appears earlier in the clause.
Evidence (token isolation on latest
main)Clause (OpenAlex abstract of 10.1149/1.2086797): "Measurements were carried out at 30°C with electric
fields in the range".
So "in the range" is the residual trigger; "in the temperature range" is already allowed.
End-to-end repro (reachable via OpenAlex, #13):
Suggested fix
Extend the condition whitelist so a trailing "in the/a range" (and "in the range of …",
"at … field", "at … frequency") is treated as a measurement condition, not a sub-population scope.
General principle from #14:
in/at/for+ (range | field | frequency | conditions | temperature | aphysical unit) = condition (do not void the value);
in/at/for+ (sample | device | case | group) =sub-population scope (may void). The current fix covers "temperature range" but not the broader set.
Tracking
Covered by the CLI regression corpus as row
A2-bellucci-30Cin PR #15 (it already exercises #13reachability via OpenAlex). The gate flips that row PENDING → PASS once this lands.