08. Specifications (9 типов SPEC)
Часть RENAR Standard v1.0-draft · ← Оглавление
8.1 Назначение главы
Глава нормирует closed list из 9 типов спецификаций (SPEC-*) как параллельную ось требованиям. Спецификации описывают структуру системы, требования описывают поведение. SPEC не является ребёнком SR в дереве требований; SPEC и SR связаны типизированными рёбрами графа (constrained-by[], implements-spec[]).
Закрытый список 9 типов — нормативное требование v1.0. Новые типы добавляются только через formal change procedure стандарта (глава 14).
8.2 Архитектурное решение: SPEC — параллельная ось, не дети SR
8.2.1 Две оси описания системы
Требования и спецификации отвечают на разные вопросы:
| Ось | Артефакты | Вопрос |
|---|---|---|
| Поведенческая | BR / SR / TR (глава 06) | Что система должна делать |
| Структурная | SPEC-* (9 типов) | Как система структурно устроена для выполнения этих требований |
8.2.2 SPEC сиблинг SR, связи через граф
Один SR может опираться на несколько SPEC: SR «создать заказ» опирается на SPEC-ARCH (где живёт сервис заказов), SPEC-API (контракт endpoint), SPEC-DATA (схема таблицы), SPEC-PROC (workflow), SPEC-SEC (правила доступа), SPEC-UI (форма). Это граф зависимостей, не дерево родителей: у SR ровно один родитель в дереве требований (BR), но множество типизированных ссылок на SPEC.
Дерево требований (поведенческая ось): Параллельная ось спецификаций:
BR SPEC-ARCH SPEC-API
└── SR ←──── constrained-by[] ────► SPEC-DATA SPEC-INT
└── TR ─── implements-spec[] ────► SPEC-PROC SPEC-UI
SPEC-AI SPEC-SEC
SPEC-OPS
Дерево требований:
SR.parent → BR (единственный родитель)
TR.parent → SR (единственный родитель)
Граф связей (типизированные рёбра):
SR.constrained-by[] → SPEC-*
TR.implements-spec[] → SPEC-*
SPEC-*.depends-on[] → SPEC-* (между спецификациями)
SPEC-*.referenced-by[] → SR / TR (auto-derived inverse)
8.2.3 Обоснование
| Аргумент | Следствие |
|---|---|
| SPEC и SR отвечают на разные вопросы | SPEC не уточняет SR на более глубоком уровне — это отдельная категория описания |
| Один SR опирается на 5–7 SPEC | Дерево «SPEC как родитель SR» приводит к множественному родительству |
| Industry standards (arc42, C4, OpenAPI, BPMN, ERD) живут параллельно требованиям | RENAR следует этой проверенной практике |
| AI-агент может параллелить генерацию SR и SPEC | Без блокировки одного типа другим |
8.3 Closed list 9 типов SPEC
| Тип | Назначение | Industry reference |
|---|---|---|
SPEC-ARCH | Архитектура системы / подсистемы: контексты, контейнеры, компоненты, deployment view, quality attributes | arc42, C4 model (Brown), ISO/IEC/IEEE 42010 |
SPEC-API | API contracts: REST / GraphQL / gRPC / async events; версионирование, error model, rate limits | OpenAPI 3.x, AsyncAPI 2.x, gRPC IDL |
SPEC-DATA | Data model: schema, ERD, indices, миграции, retention, PII classification | ISO/IEC 11179, JSON Schema |
SPEC-INT | Integration: взаимодействие между подсистемами и внешними системами; протоколы, контракты, SLA | Enterprise Integration Patterns (Hohpe) |
SPEC-PROC | Process / workflow: бизнес-процессы, state machines, saga, choreography, orchestration | BPMN 2.0, ISO/IEC 19510 |
SPEC-UI | UI / UX: экраны, навигация, user journeys, accessibility, i18n, baseline images | Material Design / Apple HIG, WCAG 2.2 |
SPEC-AI | AI / ML: model cards, RAG, prompt engineering, eval strategy, cost budget | ISO/IEC 23894, NIST AI RMF |
SPEC-SEC | Security: authn / authz, threat model, secrets management, data classification | STRIDE, OWASP ASVS, ISO/IEC 27001 |
SPEC-OPS | Operations: deployment, observability, SLO / SLA, runbook, disaster recovery | Google SRE, ITIL v4, ISO/IEC 20000 |
8.3.1 Что НЕ вошло в v1.0 (с обоснованием)
| Кандидат | Решение | Обоснование |
|---|---|---|
SPEC-EVENT | Не отдельный тип | События / очереди — раздел SPEC-API (asynchronous APIs) |
SPEC-CONFIG | Не отдельный тип | Feature flags / env vars / secrets — раздел SPEC-OPS |
SPEC-PERF | Не отдельный тип | Performance / NFR — раздел SPEC-ARCH (quality attributes) или SPEC-OPS (SLO) |
SPEC-TEST-ENV | Не отдельный тип | Тестовые окружения — раздел SPEC-OPS |
SPEC-DOMAIN | Не отдельный тип | Domain model — поглощён SPEC-ARCH (decomposition) + SPEC-DATA (entities) |
SPEC-MIGRATION | Не отдельный тип | Migration — раздел SPEC-DATA (lifecycle) |
SPEC-COMPLIANCE | Не отдельный тип | Compliance — связи между SR/SPEC и нормативами через compliance-refs[], не отдельный артефакт |
Closed list policy: если в дальнейшей работе обнаружится, что какой-то из исключённых типов реально нужен — он добавляется через formal change procedure стандарта с обоснованием.
8.4 Common schema (общие frontmatter поля)
Все 9 типов SPEC делят общий набор frontmatter полей. Type-specific поля добавляются как extensions поверх (§8.5). Полная machine-readable schema — в reference/02-schemas.md.
---
# === Identity (mandatory) ===
id: SPEC-<TYPE>-NN[.N] # immutable; TYPE ∈ {ARCH,API,DATA,INT,PROC,UI,AI,SEC,OPS}
title: "<short, descriptive>"
type: SPEC-ARCH | SPEC-API | SPEC-DATA | SPEC-INT | SPEC-PROC | SPEC-UI | SPEC-AI | SPEC-SEC | SPEC-OPS
slug: "<kebab-case>" # auto-derived
# === Scope (mandatory) ===
level: system | subsystem | module
scope:
system: "<system-id>"
subsystem: "<subsystem-id>" # null если level=system
# === Lifecycle (mandatory) ===
status: draft | review | approved | verified | obsolete
priority: must | should | could # not all types use; mostly SPEC-SEC / SPEC-OPS
# === Source: provenance from ADAPT (mandatory) ===
source:
adapt: ADAPT-NNN # link to ADAPT artifact (см. глава 07)
adapt-section: "Forward §N" # canonical source — секция ADAPT
tz-section: "§N.N" # optional, для traceability
# === Граф связей (auto-managed except mandatory ones) ===
referenced-by: [] # auto-derived; SR/TR/SPEC ссылающиеся сюда
depends-on: [] # mandatory если есть; SPEC-* на которые опирается этот SPEC
verified-by: [] # auto-derived; список TC IDs верифицирующих
# === AI provenance (mandatory на RENAR-4+; см. глава 12) ===
ai-provenance:
generated-by: "<vendor>-<model>@<date>"
prompt-template: "<template-path>@<version>"
context-tokens: integer
output-tokens: integer
generation-time-ms: integer
generated-at: "<ISO-8601>"
human-edits: boolean
# === Замена (mandatory если применимо) ===
replaces: "<old-id>"
replaced-by: "<new-id>"
deprecated-date: "<ISO date>"
# === Compliance (optional) ===
compliance-refs: [] # ссылки на ISO/GDPR/AI Act/NIST AI RMF
---
8.4.1 Обязательные разделы body
Body любого SPEC обязательно содержит:
- Назначение — 1–3 параграфа.
- Scope — что входит, что не входит.
- Type-specific разделы — см. §8.5.
- Связь с требованиями — какие SR/BR ссылаются.
- Связь с другими SPEC —
depends-on[]. - Verification — какие TC верифицируют этот SPEC.
8.5 Type-specific extensions
Краткое описание type-specific полей и обязательных body-разделов. Полная machine-readable extension schema — в reference/02-schemas.md. Industry references детально — в указанных стандартах.
8.5.1 SPEC-ARCH
Type-specific frontmatter: arch-style, deployment-model, tech-stack, quality-attributes.
Mandatory body: системный контекст (C4 L1), контейнеры (C4 L2), компоненты (C4 L3) для критических контейнеров, quality attributes (latency / throughput / availability), ADR-журнал.
Spec-specific TC (глава 09): architecture conformance tests (zoning), quality attribute baseline tests.
8.5.2 SPEC-API
Type-specific frontmatter: api-style (rest / graphql / grpc / async-events), api-version, versioning-strategy, authentication, rate-limits, contract-file (location of machine-readable contract).
Mandatory body: endpoints / operations с payload / response / errors, versioning rules (breaking vs non-breaking), error model, authn/authz reference на SPEC-SEC, rate limits, 2–3 example запросов на endpoint.
Spec-specific TC: contract tests, authentication negative, rate limit tests.
8.5.3 SPEC-DATA
Type-specific frontmatter: data-style (relational / document / graph / columnar), storage-engine, schema-version, pii-classification[], retention-policies[], migration-strategy.
Mandatory body: domain entities, ERD (text / Mermaid / link), поля сущностей (type / constraints / indices / defaults), связи (FK / cardinality / cascade), PII / sensitive data classification + encryption at-rest + retention, migration approach, index strategy.
Spec-specific TC: migration tests, constraint tests (FK / NOT NULL / unique), PII handling tests, data retention tests.
8.5.4 SPEC-INT
Type-specific frontmatter: integration-pattern (request-response / event-driven / message-queue / webhook / file-transfer), direction, counterparty, sla, idempotency.
Mandatory body: интегрируемые системы, контракт обмена, failure modes + retry strategy, идемпотентность + dedup, security между системами, observability (correlation IDs).
Spec-specific TC: contract tests с моком counterparty, failure injection, idempotency, INT-TC end-to-end.
Замечание: SPEC-INT заменяет существующий INT-SR (§8.7 migration).
8.5.5 SPEC-PROC
Type-specific frontmatter: process-style (bpmn / state-machine / saga / choreography / orchestration), state-count, participants[], sla end-to-end и по шагам, compensation (defined / not-applicable / manual).
Mandatory body: process diagram (BPMN-flavor / Mermaid / link), состояния и переходы (для state machine), participants и их роли, happy path, альтернативные сценарии и исключения, timeouts и compensation (для saga), SLA.
Spec-specific TC: happy path E2E, alternative paths, compensation tests (для saga), SLA tests.
8.5.6 SPEC-UI
Type-specific frontmatter: ui-platform, target-users[] (с ссылками на persona разделы ADAPT), design-system, accessibility-level (WCAG-A / AA / AAA), i18n, mockup-links[], baseline-images[] для VLM-judge тестов.
Mandatory body: общая структура интерфейса, ключевые экраны, user journeys без технических деталей, сквозные элементы (права доступа / уведомления / error / empty states), тон и стиль, accessibility, i18n.
Spec-specific TC: VLM-judge с baseline (judge ≠ production изоляция), accessibility (axe-core / Pa11y), i18n (string overflow / RTL), user journey E2E.
Замечание: SPEC-UI заменяет существующий UIC (§8.7 migration).
8.5.7 SPEC-AI
Type-specific frontmatter: ai-pattern (rag / fine-tuning / prompt-engineering / tool-use / multi-agent), production-model (vendor / model / version), judge-model (обязан отличаться от production), context-strategy, eval-strategy (metric / threshold / baseline-dataset), cost-budget.
Mandatory body: архитектура AI-компонент (pipeline / orchestration / fallback), model card (capabilities / limits / known failure modes), context strategy, eval strategy с изоляцией judge ≠ production, cost management, hallucination mitigation, adversarial considerations.
Spec-specific TC: eval против baseline (judge isolated), adversarial (prompt injection как negative TC), cost regression, hallucination tests.
Замечание: SPEC-AI заменяет существующий AIC. Изоляция judge ≠ production model — обязательное требование стандарта для всех eval-TC.
8.5.8 SPEC-SEC
Type-specific frontmatter: security-domains[], auth-model (authn / authz strategies), data-classification[] (PII-high / PCI / internal), threat-model-method (STRIDE / PASTA / OCTAVE), compliance[], incident-response reference в SPEC-OPS.
Mandatory body: auth model (authn flow / authz rules), data classification с защитой, threat model (STRIDE-таблица с mitigation на каждую угрозу), secrets management, audit (что логируется / retention / доступ), encryption (at-rest / in-transit / key management), compliance mapping (ссылки на конкретные пункты).
Spec-specific TC: authn (pos + neg), authz (RBAC matrix), threat-test (каждая STRIDE-угроза → минимум 1 negative TC), audit log, secrets leakage.
8.5.9 SPEC-OPS
Type-specific frontmatter: deployment-style, environments[] (dev / staging / prod с purpose и scale), slo, observability (logs / metrics / traces / alerting), runbook-link, disaster-recovery (rto / rpo / backup-strategy).
Mandatory body: environments, deployment process (CI/CD pipeline / gating / rollout strategy), SLO (availability / latency / error budget), observability, alerting (критические алерты / escalation), runbook, capacity planning, disaster recovery.
Spec-specific TC: deployment tests (smoke), SLO regression (load testing), failover (DR drills), observability (alerts срабатывают когда ожидается).
8.6 Связь с требованиями и задачами
8.6.1 SR.constrained-by[]
SR в frontmatter получает поле constrained-by[] — типизированные ссылки на SPEC. Это граф, не дерево родителей. Родитель SR в дереве требований — единственный (BR).
# Frontmatter SR (пример)
id: SR-05
parent:
id: BR-02
constrained-by:
- SPEC-UI-01
- SPEC-API-02
- SPEC-DATA-03
- SPEC-PROC-01
- SPEC-SEC-01
verified-by:
- TC-12
- TC-13
source:
adapt: ADAPT-001
adapt-section: "Forward §3"
8.6.2 TR.implements-spec[]
TR (задача) ссылается на SR (родитель в дереве) + одна или более SPEC через implements-spec[]:
id: TR-42
title: "Реализовать endpoint POST /orders"
parent:
id: SR-05
implements-spec:
- SPEC-API-02
- SPEC-DATA-03
verified-by:
- TC-14
8.6.3 SPEC.depends-on[]
SPEC может опираться на другой SPEC:
id: SPEC-API-02
title: "REST API заказов"
type: SPEC-API
depends-on:
- SPEC-DATA-03 # стабильная схема данных
- SPEC-SEC-01 # auth model для endpoints
При изменении upstream SPEC (например SPEC-DATA-03) все downstream (SPEC-API-02 и через него связанные SR) обязаны быть пересмотрены: либо verified остаётся в силе, либо downstream артефакт получает obsolete-pending статус до пересмотра.
8.6.4 Auto-derived обратные рёбра
SPEC.referenced-by[] пересчитывается substrate-хуком после каждого изменения SR / TR / SPEC. Orphan SPEC (без referenced-by[] и без активного status) — предупреждение в отчёте качества.
8.7 Migration UIC / AIC / INT-SR / TS → SPEC-*
8.7.1 Mapping таблица
| Старый тип | Новый тип | Тип миграции |
|---|---|---|
UIC-NN | SPEC-UI-NN | Переименование ID + перенос в specs/ui/ |
AIC-NN | SPEC-AI-NN | Переименование ID + перенос в specs/ai/ |
INT-SR-NN | SPEC-INT-NN | Переименование ID + перенос в specs/int/ |
TS-NN | SPEC-<TYPE>-NN (распределение) | Manual review каждого TS; AI-агент классифицирует body, архитектор approve через one-click |
8.7.2 Атомарная миграция
Миграция — одна atomic change unit (V2) на уровне проекта. Параллельное существование старых типов (UIC / AIC / INT-SR / TS) и SPEC-* как SoT запрещено.
Процедура (substrate-agnostic):
- Подготовка: AI-агент классифицирует каждый существующий TS-NN в один из 9 типов SPEC.
- Архитектор approve классификации.
- Atomic change: переименование IDs (UIC→SPEC-UI; AIC→SPEC-AI; INT-SR→SPEC-INT; TS→SPEC-*), перенос файлов в
specs/<type>/, обновление всех ссылок в BR / SR / TR / TC frontmatter (parent: UIC-NN→constrained-by: [SPEC-UI-NN]). - Регенерация auto-derived файлов (REQUIREMENTS.md, SPECS.md, обратные рёбра).
- CI-проверка: отсутствие orphan ссылок и старых IDs.
8.7.3 ID immutability
После миграции SPEC IDs immutable (см. V1, §11.3.1). Переименование SPEC-API-02 → SPEC-API-08 запрещено. Замена — через deprecated + новый ID с replaces[].
8.8 Quality Gates SPEC
SPEC имеет dedicated state machine (глава 10 §10.3):
| State | Условие перехода |
|---|---|
draft | Создан; обязательные поля frontmatter заполняются |
review | Готов к ревью; обязательные body-разделы (§8.4.1) и type-specific (§8.5) присутствуют |
approved | Архитектор подтвердил; depends-on[] консистенция проверена |
verified | Все обязательные spec-specific TC (глава 09 §9.7) зелёные |
obsolete | Заменён или больше не актуален; replaced-by обязателен |
Связь с QG-0 / QG-2 SENAR:
- QG-0 (есть goal/AC у задачи) расширяется: для задач реализующих SPEC обязательны
implements-spec[]в TR frontmatter. - QG-2 (есть evidence у
done) расширяется: для задач реализующих SPEC обязательны TC соответствующего spec-specific вида (глава 09 §9.7).
8.9 Storage layout
8.9.1 На уровне системы
[system].req/
br/
sr/
specs/
arch/ SPEC-ARCH-NN-*.md
int/ SPEC-INT-NN-*.md
proc/ SPEC-PROC-NN-*.md
sec/ SPEC-SEC-NN-*.md
ops/ SPEC-OPS-NN-*.md
adapt/
tz/
SPECS.md # auto-generated index
8.9.2 На уровне подсистемы
[subsystem].req/
br/ # если своя бизнес-сторона
sr/
specs/
arch/ SPEC-ARCH-NN-*.md # архитектура подсистемы
api/ SPEC-API-NN-*.md
data/ SPEC-DATA-NN-*.md
ui/ SPEC-UI-NN-*.md
ai/ SPEC-AI-NN-*.md
int/ SPEC-INT-NN-*.md
proc/ SPEC-PROC-NN-*.md
sec/ SPEC-SEC-NN-*.md
ops/ SPEC-OPS-NN-*.md
adapt/
SPECS.md
Substrate-нативная реализация storage — substrate-specific (см. guide/03, guide/04).
8.9.3 SPECS.md — auto-generated index
SPECS.md — auto-generated реестр всех SPEC: ID, тип, заголовок, статус, ссылка на верифицируемое требование, ссылка на файл. Помечается linguist-generated=true. Триггеры перегенерации — каждое изменение SPEC frontmatter или каждый approve / verify gate.
8.10 Связь с другими главами
| Глава | Связь |
|---|---|
| 05 Methodology positioning | SPEC как параллельная ось — следствие SoT inversion |
| 06 Requirements hierarchy | SR.constrained-by[], TR.implements-spec[] |
| 07 ADAPT | SPEC ссылается на ADAPT через source.adapt |
| 09 Test cases | Spec-specific TC types (таблица обязательных видов TC для каждого типа SPEC) |
| 10 Lifecycle и QG | SPEC state machine + QG расширения для SPEC |
| 11 Substrate versioning | SPEC IDs immutable (V1); migration атомарно (V2) |
| 12 Maturity model | RENAR-3+: все 9 типов SPEC где применимо |
| reference/02 — schemas | Полная machine-readable schema для каждого type-specific extension |
| research/16 — knowledge graph | constrained-by[], implements-spec[], depends-on[] как edge types в графе |