Skip to content

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

@moonweave

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions