diff --git a/cards/img/laguna-s-2.1.png b/cards/img/laguna-s-2.1.png
index 40765cb..8461537 100644
Binary files a/cards/img/laguna-s-2.1.png and b/cards/img/laguna-s-2.1.png differ
diff --git a/cards/laguna-s-2.1.html b/cards/laguna-s-2.1.html
index 4d95c3c..f1cd010 100644
--- a/cards/laguna-s-2.1.html
+++ b/cards/laguna-s-2.1.html
@@ -44,9 +44,9 @@
Use it like this
-
🧠ThinkingOFF for coding & review · barely fires under real personas anyway
+
🧠ThinkingMinimize it. Never send enable_thinking:true · false is a no-op (already default) · a named persona is the real lever, but it only attenuates in long loops
🔧ToolsNative schema only · a generic/chatml harness breaks tool calls (83%→0%)
-
🎛️Servingtemp 0.6 · Q4_K_M · llama.cpp needs -fit off · never chatml
+
🎛️Servingtemp 0.6 · Q4_K_M · llama.cpp needs -fit off and -fa on (off = up to 2.2x slower decode) · never chatml
✅Best atlong-horizon coding, tool use, structured agent work (~9/10, no thrash)
📌Pin + capPin the revision, set your own max-token ceiling. Vendor dropped the output cap post-release (the "never stops" recipe)
🚫Avoid fornon-English · one-shot answers you can't verify
diff --git a/models/laguna-s-2.1.md b/models/laguna-s-2.1.md
index 15f5374..4cde84b 100644
--- a/models/laguna-s-2.1.md
+++ b/models/laguna-s-2.1.md
@@ -21,15 +21,37 @@ verdict: "Configured right (thinking off, native tool format, integrity
## 🚀 Quickstart: do these four things
-If you read nothing else, do these. Two independent testers on different quants and different serving stacks arrived at the same four (see §5d), and with them in place this is a stable, production-grade coding agent on a single box.
+If you read nothing else, do these. **Three independent testers on three different stacks** (llama.cpp/Q4_K_M, vLLM/NVFP4, and gfx1151/llama.cpp) converged on the same four (§5d, §5e), and with them in place this is a stable, production-grade coding agent on a single box.
| | Do this | Why | Where |
|---|---|---|---|
-| 1 | **Thinking OFF** | It is net-negative on held-out work, and it barely fires under a realistic system prompt anyway, so you are not losing anything you were getting | §2 |
+| 1 | **Minimize thinking** (see the how, below) | It is net-negative on held-out work. **Do not just send `enable_thinking: false`, that is a no-op** | §2 |
| 2 | **Native `poolside_v1` tool format** | Tool-calling is all-or-nothing: ~100% native, 0% under a generic/chatml format (the model narrates instead of calling) | §4 |
| 3 | **Integrity clause in your system prompt** | It refuses blatant fraud but complies when the same act is framed as cleanup (erase a leaked key from history, backdate, forge authorship). One paragraph closes it | §5b |
| 4 | **Pin the revision + set your own max-token ceiling** | Post-release config drift turned thinking on by default and dropped the output cap, which is exactly the "it never stops" recipe. If you do not set a ceiling, nothing does | §5, §5d |
+### How to actually minimize thinking (the mechanism, since #1 is the subtle one)
+
+There is no single clean off-switch. Ranked by how well each is evidenced:
+
+1. **Never send `enable_thinking: true`.** That is the one setting that demonstrably flips the template from a pre-closed `` to an open `
`. Sending `false` changes nothing (it is already the default), so if that was your whole "thinking is off" story, it was a no-op.
+2. **Put a named professional identity in your system prompt** ("You are a senior staff engineer."). This is the lever with the most evidence behind it: three stacks, and in single-turn probes it drove visible reasoning to a clean zero (§5e: 6/6 fired without one, 0/5 with one).
+3. **Expect attenuation, not elimination, in long agentic loops.** The same persona that zeroed single-turn thinking only *shortened* it across a 20+ turn tool-using loop (§5e). Budget for some reasoning in long runs regardless.
+4. **Set your own max-output-token ceiling** as the backstop, since the vendor dropped theirs (§5).
+
+**Honest caveat:** whether these stop the model *reasoning* or only stop reasoning being *emitted into a parsed field* is unresolved and differs by stack (§2, §5e). What is not in doubt is that the arms differ behaviorally, so this is still worth doing.
+
+## ✅ Verify your setup (worth 5 minutes)
+
+Most of the pain reported with this model is configuration, not capability, and every trap below is silent. Check these before you trust any result:
+
+| Check | How | If it fails |
+|---|---|---|
+| **Tool calls actually parse** | Send one request with a tool defined and confirm you get a structured `tool_calls` array, not prose describing the call | You are on a generic/chatml template. This is the 83% to 0% cliff (§4), and nothing else you tune will fix it |
+| **Flash attention is on** | Confirm `-fa on` in your server args | Up to 2.2x slower decode at depth, and you will wrongly blame the model (§5) |
+| **What your stack does with reasoning** | Send the same prompt with and without a named persona; log `reasoning_content` **and** raw content separately | All three known stacks behave differently here. Measure yours rather than trusting anyone's published rate, including ours (§2) |
+| **Revision is pinned + capped** | Pin the model revision; set an explicit max-output-token ceiling | Post-release config drift plus no cap is the "it never stops" recipe (§5, §5d) |
+
Everything below is the evidence for those four, plus where the model still surprises you.
## The offlabel behavioral axis map