5.3 KiB
BRD — ORCH-069: QG-0 title-лимит → параметр ORCH_QG0_TITLE_MAX (дефолт 200)
Work Item ID: ORCH-069
Тип: Enhancement (QoL / конфигурируемость)
Источник: Слава, 2026-06-08
Связано с: QG-0 (gate входа конвейера, _qg0_errors)
1. Проблема (As-Is)
QG-0 — первый quality gate конвейера. Он валидирует заголовок и описание задачи
до старта pipeline (start_pipeline) и в soft-режиме на work_item.created.
Верхний лимит длины заголовка задачи захардкожен в
src/webhooks/plane.py:362:
if len(name) > 80:
errors.append("Title слишком длинный (максимум 80 символов)")
Лимит 80 — «гигиенический», а не структурный. Проверено, что ниже по течению ничего от значения 80 не зависит:
- slug ветки режется независимо:
re.sub(...)[:30](src/webhooks/plane.py:478); - БД
tasks.title TEXT— без ограничения длины; - Telegram-карточка использует
html.escape(title)без обрезки; - Plane хранит
nameсамостоятельно.
Следствие: вполне валидные осмысленные заголовки длиной 81–200 символов отклоняются на входе конвейера без бизнес-причины.
2. Цель (To-Be)
Вынести верхний лимит длины заголовка QG-0 в конфигурируемый параметр со
значением по умолчанию 200 (вместо текущего хардкода 80). Расширить лимит
безопасно, сохранив возможность регулировать его через окружение, как и
остальные ORCH_* настройки.
3. Бизнес-ценность
- Меньше ложных отклонений валидных задач на входе конвейера (QoL для постановщика).
- Лимит становится операционно настраиваемым без правки кода и редеплоя (изменение env-переменной).
- Изменение чисто аддитивное и обратносовместимое: дефолт 200 > прежних 80, поэтому все заголовки, проходившие раньше, проходят и теперь.
4. Объём (Scope)
В объёме
- Новый параметр Settings
qg0_title_max(envORCH_QG0_TITLE_MAX, дефолт 200). - Замена хардкода
> 80на> settings.qg0_title_maxв_qg0_errors. - Динамический текст ошибки с подстановкой актуального лимита.
- Graceful-поведение при невалидном/пустом значении env → дефолт 200, без падения процесса.
- Документация:
.env.example,.env.staging.example,CHANGELOG.md, при необходимости README-таблица конфигов /CLAUDE.md. - Юнит-тесты на
_qg0_errorsс разными лимитами.
Вне объёма (Out of scope)
- Slug-логика
[:30](src/webhooks/plane.py:478) — самодостаточна, не трогать. - Нижний лимит заголовка (
< 5) и лимит description (< 20) — оставить как есть. - Схема БД, реестры
STAGE_TRANSITIONS/QG_CHECKS, контрактыhandle_*. - Soft-QG-0 на
work_item.created(там только warning) — логика валидации общая (_qg0_errors), отдельных изменений не требует и не вносит.
5. Заинтересованные стороны
- Owner / постановщик задач (Слава) — снижение ложных отклонений.
- Агенты конвейера — поведение QG-0 при старте pipeline.
6. Ограничения и риски (self-hosting)
- Правка касается работающего в проде инструмента (self-hosting). Прод-контейнер
orchestratorв рамках задачи не рестартить; обязательна страховкаdeploy-staging(8501). - Риск минимален: изменение обратносовместимо, изолировано в одной функции и одном новом параметре config.
7. Допущения
- Механизм чтения env — стандартный
pydantic_settings.BaseSettingsсenv_prefix = "ORCH_", как у остальных параметров. - «Невалидное/пустое значение → дефолт 200» — требование graceful-деградации:
процесс не должен падать на старте из-за мусора в
ORCH_QG0_TITLE_MAX(нюанс реализации pydantic-валидации передаётся архитектору, см. 02-trz §5).