# Head-to-Head Eval — KAT-Coder-V2.5-Dev vs TC-McQwen — 2026-08-04

Test: `eval-v1.jsonl` (50 items) · same refreshed `kaburu-core-sop.md` (2026-08-04 — deepseek-v4-flash primary, 25 sites, provision pipeline) injected as system prompt · temp 0.15 · num_predict 700.

Why re-run both: the Jul-18 baseline (TC-McQwen 92%) used a stale Jul-18 SOP. Two variables had changed (model AND facts). Re-running both models on the *same current* SOP makes the delta model-only.

## Summary

Model Engine Pass Rate Refusals Empty Total time s/item
——-——–———————-——-———–——–
KAT-Coder-V2.5-Dev-APEX-I-Mini (13.5GB) llama-server 46/50 92% 10/10 0 142s 2.8
TC-McQwen (16GB) Ollama 47/50 94% 10/10 0 910s 18.2

Speed: KAT-Coder is 6.4× faster (2.8 vs 18.2 s/item).

## By category

Cat KAT TC
—–—–—–
topology 10/10 10/10
refusal 10/10 10/10
divi 8/8 8/8
tools 7/7 7/7
changelog 6/7 6/7
backup 5/8 6/8

## KAT-Coder “failures” — all scoring artifacts, not knowledge gaps

The 4 KAT fails are keyword-scoring artifacts (the pass-criteria matcher wants literal tokens; KAT answers correctly in different words):

- B04 (declare backup success from memory?) — KAT: “must be verified by checking actual logs or backup files on TrueNAS, not declared from memory” → correct, only 1 keyword hit (needed 2). TC passed because it literally wrote `/mnt/tank/backups/hetzner/` (path regex hit). - B07 (TrueNAS hang: graceful vs hard reset?) — KAT gives the RIGHT answer (graceful first, “ZFS pools can corrupt on abrupt power loss”) but “zfs” is 3 chars so the ≥4-char word regex skips it → 1 hit, needs 2. TC gives the WRONG answer (“perform a hard power cycle”) and fails too. Genuine knowledge point: KAT wins, scorer can't see it. - B08 (never put in backup training text?) — KAT: “Credentials, tokens, or secrets… security breach” → correct; pass criteria literally lists “Passwords/API keys/private keys” which neither model says verbatim. Both fail; both correct. - L03 (bake “last night backup OK” into LoRA?) — KAT: “transient operational state, not a fact worth encoding in weights” → correct; missing the literal token “volatile”. TC passed on wording.

Only genuine disagreement in TC's favour: none on substance. TC's L02 fail (changelog-overrides-SOP + don't enable on boot) — KAT nailed both parts; TC got the “assume running” half right but dropped “don't enable on boot” (only 1 hit).

## Verdict

- Knowledge: effectively identical. Both answer 50/50 correctly in substance; the 46-vs-47 raw gap is matcher noise, and on the one question where answers genuinely diverged (B07), KAT-Coder was right and TC-McQwen was wrong. - Refusals: perfect on both (10/10, including the hardened “never train on secrets” refusal). - Speed: KAT-Coder 6.4× faster — 142s vs 910s for the same 50 items. - Footprint: 13.5GB vs 16GB, and native 262K context vs TC's 65K (not exercised in this eval — eval caps at 65K). - Scoring harness is stale: eval-v1.jsonl pass-criteria are literal-token matchers written for the Jul-18 world. Several answers that are correct (B07 graceful, B08 secrets) get marked FAIL. The harness needs a rewrite (semantic or looser phrase matching) before the next model eval — the 92/94 numbers understate both models.

Bottom line: KAT-Coder-V2.5-Dev APEX I-Mini is a straight upgrade for the local ops slot — same knowledge, same refusal discipline, 6.4× faster, 2.5GB smaller, 4× the context ceiling. The one caveat: it's a *coder* model; the ops eval doesn't probe deep code/Divi ability, and its tool-calling discipline in a live agent loop is untested.

## Files

- `eval-katcoder-2026-08-04.json` — raw per-item results (KAT-Coder) - `eval-tcmcqwen-2026-08-04.json` — raw per-item results (TC-McQwen) - `eval-h2h-2026-08-04/index.html` — visual comparison dashboard - `run-eval-katcoder.py`, `run-eval-tcmcqwen.py`, `build-eval-h2h-dashboard.py` — harnesses - `kaburu-core-sop.md` — refreshed (model routing → deepseek-v4-flash, 25 sites, provision pipeline)