← TinyGPT · docs · devlog · roadmap · speedup
source: docs/prds/pace-planner-v11-ship-gate.md · view on GitHub ↗

Pace planner v11 — ship gate

Signed: 2026-06-09 (Sarthak + assistant pair) Status: SHIP-GATE LOCKED — do not edit thresholds without a new dated entry below Replaces: implicit gating from v8/v9 era (the 73% phantom)


Why this document exists

v1 through v10 of the Pace planner cycled because we trained → measured → argued whether the version was better. No fixed bar, no fixed eval, no immutable record of pass criteria. The v8 “73.3% non-compose” number — celebrated, baked into landing copy — turned out to be non-reproducible in 2026-06-08 re-evaluation (actual: 33.3%). Several training sessions were spent chasing a metric that wasn’t stable.

This document fixes the bar so v11 cannot accidentally inherit the same problem.

The rule: if v11 does not clear every threshold below against the exact eval suite committed today, it does not ship as the default Pace planner. No partial credit. No retrofit. No “but BFCL is up so let’s call it a win.”


North Star recap

Pace planner contribution to the formula:

result = (speed × accuracy) / cost

A planner that hits 60% accuracy at 80ms TTFW is worth more than one at 65% accuracy at 200ms TTFW. Cost = bundle MB. v11 must not regress speed_score or cost_score vs v9.


The six dimensions

v11 has to be good across all six of these — not just the happy path. v9’s known failure mode was over-eager AX.press on out-of-scope / ambiguous / destructive prompts. v11 closes that hole.

#DimensionWhat the model must do
1Happy path — selection + bindingPick the right action AND fill correct parameters
2Happy path — tool-call BFCLSame on a wider 12-action surface in BFCL-AST format
3Abstention (out of scope)Emit intent: out_of_scope when no Mac action satisfies the request
4DisambiguationEmit intent: clarify with a question field when context is insufficient
5Schema validityOutput must be grammar-conformant 100% of the time (constrained decoding handles this; trained behavior should not undermine it)
6SafetyEmit intent: confirm_destructive for destructive verbs; never directly fire

Deferred (not in v11 bar): multi-turn state tracking, screen-grounding (deferred to VLM specialist).


The bar — immutable thresholds

DimEval suite (committed today)Threshold
1fm-fixtures-v2 (16 fixtures, Pace evals dir)≥ 60% (v9 baseline: 33.3%)
2bfcl-pace-12 subset (built as part of #311)≥ 40% AST exact-match
3fm-fixtures-oos (30 new prompts, #310)≥ 80% correct refusal
4fm-fixtures-ambig (20 new prompts, #310)≥ 50% correct ask-back
5All emitted JSON across suites 1–4≥ 95% AST-valid
6fm-fixtures-destructive (10 new prompts, #310)≥ 90% confirm-emission

Additionally — non-regression gates:

Threshold
fm-fixtures-compose (v9 = 70%)≥ 65% (v11 must not break compose)
TTFW p95 warm (v9 = ~119ms)≤ 140ms
Bundle size delta vs v9≤ +20MB

If any non-regression gate fails, v11 fails the ship gate too. No “the new dimensions worked so we’ll eat the latency regression” — Pace doctrine is latency is sacred.


What “ship” means

If v11 clears the gate:

  1. v11 becomes the default --lora path served by tinygpt serve
  2. pace/serve in Pace’s deployment bundle swaps to v11 weights
  3. v9 weights stay in the registry for one release as a known-good fallback
  4. Landing-page numbers (Codevetter draft, pace/docs/landing/v1-draft.md) update with v11 results — and only with v11 results

What “fail” means

If v11 misses any threshold:

  1. v9 stays as the production planner
  2. v11 becomes a research artifact — kept, named v11-research-2026-06-XX, scored, documented in docs/learn/v11-postmortem-2026-06-XX.md
  3. We do not retrain v11 with different data and call it “v11.1” — that is the trap. Instead, a fresh planner version (v12) gets its own ship-gate document with its own immutable suite, learning from v11’s failure modes.
  4. The eval suites stay. Every future planner version scores against the same six dimensions or doesn’t ship.

What is explicitly NOT allowed


Probability ledger (committed today, before any v11 training)

Per-dimension P(meets threshold), based on prior-version performance + technique-stack literature:

DimP(meets threshold)Mechanism that produces it
1 Happy path70%Thinking-teacher distillation + rejection sampling on 240+ rows
2 BFCL-1250%Same training data + grammar constraint at inference
3 Abstention75%150 hand-curated out_of_scope rows + rules pre-filter
4 Disambiguation60%150 hand-curated clarify rows
5 Schema95%Grammar constraint (mathematically forced)
6 Safety80%150 hand-curated confirm_destructive rows + rules pre-filter
Joint (all 6 pass)~45-50%Multiplicative composition
Joint (with preflight ablation gate)~70%Ablation eliminates the bad-data case

Honest call: this is a coin flip raw, ~70% after preflight. Not a guaranteed ship. The conviction comes from the bounded downside — the eval suite, the hand-curated corpus, and the rules + grammar layer ship regardless of whether v11 itself ships.


Decision authority


How v11 is built (referenced for clarity, full plan elsewhere)

This doc is a gate, not a build plan. The build plan lives in:

If v10 happens to clear this gate, v11 doesn’t get built. The gate is what matters, not the version number.


Append-only signature log

2026-06-09  Sarthak  Locked thresholds. v9 baselines: 33% v2, 70% compose, ~119ms TTFW.
                     v11 conviction: ~50% raw, ~70% after preflight ablation.