# ADR-0010 — Spearhead re-sequencing: benchmark + simulation harness at step 4½; escalation pulled forward

- **Status:** Accepted (maintainer-ratified 2026-07-03)
- **Date:** 2026-07-03
- **Origin:** [2026-07-03 adversarial review](../reviews/2026-07-03-adversarial-review.md)
  (recommendations R1, R2) + [market feature scan](../reviews/2026-07-03-market-feature-scan.md)
  (F1 — simulation testing as the standout engine-fit feature).
- **Amends:** `README.md` (spearhead list), `docs/PORT_PLAN.md` (phasing section),
  the vision-revision spearhead sequence (design record; unmodified — this ADR is the amendment)

## Context

Three findings converged on the spearhead's back half:

1. **The wedge is unmeasured (review P3/R2).** The no-GC determinism pillar — the only claim
   justifying Rust over a weekend of Pipecat — has no proof artifact. README latency figures are
   arithmetic estimates; `TapMetrics` counts drops, not latency. Slice 4's design sets a ≤60 ms
   barge-in kill budget but ships only a synthetic e2e test, not a measurement harness.
2. **The step-5 demo was commoditized (review D2).** OpenAI Realtime SIP is GA: a trunk pointed
   at `sip.api.openai.com` reproduces "I called my box and an AI answered" with zero
   infrastructure. The momentum value of rushing to step 5 has collapsed; the differentiating
   value of *measured* reflex quality and of escalation (rung 2 — which no framework or brain
   vendor ships) has risen.
3. **Simulation is the standout engine-fit feature (scan F1).** Parloa sells pre-deployment
   simulation + evals as an enterprise phase; Cekura/Coval sell it standalone. Nobody ships it
   self-hosted. rutster's tap symmetry (a synthetic caller is just another media-leg ingress)
   and the slice-3 mock brain mean the substrate is half-built.

One build serves all three: the benchmark *is* a simulation harness pointed at latency metrics.

## Decision

**Insert step 4½ into the spearhead — the benchmark + simulation harness — after barge-in (4),
before rented transport (5).** Numbered 4½ deliberately: existing "step 5"/"step 6" references
(stub-crate docs, PORT_PLAN rows, fuzz plan) stay valid.

**Step 4½ scope (the `rutster-sim` seed):**

- **Synthetic-caller ingress** — scripted scenario playback (WAV/PCM segments with timing
  directives: speak, pause, interrupt-at-T) driving the same media-leg ingress path a real
  caller uses. LLM-driven callers are a later extension, not this step.
- **Latency measurement** — p50/p99 mouth-to-ear round-trip and barge-in kill-time
  (caller-speech-onset → playout-ring-flushed), measured against slice-4's ≤60 ms budget.
- **Concurrency sweep** — the same measurements at 1 / 10 / 50 concurrent synthetic calls,
  which also surfaces the single-poll-task head-of-line-blocking debt (review P2) with data
  instead of doctrine.
- **CI-regressed** — thresholds asserted per commit; a latency regression fails the build the
  same way a broken test does.

**Sequencing after 4½:** **rung-2 escalation (human takeover) is pulled forward ahead of
steps 5–6.** It is the white space no competitor ships (warm-handoff artifact + whisper — scan
F2), it works entirely on WebRTC ingress (no PSTN dependency), and it is the capability that
answers "why not point the trunk at OpenAI directly?" before step 5 makes that question live.
Steps 5 (rented transport) and 6 (spend cap) follow, unchanged in content.

## Consequences

- **Positive:** the wedge gains its proof artifact (and the only differentiating demo available
  this year: reproducible p99 kill-latency vs. the GC'd frameworks); the doctrine-drift detector
  for the timing-thread debt exists before scale makes it urgent; the eval-infrastructure
  foundation (scenario packs, rung-3/4 regression evals) is laid as a side effect; the spearhead's
  next public moment is a capability no one else has, not a commoditized one.
- **Negative:** steps 5–6 slip by two slices; "a real phone number" — still the most *visceral*
  demo — waits. Accepted deliberately: the demo it enables is no longer scarce (D2), and the
  reflex claims stay unsubstantiated until measured.
- **Debt paired:** if the concurrency sweep shows the shared-tokio poll loop breaching budget at
  realistic call counts, the dedicated-timing-thread work (ARCHITECTURE.md doctrine, review P2)
  gets scheduled on data, not vibes.

## References

- [Adversarial review 2026-07-03](../reviews/2026-07-03-adversarial-review.md) — findings D1, D2, P2, P3; recommendations R1, R2
- [Market feature scan 2026-07-03](../reviews/2026-07-03-market-feature-scan.md) — F1 (simulation harness), F2 (handoff protocol), A8 (scenario packs)
- [ADR-0007](0007-trunk-rented-transport.md) — the trunk posture step 5 implements
- Slice-4 design (`docs/superpowers/specs/2026-07-01-slice-4-barge-in-design.md`) — the ≤60 ms kill budget this harness measures
