Бэкенд хаба: нормализация параметров, 422 вместо 500, файлы, публикация агента, уборка настроек (#129) #130

Merged
aep merged 12 commits from feat/129-hub-backend into main 2026-10-26 09:19:52 +03:00
Showing only changes of commit 1cb56be010 - Show all commits

View File

@ -5,7 +5,9 @@
каноническом виде. Нормализация SHALL выполняться сразу после проверки типов значений, до остальных проверок:
обязательный параметр, ставший пустым после обрезки, даёт 422 «нет <параметр>»; правила типов, временные ключи
`new:<n>` и проверки `ensure_attachment` работают по нормализованным значениям; элемент списка, ставший пустым, даёт
422 «<параметр> — без пустых элементов». Строковые параметры обрезаются по краям, кроме текстовых `summary`,
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.
@ -28,6 +30,10 @@
- **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 даёт ту же строку