Andrey Epifancev 1cb56be010 Спека: поле ensure_fields из пробелов — 422 (R-8, #129)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:23:19 +04:00

4.8 KiB
Raw Blame History

ADDED Requirements

Requirement: Нормализация параметров при постановке

При постановке пакета (POST /batches, MCP batch_create, повтор команды) хаб SHALL сохранять параметры команд в каноническом виде. Нормализация SHALL выполняться сразу после проверки типов значений, до остальных проверок: обязательный параметр, ставший пустым после обрезки, даёт 422 «нет <параметр>»; правила типов, временные ключи new:<n> и проверки ensure_attachment работают по нормализованным значениям; элемент списка, ставший пустым, даёт 422 «<параметр> — без пустых элементов». Необязательное поле ensure_fields из одних пробелов (priority, duedate, planned_start, planned_end, epic_key, assignee) даёт 422 «<параметр> — из одних пробелов; для очистки — "" или null»: после обрезки оно стало бы пустой строкой, которую агент читает как «очистить поле в Jira» (R-8). Строковые параметры обрезаются по краям, кроме текстовых 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: Временный ключ с пробелами

  • WHEN пакет ensure_issue {temp_key: "new:1", …}, затем ensure_fields {key: "A-5", epic_key: " new:1 "}
  • THEN пакет создан, epic_key сохранён как new:1 и подставляется настоящим ключом после выполнения ensure_issue

Scenario: Ключ из пробелов

  • WHEN POST /batches с ensure_status {key: " ", target: "Готово"}
  • THEN 422 «команда 1 (ensure_status): нет key; ожидаются key, target»

Scenario: Поле из пробелов не очищает Jira

  • WHEN POST /batches с ensure_fields {key: "A-1", assignee: " "}
  • THEN 422 «команда 1 (ensure_fields): assignee — из одних пробелов; для очистки — "" или null», пакет не создан

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