Gemini 3.8 Flash gets its own pricing row

Branch feat/gemini-38-flash-pricing, 2026-09-02. Google shipped gemini-3.8-flash GA today. OrchestKit's one real model-pricing table is src/hooks/src/lib/models.vocab.json, read by the cost-estimator hook. This page shows what the row does and why the resolver had to be tested, not just fed.

1. The pricing table, before and after the promo ends

Price the table as of:
ModelInput / MTokOutput / MTokCache readCache writeNote

Dated doubling. The Gemini row is a promo through 2026-12-31. On 2027-01-01 Google doubles it to $1.50 / $7.50 / $0.15. The vocab row, its mirror in the analytics skill and the test pin all name that date, so the re-stamp is a one-line diff in three files, not an archaeology job. Cache write is the input rate because Google bills cache creation at input plus per-hour storage, no 1.25x write premium; the cache-convention test carries that as a named exception.

2. The resolver: type an id, see which row bills it

The lesson this PR honours. A prefix or substring resolver bills a new model at its predecessor's rates (platform memory, 2026-09-01). getPricing() does exact match, then alias, then substring in either direction, then the sonnet fallback. So a new id gets its OWN row plus a test that resolveModelKey(id) === id, and a test that the unpriced predecessor does NOT inherit the row. The Cyber id is the one substring neighbour that would inherit; it is not GA, has no public price, and is deliberately not a row, so the page shows the hazard rather than hiding it.

3. Where the id landed

SurfaceChangeWhy there
src/hooks/src/lib/models.vocab.jsonrow in pricing only, dated note in $commentthe authoritative table; not in fullIds or aliases, those are the Claude vocabulary that agent frontmatter validates and CC cannot run an agent on Gemini
src/hooks/src/__tests__/lib/cost-estimator.test.ts3 tests: own row at promo price, resolves to itself, predecessor does not inherit; write-ratio exceptionthe resolver test the lesson demands
src/skills/analytics/references/cost-estimation.mdmirror row plus the 2027-01-01 and Cyber notethe only doc that mirrors the vocab table
src/skills/llm-integration/SKILL.mdJudge model row gains gemini-3.8-flashcost tier under Haiku and a third vendor for the different-model judge rule; no price, the skill's house rule forbids hardcoding prices
src/skills/llm-integration/scripts/ollama-provider-template.pyREASONING route: stale gemini-3-flash-preview to gemini-3.8-flashthe one task-class map in the repo; Claude rows untouched
src/agents/llm-integrator.mdnew google provider, tier balancedGoogle's own positioning: primary general-purpose model