A hyphen is a different product
Branch fix/pricing-suffix-inherit, 2026-09-03. The cost estimator matched model ids by substring in both directions. That let gemini-3.8-flash-cyber (Fairwind-gated, no public price) and gemini-3.8-flash-lite bill at the 3.8 Flash promo row. Measured with a probe before the fix: CYBER=0.75/3.75.
1. Type an id, compare old and new
The rule. Exact match first. Then, if the name extends a priced id, the remainder must be a bracketed CC session label like [1m]; a hyphenated or dated remainder is a different product and takes the unknown-model fallback. If the name is a prefix of a priced id (family shorthand such as claude-opus), it resolves as before. Nothing in the pinned test table moved: 35 tests, two of them new.
2. What changed for each pinned case
| Input | Old row | New row | Why |
|---|---|---|---|
gemini-3.8-flash-cyber | 3.8 Flash $0.75 | fallback $2.00 | not GA, no price; a neighbour's promo rate was wrong |
gemini-3.8-flash-lite | 3.8 Flash $0.75 | fallback $2.00 | different product |
claude-opus-5[1m] | Opus 5 $5.00 | Opus 5 $5.00 | session label, still rides |
claude-opus-5-20270101 | Opus 5 $5.00 | fallback $2.00 | dated snapshot of an unpriced id is unknown |
claude-opus | first Opus row | first Opus row | family prefix, unchanged |
Provenance. The platform memory of 2026-09-01 (a prefix resolver bills a new model at its predecessor's rates) motivated the own-row tests in #3905; CodeRabbit raised the suffix direction on core #2389, and the peer session's fix there prompted this one. Same hole, both resolvers.