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

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

# Data-binding map: S12 Diagnostic · Diagnostic · processing

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

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

| Field | Source (endpoint or local state) | Format | Fallback |
|---|---|---|---|
| processing · stages | `api GET /attempts/{attempt_id} progress.stage` · `attempt.progress.stage / stage_index / stage_count`, `attempt.status` | 3 rows | upload stage is client-side (URLSession progress) |
| processing · stages | `api GET /attempts/{attempt_id} progress.stage_index` |  |  |
| processing · stages | `api GET /attempts/{attempt_id} progress.stage_count` |  |  |
| processing · stages | `api GET /attempts/{attempt_id} status` |  |  |
| processing · ETA | `api GET /attempts/{attempt_id} progress.eta_ms` · `attempt.progress.eta_ms` | `processing.eta` rounded to 5 s | hide line |
| `POST /v1/attempts/{id}/discard` | `call POST /attempts/{id}/discard` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `POST /v1/attempts/{id}/discard → record idle` | `call POST /attempts/{id}/discard` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `POST /v1/attempts/{id}/retry (attempt.error.retryable)` | `call POST /attempts/{id}/retry` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `attempt.error.code + attempt.error.stage` | `api GET /attempts/{attempt_id} error.code` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `attempt.error.code + attempt.error.stage` | `api GET /attempts/{attempt_id} error.stage` |  |  |
| `attempt.error.message (Accept-Language)` | `api GET /attempts/{attempt_id} error.message` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `attempt.transcript.length.label vs per-language floor (D2)` | `api GET /attempts/{attempt_id} transcript.length.label` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `attempt.unreliable_reason = too_short` | `api GET /attempts/{attempt_id} unreliable_reason` · 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. |  |  |

## Binds on the boards

The `data-bind` values across every state.

- `POST /v1/attempts/{id}/discard`
- `POST /v1/attempts/{id}/discard → record idle`
- `POST /v1/attempts/{id}/retry (attempt.error.retryable)`
- `attempt.error.code + attempt.error.stage`
- `attempt.error.message (Accept-Language)`
- `attempt.progress.eta_ms`
- `attempt.progress.stage / stage_index / stage_count`
- `attempt.status`
- `attempt.transcript.length.label vs per-language floor (D2)`
- `attempt.unreliable_reason = too_short`
- `session.stage → derived step`

## States

- Loading: From [states.md](/design/states/index.md) (Diagnostic processing): [diag-processing--uploading](/design/gallery/diagnostic/diag-processing--uploading.html), [diag-processing--transcribing](/design/gallery/diagnostic/diag-processing--transcribing.html), [diag-processing--assessing](/design/gallery/diagnostic/diag-processing--assessing.html)
- Empty: From [states.md](/design/states/index.md) (Diagnostic processing): —
- Error (retryable / not): From [states.md](/design/states/index.md) (Diagnostic processing): [diag-processing--failed](/design/gallery/diagnostic/diag-processing--failed.html) · fatal: non-retryable → generic error
- Offline: From [states.md](/design/states/index.md) (Diagnostic processing): [processing--offline](/design/gallery/processing/processing--offline.html)
