Skip to content

Gemma 4 E4B Fast router promotion + harness lockstep (gpu-reservations:T007)

Publication redaction: The operator-specific network hostname was replaced with a public-safe placeholder. The observed workflow and result are unchanged.

Point-in-time record, 2026-07-13. The live primary-node router config was promoted to the Gemma 4 E4B fast tier prepared by gpu-reservations:T006, the quality profile was reseeded for the new serve identity (chat-fast rows added, calibration pending), and the OpenClaw harness config on the companion-node gateway was synced in the same change. Heavy and Voice were not changed.

What was promoted

Field Value
Fast tier model gemma4-e4b-it on http://host.docker.internal:30003/v1 (RTX 5090, T006 serve)
Router config examples/primary-node/anvil-router.live.toml, mapping_version = 2026-07-13.primary-node-gemma4-e4b-fast
Profile promotion-profile.json, mode operator-promotion-e4b-fast
fast-local serve fingerprint 586942fa32804069e645db5bde98ae323f41c49a44997f7d016cfd7019881272 (computed via anvil_serving.router.fingerprint.serve_fingerprint from the promoted tier)
Promotion path anvil-serving router promote --profile ... --config ... --confirm — image-loader validate, volume backup, atomic write, reload, crash-loop verify (all passed; --validate-only passed first)

The pre-promotion drift this closes: the T006 serve swap put gemma4-e4b-it on :30003, but the deployed router volume still requested qwen36-35b-a3b-nvfp4 from that endpoint (mapping_version = 2026-07-12.primary-node-thinkingcap-heavy), so fast-tier requests could not be served by the resident model.

Quality profile: seeded for calibration, not measured

Every fast-local row is pre-stamped with the NEW serve fingerprint and carries sample_n = 0 / last_measured = null / quality_score = null — explicitly uncalibrated seed verdicts pending measurement (gpu-reservations:T008 runs the voice-consult benchmark against E4B; anvil-serving eval calibrate is the measured write-back path). Verdicts keep the prior operator posture: fast-local deny for planning / multi-file-refactor / long-context / review, allow for bounded-edit / chat, plus new explicit chat-fast rows (allow on fast-local, allow-with-verify on heavy-local — previously chat-fast was reachable only via the built-in seed merge). Heavy rows are byte-identical to the prior promotion. Because the fingerprint matches the live tier identity, startup re-stamping marks nothing stale.

Live verification (decision log)

A live chat-fast request through the tailnet front door (http://100.64.0.10:8000/v1, healthz 200 post-reload) returned the expected completion from the fast tier. The router decision log (chat-fast-decision-log.json) records: work_class = chat-fast, requested_tiers = [fast-local, heavy-local], served_tier = fast-local, verifier_passed = true, fell_back = false. The :30003 endpoint serves only gemma4-e4b-it (/v1/models), so served = fast-local is the E4B serve.

Harness lockstep (OpenClaw on companion-node)

anvil-serving harness sync openclaw --config examples/primary-node/anvil-router.live.toml --base-url http://100.64.0.10:8000/v1 --gateway-host mini-host.example --confirm merged the rendered provider into ~/.openclaw/openclaw.json (backup taken). Rendered preset contextWindow values remain the LARGEST routed tier window per the clamp gotcha — 131072 for every preset, because each preset (including chat-fast, fast-first) still routes to the 131072-token heavy tier; the fast window stays 32768 inside the router. The merged gateway config was verified byte-identical to the pre-sync backup (the E4B swap changes no preset topology or window), so a gateway restart was intentionally skipped: OpenClaw reads config at startup and there was no delta to pick up. Dry-run render: harness-sync-dryrun.json.

Rollback

The promote path backed up the prior profile/config inside the anvil-router-cfg volume (config.toml.bak / profile.json.bak); the serve-side rollback is the compose-profile fast-qwen36-rollback service documented in examples/primary-node/serves.toml (T006).

Raw artifact hashes: SHA256SUMS.