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

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

# Data-binding map: S09 Diagnostic · Diagnostic · read

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

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

| Field | Source (endpoint or local state) | Format | Fallback |
|---|---|---|---|
| read · title / byline / paragraphs / hint | `api GET /sessions/{session_id} article` · `session.article.*` (article language) | as is; `lang=` set | skeleton; on 404 → generic error |
| read · length | `api GET /sessions/{session_id} article.length.label` · `session.article.length.label` (Accept-Language) | as is ("307 字" / "152 words") | hide |
| read · read time | `api GET /sessions/{session_id} article.est_read_seconds` · `session.article.est_read_seconds` | `common.read_*` (30 s steps) | hide |
| `session.article.byline` | `api GET /sessions/{session_id} article.byline` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.paragraphs[0]` | `api GET /sessions/{session_id} article.paragraphs[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.paragraphs[1]` | `api GET /sessions/{session_id} article.paragraphs[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.paragraphs[2]` | `api GET /sessions/{session_id} article.paragraphs[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.paragraphs[3]` | `api GET /sessions/{session_id} article.paragraphs[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.reading_hint` | `api GET /sessions/{session_id} article.reading_hint` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.source.name + version` | `api GET /sessions/{session_id} article.source.name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.source.name + version` | `api GET /sessions/{session_id} article.version` |  |  |
| `session.article.title` | `api GET /sessions/{session_id} article.title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.article.topic.name` | `api GET /sessions/{session_id} article.topic.name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.kind` | `api GET /sessions/{session_id} kind` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `session.language` | `api GET /sessions/{session_id} language` · 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.

- `session.article.byline`
- `session.article.est_read_seconds`
- `session.article.length.label`
- `session.article.paragraphs[0]`
- `session.article.paragraphs[1]`
- `session.article.paragraphs[2]`
- `session.article.paragraphs[3]`
- `session.article.reading_hint`
- `session.article.source.name + version`
- `session.article.title`
- `session.article.topic.name`
- `session.kind`
- `session.language`
- `session.stage → derived step`

## States

- Loading: From [states.md](/design/states/index.md) (Diagnostic read): article skeleton
- Empty: From [states.md](/design/states/index.md) (Diagnostic read): n/a
- Error (retryable / not): From [states.md](/design/states/index.md) (Diagnostic read): `read.load_error` + Retry · fatal: generic error
- Offline: From [states.md](/design/states/index.md) (Diagnostic read): cached article from `/onboarding` response
