Skip to content

feat(usage): price claude-haiku-5-5 - #1930

Merged
mashkovd merged 1 commit into
mainfrom
feat/usage-pricing-haiku-5-5
Oct 17, 2026
Merged

mashkovd merged 1 commit into
mainfrom
feat/usage-pricing-haiku-5-5

Conversation

@mashkovd

Copy link
Copy Markdown
Member

Why

The mctl-agents cheap profile moved to claude-haiku-5-5 in mctlhq/mctl-agents#666, and claude-remote already runs on it. claude-firstparty.json had no claude-haiku-5-5 entry, so Catalog.Calculate returned ErrNoPricing and every Haiku 5.5 usage record was stored unpriced.

What

  • claude-firstparty.json: a new append-only entry, version 2026-10-17-firstparty-1, effective_from: 2026-10-17T00:00:00Z. Its rates come from the pricing page's "Model pricing" table (https://platform.claude.com/docs/en/about-claude/pricing, retrieved 2026-10-17), the row for prompts up to 100,000 tokens, in USD per MTok: input 0.10, output 0.50, 5m cache write 0.125, cache hit 0.01. Web search costs $0.01 per call. No existing entry is edited.
  • README.md: adds the table row and a section stating the known limitation.
  • mctl-api.yaml: bumps ROLLOUT_MARKER, because mctl-api reads the catalog only at startup.

Known limitation (owner decision: option 1)

Haiku 5.5 is priced per request by prompt length. Over 100,000 prompt tokens, every dimension costs 5x. mctl-api's catalog holds one flat rate set per entry, and a usage record aggregates a whole query, so the tier cannot be resolved from the record. This card uses the up-to-100k rates, which fit the short mechanical prompts cheap is meant for. Any request with a longer prompt is under-priced by up to 5x, so Haiku 5.5 costs should be read as a lower bound. Tier-aware pricing is tracked in mctlhq/mctl-api#642. When it lands, a new entry supersedes this one.

Records already ingested without a price before this card existed are not re-priced by this change.

Verification after merge

  • The mctl-api pod restarts on the new ROLLOUT_MARKER and loads the catalog without error.
  • A new claude-haiku-5-5 usage record carries pricing_version = 2026-10-17-firstparty-1 and a non-null calculated_cost.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BKnkncXtavYRiryZ2k33nM

The mctl-agents cheap profile moved to Claude Haiku 5.5 (mctl-agents#666),
and claude-remote already runs on it. The usage price catalog is keyed by
canonical_model, so every Haiku 5.5 record was being stored unpriced.

Haiku 5.5 is priced per request by prompt length (5x over 100k prompt
tokens). mctl-api's catalog is flat and a record aggregates a whole query,
so the tier cannot be resolved yet. This card uses the up-to-100k rates and
the README states that longer prompts are under-priced by up to 5x (a lower
bound); tier-aware pricing is mctl-api#642. Append-only entry;
ROLLOUT_MARKER is bumped because mctl-api reads the catalog only at startup.

Claude-Session: https://claude.ai/code/session_01BKnkncXtavYRiryZ2k33nM
@claude

claude Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Claude finished @mashkovd's task in 2m 20s —— View job


Review complete ✅

  • Gather context (CLAUDE.md, pinned diff, existing catalog/README)
  • Verify new claude-haiku-5-5 pricing entry against PR's stated rates and append-only invariant
  • Check ROLLOUT_MARKER bump and its comment
  • Post inline findings
  • Submit review verdict

Verdict: APPROVE (0 P1, 0 P2, 1 P3)

Checked git diff 63cd99835...dcd0653d1:

  • claude-firstparty.json: new entry's input_per_mtok/output_per_mtok/cache_write_per_mtok/cache_read_per_mtok/web_search_per_call (0.10 / 0.50 / 0.125 / 0.01 / 0.01) match the rates stated in the PR description. version/effective_from follow the existing naming convention, and (canonical_model, provider, effective_from) doesn't collide with any existing entry — append-only invariant (ADR-012 deploy: libertex/nginx → plain-text #7, per the README) holds.
  • README.md: new table row and "known limitation" section accurately describe the tiered-pricing gap and point at the tracking issue (mctl-api#642). Good-faith, well-documented under-pricing tradeoff.
  • mctl-api.yaml: ROLLOUT_MARKER bump is required per this file's own "Restart requirement" doc, since the catalog is read only at startup — correctly done in the same commit.

P3 (nit, doesn't block): the Bump only after zitadel-iac has applied generated identity configuration... sentence above ROLLOUT_MARKER is leftover guidance from the previous rollout (mctl-gitops#1923, loading ZITADEL_PORTAL_CLIENT_ID) and doesn't apply to this one. Left as-is it could make a future contributor think they need to wait on zitadel-iac for an unrelated bump. See inline comment for a suggested trim. Fix this → on branch feat/usage-pricing-haiku-5-5.

One thing outside the diff itself, flagged for awareness only (not a code issue): the PR description cites mctlhq/mctl-agents#666 for the cheap profile move, while the new README text (and the prior commit's subject, chore(agents): shepherd issue-663-...) cites #663. Worth double-checking which issue number is correct before merge, though it has no effect on the catalog/pricing logic.

@@ -61,8 +61,9 @@ spec:
# annotation hook, so changing this value is how gitops restarts
# the pod. Bump only after zitadel-iac has applied generated

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Bump only after zitadel-iac has applied generated identity configuration: envFrom is read at container start. is leftover guidance from the previous rollout (loading ZITADEL_PORTAL_CLIENT_ID, mctl-gitops#1923) and has no bearing on this one (loading the usage-pricing catalog). Left as-is, it reads as a precondition for this bump too, which could make a future contributor wait on zitadel-iac unnecessarily. Consider trimming it to the parts that are actually rollout-reason-agnostic (the 503-until-restart rationale) and keeping reason-specific preconditions only in the line directly above ROLLOUT_MARKER.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid, deferring as P3: that sentence predates this PR (it came with the #1923 rollout) and this PR only replaces the reason line directly above ROLLOUT_MARKER. I will trim it to the reason-agnostic rationale the next time the marker is bumped, rather than spending another review round on a comment-only change here.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No P1/P2 findings (1 P3). Good to merge.

@github-actions

Copy link
Copy Markdown
Contributor

Antigravity (agy) review — informational

Model: gemini-3.8-flash-high · commit dcd0653.

No significant issues found.

@mashkovd
mashkovd merged commit dd1eae9 into main Oct 17, 2026
29 checks passed
@mashkovd
mashkovd deleted the feat/usage-pricing-haiku-5-5 branch October 17, 2026 09:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant