Business-failure investigation: base Qwen3.8-27B (beyond glitch tokens)

Companion to REPORT-QWEN38.md (behavioral forensics) and interp/REPORT-INTERP.md (mechanistic). The glitch tokens are one failure family — loud and obvious. This pass hunts the silent kind: plausible-but-wrong or inconsistent output that a deployed pipeline trusts. Every probe pairs a stressed condition against a matched control, so a hit is a differential, not a property of the task.

Scripts: biz_failures.py (behavioral, vLLM greedy temp-0) and interp/stage9_temporal.py (mechanistic follow-up on the one hit). Raw completions gitignored; committed summaries only.

Headline

Six modes probed. Five come back robust on Qwen3.8-27B; one is a real, business-critical hit: confident temporal staleness. And the mechanistic follow-up sharpens it into a deployable guardrail.

mode result verdict
Positional / order bias (judge, rerank) near-tie position-consistent 5/6; ties slot-1 5/20; 0 clear-winner flips robust
Sycophancy under false pushback caved 0/12; neutral-control flips 0 robust
Structured-output fidelity 0 schema breaks, 0 value errors, injection ignored robust
Anchoring on irrelevant numbers estimate moved 1/8 (that one marginal) robust
List-completeness (extraction) recall perfect to 1600 items; needle 30/30 to 128k robust (to 128k)
Temporal / confident staleness 7/8 time-sensitive facts asserted with no cutoff caveat (0/6 timeless) HIT

The hit: confident temporal staleness

Asked time-sensitive questions, base Qwen3.8-27B states the answer as flat present-tense fact with no hint its knowledge may be stale — 7 of 8 carried no caveat, while 0 of 6 timeless controls did (so it's not that the model over- or under-caveats everything; it specifically fails to flag the time-sensitive ones). Examples, verbatim:

Several of these churn frequently (interest rate, market-cap leader, records, sports titles) and go stale silently. The one question it did caveat (latest iPhone → "As of 2024…") proves the model can hedge — it just doesn't, by default, on time-sensitive queries. Business impact: any finance / news / compliance / research agent built on this model will confidently emit stale facts as current with no uncertainty flag — the archetypal silent failure.

Prior art: this is a documented-but-underexplored class (FreshQA/FreshLLMs 2023; Dated Data effective-cutoff 2024; DateLogicQA 2025), with no published temporal-cutoff study on Qwen3.x or any hybrid-Mamba model — this is a fresh datapoint. Qwen's own maintainers note self-reported cutoff dates are unreliable.

Mechanistic follow-up — the model knows, it just doesn't say

interp/stage9_temporal.py asks: does the residual stream distinguish time-sensitive from timeless queries at the last prompt token, before answering? A per-layer difference-of-means linear probe separates them at AUROC 1.0 from layer ~17 onward, versus a raw-logit baseline of 0.61 (Δ +0.39 — the signal is in the representation, not just the surface tokens).

So the failure is a dissociation, not ignorance: the model represents "this query is time-sensitive" near-perfectly and simply doesn't gate its output on it. That is exactly a deployable staleness guardrail — a one-layer linear probe, one forward pass, flags time-sensitive queries pre-answer so a pipeline can route them to retrieval or force a cutoff caveat. (Caveat, stated plainly: n=16 per class with a clean contrast saturates AUROC and the probe may partly key on lexical cues like "current"/"latest"; the load-bearing, robust claims are the +0.39 lift over the logit baseline and the behavior/representation gap.)

The five robust modes (matched-control detail)

Follow-up 1: long-context hybrid recall (the architecturally novel probe)

longctx_recall.py. The concern for a 48:16 Gated-DeltaNet / full-attention hybrid is that the fixed-size linear-attention state silently drops old information at length (state collapse — Stuffed Mamba 2024) and extraction pipelines truncate lists without erroring (ExtractBench 2026). We ran a needle-in-a-haystack position sweep and list extraction at scale.

Result: no degradation found up to 128k tokens / 1600 items.

This is a strong robustness result and a genuinely new datapoint (no published long-context recall study exists for this hybrid). It is consistent with the Gather-and-Aggregate finding that the sparse full-attention layers carry global lookup in hybrids — here they do so well enough that the linear-attention state's theoretical weakness never surfaces at these scales. Ceiling stated plainly: robust to 128k / 1600 items; the delta-rule state's limits presumably appear somewhere beyond, but not in the range a typical RAG/extraction pipeline hits.

Follow-up 2: causal test of the temporal signal

interp/stage10_temporal_steer.py. Stage 9 showed the time-sensitive signal is readable; this asks whether it is a usable lever — can adding the direction during generation force cutoff caveats on time-sensitive questions without caveating everything (the over-caveat confound) or wrecking answers?

α caveat on time-sensitive ↑ caveat on timeless (collateral ↓) timeless correct (keep)
0 (baseline) 3/16 0/16 14/16
4 6/16 0/16 15/16
8 16/16 10/16 8/16
14 12/16 12/16 1/16
22 0/16 0/16 0/16

Partially usable, narrow window. At α=4 the direction roughly doubles appropriate caveating with zero collateral hedging and no accuracy loss — a real Pareto move. Push harder (α=8) and it caveats everything (indiscriminate hedging — the over-caveat analogue of over-refusal) while halving accuracy; by α=22 generation collapses. So the temporal axis sits between the two prior mechanistic results: readable and weakly steerable — better than the Stage-6 confidence axis (readable but not steerable at all), not as clean as the DLP over-refusal fix (readable and cleanly ablatable). The deployable form is the detector (Stage-9 probe → route to retrieval / force a templated caveat), with steering as a fragile secondary knob, not a one-line fix.

Caveats & next steps

Reproduce

python3 biz_failures.py  --model Qwen/Qwen3.8-27B --tag qwen38          # behavioral, vLLM
python3 longctx_recall.py --model Qwen/Qwen3.8-27B --tag qwen38 \
    --lengths 2000 8000 32000 64000 128000 --list-ns 50 200 800 1600    # long-context
D stage9_temporal.py         --model Qwen/Qwen3.8-27B --tag qwen38      # readable? (probe)
D stage10_temporal_steer.py  --model Qwen/Qwen3.8-27B --tag qwen38      # steerable? (causal)