Lint the spec-to-test linkage #41
Notifications
Due Date
No due date set.
Blocks
Depends on
#44 Test the spec guard and the linkage linter
claude-skills/marketplace
#45 Adopt OpenSpec as the change workflow
claude-skills/marketplace
#40 Fork a spec-tdd workflow schema
claude-skills/marketplace
Reference: claude-skills/marketplace#41
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Скрипт-линтер, который сверяет три множества:
**TEST** TC-…в спеках, записи### TC-…вtests.mdи id в docstring реальных тестов. Расхождение — ошибка.Spec
none
Depends on
Motivation
OpenSpec не проверяет внутренность сценария вообще. Это установлено пробой
на одноразовом репозитории, а не предположено.
Сценарий вида
проходит
openspec validate --strictкакvalid, exit 0. Парсер хранит телосценария непрозрачным
rawText(видно вopenspec show --json), а требуеттолько заголовок
#### Scenario:и непустое тело.Что из этого следует: openspec никогда не поймает ни опечатку в TC id, ни
забытый
**TEST**, ни два сценария с одним и тем же кейсом, ни сценарий вовсебез WHEN/THEN. Весь контроль формата держится на этом скрипте — больше держать
его некому.
Та же проба показала, что носитель выбран правильно, и это единственная
причина, по которой связка вообще возможна:
openspec validate <change>с буллетом**TEST**--strictopenspec/specs/<cap>/spec.mdopenspec validate --specs --strictна слитой спекеЕщё деталь, которая определяет реализацию:
openspec show --jsonтеряетимена сценариев — в JSON остаётся только
rawText. Значит линтер парситmarkdown сам, вывод CLI как источник не годится.
Acceptance criteria
находит корень по
.git/AGENTS.md, а не по cwd#### Scenario:содержит**WHEN**,**THEN**и ровно один**TEST**; нарушение печатаетpath/file.md:lineTC-[A-Z]+-\d{3}, иначе ошибкаopenspec/changes/*/specs/, и поopenspec/specs/, чтобы новый change не переиспользовал номер, ужеуехавший в архив
tests.mdэтого changetests.mdприсутствует в docstring хотя бы одного тестапод
tests/tests.mdи не встречающийся ни в одной спеке, — ошибкаодна строка с путём
subprocessне импортируетсяConstraints
tests.md, линтер только проверяет уникальность.или нет — дело
python3 -m unittest.openspec validate. Пакет не наш.