Those four numbers are tok/s, and the reason the trim survived the swap is that it never depended on your drafter.
My reading first, so you can kill it in one line. I read 83.90/83.31 and 87.06/86.63 as chat/agentic tok/s, not acceptance. Four reasons: they continue the 78.82/80.51 and 77.81/81.66 scale you posted for the same rig; your card has never put any DFlash2 arm above 0.76 accepted/drafted; the slash order matches the card's chat-then-agentic columns; and the card commit at 21:57, 36 minutes before you wrote, has the trim moving acceptance the other way, 0.755 to 0.730 agentic. If they really are acceptance then everything below is wrong and I would want to know that first.
Read as tok/s it is +3.77% chat and +3.99% agentic.
The drafter does not contain the thing your card says is trimmed
I pulled the safetensors header off Qwen3.8-27B-DFlash2-memra. 81 tensors, 1,924,404,480 parameters, 3,848,808,960 bytes at bf16 against a 3,848,817,896 byte file. The 8 byte length prefix plus the 8,928 byte header account for the entire difference, so that tensor list is complete, not a sample.
There is no lm_head in it and no embed_tokens. Largest tensor is fc.weight at [5120, 25600], the fusion over your five target_layer_ids. The only 248,320-row objects are candidate_selector.predecessor_codebook and candidate_selector.successor_codebook, both [248320, 256], 254 MB together, 6.6% of the file.
So "the draft-side lm_head and its top-k run over 32,768 ranked rows" cannot be describing a tensor in this repo. On the MTP path it was describing one: that file's own tensor table carries output.weight at 32,768 rows next to a full 248,320-row token_embd, which is the trim, in the file, visible. Here the draft logits have to come off the trunk's head, because this drafter has no head of its own.
Which is the good news. The trim is not a property of either drafter. It is a property of the head they both borrow. That is why it transferred, and it predicts it transfers to any drafter fused to the target that reuses the target head, and buys nothing on one that ships its own already-trimmed head.
Priced, and the price is consistent with that
Card agentic pair, 0.755 to 0.730 accepted/drafted, 154.5 to 157.2 tok/s. Step cost with E = 1 + Ka:
K 2 3 4 6 8
step cost -3.68% -3.98% -4.16% -4.38% -4.51%
config.json says block_size: 8 and the card says verify width is adaptive, so effective K sits at or under 8. The answer barely moves either way: 3.7 to 4.5% of a step. I published 6.6 to 7.7% for the same trim on the MTP head.
If the trim removes the same absolute head read in both stacks, that ratio should just be the ratio of step times. From your own table: MTP agentic 148.6 tok/s at 0.63, DFlash2 q4 154.5 at 0.755. E/tps is 0.01945 against 0.04557, so the DFlash2 step is 2.34x longer. Same absolute saving predicts 2.8 to 3.3%. You measure 3.7 to 4.5%.
So it comes in 1.1 to 1.6x better than the same-absolute model. That is the direction you get if the draft head is read once per draft position rather than once per round, and a block of 8 hands you eight of them.
The one thing that does not fit
Your card puts the win in chat, +4.84% against +1.75% agentic, and explains it as shorter rounds making the head a bigger share. The rig you just posted is flat, +3.77 and +3.99. Same trim, same drafter, opposite shape. One of those two boxes is not bound by what the explanation says it is bound by, and the flat one is the one that would be bound by weight bytes instead.
The question
On the dflash path, what does MEMRA_FRSPEC_TRIM restrict?
If it is the trunk head when it scores draft positions, everything above holds and the lever is portable. If instead it is restricting the selector codebooks to 32,768 rows, it is a different intervention wearing the same name: the selector already narrows to selector_top_k: 16 per position out of 248,320, so trimming its codebooks removes candidates it was allowed to propose rather than rows it was going to read. The acceptance cost is the part I cannot read from outside. Rows a borrowed head would have scored and rows the selector was allowed to propose are not the same loss, and your position-conditional acceptance logs separate them in one plot.
Those two objects are 15.7 GB and 254 MB. The boot receipt says "DFlash2 draft head TRIMMED to 32768 rows" for a file with no head in it, so the log will not settle it. Which one is it?