A dated note does not turn red
Branch feat/gemini-38-restamp-canary, 2026-09-03. PR #3905 stamped gemini-3.8-flash at its promo price and wrote "doubles on 2027-01-01" in three files. Prose is not a gate. This PR adds the gate.
1. Pick a date, see what CI does
| Field | Row in the vocab (unchanged) | Price in force on that date |
|---|
What flips. The canary computes the price in force from the clock (UTC midnight, 2027-01-01) and compares it to the vocab row. Until then both agree and the test is green. From that instant the row is stale and the test fails with the exact files to re-stamp: the vocab row and its note, the analytics mirror table, and the promo pin in the test. Nothing at runtime changes; the cost-estimator still reads the row as written.
2. Both arms were made to fire
| Arm | Command | Observed |
|---|---|---|
| green (today) | npx vitest run src/__tests__/lib/cost-estimator.test.ts | Tests 33 passed (33) |
| red (override) | ORK_TEST_NOW=2027-01-02 npx vitest run ... | Tests 1 failed | 32 passed (33), message names the three files |
| boundary | fixed instants 2026-12-31T23:59:59Z and 2027-01-01T00:00:00Z | different expectations on each side; list row is promo times 2, not a retype |
Why the override exists. A first attempt "simulated 2027" with an env var the test never read; both arms printed 33 passed and proved nothing. A check that cannot disagree with you has measured nothing, so the test now reads ORK_TEST_NOW and the red arm is part of the PR evidence, not an assumption.
3. What to do on 2027-01-01
- Re-stamp
src/hooks/src/lib/models.vocab.json: thegemini-3.8-flashrow to 1.50 / 7.50 / 0.15 / 1.50 and the dated note in$comment. - Re-stamp the mirror row in
src/skills/analytics/references/cost-estimation.md. - Update the promo pin and
GEMINI_38_PROMOincost-estimator.test.ts; the canary then compares the row to the list price and goes green again. - Verify Google actually doubled it. If the promo was extended, move
GEMINI_38_PROMO_END_UTCinstead and say why in the commit.