Skip to content

1.0.6

Choose a tag to compare

@alharlow111 alharlow111 released this 02 Aug 18:32
· 20 commits to main since this release
Immutable release. Only release title and notes can be modified.

Patch release. Correctness fix to cost visibility. Routing is unchanged.

Fixed

Cost visibility was lying for a specific case. It's fixed.

The cost observer had a hole. It computed a dollar figure any time the
model was priced, without checking whether the call actually reported
token usage. When a priced call came back with no usage, or with
non-finite usage, the missing tokens got treated as zero. The result:
costUsd: 0.00. A reported number. Nothing distinguished it from a call
that actually cost nothing.

The whole point of cost visibility is that an unpriced call is loud and
never shows up as a false $0.00. This broke that for the missing-usage
case. A day full of these calls could read as zero spend. That's the
exact thing the feature exists to prevent.

It shipped this way in 1.0.3 on 2026-07-06 and has been in every build
since, including the 1.0.5 you can download today.

What changed: There are now three distinguishable outcomes instead
of two. A priced call with valid usage records its real cost. A priced
call with missing or non-finite usage goes loud. It is marked
usageMissing with the reason priced-but-usage-missing, no dollar
figure is recorded, and it counts in the loud bucket so a day full of
them can't read as $0.00. An unpriced model stays loud, same as before.

Tests

There was already a test carrying the guarantee's name. It only checked
the missing-price half. The missing-usage half that produced the false
zero had never been tested. That's how it shipped without anyone
catching it.

There is now a test covering all four cases: priced+usage-present,
priced+usage-missing, priced+usage-non-finite, unpriced. It fails on
1.0.5. It passes on 1.0.6. The old test is renamed to its actual scope.

Compatibility

Unchanged. Minimum OpenClaw >=2026.6.5. Validated through 2026.6.11.
OpenClaw's plugin manifest has a minimum floor field only. No ceiling
field exists in the loader, so the validated upper bound lives here,
not in the manifest.