framework_eng/skills/spec-writing/technical-design-standard/SKILL.md
The technical design standard for 1С development tasks. Defines the structure of technical-design.md, the rules for filling sections (MUST/SHOULD/MAY), the quality checklist, and guidance on the level of detail. Used by the architect (Phase 2) and the reviewer (scope=arch).
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 (technical-design.md) is the bridge between the specification (WHAT) and the decomposition of tasks (HOW). It records architectural decisions, the modular structure, contracts, and cross-cutting concepts. It extends the high-level Technical Design section from the specification.
Foundation: Google Design Docs, arc42, MADR 4.0, Stripe RFC (Drawbacks), C4 Model.
Technical design MUST be written in Russian — section headings, descriptions, justifications, tables. Exceptions: code and metadata identifiers (module names, attributes, variables, BSL signatures) and well-established terms (ADR, RFC 2119, C4, MUST/SHOULD/MAY).
| Task type | TD required | Justification | |------------|----------|-------------| | New functionality (medium/complex) | MUST | Locks in the architecture before development begins | | Modification of a standard configuration with structural changes | MUST | Need to justify the chosen approach (extension vs configuration) | | Integration with an external system | MUST | Contracts and data flow are critical | | Simple bug fix | MAY | Only if the bug requires architectural changes | | Refactoring that changes the modular structure | SHOULD | Transparency about the boundaries of change is required | | External processing (EPF) with a form | SHOULD | Metadata structure and UI require design. MUST if the EPF includes background operations, access rights, or data exchange |
# Технический дизайн: [Краткое название]
| Поле | Значение |
|------|----------|
| Спецификация | [SPEC-NNN](ссылка на spec.md) |
| Дата | YYYY-MM-DD |
| Статус | Черновик / Ревью / Утверждён |
| Explorer | [explorer-context.md](ссылка) |
| Декомпозиция | [task-breakdown.json](ссылка) |
| Каталог ADR | [task_dir/adr/](ссылка) |
| § | Section | Requirement | Condition | |---|--------|---------------|---------| | 1 | Overview | MUST | Always | | 2 | Solution strategy | MUST | Always | | 3 | Structural blocks | MUST | Always | | 4 | Data and metadata | MUST | Always | | 5 | Cross-cutting concepts | SHOULD | MUST if the task touches >2 modules or changes transversal behavior | | 6 | Key decisions | MUST | Always (minimum 1 decision) | | 7 | Risks and drawbacks | MUST | Always | | 8 | Assumptions and open questions | SHOULD | MUST if there are uncertainties that block part of the design | | 9 | Migration and rollback | Conditional MUST | MUST if existing metadata objects are altered or data migration is required | | 10 | Traceability | MUST | Always |
Rule: If a section is not applicable to the task — mark it as N/A with a brief reason. Do not remove the section.
What the technical solution must achieve. RFC 2119 formulations (MUST/SHOULD/MAY) are not required — they already exist in the specification. This section describes the technical goals of the design.
What the design explicitly does NOT solve. This is the most valuable section for preventing scope creep. Each non-goal is a conscious exclusion.
The current state of the system (TOGAF Baseline). Which modules/objects exist and how they currently operate. Reference explorer-context.md as the baseline source — do not duplicate it, only expand where the design requires additional detail.
Constraints that influence the architecture:
High-level description of the chosen approach (2–3 paragraphs):
This is the strategy, not the details. Details belong in §3 and §4.
The system in the context of external systems and users. For integration tasks — a mandatory diagram (textual or ASCII).
For tasks inside a single configuration — MAY be a brief description of the affected subsystems.
Affected and new modules, their relationships:
| Модуль | Тип | Новый/Существующий | Ответственность |
|--------|-----|--------------------|-----------------|
| ОМ.РаботаСКонтрагентами | Общий модуль | Существующий (модификация) | Валидация, получение данных |
| МодульОбъекта.Контрагенты | Модуль объекта | Существующий (модификация) | Обработчики записи |
For complex tasks — textual diagrams of call flows between modules.
Signatures of the key procedures/functions with contracts:
// Функция ПроверитьИНН(ИНН: Строка): Булево
//
// Параметры:
// ИНН — Строка(10) или Строка(12), не пустая
// Возврат:
// Истина — если ИНН корректен по алгоритму проверки контрольных разрядов
// Исключение:
// Если ИНН пустая строка — ВызватьИсключение
// Директива: &НаСервереБезКонтекста
Table of all affected metadata objects:
| Объект | Тип | Новый/Сущ. | Изменения | DSL |
|--------|-----|-----------|-----------|-----|
| Справочник.Контрагенты | Справочник | Сущ. | +Реквизит ИНН (Строка 12) | — |
| РС.ИсторияИзменений | Регистр сведений | Новый | Период, Объект, Автор, Описание | — |
| Форма.ФормаЭлемента | Управляемая форма | Новый | Поле ИНН, кнопка Проверить | [form-dsl.json](artifacts/form-dsl.json) |
| Роль.МенеджерПродаж | Роль | Новый | Права на справочник и регистр | [role-dsl.json](artifacts/role-dsl.json) |
Rule for JSON DSL:
task_dir/artifacts/ MUST; inline fragments in the design MAY be included (only key elements required for understanding the architecture)How data moves through the system for key scenarios:
Пользователь → Форма.Контрагент
→ МодульОбъекта.ПриЗаписи()
→ ОМ.РаботаСКонтрагентами.ПроверитьИНН()
→ РС.ИсторияИзменений.Запись
For integrations — the data flow between systems with protocols and formats. For each integration point SHOULD specify the NFR contract: timeout, retry policy, idempotency, authentication, and error mapping.
Cross-cutting solutions that span all modules. SHOULD document the decision for each applicable aspect:
| Aspect | Decision | Justification | |--------|---------|-------------| | Error handling | Попытка/Исключение с ЗаписьЖурналаРегистрации | coding-standards rule 18 | | Logging | ЖР through БСП (ЗаписьЖурналаРегистрации) | ssl-patterns: standard mechanism | | Access rights | Role via xml-gen, RLS is not required | Data does not contain organization-level segregation | | Transactions | НачатьТранзакцию/Попытка for writing to registers | coding-standards rule 18 | | Client/Server | &НаСервереБезКонтекста for business logic | coding-standards rule 3 | | Use of БСП | ОбщегоНазначения.СообщитьПользователю for validation | ssl-patterns: validation of required fields | | Platform limitations | [describe workarounds if there are any] | — |
If all aspects are standard and do not require special solutions — state: “Standard patterns are used; see coding-standards and ssl-patterns. There are no special solutions.”
Brief table of architectural decisions:
| # | Решение | Варианты | Выбор | Обоснование | ADR |
|---|---------|---------|-------|-------------|-----|
| 1 | Хранение истории | A) ЖР, B) Отдельный регистр | B | Нужны запросы и отчёты по истории | [ADR-001](adr/ADR-001.md) |
| 2 | Валидация ИНН | A) Свой алгоритм, B) Внешний сервис | A | Нет зависимости от сети | — (тривиальное) |
Rule: for every non-obvious decision (≥2 alternatives with different trade-offs) — a separate ADR file in task_dir/adr/.
ADR format (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
Chosen option [X].
### Consequences
- Good: [что улучшится]
- Bad: [что ухудшится]
### Confirmation
[Как проверить, что решение реализовано корректно]
What becomes worse, more complex, or more expensive. If the drawbacks section is empty — the design has not been analyzed enough.
| # | Риск | Вероятность | Влияние | Mitigation |
|---|------|-------------|---------|------------|
| 1 | Производительность запроса при >100K записей | Средняя | High | Индекс + лимит выборки |
Assumptions — assumptions accepted in the face of uncertainty. They do not block the design but may influence implementation:
- Предполагаем, что максимальное кол-во контрагентов < 500K
- БСП версии 3.1+ (иначе нужен fallback для ДлительныеОперации)
Open questions — unanswered items. They do not block the architecture but require clarification before or during implementation.
Condition: this section MUST if existing metadata objects are changed or data migration is required. Otherwise — N/A: new objects, no migration required.
Traceability matrix: requirement from the specification → design section → task from the decomposition.
| 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 |
Rule: every MUST from the specification MUST be covered by at least one design section and one task. SHOULD — SHOULD be covered.
Checklist for the reviewer (scope=arch):
task_iddepends_on values are valid and do not contain cyclesspec_refs point to existing specification sectionstask_type is correct (code/test/migration/docs/analysis/architecture)done_criteria are verifiable and specific| Error | Consequence | |--------|------------| | Non-goals are empty | Scope creep | | Drawbacks are empty | Reviewer cannot assess trade-offs | | JSON DSL is fully inline | The document becomes bloated, the overview is lost → DSL in artifacts/ | | Duplication of the specification | Violation of single source of truth | | Traceability is missing | Impossible to verify requirement coverage | | All sections are filled for a simple task | Formal overhead → use N/A | | Constraints are not specified | Incompatible approach (EDT vs Designer, БСП version) |
Input: spec-standard. Output: task-breakdown-*. Criteria: coding-standards, ssl-patterns. Metadata generation: xml-generation.
depends_on:
testing
MUST use BEFORE making a judgment about the cause of a conflict, a test failure, or an artifact dispute. Defines the end-to-end verification method L1→L6 and the classification of the first broken link.
development
MUST use AFTER a work cycle with ≥2 iterations (wrote → error → fixed → success). Provides the retrospective procedure and the format for recording practice/anti-patterns in references/learned-patterns.md or {project}/.context/learned-patterns.md.
tools
MUST use WHEN you are writing reusable knowledge into RLM (pattern / architectural decision / stable domain fact) OR reading it before a non-trivial task/solution in the domain. Provides the breakdown of native-push vs RLM-pull, tools for writing and reading RLM, H-MEM levels, and hygiene.
testing
MUST use WHEN the task is classified as simple (< 20 lines, 1 file, no new metadata objects, no architectural decisions). Provides a short cycle of 3 steps with a guard on the self path and mandatory verify.