fix: migrate missed _resolve_value callsites in _build_compare_additive + dual-unit extractor

Two remaining sites that used _resolve_value() as a raw numeric operand:

1. _build_compare_additive (line 924): `delta_value = _resolve_value(delta_value_raw)` passed
   a _ResolvedValue to Quantity, swallowed by the try/except — caused 7 G.2 additive-comparative
   tests to silently return zero candidates.

2. Dual-unit initial extractor (line 1385): `_resolve_value(value_raw).value` with type: ignore —
   replaced with explicit rv = ...; if rv is None: return [] pattern for clarity.

Regenerates G2 comparatives report.json (24/24 pass, wrong=0 unchanged).
This commit is contained in:
Shay 2026-05-23 15:29:17 -07:00
parent 5853b189b2
commit 3587d5c4d7

View file

@ -921,8 +921,11 @@ def _build_compare_additive(
reference_canon, reference_head = _resolve_reference_token(reference_raw)
if reference_canon == actor:
return None # self-reference; constructor would refuse anyway
delta_value = _resolve_value(delta_value_raw)
unit = _canonicalize_unit(unit_raw)
rv = _resolve_value(delta_value_raw)
if rv is None:
return None
delta_value = rv.value
unit = rv.unit_override if rv.unit_override is not None else _canonicalize_unit(unit_raw)
try:
op = Operation(
actor=actor,
@ -1377,12 +1380,15 @@ def _conj_object_candidates(sentence: str) -> list[CandidateInitial]:
(v1_raw, u1_raw, u1),
(v2_raw, u2_raw, u2),
):
rv = _resolve_value(value_raw)
if rv is None:
return []
try:
out.append(
CandidateInitial(
initial=InitialPossession(
entity=entity,
quantity=Quantity(value=_resolve_value(value_raw).value, unit=unit), # type: ignore[union-attr]
quantity=Quantity(value=rv.value, unit=unit),
),
source_span=sentence,
matched_anchor=anchor,