Aug 2026
The Refusal Stack
Finds where Llama-3.1-8B decides to refuse, removes it, then catches a model whose refusal was quietly trained away.
How it works
Refusal can be stripped from an open-weight model by a quiet fine-tune. Whether that leaves a readable signature depends on where you look, and the obvious place, the prompt, reads chance.
Located refusal as a single linear direction by diff-of-means over harmful and harmless prompts, with layer 10 chosen causally by ablation: removing that one direction drops refusal from 92.5% to 0% while leaving benign behaviour intact (KL 0.17), replicating Arditi et al. 2024 on hand-written PyTorch forward hooks. A three-threat-model attack ladder separates search limits from real robustness: discrete GCG 50%, continuous-embedding 90%, activation ablation 100% ASR. Reproducing GCG at 95.1% ASR on a Vicuna-7B control surfaced a sampler bug that had been misreading 0% on Llama-3.1. A covert LoRA fine-tune then strips refusal (98.8% → 0%) and a generation-time probe catches the tampering at AUROC 0.956, where a last-prompt-token probe reads 0.50. Refusal is decided during generation, not at the prompt. That probe holds AUROC 1.000 with zero drop against an adaptive obfuscation attack that jailbreaks the model 94% of the time and drives its detector penalty to ≈0. The same detector, unchanged, flags a triggered sleeper-agent backdoor at 0.965 and emergent misalignment at 0.77; a refit at the same site separates a sandbagging organism (ARC-Easy 91.5% → 13%). Refusal turns out to be a ~3–8-dimensional subspace rather than one feature (detection peaks at AUROC 0.94, k=3; a Llama-Scope SAE’s best single feature reaches cosine 0.31). Whole locate→break→detect pipeline runs on one A40-class GPU via ephemeral RunPod orchestration, Dockerised and CI-gated behind 255 CPU unit tests, with a frozen results snapshot so every headline number is checkable without a GPU.