# Ticket: Reference calibration press-and-hold auto-repeat



Status: completed
Type: ticket
Updated: 2026-09-23
Next Action: none; retained as history; any new execution requires a new explicit owner instruction
Parent: work/wp/completed/wp-bounded-temperature-calibration-and-drift-recovery.md

## Problem

Temperature Setup -> Calibrate changes the displayed reference value in
`0.1 C` steps, but its increment and decrement buttons currently produce only
one step per touch. Reaching either absolute calibration boundary can require
approximately 100 taps, which is slow and increases operator error risk.

Other numeric entry screens already use GUIX button-repeat behavior when the
operator holds an increment/decrement button.

## Expected Behavior

A short tap changes the displayed reference value by exactly `0.1 C`. Holding
either button repeats the same bounded adjustment until release or until the
absolute `MainTemp_Offset` endpoint is reached. Repeat must not bypass the
existing `[-10.0,+10.0] C` total-offset clamp.

## Acceptance Criteria

- [x] The canonical `GuiX/SMI_Gui.gxp` project enables button repeat for both
  SelectWarningMsgScreen calibration adjustment buttons.
- [x] Generated GUI source enables `GX_STYLE_BUTTON_REPEAT` for both buttons.
- [x] Single-tap behavior remains one `0.1 C` step.
- [x] Existing increment/decrement callbacks and absolute endpoint clamps are
  unchanged.
- [x] Automated calibration policy checks pass.
- [x] Debug and Release firmware builds pass.
- [x] Exact Debug candidate is committed, hash-checked, programmed, and verified
  on Controller A without changing VEEPROM or option memory.
- [x] On Controller A, a short tap changes the value once, press-and-hold
  repeats, and release stops promptly in both directions.
- [x] The increment direction reaches exactly `+10.0 C` and cannot cross its
  absolute endpoint.
- [x] The decrement direction cannot cross its absolute endpoint on the exact
  replacement candidate.
- [x] Cancel remains non-mutating.
- [x] Save commits only the displayed bounded correction.

## Verification

Run `script/check-temperature-calibration.ps1` and the full firmware regression
suite, then build both configurations. On the next exact candidate flash,
exercise short tap, press-and-hold, release, both endpoints, Cancel, and Save
with read-only J-Link offset confirmation.

Controller A passed the full interaction set on 2026-07-24. At the lower
endpoint, the temporary offset was exactly `0xC1200000` (`-10.0 C`) after the
held decrement and three additional decrement taps while the stored offset and
VEEPROM remained at the safe `+0.3 C` baseline. Save committed exactly
`-10.0 C` into two identical generation-222 VEEPROM copies with valid CRC
`0xA42D7157`. The owner then restored displayed `+0.3 C`; readback found
`0x3E999A27` (`+0.3000042 C`) in two identical generation-224 copies with valid
CRC `0x5F23D7B4`, zero save request, zero system errors, and unchanged SD CID
`035344535330384780976F0084018559`.

## Owner-directed reconciliation — 2026-09-23

Reconcile stale active lifecycle to the previously documented completed disposition; no new test or broader acceptance claim.

Authorization: Owner instruction in this conversation on 2026-09-23 to close/abandon the named work and mitigate older active records.

Previous header retained for evidence interpretation:

> Status: complete; target tap/hold/release, Cancel, both endpoints, bounded Save, and safe restoration passed
> Next Action: none

Earlier observations, unchecked historical criteria, and procedures below/above remain history. This administrative disposition does not qualify a new firmware candidate, physical card, thermal system, ECO, or release. Current 00.05.01 obligations in IDEA-0006, IDEA-0007, MAP-0009, and CAMP-0028 remain unchanged.
