framework/skills/spec-writing/technical-design-standard/SKILL.md
Для technical-design.md 1C с MUST/SHOULD/MAY
npx skillsauth add steelmorgan/1c-agent-based-dev-framework technical-design-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.
Технический дизайн (technical-design.md) — мост между спецификацией (ЧТО) и декомпозицией задач (КАК). Фиксирует архитектурные решения, модульную структуру, контракты и сквозные концепции. Расширяет high-level секцию Technical Design из спецификации.
Основа: Google Design Docs, arc42, MADR 4.0, Stripe RFC (Drawbacks), C4 Model.
Технический дизайн MUST быть написан на русском языке — заголовки секций, описания, обоснования, таблицы. Исключение — идентификаторы кода и метаданных (имена модулей, реквизитов, переменных, сигнатуры BSL), а также устоявшиеся термины (ADR, RFC 2119, C4, MUST/SHOULD/MAY).
| Тип задачи | Нужен ТД | Обоснование | |------------|----------|-------------| | Новая функциональность (средняя/сложная) | MUST | Фиксирует архитектуру до начала разработки | | Доработка типовой конфигурации с изменением структуры | MUST | Нужно обосновать выбор подхода (расширение vs конфигурация) | | Интеграция с внешней системой | MUST | Контракты и data flow критичны | | Простое исправление бага | MAY | Только если баг требует архитектурных изменений | | Рефакторинг с изменением модульной структуры | SHOULD | Нужна прозрачность по границам изменений | | Внешняя обработка (EPF) с формой | SHOULD | Структура метаданных и UI требуют проектирования. MUST если EPF включает фоновые операции, права доступа или обмен данными |
# Технический дизайн: [Краткое название]
| Поле | Значение |
|------|----------|
| Спецификация | [SPEC-NNN](ссылка на spec.md) |
| Дата | YYYY-MM-DD |
| Статус | Черновик / Ревью / Утверждён |
| Explorer | [explorer-context.md](ссылка) |
| Декомпозиция | [task-breakdown.json](ссылка) |
| Каталог ADR | [task_dir/adr/](ссылка) |
| § | Секция | Обязательность | Условие | |---|--------|---------------|---------| | 1 | Обзор | MUST | Всегда | | 2 | Стратегия решения | MUST | Всегда | | 3 | Структурные блоки | MUST | Всегда | | 4 | Данные и метаданные | MUST | Всегда | | 5 | Сквозные концепции | SHOULD | MUST если задача затрагивает >2 модулей или меняет сквозное поведение | | 6 | Ключевые решения | MUST | Всегда (минимум 1 решение) | | 7 | Риски и недостатки | MUST | Всегда | | 8 | Допущения и открытые вопросы | SHOULD | MUST если есть неопределённости, блокирующие часть дизайна | | 9 | Миграция и откат | Conditional MUST | MUST если изменяются существующие объекты метаданных или требуется миграция данных | | 10 | Трассируемость | MUST | Всегда |
Правило: если секция неприменима к задаче — указать N/A с краткой причиной. Не удалять секцию.
Что должно быть достигнуто техническим решением. Формулировки через RFC 2119 (MUST/SHOULD/MAY) не нужны — они уже в спецификации. Здесь — технические цели дизайна.
Что дизайн явно НЕ решает. Самая ценная секция для предотвращения scope creep. Каждый non-goal — это осознанное исключение.
Текущее состояние системы (TOGAF Baseline). Какие модули/объекты существуют, как работают сейчас. Ссылка на explorer-context.md как базовый источник — не дублировать, а расширять только там, где нужно для дизайна.
Ограничения, влияющие на архитектуру:
Высокоуровневое описание выбранного подхода (2–3 абзаца):
Это стратегия, не детали. Детали — в §3 и §4.
Система в контексте внешних систем и пользователей. Для интеграционных задач — обязательная диаграмма (текстовая или ASCII).
Для задач внутри одной конфигурации — MAY быть кратким описанием затронутых подсистем.
Затронутые и новые модули, их связи:
| Модуль | Тип | Новый/Существующий | Ответственность |
|--------|-----|--------------------|-----------------|
| ОМ.РаботаСКонтрагентами | Общий модуль | Существующий (модификация) | Валидация, получение данных |
| МодульОбъекта.Контрагенты | Модуль объекта | Существующий (модификация) | Обработчики записи |
Для сложных задач — текстовая схема вызовов между модулями.
Сигнатуры ключевых процедур/функций с контрактами:
// Функция ПроверитьИНН(ИНН: Строка): Булево
//
// Параметры:
// ИНН — Строка(10) или Строка(12), не пустая
// Возврат:
// Истина — если ИНН корректен по алгоритму проверки контрольных разрядов
// Исключение:
// Если ИНН пустая строка — ВызватьИсключение
// Директива: &НаСервереБезКонтекста
Таблица всех затронутых объектов метаданных:
| Объект | Тип | Новый/Сущ. | Изменения | DSL |
|--------|-----|-----------|-----------|-----|
| Справочник.Контрагенты | Справочник | Сущ. | +Реквизит ИНН (Строка 12) | — |
| РС.ИсторияИзменений | Регистр сведений | Новый | Период, Объект, Автор, Описание | — |
| Форма.ФормаЭлемента | Управляемая форма | Новый | Поле ИНН, кнопка Проверить | [form-dsl.json](artifacts/form-dsl.json) |
| Роль.МенеджерПродаж | Роль | Новый | Права на справочник и регистр | [role-dsl.json](artifacts/role-dsl.json) |
Правило по JSON DSL:
task_dir/artifacts/ MUST; inline-фрагмент в дизайне MAY (только ключевые элементы для понимания архитектуры)Как данные движутся через систему для ключевых сценариев:
Пользователь → Форма.Контрагент
→ МодульОбъекта.ПриЗаписи()
→ ОМ.РаботаСКонтрагентами.ПроверитьИНН()
→ РС.ИсторияИзменений.Запись
Для интеграций — data flow между системами с указанием протоколов и форматов. Для каждой интеграционной точки SHOULD указать NFR-контракт: timeout, retry-политика, idempotency, аутентификация, маппинг ошибок.
Сквозные решения, пронизывающие все модули. SHOULD указать решение по каждому применимому аспекту:
| Аспект | Решение | Обоснование | |--------|---------|-------------| | Обработка ошибок | Попытка/Исключение с ЗаписьЖурналаРегистрации | coding-standards правило 18 | | Логирование | ЖР через БСП (ЗаписьЖурналаРегистрации) | ssl-patterns: стандартный механизм | | Права доступа | Роль через xml-gen, RLS не требуется | Данные не содержат разграничения по организациям | | Транзакции | НачатьТранзакцию/Попытка для записи в регистр | coding-standards правило 18 | | Клиент/Сервер | &НаСервереБезКонтекста для бизнес-логики | coding-standards правило 3 | | Использование БСП | ОбщегоНазначения.СообщитьПользователю для валидации | ssl-patterns: проверка заполнения | | Платформенные ограничения | [описать если есть workarounds] | — |
Если все аспекты стандартны и не требуют специальных решений — указать: «Используются стандартные паттерны, см. coding-standards и ssl-patterns. Специальных решений нет.»
Краткая таблица архитектурных решений:
| # | Решение | Варианты | Выбор | Обоснование | ADR |
|---|---------|---------|-------|-------------|-----|
| 1 | Хранение истории | A) ЖР, B) Отдельный регистр | B | Нужны запросы и отчёты по истории | [ADR-001](adr/ADR-001.md) |
| 2 | Валидация ИНН | A) Свой алгоритм, B) Внешний сервис | A | Нет зависимости от сети | — (тривиальное) |
Правило: для каждого неочевидного решения (≥2 альтернативы с разными trade-offs) — отдельный ADR-файл в task_dir/adr/.
Разграничение с ADR спеки (MUST): файловый task_dir/adr/*.md (MADR) фиксирует только технические решения дизайна (Phase 2+): архитектура, модульная структура, контракты. Бизнес-решения уровня требований (выбор альтернативы, scope-решения, ответы пользователя в clarification) остаются в inline «Журнале решений (ADR)» спецификации (spec-standard). Каждый файловый ADR, вытекающий из решения спеки, ССЫЛАЕТСЯ на его номер. Дублировать одно решение в обоих местах ЗАПРЕЩЕНО.
Формат ADR (MADR 4.0 lean):
# ADR-NNN: [Название решения]
Status: Accepted
Date: YYYY-MM-DD
## Context
[Почему возник вопрос]
## Decision Drivers
- [Фактор 1]
- [Фактор 2]
## Considered Options
1. [Вариант A] — описание
2. [Вариант B] — описание
## Decision Outcome
Выбран вариант [X].
### Consequences
- Good: [что улучшится]
- Bad: [что ухудшится]
### Confirmation
[Как проверить, что решение реализовано корректно]
Что станет хуже, сложнее, дороже. Если drawbacks пуст — дизайн не проанализирован достаточно.
| # | Риск | Вероятность | Влияние | Mitigation |
|---|------|-------------|---------|------------|
| 1 | Производительность запроса при >100K записей | Средняя | High | Индекс + лимит выборки |
Допущения — принятые при неопределённости. Не блокируют дизайн, но могут повлиять на реализацию:
- Предполагаем, что максимальное кол-во контрагентов < 500K
- БСП версии 3.1+ (иначе нужен fallback для ДлительныеОперации)
Открытые вопросы — оставшиеся без ответа. Не блокируют архитектуру, но требуют уточнения до или во время реализации.
Условие: секция MUST если изменяются существующие объекты метаданных или требуется миграция данных. Иначе — N/A: новые объекты, миграция не требуется.
Матрица связи: требование из спецификации → секция дизайна → задача из декомпозиции.
| Spec Requirement | Design Section | Task IDs |
|------------------|---------------|----------|
| MUST-1: Валидация ИНН | §3.3 Interfaces, §4.1 Metadata | T-001, T-003 |
| MUST-2: История изменений | §4.1 Metadata, §4.2 Data Flow | T-002 |
| SHOULD-1: Отчёт по истории | §4.1 Metadata (SKD) | T-005 |
Правило: каждый MUST из спецификации MUST быть покрыт хотя бы одной секцией дизайна и одной задачей. SHOULD — SHOULD быть покрыт.
Чеклист для ревьюера (scope=arch):
task_iddepends_on валидны и не содержат цикловspec_refs ссылаются на существующие разделы спецификацииtask_type корректен (code/test/migration/docs/analysis/architecture)done_criteria проверяемы и конкретны| Ошибка | Последствие | |--------|------------| | Non-goals пуст | Scope creep | | Drawbacks пуст | Ревьюер не может оценить trade-offs | | JSON DSL полностью inline | Документ раздувается, теряется обзор → DSL в artifacts/ | | Дублирование спецификации | Нарушение single source of truth | | Traceability отсутствует | Невозможно проверить покрытие требований | | Все секции заполнены на простой задаче | Формальный overhead → использовать N/A | | Constraints не указаны | Несовместимый подход (EDT vs Designer, версия БСП) |
Входные: spec-standard. Выходные: task-breakdown-*. Критерии: coding-standards, ssl-patterns. Генерация метаданных: xml-generation.
depends_on:
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.