Що перевіряє
SpecScore.
SpecScore — це відкритий формат на основі Markdown для фіч, вимог і критеріїв приймання, який перевіряють два валідатори: детермінованийлінтер і AI-рецензент. Ось що ловить кожен із них і де автоматична перевірка зупиняється.
Уперше про SpecScore? Почніть тут ·CLI ·AI-навички
$ specscore lint checkout/ ✓ 24 requirements — structure, references, IDs valid ✓ no index drift · no broken links · no slug collisions 0 problems exit 0
Три шари, а не один.
SpecScore перевіряє пошарово — спершу найдешевше й найнадійніше.Лінтер детермінований — швидкий, безкоштовний, працює на кожному коміті. AI-рецензія імовірнісна — глибша, витрачає токени, ловить те, до чого лінтер не дотягнеться.Людське судження — це третій шар: стики, які не закривають перші два, усе одно потребують людини — жоден інструмент сьогодні не закриває їх надійно. Два автоматичні шари доповнюють один одного, а не дублюють: лінтер ловить те, що AI не може обґрунтувати; AI ловить те, до чого лінтер не дотягується.
Що перевіряє кожен валідатор.
Лінтер CLI
детермінованийОднаковий результат при кожному запуску, без LLM, без витрат. Якщо тут пройдено — це факт, а не думка.
$ specscore lint apply-discount.md ✓ R1 has acceptance criteria ✓ R2 has acceptance criteria ✗ R3 no acceptance criteria ✗ link "Related Feature: discount-tiers" not found ✗ section "Open Questions" missing 3 problems exit 1
- Цілісність посилань — посилання розв'язуються, ID унікальні
- Структурні угоди — обов'язкові розділи, форма frontmatter
- Гігієна статусів і розходження індексів
- Колізії slug
- Коректність префіксів у полях метаданих (наприклад,
Related Ideas:)
AI-рецензія та оцінка
недетермінованийЧитає за змістом, як це робив би живий рецензент, — і, як людина, не ідеально повторюваний.
> /score apply-discount.md Grade: B — ready with edits AC-2 vague trigger — name the actor and event AC-3 no error path for an expired code prose reads clean; criteria need tightening
- Критерії приймання у перевірному вигляді Given/When/Then
- Внутрішня узгодженість усередині артефакту
- Нечіткий або заглушковий вміст
- Читабельність для живого рецензента
- Дієвий зворотний зв'язок із позначенням важливості
- Оцінка готовності від A до F
Чого вони не ловлять.
Жоден валідатор не чарівний. Ось де зупиняється кожен — щоб ви точно знали, де ваше власне судження ще має виконувати роботу.
Лінтер CLI
- Неявні суперечності в глибоких ієрархіях
- Розходження між специфікацією та кодом (покращиться з виходом
specstudio:recap) - Смислову коректність критеріїв приймання
- Чи має назва насправді сенс
- Чи розв'язують вимоги заявлену проблему
AI-рецензія та оцінка
ловить непостійно- Повну відтворюваність між запусками — вердикти можуть змінюватися в межах допуску
- Міжартефактні суперечності у великому дереві без явних перехресних перевірок
- Чи справді вимоги розв'язують проблему — помічає очевидні прогалини, пропускає специфічні для предметної області
- Упередження, успадковані від базової LLM
- Смислову коректність з абсолютною впевненістю
- Усе, чого не враховує рубрика
- 1
Лінтер сягає сюди
Структура, посилання, гігієна. Дешево й надійно — але сліпо до змісту.
- 2
AI сягає сюди
Зміст, ясність, узгодженість усередині артефакту. Глибше — але імовірнісно, і слабко на великому дереві.
- 3
Залишається на вас
Наскрізне судження про всю систему — робота, яку жоден інструмент сьогодні не може виконати надійно, тож для неї досі потрібен живий рецензент.
Випадок, від якого вас не врятує жоден інструмент
Уявіть реальне глибоке дерево специфікацій. Фіча A потребуєX. Фіча B потребує Y. Фіча C потребуєZ. Потім фіча D непомітно потребує дещо, що суперечить B — але лише коли активна й A. Лінтер бачить чотири коректні, добре пов'язані документи і проходить. AI-рецензент, читаючи артефакти по одному, не має причин завантажити всі чотири й помітити цю трибічну взаємодію.
Жоден шар надійно цього не ловить — і ми не вдаватимемо, що це не так. Саме цей клас суперечностей — причина існування третього шару. Завдання SpecScore — зробити дерево достатньо навігованим, щоб людина, яка переглядає стики, могла знайтиконфлікт — відкриті питання піднімаються вгору по ієрархії, пов'язані вимоги за один запит — а не заявляти, що інструмент уже його знайшов.