Follow-up in the #488 lineage, found by the #494 review. cql-execution passes a Long literal through as its string (the same representation split #494 documents), so Interval[1L, 4L) reaches the serializer as {low: "1", high: "4"}. The numeric-interval branch in backend-ts/src/fhir/cql-result-parameters.ts filters boundaries with typeof b === "number", drops both strings, and ships valueRange: {} — a bounded interval reads as unbounded, and after #494 it is confidently labeled Interval<System.Long>.
Pre-existing (before #494 the same empty Range shipped labeled Decimal), and unreachable from any WorkWell measure (none uses Long). But the declared point type now identifies the case exactly where the string boundaries could be recovered:
$cql transport only; no measure-evaluation impact.
Follow-up in the #488 lineage, found by the #494 review.
cql-executionpasses a Long literal through as its string (the same representation split #494 documents), soInterval[1L, 4L)reaches the serializer as{low: "1", high: "4"}. The numeric-interval branch inbackend-ts/src/fhir/cql-result-parameters.tsfilters boundaries withtypeof b === "number", drops both strings, and shipsvalueRange: {}— a bounded interval reads as unbounded, and after #494 it is confidently labeledInterval<System.Long>.Pre-existing (before #494 the same empty Range shipped labeled
Decimal), and unreachable from any WorkWell measure (none uses Long). But the declared point type now identifies the case exactly where the string boundaries could be recovered:Interval<Long>point, accept string boundaries that match an integer-literal shape (convert for the step arithmetic, ship as unity-quantity numbers — in-range Longs render as digits; or decide the valueString-boundary form with the runner'swirePointTypeambiguity note in view)Interval[1L, 4L)must ship bounded ([1, 3]under step 1), nevervalueRange: {}$cqltransport only; no measure-evaluation impact.