Problem
An empty range rule (rangeRule {} with no start or end bounds) matches any value in the Rust resolver. Java treats it as non-matching.
Rust behavior
confidence-resolver/src/value.rs ~L162-187:
fn evaluate_range_rule(
range_rule: &targeting::RangeRule,
context_value: &targeting::Value,
) -> bool {
let after_start = match &range_rule.start {
Some(...) => ...,
_ => false,
};
let before_end = match &range_rule.end {
Some(...) => ...,
_ => false,
};
(range_rule.start.is_none() || after_start) && (range_rule.end.is_none() || before_end)
}
When both start and end are None:
range_rule.start.is_none() → true
range_rule.end.is_none() → true
- Result:
true && true = true (matches)
Java behavior
EvalUtil.java ~L167-178:
public static boolean isInRange(Targeting.RangeRule rangeRule, Targeting.Value value) {
if (value == null) {
return false;
}
try {
return Util.hasOverlap(value, rangeRule);
} catch (IllegalArgumentException e) {
return false;
}
}
Java delegates to Util.hasOverlap() which requires at least one bound to be set. An empty range has VALUE_NOT_SET for its expected type:
private static ValueCase getExpectedPrimitiveType(Targeting.RangeRule rangeRule) {
if (rangeRule.hasStartInclusive()) return rangeRule.getStartInclusive().getValueCase();
else if (rangeRule.hasStartExclusive()) return rangeRule.getStartExclusive().getValueCase();
else if (rangeRule.hasEndInclusive()) return rangeRule.getEndInclusive().getValueCase();
else if (rangeRule.hasEndExclusive()) return rangeRule.getEndExclusive().getValueCase();
else return ValueCase.VALUE_NOT_SET;
}
With no bounds, the type check fails and the range does not match → NO_SEGMENT_MATCH.
Affected spec tests
Problem
An empty range rule (
rangeRule {}with no start or end bounds) matches any value in the Rust resolver. Java treats it as non-matching.Rust behavior
confidence-resolver/src/value.rs~L162-187:When both
startandendareNone:range_rule.start.is_none()→truerange_rule.end.is_none()→truetrue && true=true(matches)Java behavior
EvalUtil.java~L167-178:Java delegates to
Util.hasOverlap()which requires at least one bound to be set. An empty range hasVALUE_NOT_SETfor its expected type:With no bounds, the type check fails and the range does not match →
NO_SEGMENT_MATCH.Affected spec tests
empty_range_rule