opencode-config/docs/decisions/071-pr-169-sdd-validation-headings.md
Sergey c491b5fad1
fix(issue): align headings with create-issue validation and add SDD sections (#169)
* fix(issue): align headings with create-issue validation and add SDD sections

* docs(issue): add handoff, ADR, and fix CI for SDD validation

* docs(pr-169): fix handoff sections

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-31 19:42:14 +03:00

3.8 KiB
Raw Blame History

ADR-071: 7 mandatory SDD sections for all issues

Статус

Accepted (2026-07-31)

Контекст

Шаблоны issue body в issue/SKILL.md и spec/SKILL.md использовали заголовки (## Что сделать, ## Проверка, ## Acceptance criteria), не совпадающие с валидацией create-issue.ts (## Контекст, ## Задача, ## Критерии приемки). Issues, созданные по шаблону скилла, проваливали валидацию tool'а — агент получал ошибку вместо создания issue.

Кроме того, 3 обязательные секции (Контекст, Задача, Критерии приемки) не покрывали SDD-аспекты: контракты (ожидаемое поведение/API), инварианты (правила без исключений), граничные случаи (что при ошибках), out-of-scope (что НЕ делаем). Без этих секций агент угадывает границы задачи, что приводит к scope creep и неполным результатам.

Решение

Унифицировать все шаблоны и валидацию на 7 обязательных SDD-секций — всегда, без флагов и режимов:

  1. ## Контекст — зачем + текущее состояние
  2. ## Задача — что делаем
  3. ## Контракты — ожидаемое поведение / API
  4. ## Инварианты — правила без исключений
  5. ## Граничные случаи — что при ошибках
  6. ## Вне scope — что НЕ делаем
  7. ## Критерии приемки — как проверяем

Изменения:

  • create-issue.ts: 4 новые проверки заголовков (всегда, без флагов).
  • issue/SKILL.md: шаблон 7 секций, обновлённые примеры.
  • spec/SKILL.md: шаблон issue body обновлён до 7 секций.
  • bug-discovery/SKILL.md: описание заголовков обновлено.
  • Тесты (Python + TS): VALID_BODY 7 секций, 4 новых missing-heading теста.

Альтернативы

  1. Двухрежимный подход (sdd flag)create-issue принимает sdd?: boolean, при true проверяет 7 секций, при false — 3. Отклонено: флаги создают два стандарта, агенты путаются какой режим выбрать, SDD-секции полезны для всех задач (даже кратко).

  2. Оставить 3 секции — отклонено: не покрывает контракты, инварианты, edge cases, out-of-scope. Агент угадывает границы → scope creep.

  3. Опциональные SDD-секции (предупреждение, не error) — отклонено: предупреждения игнорируются агентами. Только жёсткая валидация гарантирует качество.

Последствия

  • Все новые issues должны содержать 7 секций — включая баг-репорты (bug-discovery скилл обновлён).
  • Существующие issues в репо не соответствуют новому формату — это не влияет на функциональность, только на создание новых.
  • SDD-секции можно заполнять кратко (1-2 строки) — главное наличие заголовка.