# Stop-B end-to-end on dense Qwen3.5-27B (the improving trajectory) — 2026-06-16

Branch `feat/two-stop`. Real `gpt-5.4` agentic loop (codex/prism), Stop-A enabled,
length-aware TTFT SLO (4s + L_in/8k, TPOT ≤ 50 ms), vLLM 0.11.1, H20, GPUs 2–7,
`replay_time_scale=1.0`, `search.high=0.25`, `inherit_incumbent_floor=true`.
Config `dash0_qwen27b_stopB_loop.json`. Companion to the 30B run
(`stop-b-e2e-20260616.md`); together they cover all Stop-B behaviors.

## Trajectory (incumbent = TP4 @ 1.00 req/s/GPU)

| iter | proposed by | config | per_gpu | adopted? |
| --- | --- | --- | --- | --- |
| 1 | baseline | TP1 | 0.123 | incumbent |
| 2 | gpt-5.4 | TP2 | 0.2925 (2.4×) | ✅ new incumbent |
| 3 | gpt-5.4 | TP4 | **1.0012 (8.1×)** | ✅ new incumbent |
| 4 | gpt-5.4 | TP4 + chunked-prefill + mbt=16384 | 0.942 | ❌ **worse → rejected** |
| 5 | gpt-5.4 | TP2 + DP2 | (loop stopped before completing) | — |

(Run stopped manually after iter-4 — see "Why stopped" below. Incumbent preserved
at TP4.)

## What this demonstrates (the piece the 30B run could not)

- **A genuine improving climb.** `gpt-5.4` + the harness raised per-GPU throughput
  TP1 → TP2 → TP4 (0.123 → 0.29 → 1.00, 8.1×), each step a correctly-diagnosed real
  gain: TP1 is TPOT-bound, so the agent scaled tensor-parallelism, then — once
  topology was won — pivoted to **runtime tuning on the winning family** (chunked
  prefill + larger batched tokens).
- **No regression.** The runtime tweak (iter-4) measured *below* plain TP4
  (0.942 < 1.00), and the harness correctly **kept TP4 as the incumbent** rather than
  adopting the worse config — the core Stop-B guarantee, shown live.
- Combined with the 30B run (search-high-saturation `validator`-authorized stop +
  premature-LLM-stop veto), every Stop-B behavior is now validated end-to-end:
  improving climb, correct bottleneck-driven proposals, no regression, deterministic
  stop authority, and the LLM-stop veto.

## Process wins / findings

- **SIGTERM teardown fix validated in practice.** This loop was stopped with a plain
  SIGTERM and the engine + EngineCore workers torn down cleanly — GPUs 2–7 freed, no
  orphan, no leaked memory (contrast: the pre-fix runs twice leaked GPU0/1). Commit
  `b17b213`.
- **Timeout-as-failed-request fix** (`2fcaf80`) held — no trial crashed on
  request timeouts this run.

## Why stopped (efficiency finding — feeds next round)

The loop was stopped after iter-4 rather than run to an explicit Stop-B firing,
because each TP4-family trial took ~3 h: at `scale=1.0`, infeasible high-θ probes
each run to the **`early_stop_max_elapsed_s=900` cap** (`probe_elapsed_s>900`), and
the primary+fallback binary search doubles the probe count. Stop-A truncates a
*converged* replay but does not shortcut an *overloaded* probe that simply runs out
the clock. **For a practical agentic loop at scale=1.0, lower `early_stop_max_elapsed_s`
(≈300 s)** so overloaded probes die fast; consider also having an infeasible-and-
overloaded probe early-stop on a fast lag/throughput signal rather than the elapsed
cap. The convergence itself was already evident (iter-4's runtime tweak and the
queued TP2+DP2 were not beating TP4).

## Next

- Lower the elapsed cap and (optionally) re-run to capture the explicit Stop-B stop
  on this 27B stack.
- Land the deferred items: more robust C feature for the low-reuse regime; Stop-C
  cross-day retune trigger; §7 baselines (SCOOT/naive/community).
