---
title: "S11 bindings"
description: "Data-binding map of Diagnostic · Diagnostic · retell: every field to its source, and what each required state shows."
source: "design/hifi/S11/bindings.md"
---

> Part of [Brand and design](/design/llms.txt). Every page: [llms.txt](/llms.txt).

# Data-binding map: S11 Diagnostic · Diagnostic · retell

> Generated by `botgumi-design index` from `../../screens.json`. Edit that file, not this page.

Every field [S11](/design/hifi/s11/index.md) shows and where it comes from.

| Field | Source (endpoint or local state) | Format | Fallback |
|---|---|---|---|
| record · max | `api GET /config limits.diagnostic_max_ms` · `config.limits.diagnostic_max_ms` | `mm:ss` | 01:30 |
| record · timer, waveform, states | `local recorder` · `local:recorder.*` | `mm:ss` effective time | — |
| `UIApplication.openSettingsURLString` | `device app_settings` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `derived: recorder.effectiveMs ≥ session.min_valid_ms` | `derived recording_long_enough` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `local discard (or POST /v1/attempts/{id}/discard if registered)` | `call POST /attempts/{attempt_id}/discard` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `local:recorder.effectiveMs` | `local recorder.effectiveMs` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `local:recorder.state` | `local recorder.state` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.min_valid_ms` | `api GET /sessions/{session_id} min_valid_ms` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.stage → derived step` | `api GET /sessions/{session_id} stage` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |

## Derived values

Computed on device; each from the sources it names.

| Value | From | How |
|---|---|---|
| `recording_long_enough` | `local recorder.effectiveMs`, `api GET /sessions/{session_id} min_valid_ms` | Stop is enabled once the recording reaches the minimum valid length. |

## Binds on the boards

The `data-bind` values across every state.

- `UIApplication.openSettingsURLString`
- `config.limits.diagnostic_max_ms`
- `derived: recorder.effectiveMs ≥ session.min_valid_ms`
- `local discard (or POST /v1/attempts/{id}/discard if registered)`
- `local:recorder.effectiveMs`
- `local:recorder.state`
- `session.min_valid_ms`
- `session.stage → derived step`

## States

- Loading: From [states.md](/design/states/index.md) (Diagnostic record): —
- Empty: From [states.md](/design/states/index.md) (Diagnostic record): —
- Error (retryable / not): From [states.md](/design/states/index.md) (Diagnostic record): upload failure → processing failed · fatal: —
- Offline: From [states.md](/design/states/index.md) (Diagnostic record): recording works; upload queued ([processing--offline](/design/gallery/processing/processing--offline.html))
