framework/skills/spec-writing/spec-standard/SKILL.md
Для SDD-спецификаций с RFC 2119 и чеклистом
npx skillsauth add steelmorgan/1c-agent-based-dev-framework spec-standardInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Навык не выбирает режим исполнения (subagent/linear) — только структура, RFC 2119 и quality checklist.
| Тип задачи | Нужна спека | Обоснование | |------------|-------------|-------------| | Новая функциональность | MUST | Фиксирует scope, требования, альтернативы и выбранное решение. | | Исправление бага с архитектурным влиянием | MUST | Требуется обосновать изменение структуры/поведения. | | Простое локальное исправление бага | MAY | Допустимо короткое описание без полной спеки, если изменение изолированно. | | Крупный рефакторинг | SHOULD | Нужна прозрачность по границам и последствиям изменений. |
Спецификация MUST быть написана на русском языке — заголовки секций, описания, требования, сценарии. Исключение — идентификаторы кода и метаданных (имена модулей, реквизитов, переменных) остаются как есть.
# SPEC-NNN: [Краткое название]
Статус: Черновик | Ревью | Утверждена | Реализована
Дата: YYYY-MM-DD
## Контекст и постановка проблемы
## Требования (RFC 2119)
### MUST
### SHOULD
### MAY
### MUST NOT
## Границы
### Входит в scope
### Не входит в scope
## Рассмотренные варианты
## Выбранное решение
## Технический дизайн
### Объекты метаданных (создаёт пользователь)
### Модули (пишет агент)
### Поток данных
## План тестирования (TDD)
### Тестовые пользователи (Test Users)
Если тесты (unit / BDD / integration) зависят от ролей, прав или контекста пользователя, спека ОБЯЗАНА содержать секцию «Test Users» (или эквивалент) со следующими правилами:
- Перечислять **только реально существующих** в целевой базе пользователей (логин + состав ролей + ссылка на источник: предзагруженный профиль, fixture, final-report связанной задачи и т.п.).
- **Запрещены placeholder-имена** («User1», «TestUser», «Manager_NoRole»), а также вымышленные ФИО без подтверждённого соответствия реальному аккаунту в базе («Сидоров», «Иванов» — если такого пользователя в базе нет).
- Для каждого test user указать минимум: логин, состав ролей, источник, тестовый сценарий-применение.
- Если подходящий пользователь **неизвестен** или **не существует** — Analyst задаёт `clarification_needed` пользователю в clarification round, а не выдумывает имя. Допустимо предложить пользователю кандидатов на создание (с указанием ролей), но имя должно быть подтверждено.
- Если test user должен быть **создан администратором** перед запуском (manual data prep) — это явно фиксируется отдельным пунктом в `manual-test-scenario.md` или эквивалентном артефакте, с описанием шагов создания.
**Почему:** placeholder-имена в спеке приводят к Vanessa-сценариям типа «Не смог подключить TestClient <Сидоров>» и проваливают весь Vanessa-уровень. Tester / Scenario-Coder не могут «угадать» реального пользователя и теряют часы на диагностику.
## Приёмочные сценарии (BDD)
## Открытые вопросы
## Журнал решений (ADR)
Каждый тест в «Плане тестирования» ОБЯЗАН добавлять покрытие, которого ещё нет. Запрещено планировать тест (особенно BDD/Vanessa или integration), который проверяет ту же логику теми же входами и тем же наблюдаемым результатом, что уже закрытый unit-тест — то есть идёт 1-в-1.
Критерий «дубль 1-в-1» (НЕ планировать): второй тест проходит через тот же код-путь, с тем же Arrange и теми же ассертами, что первый, и не задействует ни одного нового слоя (UI/клиент, проводка в реальной БД, интеграционная граница, права/роли, многосессионность, конкуренция). BDD поверх полного unit-покрытия одного и того же серверного расчёта — типичный дубль.
Когда второй тест ОПРАВДАН (планировать): он РАСШИРЯЕТ покрытие — добавляет слой или измерение, недоступное первому:
Почему: дубль 1-в-1 тратит ресурс и время (написание + прогон + сопровождение + диагностика ложных падений), не давая ни строки нового покрытия. «Зелёный» дубль создаёт иллюзию большей проверенности, которой нет. Стоимость BDD-уровня (Phase 3a/3c: исполняемые шаги, профиль прогона, итерации до GREEN, zero-residue teardown) особенно высока — оправдывать его обязан новый слой, а не повтор серверной логики.
Действие Analyst: для каждого BDD/integration-сценария в спеке явно указать, КАКОЙ слой он закрывает сверх unit-плана (одна строка «расширяет: <слой>»). Если расширения нет и сценарий идёт 1-в-1 с unit — НЕ включать его в план; зафиксировать в ADR решение «BDD не нужен: покрыто unit, дубля избегаем». Reviewer проверяет это как часть приёмки плана тестирования.
План тестирования ОБЯЗАН выбирать уровень теста по тому runtime-слою, который меняется. Нельзя закрывать клиентское изменение только синтаксисом/юнитом, а серверное изменение — только кликом в UI.
| Что затронуто | Обязательное покрытие |
|---------------|------------------------|
| Серверная логика, общий модуль, модуль менеджера/объекта, серверный метод формы, запрос, запись регистров/документов | YaxUnit unit/integration. Если тест уже есть — актуализировать и перепрогнать; если теста нет — добавить. |
| UI или клиентский контекст: форма, команда, кнопка, командный интерфейс, клиентский обработчик, ОткрытьФорму, оповещение, видимость/доступность, права на открытие UI | Сценарный тест через Vanessa/TestClient: открыть пользовательский entrypoint, выполнить действие и проверить наблюдаемый результат без ошибки. Для UI/UX-приёмки формы планировать PNG-скриншот через VA MCP (connect_test_client -> get_window_list_os -> get_window_screenshot_os) с проверкой, что снимок не пустой/чёрный. Web-клиент планировать только для browser-specific слоя (DOM/CSS/JS console/network/web-auth/viewport/browser extension), явно указав, какой функции принципиально нет в VA MCP. Для точечной команды минимальный сценарий кликает команду и подтверждает успешный запуск/завершение. |
| Связанный пользовательский процесс, проходящий через несколько форм/объектов | End-to-end сценарий процесса. Сначала переиспользовать существующий сценарий и актуализировать его под изменение; новый сценарий писать только если существующего покрытия нет. |
| Интеграционная граница, HTTP/API, фоновое или регламентное выполнение | Integration/YaxUnit или сценарный тест с проверяемым внешним/регистровым эффектом; для фоновых заданий — проверка идемпотентности и повторного запуска, если это относится к изменению. |
Каждый MUST в спеке должен иметь в «Плане тестирования» явную строку трассировки:
требование → затронутый слой → тип теста → существующий тест актуализируется или создаётся новый.
Если обязательный UI/VA-тест технически невозможен в текущем окружении, спека НЕ должна молча снижать
покрытие: применить fallback-правила va-visual-check и зафиксировать выполненные VA-шаги, причину fallback и остаточный риск. Если fallback не даёт достаточного сигнала для требования — зафиксировать blocker. Reviewer проверяет не только наличие тестов, но и соответствие уровня теста затронутому runtime-слою.
В процессе существуют два ADR-механизма, их области НЕ пересекаются:
task_dir/adr/*.md (MADR, ведётся в technical-design, см. technical-design-standard) — технические решения дизайна (Phase 2+): архитектура, модульная структура, контракты.Каждый файловый ADR, вытекающий из решения спеки, ССЫЛАЕТСЯ на его номер в «Журнале решений». Дублировать одно решение в обоих местах ЗАПРЕЩЕНО.
| Ключевое слово | Значение | Правило использования | |----------------|----------|------------------------| | MUST | Обязательно | Без выполнения требование считается невыполненным. | | SHOULD | Настоятельно рекомендуется | Отклонение допустимо только с явным обоснованием. | | MAY | Опционально | Улучшение, не блокирующее приемку. | | MUST NOT | Запрещено | Явное ограничение, нарушение недопустимо. |
Требования должны быть:
Для задач со спецификацией декомпозиция обязательна (отдельный JSON-файл Task Breakdown). В спецификации — ссылка на JSON и/или краткая выжимка.
Процесс контроля качества — вне этого навыка: task-breakdown (§3 Linear — self-check, §4 Subagent — cross-review).
Чеклист для ревью:
| Ошибка | Последствие | |--------|------------| | Смешение проблемы и решения в Context | Неясно, что нужно исправить | | Размытые требования без RFC 2119 | Невозможно однозначно принять работу | | Пустой Out of scope | Scope creep | | Отсутствие декомпозиции задач | Слабая трассируемость | | Противоречия Requirements ↔ Technical Design | Ошибки при реализации |
development
1C server maintenance webhooks: container restart and external component cache cleanup
development
Interactive DAP debugging of a single BSL procedure
tools
Rules for using RLM tools for project search and navigation in 1C/BSL
development
Creates web applications and routes on Winow (a web server on OneScript and Autumn). Use when working with a web server on OneScript, routing, or Winow controllers.