Skip to content

[bug] #14 residual: trailing "in the range" qualifier still blocks ACCEPT (condition whitelist incomplete) #17

Description

@moonweave

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions