09. Test Cases (TC)

Часть RENAR Standard v1.0-draft · ← Оглавление

9.1 Назначение главы

Глава нормирует TC (Test Case) как first-class артефакт стандарта. TC верифицирует требования (глава 06: BR / SR / TR) и спецификации (глава 08: SPEC-ARCH / API / DATA / INT / PROC / UI / AI / SEC / OPS), замыкая trace chain: ТЗ → ADAPT → BR / SR / SPEC → TR → TC (см. §5.3).

TC по жизненному циклу, версионированию и правилам approval равен требованию. Глава фиксирует:

  • закрытый список нормативных принципов TC (§9.2);
  • common schema TC (§9.3) и type-specific extensions (§9.6);
  • нормативное требование pos/neg pairing (§9.7);
  • закрытую таблицу «тип SPEC → обязательные виды TC» (§9.8);
  • защиту от подгонки тестов через тег [test-spec-change] (§9.13);
  • спот-чек инженера (§9.14) — единственная регулярная точка ручного контроля качества TC.

Глава опирается на ISO/IEC/IEEE 29119 «Software testing» в части концепций test design, test execution, test result reporting и pos/neg coverage, но фиксирует closed list типов TC, mandatory pos/neg pairing и judge ≠ production isolation как нормативные требования v1.0, не присутствующие в ISO 29119 в формализованном виде.

Положения главы являются нормативными. Закрытые списки (принципы, типы TC, обязательные виды TC по типу SPEC) — mandatory clauses RENAR conformance (глава 14); расширение — только через formal change procedure стандарта.


9.2 Закрытый список нормативных принципов TC

#ПринципНормативная формулировка
P1First-class артефактTC — самостоятельный артефакт стандарта, по жизненному циклу и версионированию равный требованию. Хранится отдельным файлом в подпапке tests/ requirements substrate (§9.17).
P2Документ ≠ реализацияTC описывает что и как проверяется (decoupled от implementation). Реализация (код) адресуется полем automation.location и хранится в code substrate. Один TC — одна реализация.
P3AI-generatedTC создаются и редактируются AI-агентом по заданию инженера; инженер не пишет TC вручную (см. глава 12 §12.N).
P4AI-executedВсе TC в статусе ready и выше — автоматизированы. Прогон производится автоматическим runner’ом (CI / AI-runner / specialized executor). Результаты записываются в last-run только bot-managed actor’ом по факту прогона.
P5Pos/neg pairingНа каждое утверждение требования (BR / SR / SPEC) создаётся минимум одна пара positive + negative TC (§9.7).
P6last-run — bot-managedПоле last-run (date / result / runner-id / requirement-version / judge-report) заполняется только автоматическим runner’ом. Ручное редактирование last-run любым актором запрещено стандартом (§9.12).
P7Judge ≠ production isolationДля типов TC, использующих LLM-as-judge (ux, eval), judge-модель не должна совпадать с production-моделью, генерирующей оцениваемый артефакт. Совпадение блокируется substrate-нативным hook’ом (§9.6.2).

Список закрыт. Новые принципы добавляются только через formal change procedure (глава 14).


9.3 Common schema TC (frontmatter)

Все типы TC делят общий набор frontmatter-полей. Type-specific поля добавляются как extensions поверх (§9.6). Полная machine-readable schema — в reference/02-schemas.md.

---
# === Identity (mandatory) ===
id: TC-NN                            # immutable; NN sequential в рамках scope
title: "<short, descriptive>"
type: TC
slug: "<kebab-case>"                 # auto-derived

# === Classification (mandatory) ===
tc-type: acceptance | ux | system | contract | eval | security
negative: boolean                    # true для парного негативного TC

# === Scope (mandatory) ===
level: system | subsystem | module
scope:
  system: "<system-id>"
  subsystem: "<subsystem-id>"        # null если level=system
  module: "<module-id>"              # null если level ≠ module

# === Lifecycle (mandatory) ===
status: draft | ready | passing | failing | obsolete

# === Verification target (mandatory; хотя бы один из) ===
verifies:
  - id: SR-NN | BR-NN | SPEC-<TYPE>-NN
    version: "<substrate-native version-ref>"   # V5 pinning (см. глава 11)
  - id: ...

# === Pair link (mandatory если negative=false и существует парный) ===
paired-with:                         # ID парного TC (positive ↔ negative)
  - TC-NN

# === Automation (mandatory) ===
automation:
  status: automated | manual-pending
  location: "<substrate-native pointer to implementation>"  # mandatory если automated
  manual-pending-until: "<ISO date>"                        # mandatory если manual-pending
  manual-pending-reason: "<text>"                            # mandatory если manual-pending

# === Execution (mandatory если type=ux | eval) ===
judge:
  vendor: "<provider>"               # mandatory; см. P7 isolation
  model: "<model-id>"
  prompt-template: "<template-path>@<version>"

baseline:                            # mandatory для ux | eval
  artifact: "<substrate-native pointer>"
  perceptual-diff-threshold: float   # для ux
  metric-thresholds: {}              # для eval

# === Last run (auto-managed; bot-only) ===
last-run:
  date: "<ISO-datetime>"
  result: pass | fail | skipped | n/a
  runner-id: "<runner-name@version>"
  run-ref: "<substrate-native reference>"
  requirement-version: "<version-ref of verified artifact>"
  judge-report: "<inline or pointer>"

# === AI provenance (mandatory на RENAR-4+) ===
ai-provenance:
  generated-by: "<vendor>-<model>@<date>"
  prompt-template: "<template-path>@<version>"
  context-tokens: integer
  output-tokens: integer
  human-edits: boolean

# === Замена / obsolescence ===
obsolete-pending: boolean            # true при detected delta-ТЗ инвалидации
replaces: "<old-id>"
replaced-by: "<new-id>"
obsoleted-date: "<ISO date>"
---

verifies[] — закрытый список ссылок на верифицируемые артефакты (BR / SR / SPEC). TR прямо не указывается в verifies — TR верифицируется через свой parent SR (см. §6.7). verifies[].version — substrate-native pinning артефакта (V5 capability, см. глава 11 §11.3.5); QG-2 (§9.10) требует совпадения verifies[].version с текущей версией артефакта.


9.4 Body разделы TC

Body любого TC обязательно содержит следующие разделы (substrate-agnostic):

РазделОбязательностьСодержание
КонтекстmandatoryНа какой пункт верифицируемого артефакта ссылается TC; цитата или paraphrase утверждения.
ПредусловияmandatoryСостояние системы и данных, требуемое для прогона; обеспечивается seed-механизмом.
ШагиmandatoryДействия runner’а; для tc-type: ux — намерения, не селекторы (см. §9.6.1).
Pass-критерийmandatoryБинарный, наблюдаемый, воспроизводимый (см. §9.11).
Fail-критерийmandatoryПеречень наблюдаемых признаков нарушения (не отрицание Pass); включает утечки, side-effects, race conditions.
ПостусловияmandatoryКакое состояние ожидается после прогона; cleanup-механизм.
Out of scopemandatoryЧто намеренно не проверяется, с указанием парного TC, где это покрыто.
Связанные TCoptionalСсылки на семантически связанные TC.

Раздел «Out of scope» — нормативно обязательный: защищает от ложного ощущения покрытия. Отсутствие раздела блокирует переход TC в ready.


9.5 Закрытый список типов TC

tc-type ∈ { acceptance, ux, system, contract, eval, security }
ТипЧто проверяетПрименяется кRunner-семейство
acceptanceДостигнута ли бизнес-цель?BRE2E + AI-валидатор
uxСоответствует ли UX заявленному опыту?SPEC-UIAI-driver + VLM-judge
systemВедёт ли система себя как описано?SR, SPEC-PROC, SPEC-ARCHxUnit-семейство
contractСоблюдён ли контракт?SPEC-API, SPEC-INT, SPEC-DATAContract-testing framework
evalДостигнуто ли качество AI-компонент?SPEC-AIEval-runner с baseline dataset
securityСоблюдены ли security-инварианты?SPEC-SECAuthz/threat-test framework

Список закрыт. Новые типы добавляются только через formal change procedure стандарта (глава 14). Конкретные технологии runner’ов — substrate-specific и фиксируются в conformance manifest реализации.


9.6 Type-specific extensions

9.6.1 tc-type: ux — UX тесты на основе SPEC-UI

UX-тест нормативно построен как двухслойная структура:

СлойСодержаниеИсполнитель
Сценарий (намерение)«<актор> хочет <результат> после <условие>»AI-driver: переводит намерение в действия, находит элементы по семантике (без жёстких селекторов)
Перцептивная проверка«На отрисованном состоянии видно <критерий>»Perceptual judge (VLM): принимает рендер + критерий, возвращает pass/fail с обоснованием

Mandatory frontmatter extension: judge.vendor, judge.model, baseline.artifact, baseline.perceptual-diff-threshold.

Mandatory body sections дополнительно к §9.4: Сценарий (намерение, не селекторы); Perceptual критерий (что должен увидеть judge); Парный негативный (пустое состояние / ошибка / отсутствие прав).

Регрессия по визуалу. Дополнительно к VLM-judge — perceptual diff против baseline.artifact с порогом perceptual-diff-threshold. Превышение порога блокирует переход TC в passing.

Обновление baseline. Изменение baseline.artifact требует substrate-нативного approval-механизма с тегом [baseline-update] (см. §9.13); автоматическое обновление запрещено.

9.6.2 tc-type: eval — Eval-тесты на основе SPEC-AI

Eval-тест нормативно проверяет качество AI-компонент через dataset с метриками и порогами.

Mandatory frontmatter extension: judge.vendor, judge.model, baseline.artifact (versionable dataset), baseline.metric-thresholds.

Mandatory body sections: dataset provenance (как собран, какая разметка); метрика-кластер (одна eval-TC = одна семантически связная группа метрик; разные семейства — разные TC); regression rule (что считается провалом — выход за threshold или регрессия ≥ N% против baseline).

Judge ≠ production isolation (нормативно). Поле judge.vendor + judge.model обязано отличаться от production-model спецификации SPEC-AI, нормирующей оцениваемое поведение. Substrate-нативный hook (глава 11 §11.3.3) обязан блокировать merge change unit при совпадении.

Dataset versioning. Eval-dataset — substrate-managed versionable artifact: каждое изменение фиксируется как atomic change unit с описанием (что добавлено / убрано / переразмечено) и authorship (генератор-агент / критик-агент / human spot-check).

Cost gating. Eval не запускается на каждое изменение реализации (cost): runner запускается при изменении SPEC-AI, production-model, или dataset, либо по расписанию. Триггеры фиксируются в substrate-native runner-configuration.

Двухступенчатая разметка dataset. Generator-agent создаёт кандидатов; critic-agent проверяет по чек-листу; engineer spot-check ≥ 10% случайных примеров до merge dataset.

9.6.3 tc-type: contract — Контрактные тесты на основе SPEC-API / SPEC-INT / SPEC-DATA

Mandatory body sections: machine-readable контракт (ссылка на OpenAPI / GraphQL SDL / Protobuf / JSON Schema из SPEC); сторона генератор / сторона потребитель; мок counterparty (для SPEC-INT — sandbox / реальная среда отдельным TC).

Mandatory extension для SPEC-INT. Контрактные TC обязательно сочетаются с интеграционным TC (tc-type: contract, level: subsystem | system) против реальной или sandbox-counterparty — мокированного контракта недостаточно для verify SPEC-INT.

9.6.4 tc-type: security — Security-тесты на основе SPEC-SEC

Mandatory body sections: атрибуты модели угроз (STRIDE-категория или эквивалент); subject под тестом (authn / authz / data classification / secrets / audit / encryption); negative scenarios (попытка обхода, неавторизованный доступ, leakage); ожидаемое поведение системы при нарушении.

Security-TC нормативно содержит только negative scenarios (попытка обхода защиты). Positive «дать корректный доступ корректному актору» покрывается tc-type: system со scope SPEC-SEC.


9.7 Pos/neg pairing — нормативное требование

На каждое утверждение требования (BR / SR / SPEC), описывающее наблюдаемое поведение, создаётся минимум одна пара positive + negative TC.

Положительный TCПарный отрицательный TC
negative: falsenegative: true
Описывает happy path / success behaviorОписывает граничные условия, нарушения, обходы
paired-with: [TC-<neg-id>]paired-with: [TC-<pos-id>]

Negative TC нормативно описывает наблюдаемые признаки нарушения (что не должно произойти), а не отрицание Pass-критерия позитивного TC. Примеры:

УтверждениеPos TCNeg TC
«Аутентификация по email + password»Корректные credentials → 200 + JWTНеверный пароль → 401 без раскрытия, какое поле неверно; отсутствие записи в session-store; rate-limit после N попыток
«Создание заказа»Валидный payload → 201 + order-idНевалидный price < 0 → 422 с явной ошибкой; отсутствие записи в БД; отсутствие side-effect (уведомление, начисление)

QG-2 (§9.10) обязан блокировать promote артефакта в verified, если хотя бы одно нормативное утверждение покрыто только положительным TC.

Single-TC-coverage допускается только в одном случае: артефакт описывает запрет / negative invariant сам по себе (например, security-TC по STRIDE-категории — он негативный по природе).


9.8 Spec-specific TC — обязательные виды по типу SPEC

Закрытая нормативная таблица: каждый тип SPEC обязан иметь минимум по одному TC каждого «обязательного вида» перед переходом в verified (глава 08 §8.8).

Тип SPECОбязательные виды TCДополнительные виды TC
SPEC-ARCHConformance (zoning / dependency rules)Quality attribute baseline (latency / throughput / availability)
SPEC-APIContract (по контракту из contract-file)Auth negative; rate-limit; versioning compatibility
SPEC-DATAConstraint (FK / NOT NULL / unique); Migration (forward + rollback)PII handling; retention; index regression
SPEC-INTContract (mocked counterparty); INT-TC (real / sandbox counterparty)Failure injection; idempotency; observability (correlation IDs)
SPEC-PROCHappy path E2E; Alternative paths E2ECompensation (для saga); SLA end-to-end
SPEC-UIVLM-judge с baseline (judge ≠ production); Accessibility (WCAG-AA минимум)i18n (string overflow / RTL); Journey E2E
SPEC-AIEval против baseline dataset (judge isolated)Adversarial (prompt injection как negative TC); Cost regression; Hallucination tests
SPEC-SECAuthz / RBAC matrix; Threat-test per STRIDE-категорииAudit log; Secrets leakage; Encryption invariants
SPEC-OPSSmoke after deploy; SLO regression (load test)Failover / DR drill; Observability (alert firing correctness)

Substrate-нативный hook promote SPEC → verified (глава 11 §11.3.3) обязан проверять наличие минимум по одному TC каждого обязательного вида и блокировать переход при отсутствии.

Таблица закрыта на v1.0. Расширение — только через formal change procedure (глава 14).


9.9 Lifecycle TC

9.9.1 State machine

draft  ──[QG-0 approval]──▶  ready  ──[runner pass]──▶  passing
                                │                          │
                                │   [runner fail]          │
                                └─────────────────────▶  failing

            [delta-ТЗ invalidation;                        │
             see §9.16]                                    │
                  ┌────────────────────────────────────────┘

              obsolete
СтатусСмыслТриггер перехода
draftСоздан, реализация в работеСоздание AI-агентом
readyРеализация валидна; dry-run runner прошёл; pos/neg парность подтвержденаQG-0 (§9.10): one-click approval
passingПоследний прогон last-run.result = pass на текущей requirement-versionBot-managed по факту прогона
failingПоследний прогон last-run.result = failBot-managed по факту прогона
obsoleteТерминальный; покрываемое поведение больше не существуетDelta-ТЗ инвалидация (§9.16) или deprecation родительского артефакта

obsolete — терминальный статус: TC в obsolete не удаляется, остаётся как исторический след (immutable IDs, V1; см. глава 11 §11.3.1).

9.9.2 Связь со статусом верифицируемого артефакта

Перевод BR / SR / SPEC в verified нормативно требует: все TC из verified-by верифицируемого артефакта имеют last-run.result = pass и last-run.requirement-version совпадает с текущей версией артефакта (см. §9.10 QG-2).


9.10 Quality Gates для TC

Канонические определения Quality Gates — в главе 10 §10.3. Эта секция — TC-локальная сводка gates, применимых к TC напрямую (QG-0, QG-1) или использующих TC как evidence (QG-2). Нумерация и семантика обязаны совпадать с канонической §10.3; project-local переопределение запрещено (§10.10.2).

Gate (canonical)Роль TCPre-condition (краткая; полная — в ch10)Post-condition
QG-0 — Approval (§10.3.1)TC (draft → ready) — approval-частьCitation на verifies[] — артефакт существует в substrate в состоянии не ниже approved; общие pre-conditions §10.3.1; actor approval зафиксирован substrate-нативно (V3 + V6)TC разрешается к проверке QG-1
QG-1 — Implementation (§10.3.2)TC (draft → ready) — implementation-частьautomation.status = automated (или manual-pending с дедлайном + reason); pos/neg парность (§9.7); dry-run runner прошёл; обязательные секции body TC (§9.4) заполненыTC переходит в ready; runner допускается к production-прогону
QG-2 — Verification (§10.3.3)Артефакт (BR / SR / SPEC / TR) → verified / → done; TC участвует как evidenceВсе TC из verified-by верифицируемого артефакта в статусе passing; pos/neg парность для каждого нормативного утверждения; spec-specific обязательные виды TC (§9.8) присутствуют; last-run.requirement-version совпадает с текущей version артефактаВерифицируемый артефакт переходит в verified (TR — в done); TC остаётся passing

Substrate-native one-click promote draft → ready атомарно проверяет pre-conditions обоих QG-0 и QG-1 как единый bundle (см. §10.3.2 «Триггер») — диаграмма §9.9.1 показывает агрегированный gate-passage как «QG-0 approval».

Проверка совпадения last-run.requirement-version с текущей version верифицируемого артефакта при каждом последующем прогоне TC — runner-managed consistency check (§10.9.3), не отдельный Quality Gate в смысле §10.2.1. При mismatch substrate автоматически переводит TC в failing до повторного прогона на актуальной версии артефакта; record в audit-trail (§10.13) фиксируется типом runner-fail, не gate-passage.

Substrate-нативные hooks (глава 11 §11.3) обязаны блокировать gate-переходы, нарушающие pre-condition.


9.11 Pass / Fail / Out of scope — нормативные критерии

9.11.1 Pass-критерий

Pass-критерий обязан быть:

  • Бинарным — да или нет, без интерпретации.
  • Наблюдаемым — фиксируется без доступа к внутренним структурам системы.
  • Воспроизводимым — повторный прогон в тех же условиях даёт тот же результат.
ПлохоХорошо
«Логин работает корректно»«POST /auth/login с верными credentials возвращает 200 и JWT с exp = now + 24h ± 1м»
«Производительность приемлемая»«p95 latency < 200 мс при 100 RPS на /search в течение 5 минут»
«Ошибка обрабатывается»«При невалидном email возвращается 422 с телом {"field":"email","code":"invalid_format"}»

9.11.2 Fail-критерий

Fail-критерий — не отрицание Pass. Перечисляет наблюдаемые признаки нарушения, в том числе те, которые Pass-критерий явно не покрывает:

  • Какой ответ / состояние / событие признаётся отказом.
  • Утечки информации (например, в 401 не должно быть указано, какое именно поле credentials неверно).
  • Side-effects, которых не должно быть — запись в лог, отправка письма, мутация других записей.
  • Race conditions: одновременные запросы не приводят к нарушению инвариантов.

9.11.3 Out of scope

Каждый TC обязательно содержит секцию «Out of scope» с явным перечислением:

  • Что намеренно не проверяется этим TC;
  • Где это покрыто (ссылка на парный TC или другой TC).

Раздел защищает от ложного ощущения покрытия (см. также глава 12 — coverage matrix). Отсутствие явного «Out of scope» нормативно блокирует QG-0 (§9.10).


9.12 last-run — bot-managed only

Поле last-run (date / result / runner-id / run-ref / requirement-version / judge-report) заполняется только автоматическим runner’ом (CI-bot / AI-runner / specialized executor). Ручное редактирование last-run любым человеком — нарушение стандарта; substrate-нативный hook (глава 11 §11.3.6) обязан блокировать change unit, изменяющий last-run от non-bot author.

Состав last-run:

ПолеMandatoryСодержание
dateдаISO-datetime прогона
resultдаpass | fail | skipped | n/a
runner-idдаИдентификатор runner’а + версия
run-refдаSubstrate-native pointer на полный лог прогона
requirement-versionдаВерсия верифицируемого артефакта на момент прогона (V5 pinning)
judge-reportда для ux | evalInline или pointer на отчёт VLM/eval-judge

9.13 Защита от подгонки тестов

9.13.1 Нормативное правило

AI-агент не может одновременно изменить implementation-код и Pass / Fail-критерии существующего TC в одном change unit так, чтобы failing TC становился passing, без явного approval инженером на изменение TC.

Без этого правила AI-агент имеет тривиальный путь к зелёному прогону — ослабить критерий вместо исправления кода.

9.13.2 Механизм [test-spec-change]

Класс измененияТегApproval
Изменение Pass / Fail-критериев существующего TC[test-spec-change]Mandatory: явный approval инженером change unit отдельно от любого изменения implementation-кода
Изменение automation.location (перенос реализации без изменения проверяемого поведения)Без отдельного approval
Изменение implementation-кода без правок TCStandard workflow
Обновление baseline.artifact / dataset / mockup-baseline[baseline-update]Mandatory: явный approval инженером
Создание нового TCQG-0 (§9.10)

Substrate-нативная реализация тегов — substrate-specific (см. guide/03, guide/04); нормативное требование — атомарность change unit, явное обозначение класса изменения, и опциональная (но рекомендуемая) изоляция таких изменений в отдельный change unit от изменений implementation-кода.

9.13.3 Аудит

Все change units с тегом [test-spec-change] агрегируются в substrate-нативный audit-feed для архитектора. Цель — отследить паттерн: если AI-агент часто запрашивает изменение критериев, это сигнал о проблеме формулировок исходного требования (глава 07 ADAPT backward finding категории terminology или gap).

9.13.4 Judge isolation (P7) — частный случай защиты

judge.vendor + judge.model обязательно отличается от production-модели верифицируемого SPEC-AI (§9.6.2). Совпадение блокируется substrate-нативным hook’ом.


9.14 Спот-чек инженера

9.14.1 Нормативная процедура

Раз в спринт (или эквивалентный регулярный интервал, фиксируемый в conformance manifest проекта) инженер выполняет спот-чек 5 случайных TC в статусе passing. Цель — поймать ситуацию, когда AI-агент сгенерировал «зелёный» TC, который ничего значимого не проверяет (assert True-эквивалент; VLM-prompt, проходящий на пустом экране; eval-критерий, всегда возвращающий pass на baseline).

9.14.2 Sampling

ПараметрНормативное требование
Размер выборки5 TC (по умолчанию); может быть увеличено в conformance manifest проекта
Распределение по типамРавномерное по tc-type (acceptance / ux / system / contract / eval / security) — каждый тип имеет шанс быть выбранным
СтатусТолько passing
Кто выбираетAI-агент случайным образом (substrate-native randomness; seed фиксируется в audit-feed)

9.14.3 Что инженер проверяет

  1. Соответствует ли Pass / Fail-критерий заявленному поведению в верифицируемом артефакте?
  2. Не слишком ли мягкий критерий VLM-judge или eval-judge?
  3. Реальны ли предусловия (не подменены ли seed’ом, маскирующим bug)?
  4. Покрывает ли Out-of-scope именно то, что должен покрывать парный TC?

9.14.4 Фиксация результата

Результат спот-чека фиксируется substrate-native:

last-spot-check:
  date: "<ISO-date>"
  by: "<engineer-id>"
  sampled-tests: [TC-NN, TC-NN, ...]
  issues-found: integer
  issues:
    - test: "TC-NN"
      issue: "<краткое описание>"

9.14.5 Реакция на находки

При issues-found > 0:

  • Архитектор регистрирует change unit на исправление найденных TC.
  • AI-агент обязан учесть выявленный паттерн в следующих генерациях TC; паттерн добавляется в system prompt агента или в meta-style guide.
  • При повторном обнаружении того же паттерна — эскалация на пересмотр шаблона генерации TC.

9.15 Coverage matrix (auto-generated)

9.15.1 COVERAGE-artifact

COVERAGE.md (substrate-native имя artifact) — auto-generated сводный отчёт покрытия требований и спецификаций тест-кейсами на уровне requirements substrate. Помечается substrate-native флагом auto-generated.

9.15.2 Mandatory метрики

МетрикаЦельДействие при нарушении
coverage-percent (verified / total artifacts)Целевой порог фиксируется в conformance manifestSubstrate-нативный gate блокирует промоушн
approved без verified0 перед промоушнБэклог AI-агента на следующую итерацию
Покрытие парным negative TC100% утвержденийAI-агент создаёт change unit с парным негативом
passing-tests / total-tests100% перед промоушн change unitБлокирует QG-2 (§9.10)
manual-pending overdue0Уведомление архитектору; блокировка затронутых артефактов
Stale (last-run.requirement-version < текущей)0AI-агент перезапускает прогон

9.15.3 Триггеры перегенерации

COVERAGE.md перегенерируется автоматически при:

  • Завершении change unit с изменением артефактов требований / SPEC / TC;
  • Промоушн change unit в основную линию substrate;
  • Каждом успешном прогоне runner’а (обновление last-run);
  • По расписанию (substrate-native scheduler).

9.16 Delta-ТЗ и TC

9.16.1 Impact analysis по тестам

При delta-ТЗ (глава 07 §7.6) AI-агент выполняет impact analysis по TC одновременно с impact analysis по требованиям:

  1. Находит все TC, у которых verifies[].version ниже новой версии верифицируемого артефакта.

  2. Помечает их obsolete-pending: true.

  3. Формирует таблицу затронутых TC в frontmatter delta-ADAPT или связанном change unit:

    TCVerifiesСтарая версияНовая версияДействие
    TC-NNSR-NNv1.1v1.2Update (новый шаг)
    TC-NNSR-NNv1.1v1.2Без изменений (актуален)
    TC-NNBR-NNv1.0deprecatedПеревести в obsolete
  4. Генерирует обновлённые версии TC в том же change unit, что delta-ADAPT.

  5. После прогона обновлённых TC и их перехода в passing — снимает obsolete-pending и обновляет verifies[].version на новую версию артефакта.

9.16.2 Переход TC в obsolete

TC переходит в obsolete (терминально), если:

  • Родительский артефакт (BR / SR / SPEC) переведён в deprecated без замены;
  • Родительский артефакт заменён новым (replaced-by), для которого создан новый набор TC, и старый набор не покрывает поведения нового артефакта;
  • Поведение, покрываемое TC, в новой версии артефакта больше не существует.

obsolete TC immutable и не удаляется (V1; см. глава 11 §11.3.1).


9.17 Storage layout

Тест-кейсы хранятся в подпапке tests/ requirements substrate. Substrate-нативная реализация storage — substrate-specific (см. guide/03 для distributed VCS; guide/04 для document-oriented store).

9.17.1 На уровне системы / подсистемы

[system|subsystem].req/
  br/   sr/   tr/                # глава 06
  specs/                          # глава 08
  adapt/                          # глава 07
  tests/
    acceptance/  TC-NN-*.md
    system/      TC-NN-*.md
    ux/          TC-NN-*.md
    contract/    TC-NN-*.md
    eval/        TC-NN-*.md
    security/    TC-NN-*.md
    baselines/                    # для ux / eval
      <baseline-artifact>.png
      <eval-dataset>.jsonl
  COVERAGE.md                     # auto-generated (см. §9.15)

9.17.2 Implementation в code substrate

Реализация TC (код) живёт в code substrate отдельно от requirements substrate; адресуется полем automation.location (substrate-native pointer). Связь TC↔implementation: 1:1.


9.18 Связь с другими главами

ГлаваСвязь
05 Положение в типологии методологийTC — нижний слой trace chain (Утверждение 1 SoT inversion); pinning требования через verifies[].version (Утверждение 3 substrate versioning)
06 Иерархия требованийTC верифицирует BR / SR; verified-by[] — auto-derived inverse edge на стороне требования
07 ADAPTTC → SR → ADAPT → ТЗ — полная trace chain; backward findings (terminology, gap) питаются паттернами из [test-spec-change] audit (§9.13.3)
08 SpecificationsSpec-specific TC по таблице §9.8; SPEC → verified-by[] auto-derived; type-specific extensions §9.6
10 Lifecycle и QGTC state machine; QG-0 + QG-1 bundle для TC (draft → ready); QG-2 для верифицируемого артефакта требует pos/neg парность и spec-specific виды TC
11 Substrate versioningImmutable IDs (V1); atomic change unit и hooks (V2 + V3); diff & review для [test-spec-change] (V3); версионирование TC без потери истории (V4); pinning verifies[].version (V5); author + timestamp для last-run (V6)
12 Maturity modelRENAR-1: TC обязательно; RENAR-3+: pos/neg pairing 100%, spec-specific TC table обязательно; RENAR-4+: AI-generated + AI-executed
14 ConformanceClosed list типов TC (§9.5) — mandatory clause v1.0; spec-specific TC table (§9.8) — mandatory clause v1.0; pos/neg pairing — mandatory clause v1.0; judge ≠ production isolation — mandatory clause v1.0
reference/02 — schemasПолная machine-readable schema TC frontmatter + type-specific extensions