> ## Documentation Index
> Fetch the complete documentation index at: https://playbook.smedleygroup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Base Pace Adjust

> Nudge the strategy engine's base pace for all drivers or for individual drivers during a live race, in 0.01 percent steps, with nothing written until Confirm.

## Overview

Base Pace Adjust is a live control, not a chart. During a race it can be clear that the engine's pre-race base pace is too quick or too slow for the whole field, or for one car. This widget lets the operator step that pace up or down, review the result as a draft, and press **Confirm** to hand the new pace to the live strategy solve. Every strategy widget then carries a small tag naming the adjustment in force, so nobody mistakes a nudged prediction for the pre-race one.

The widget sits on no default tab. Add it from the widget palette during a live race, with the live session open.

> [!NOTE]
>
> Nothing leaves the browser until **Confirm**. Stepping the buttons only edits a draft, and **Discard** throws the draft away. The widget is the only supported writer of this adjustment: never insert the row by hand.

***

## What It Shows

A table with one row per driver, grouped by team, plus an **All** row at the top that applies to every driver at once.

| Column | Meaning |
| - | - |
| Driver | The three-letter code in the team's colour. The All row reads "All" |
| Pre-race (s) | The driver's lap base pace from the round's race data template, the three sector base paces summed, to three decimal places. The All row shows the fastest pre-race pace in the field |
| Current (s) | The pre-race pace with the draft steps applied, followed by the percentage in brackets, for example `91.464 (+0.10%)`. Green means faster than pre-race, red means slower, no colour at zero |
| Steps (%) | Four chevron buttons: `‹‹` and `››` move by 0.1 percent, `‹` and `›` by 0.01 percent. There is no range cap |

One step is 0.01 percent of the pre-race pace. A driver's total is the All row's steps plus that driver's own steps, so the per-driver buttons add on top of the whole-field nudge rather than replacing it.

Under the table:

| Control or line | Meaning |
| - | - |
| Reset all | Sets every step in the draft to zero. It does not write anything by itself |
| Discard | Restores the draft to the last saved values. Disabled when the draft is clean |
| Confirm | Writes the draft as a new version of the adjustment. Disabled when the draft is clean or a save is in flight |
| Unsaved changes | Amber text that appears while the draft differs from the saved values |
| Saved line | `No adjustment saved`, or `Saved v3 by <principal> at <time>` for the current version |
| Applies to future solves only | A fixed reminder that laps already solved keep their inputs |

**Row order.** Teams are ordered by their quicker driver's pre-race pace, fastest team first, and within a team the quicker driver comes first. The Driver, Pre-race and Current headers sort the table; a third click on the same header restores the team order. The All row is always first and the Steps column does not sort.

**The tag on the strategy widgets.** While an adjustment is in force, the Strategy Status panel, Strategy Table, Predicted Race History, Predicted Tyre Strategy, Predicted Pit Window and Stop Sensitivity each show a muted line such as `Base pace adjusted: all +0.10%, 44 -0.02%`. Zero is neutral: when every step is zero there is no tag at all.

***

## Data Behind It

This widget has no insight metric and no `model_id`. It reads the round's race data template for the pre-race paces and writes one parameter row family.

* **Pre-race pace**: the same `race_data` row the pre-race solve reads (see [Pre-Race and What-If Studies](https://playbook.smedleygroup.com/software/internal/watchparty/strategy/pre-race-and-study-mode.md)). Without it the widget cannot show a pace, so it shows nothing editable.
* **The row**: a session-scoped `event_parameters` row, `param_set_id = base_pace_adjust:<session_key>`, payload `{"all_steps", "driver_steps": {"<driver_number>": steps}, "confirmed_by", "version"}`. It is append-only like every parameter family: each Confirm writes a new version and sets the previous one inactive.
* **Gateway routes**: `GET /v1/sessions/{session_key}/base-pace-adjust` returns the active version (zeros and `version: null` when there is none). `PUT` on the same path replaces the whole set from the draft and stamps the caller's principal into the payload. Duplicate driver entries are refused.
* **Where the maths happens**: the strategy service's template resolver scales each driver's three sector base paces by `1 + steps × 0.0001` and nothing else re-derives that factor. One step is therefore exactly 0.01 percent.
* **When it takes effect**: the live strategy child adopts the new row from the next lap it processes, through the same live refresh that picks up a late strategy or race data load. No restart is needed. A lap already offered keeps its inputs, and stored snapshots and status rows are never rewritten.
* **Status payload**: `strategy_status` carries a `base_pace_adjust` block only while a non-zero adjustment is stamped on that lap. The tag on the strategy widgets follows the as-of snapshot lap the widget is showing; the Status panel reads its exact lap.
* **Live only**: precompute, backtest, backfill and preflight resolve the template without this row, so a post-race recompute matches the uploaded template, not the nudged live solves.

***

## States

> **No race data loaded**
>
> Shows "No race data loaded for this round" when the session has no race data template. There is nothing to adjust against, so no table is drawn.

> **No adjustment saved**
>
> The table shows every pre-race pace with zero steps and the saved line reads "No adjustment saved". This is the normal starting state for every session.

> **Draft in progress**
>
> Stepping any button marks the draft dirty: the Current column updates, "Unsaved changes" appears, and Discard and Confirm become active. The engine has not seen anything yet.

> **Save failed**
>
> The gateway's error is shown in red under the controls and the draft stays as it was, so you can retry or discard.

> **Session change**
>
> The widget remounts per session, so a dirty draft never survives into another session and Confirm can never write it to the wrong one.

> **Someone else saved**
>
> A newer saved version replaces a clean draft automatically. A dirty draft is left alone; Discard to pick up the new saved values.

> **Provisional pre-race session**
>
> The nudge is keyed to the session the widget has open. One confirmed on the provisional pre-race key is not seen by the live child, which runs on the live key, so confirm it with the live session open.

***

## FAQ

> **How do I clear an adjustment?**
>
> Press **Reset all**, then **Confirm**. That writes a new version with every step at zero, which behaves exactly like having no row at all, and the tag disappears from the strategy widgets from the next solved lap.

> **Why has the prediction not changed yet?**
>
> The live child adopts the new row on the next lap it processes, and only future solves use it. Watch the Strategy Status panel for the "Base pace adjusted" line; it appears on the first lap solved with the new pace.

> **Does a per-driver step replace the All step?**
>
> No. The two add together. With All at +10 steps and car 44 at -2, car 44 runs at +8 steps, or +0.08 percent, and every other car at +0.10 percent.

> **Is there a limit?**
>
> No. There is no range cap on either the All row or a driver row. The engine guards against a malformed row (a factor at or below zero), keeps the last good template and logs a warning rather than adopting it.

> **Will a replay or a recompute show the nudged solves?**
>
> A replay of the stored live snapshots does, because those rows were solved with the adjustment and are never rewritten. A precompute or backtest does not: it ignores the row and reproduces the uploaded template.

> **Why is a driver missing from the table?**
>
> The table lists the drivers in the race data template. A driver without a template entry has no pre-race pace to adjust and does not appear.

***

## Next Steps

> **[Race Strategy Tool](https://playbook.smedleygroup.com/software/internal/watchparty/strategy.md)**
>
> The widgets whose predictions this control nudges.

> **[Strategy Status](https://playbook.smedleygroup.com/software/internal/watchparty/strategy/status.md)**
>
> Where the "Base pace adjusted" line first appears, lap by lap.

> **[Pre-Race and What-If Studies](https://playbook.smedleygroup.com/software/internal/watchparty/strategy/pre-race-and-study-mode.md)**
>
> The race data template that supplies the pre-race pace.

> **[Strategy Table](https://playbook.smedleygroup.com/software/internal/watchparty/strategy/table.md)**
>
> The ranked strategies, tagged while an adjustment is in force.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.