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