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

2.9 KiB
Raw Blame History

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», пакет не создан