Skip to content

validate: нет правила «каждый Requirement в SPEC имеет Scenario» — инвариант держит только TDD-потребитель #450

Description

@explosivebit

Проблема

У kind spec три правила валидатора: spec-summary, spec-contracts, spec-related. Правила, проверяющего сценарии, нет.

Между тем центральный инвариант SPEC в методологии сформулирован жёстко: у каждого ### Requirement есть хотя бы один #### Scenario. Скилл /spec-author называет это «the single hard gate before freeze» (spec-author/SKILL.md:48), канон — NOTE-020, решение — ADR-008.

Инвариант заявлен прозой в трёх местах и не проверяется нигде.

Где он всё-таки держится — и почему это плохое место

Зубы появляются на стадию позже, у потребителя:

  • agents-tdd/agents/tdd-planner.md:204 HARD RULE 1 — отказывается планировать против SPEC без блоков #### Scenario;
  • agents-tdd/hooks/tdd-gate.sh:193 — ловит дрейф SPEC после заморозки по нормализованному хешу.

То есть автор SPEC узнаёт о дефекте, только когда кто-то попытается по нему работать. SPEC успевает пройти валидацию, попасть в active и стать источником истины — а потом оказывается, что оракула в нём нет.

Доказательство

strings $(which forgeplan) | grep -oE '\bspec-[a-z-]+' | sort -u
# spec-summary  spec-contracts  spec-related

Все 5 SPEC в рабочем окружении блоки #### Scenario несут — но это дисциплина автора, а не результат проверки.

Что предлагается

Правило Уровень Что проверяет
spec-requirement-has-scenario Should каждый ### Requirement имеет ≥1 вложенный #### Scenario
spec-scenario-format Could тело сценария содержит GIVEN и WHEN и THEN

Should, а не Must — по тем же соображениям, что и с NFR: не ломать существующие артефакты одномоментно.

Важно не перепутать с существующим правилом

В бинаре уже есть scenario-required-sections, но оно относится к отдельному brownfield-виду артефакта Scenario (см. plugins/forgeplan-brownfield-pack/templates/scenario.template.md и скилл /scenario-writer, который превращает use-case в Gherkin).

Это не то же самое, что блоки #### Scenario внутри SPEC. Новое правило должно смотреть на вложенные заголовки внутри тела SPEC, а не на вид артефакта.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions