## ADDED Requirements ### Requirement: Нормализация параметров при постановке При постановке пакета (`POST /batches`, MCP `batch_create`, повтор команды) хаб SHALL сохранять параметры команд в каноническом виде, после всех проверок валидации. Строковые параметры обрезаются по краям, кроме текстовых `summary`, `description`, `body` и `goal`, которые хранятся как заданы. Элементы списков `labels`, `labels_add`, `labels_remove` и `keys`, а также `target` у `ensure_status`, если это список, обрезаются поэлементно. Числа, логические значения и `null` не меняются. `filename` у `ensure_attachment` SHALL дополнительно приводиться к нормальной форме Unicode NFC. Агент SHALL получать параметры в том виде, в каком они сохранены. #### Scenario: Ключ с пробелами - **WHEN** `POST /batches` с `ensure_rank {key: "A-1", before: " A-2 "}` - **THEN** пакет создан, параметры команды `{key: "A-1", before: "A-2"}`; агент при `claim` получает `before = "A-2"` #### Scenario: Текст не обрезается - **WHEN** `POST /batches` с `ensure_comment {key: " A-1", marker: "Итог ", body: " отступ\n"}` - **THEN** сохранено `key = "A-1"`, `marker = "Итог"`, `body = " отступ\n"` #### Scenario: Имя вложения в NFD - **WHEN** `ensure_attachment` с `filename` «отчёт.pdf» в NFD («е» + U+0308) - **THEN** сохранён `filename` «отчёт.pdf» в NFC; повторная постановка того же файла с именем в NFC даёт ту же строку `filename` ### Requirement: Идентификаторы из цифр — только ASCII Хаб SHALL считать строку числовым идентификатором (`attachment_id` в `fetch_attachment`, `id` вложения в состоянии агента, ссылка `#` в MCP, версия агента), только если она непуста и состоит из символов `0-9`. Строка из других цифр Unicode (`"²"`, `"١٢"`) — не идентификатор: при постановке 422, в состоянии агента 422 `bad_state`, в MCP — поиск по имени. Ответ 500 MUST NOT возникать. #### Scenario: Надстрочная цифра - **WHEN** `POST /batches` с `fetch_attachment {key: "A-1", attachment_id: "²"}` - **THEN** 422 «attachment_id — цифры id вложения из issue», пакет не создан