Andrey Epifancev e786428a1d Спека: пакет C бэкенда хаба hub-backend-fixes (#129)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 02:06:19 +04:00

33 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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` вложения в состоянии
агента, ссылка `#<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», пакет не создан