v12.7 — Gemini 3.8 Flash by default, a Gemini loop configured for 3.x, and tools that say what they are
103 files. Nine paths move; the other 94 are byte identical to 12.6. MANIFEST.txt lists every file and its digest. Cut deterministically from source commit cc217553; the same image digest served the dev lane at 100% before it served production.
The console defaults to gemini-3.8-flash
Verified the way 3.7 was, not inferred from an announcement: Model Garden answers GA for the id (released 2026-09-02), Google's model list marks it New, Stable, and the first production turn on this release resolved to gemini-3.8-flash over Vertex at global and answered in 12 seconds with 55% of its input served from the implicit cache. The Pro button stays on gemini-3.1-pro-preview: Model Garden also answers for a "gemini-3.5-pro" that appears on none of Google's published model lists, pricing pages or model cards, and one endpoint the rest of the vendor's surface contradicts is a registration, not a launch. CHAT_API_GPRO moves the slot without a rebuild.
The Gemini loop knows it is talking to a 3.x model
CHAT_GEMINI_THINKING (low | medium | high) is the Gemini twin of CHAT_EFFORT; unset — the shipped state — sends no thinking field and leaves each model on its own default. minimal is refused by 3.7/3.8 Flash and therefore by the console, before any spend. Thinking tokens are billed as output and are now counted as output in /api/usage; they were not before. The tool loop returns the model's parts verbatim, which carries the thought signature Gemini 3.x requires on the next round. A multi-part text answer is joined instead of truncated. The model configuration page says all of this, including the 3.x Flash introductory price that doubles on 2027-01-01.
Every tool carries MCP annotations
Derived from the one tool-class table the server already keeps: the 28 read-only tools declare readOnlyHint; writes that remove or cancel something, and every tool that reaches the executor or Google Cloud, declare destructiveHint. Measured on Gemini Enterprise connected to this server as a third harness: without annotations it put a review card in front of every call, whoami included; with them, reads run and actions ask. Clients that ignore the field see no change.
Proven before publishing
gen.py cut twice, diff -r zero. Bus gate 0 (negative control 4/4). Passkey gate 0 (negative control 7/7, four asserted allowances). Route audit 74 / 58 guarded / 16 public, no route changed. Dev lane on this digest: console 51 routes, mcp 28, clean boot. Then production, same digest, and a live Gemini 3.8 Flash turn.
Apache-2.0. Your project, your bill, your key.