lib/pricing.ts has no rows for claude-haiku-5-5, gemini-4-argon or TypeSafe Jev, so gstack-eval-plan refuses those arms (EVAL_PRICE_MISSING)
Maintainers usually reply within 1 day
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 66/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- bun, typescript
Research direction
Start with the pricing table in lib/pricing.ts and the existing model rows; the issue lists the provider prices and URLs for the missing models. Read the pricing checks in lib/eval-plan.ts and the related case in test/pricing-eval-plan.test.ts. Add the justified rows and verify hasPricing() and the eval plan accept those models at the recorded prices.
Written by the indexing model from the issue text.
Description
What happened
This is a data gap, not a code defect: lib/pricing.ts has no price rows for several models that are current at their providers, so gstack-eval-plan correctly refuses to price an eval that uses them.
gstack-eval-plan arms --arms jev-1.13.0,claude-haiku-5-5
→ EVAL_PRICE_MISSING
The message comes from lib/eval-plan.ts (${a.model} has no row in lib/pricing.ts, lines 178, 189, 311 at the commit below). The refusal itself is the intended behaviour (hasPricing is documented in the file header as the dry-run check that refuses a priced run on an unpriced model); the refusal we hit is the price check, and the rows are what it lacks (I did not run a full priced eval past it).
Checked against lib/pricing.ts on main at commit ce3a093a6421f84705ff6d58b1b2b022ca9e945d with hasPricing():
| model | in table? | provider price (fetched 2026-10-30) |
|---|---|---|
claude-haiku-5-5 |
no | $0.10 in / $0.50 out per Mtok for prompts up to 100,000 tokens; cache read $0.01; prompts over 100,000 tokens bill at $0.50 / $2.50 (platform.claude.com/docs/en/about-claude/pricing) |
jev-1.13.0 |
no | $0.042 per Mtok input, output free (docs.typesafe.ai/models.md) |
jev-1.14.0 |
no | same price; the page lists it as the newest Jev release, available from 2026-10-14 (jev-latest points to it) |
gemini-4-argon |
no | paid tier $2.00 in / $10.00 out (thinking tokens included), cached $0.10 through 2026-11-30, then $4.00 / $20.00 / $0.20 from 2026-12-01 (ai.google.dev/gemini-api/docs/pricing) |
For comparison, claude-opus-5-5, claude-sonnet-5-5, claude-fable-5-1 and gpt-6.1-sol are present and match the provider pages (Opus 5.5 $4/$20, Sonnet 5.5 $2/$10, Fable 5.1 $10/$50, GPT-6.1 Sol $2/$10). gstack-models resolve --role eval-arms only offers the two catalog tiers (lib/model-catalog.ts: Fable 5.1, GPT-6 Astra, Opus 5.5, GPT-6.1 Sol), so the default arms never hit this; an explicit --arms naming a model without a row does. I am not suggesting the model catalog or the tiers change.
Steps to reproduce
- Fetch
lib/pricing.tsfrommainat ce3a093a6421f84705ff6d58b1b2b022ca9e945d into an empty directory. - Run, with Bun:
import { hasPricing } from './pricing.ts'; for (const m of ['claude-haiku-5-5','jev-1.13.0','jev-1.14.0','gemini-4-argon','claude-opus-5-5']) console.log(m, hasPricing(m)); - Result:
claude-haiku-5-5 false,jev-1.13.0 false,jev-1.14.0 false,gemini-4-argon false,claude-opus-5-5 true.gstack-eval-plan arms --arms <any of the false ones>then ends withEVAL_PRICE_MISSING.
Proposal
Add rows to PRICING with the provider URL in a comment, as the existing rows do (and as #3172 did for gpt-4o, Voyage rerankers and dated Claude snapshots):
claude-haiku-5-5:{ input_per_mtok: 0.10, output_per_mtok: 0.50, cached_input_per_mtok: 0.01 }. The over-100k-token tier is excluded, which the header already lists under "long-context surcharges".jev-1.13.0andjev-1.14.0:{ input_per_mtok: 0.042, output_per_mtok: 0 }. If you would rather not carry a third-party provider, the alternative is a documented way to supply a price row for a model the table lacks (for example from.gstack/eval-models.json), so a repository can run an eval on a model gstack does not price. I found no such option indocs/eval-models.md,bin/gstack-eval-planorlib/eval-plan.ts(the one override I saw,price-gate --allow-unpriced, covers a missing call plan, not a missing price row).gemini-4-argon: the price doubles on 2026-12-01 and the table has no date schedule. Thegemini-3.8-flashrow records its schedule in a comment, but a comment does not change the estimate: a row at today's $2.00 / $10.00 / $0.10 would price estimates at half the published rate from 2026-12-01, so either use the 2026-12-01 rates ($4.00 / $20.00 / $0.20, an upper bound until then) or add the row at today's rates and schedule a follow-up update.
I can send a pull request with these rows and a case in test/pricing-eval-plan.test.ts if you want it.
Workaround today, and its cost: we edit the installed lib/pricing.ts locally. That is overwritten by the next gstack-upgrade, and is lost on every other machine.
Readiness report
gstack doctor 1.91.318.0
ok install root ~/.claude/skills/gstack: claude global current (1.91.318.0), agy global current (1.91.318.0), codex global current (1.91.318.0)
ok rescue refs none in ~/.claude/skills/gstack
ok state root ~/.gstack durable=yes (selected by default)
ok bun 1.4.4 at /usr/local/bin/bun (floor 1.3.3, tested 1.4.2)
ok hooks 9 hook(s) parse
ok codex codex-cli 0.160.1; self-locate ok; model gpt-6.1-sol (source: GSTACK_CODEX_MODEL)
ok codex probe cached MODEL_OK, 15h ago (not re-run; --live probes now)
ok artifacts sync status ok (mode full; queue 7)
ok browse bundle browse/dist built
ok binaries find-browse, design, pdf, gstack-global-discover launch (4 of 4)
ok cso native helper 1.91.318.0 (1bd2330350a6)
ok claude code 2.1.308 (Claude Code) at ~/.npm-global/bin/claude
ok session journal no session journals for this project
ok guard log 53 decisions (4 denied)
ok CLAUDE.md no gstack section lists skills (~/.claude/CLAUDE.md)
15 ok, 0 warn, 0 not configured, 0 fail
Environment
- Host (Claude Code, Codex, Cursor, ...) and its version: Claude Code 2.1.308
- OS: Linux 7.0.0-38-generic, Bun 1.4.4
- gstack installed: 1.91.318.0 (commit 1bd2330350a6); the claims above were checked on
mainat ce3a093a6421f84705ff6d58b1b2b022ca9e945d, 12 commits ahead;lib/pricing.tsas committed is byte-identical at both (blob 3fd3a342143a; the working copy here carries the two local rows) - Related: #3172 (merged, same kind of gap for other models). No open or closed issue found for these models.
- Dominant language
- TypeScript
- Stars
- 138k
- Forks
- 20.5k
- Avg merge
- 10h 55m
- Merged PRs (30d)
- 410
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from garrytan/gstack
-
S3
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
pregate: a missing pytest is PREGATE_LANE_FAILED (blames the diff), not PREGATE_ENVIRONMENTPossibly taken @vilano93 claimed this 3 days ago. OpenS3
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 70/100
garrytan/gstack#3091 · 1 comment ·
Maintainers usually reply within 1 day
-
Model recommendations: add GPT-6 Sol/Luna tiers to codex-owned call routingPossibly taken A pull request linked to this issue is open or already merged. Openparked
Difficulty 1/5 Under an hour Newbie friendliness 85/100
garrytan/gstack#2943 · 2 comments ·
Maintainers usually reply within 1 day
-
ship-release: bind the review-loop exception to the accepted edit's content (GST-965 follow-up)Open
Difficulty 4/5 3-5 days Newbie friendliness 22/100
Maintainers usually reply within 1 day
Similar issues
-
Add: Class TV ModaOpencheck:passed streams:add
Difficulty 1/5 Under an hour Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
GiganticMinecraft/seichi-playguide#183 ·
Maintainers usually reply within 1 day
-
area: core complexity: easy impact: medium
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
ueberdosis/tiptap#8668 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
longbridge/nsh#804 ·
Maintainers usually reply within 1 day