## ADDED Requirements

### Requirement: Сериализация ответа чтения не экранирует содержимое

Система SHALL сериализовать тела ответов читающих маршрутов **без экранирования
HTML-символов**: `&`, `<` и `>` внутри значений MUST уезжать клиенту как есть и
MUST NOT подменяться escape-последовательностями `&`, `<`, `>`.

Правило общее для всех читающих маршрутов, а не частное для точек, потому что
общим является механизм: тело собирает один помощник сериализации, и умолчание
`encoding/json` экранирует эти три символа молча. На маршруте, отдающем
**дословно сохранённое** содержимое, это прямо ломает обещание дословности:
имя источника приходит с телефона пользовательской строкой и законно содержит
`&`. Хранилище этот же капкан уже проходило и обезвредило тем же способом —
кодировщик с выключенным экранированием вместо `json.Marshal`.

Проверка обязана стоять на содержимом, реально несущем эти символы: набор
фикстур, в котором их нет, зелен и будучи сломанным.

#### Scenario: Значение несёт символ, который сериализатор склонен экранировать

- **GIVEN** значение ответа читающего маршрута, содержащее `&`, `<` или `>`
- **WHEN** маршрут отвечает
- **THEN** эти символы присутствуют в теле ответа как есть

### Requirement: Ответ чтения непригоден для разделяемого кеша

Система SHALL помечать ответы читающих маршрутов заголовком
`Cache-Control: private, no-cache`.

Правило общее, потому что цена у него одна на все маршруты чтения: с появлением
валидатора ответ становится штатно кешируемым, а при выключенной проверке
токенов — законной конфигурации для доверенной локальной сети — в запросе нет и
`Authorization`. Тогда выгрузку истории здоровья вправе сохранить любой прокси
на пути. Маршрут, решающий это заново, однажды решит иначе.

#### Scenario: Читающий маршрут ответил

- **WHEN** читающий маршрут отдаёт тело
- **THEN** ответ несёт `Cache-Control: private, no-cache`
