09. Библиотека примеров¶
Восемь сценариев (E1–E8): шесть примеров in-doc (E3–E8) + два walkthrough (E1–E2). Каждый in-doc пример проходит цепочку ТЗ → ADAPT → BR/SR → SPEC → TC → QG целиком или частично.
| # | Сценарий | Документ | Аудитория | Акцент |
|---|---|---|---|---|
| E1 | Email/password sign-up (минимальный) | 00-quickstart | Новичок | 30 мин, минимум артефактов |
| E2 | Login + profile + permissions (полный) | 01-walkthrough | Tech Lead, QA | Полный lifecycle, AI-генерация TC |
| E3 | Экспорт персональных данных (GDPR / ФЗ-152) | §2 | Legal, PM, Architect | Compliance, SPEC-DATA/SEC |
| E4 | Webhook idempotency (REST API) | §3 | Backend, Architect | tc-type: contract, SPEC-API |
| E5 | RAG-ассистент (SPEC-AI eval) | §4 | AI engineer | tc-type: eval, judge isolation |
| E6 | Delta-ТЗ: scope dispute | §5 | PM, Client, Architect | ADAPT backward, неизменяемое ТЗ |
| E7 | Подсистема как самостоятельный продукт | §6 | Architect | Ребро implements[], §6.8.2 |
| E8 | Интерфейсная часть E3: пример до конца | §7 | UI/UX, Architect, QA | Заполненные тела SR / SPEC-UI / ux-TC |
2. E3 — Экспорт персональных данных (GDPR Art. 15 / ФЗ-152)¶
Контекст: SaaS «AcmeCRM» хранит PII клиентов. Регулятор и договор обязывают выдать машиночитаемый экспорт по запросу субъекта данных за ≤30 дней.
2.1 Фрагмент ТЗ (immutable)¶
# TZ-2026-002 — Data subject export
§3.1 Субъект данных может запросить полный экспорт своих PII через UI «Privacy → Export my data».
§4.2 Формат: JSON + CSV bundle, zip, checksum SHA-256.
§4.3 SLA: готовность ссылки на скачивание ≤ 72 часа с момента verified identity.
§4.4 Экспорт включает: profile, activity log 24 мес., marketing consents.
§4.5 Запрос логируется; повторный экспорт — не чаще 1 раза в 30 дней без переопределения администратором.
2.2 ADAPT (сокращённо)¶
id: ADAPT-002
type: ADAPT
status: approved
source-tz: { id: TZ-2026-002, signed-date: "2026-05-01" }
Forward §3: экспорт асинхронный (job queue); identity — через существующий MFA flow.
Backward (resolved):
| # | Finding | Resolution |
|---|---|---|
| B-01 | «24 мес. activity» — calendar или rolling? | Rolling 730 days |
| B-02 | Override admin — кто approves? | Role privacy-officer + журнал аудита |
2.3 BR + SR¶
# br/BR-02-data-subject-export.md
id: BR-02
type: BR
title: "Субъект данных получает машиночитаемый экспорт PII"
source: { adapt: ADAPT-002, adapt-section: "Forward §3" }
compliance:
- { standard: GDPR, control: "Art. 15" }
- { standard: "ФЗ-152", control: "ст.14" }
# sr/SR-08-export-request.md
id: SR-08
type: SR
parent: { id: BR-02 }
title: "Authenticated user инициирует export job"
constrained-by: ["SPEC-API-04", "SPEC-DATA-02", "SPEC-SEC-03"]
# sr/SR-09-export-delivery.md
id: SR-09
type: SR
parent: { id: BR-02 }
title: "User скачивает готовый bundle по time-limited signed URL"
constrained-by: ["SPEC-API-04", "SPEC-SEC-03"]
2.4 SPEC (выдержки)¶
SPEC-DATA-02 — schema export bundle (tables: users, activity_events, marketing_consents).
SPEC-SEC-03 — signed URL TTL 24h; rate limit 1 export / 30 days; role privacy-officer для override.
SPEC-API-04 — POST /v1/privacy/export, GET /v1/privacy/export/{job_id}.
2.5 TC (pos/neg для SR-08)¶
---
id: TC-080
title: "Export job создаётся для verified user"
type: TC
tc-type: system
automation: { status: automated, set-version: "1.0" }
verifies:
- id: SR-08
negative: false
---
## When
POST /v1/privacy/export (session: verified-user)
## Then
- 202 + job_id; status pending; audit event recorded
---
id: TC-081
title: "Export отклонён без MFA-verified session"
type: TC
tc-type: security
automation: { status: automated, set-version: "1.0" }
verifies:
- id: SR-08
negative: true
---
## When
POST /v1/privacy/export (session: password-only, no MFA)
## Then
- 403; job не создан; security audit event
Аналогичные пары для SR-09 (signed URL valid / expired).
2.6 Контрольные точки качества¶
| Контрольная точка | Доказательства |
|---|---|
QG-ADAPT-approve (по смыслу около «архитектурной точки»: QG-3) |
ADAPT-002 в approved, замечания backward закрыты |
| QG-2 Verification Gate | TC-080…081 успешны; в last-run совпадает set-version (1.0) |
2.7 Что дальше¶
- Полный сценарий под
git— 03-tool-guide-git - Compliance mapping — 06-compliance
- Conformance manifest — reference/08
- Интерфейсная часть этого же примера, доведённая до заполненных тел — §7 E8
3. E4 — Webhook idempotency (SPEC-API)¶
Контекст: платёжный провайдер шлёт POST /webhooks/payment с Idempotency-Key. Дубликаты не должны создавать двойное списание.
ТЗ (фрагмент): «Повторный webhook с тем же key в течение 24h возвращает тот же payment_id, HTTP 200».
SR + SPEC:
SPEC-API-07 — контракт: headers, body schema, response codes 200/400/409.
TC (contract pair):
Neg: второй key с другим body → 409 Conflict.
Контрольная точка QG-2: оба TC успешны; в last-run совпадает set-version (1.0).
4. E5 — RAG assistant (SPEC-AI)¶
Контекст: in-app чат отвечает по knowledge base; eval против golden Q&A set.
SPEC-AI-02 — model card, fallback, cost cap.
TC eval (judge ≠ production):
id: TC-300
type: TC
tc-type: eval
verifies: [{ id: SPEC-AI-02 }]
judge:
vendor: "<vendor>"
model: "eval-judge-v2" # ≠ production-модели из SPEC-AI-02 (§9.6.2)
baseline:
artifact: "<golden Q&A dataset>"
metric-thresholds: {}
negative: false
Neg eval: prompt injection в user message → refusal + audit event (tc-type: eval, adversarial negative).
См. standard/09 §9.6.2, guide/07 §3.5.
5. E6 — Delta-ТЗ: scope dispute¶
Контекст: после signed TZ клиент просит «добавить экспорт в PDF» — вне scope ADAPT-002.
Правильный путь к источнику истины (SoT):
- Не править неизменяемое ТЗ и не молча расширять SR.
- Оформить delta-ТЗ; состязательный рецензент проводит обзор и выносит вердикт (§7.6.1). При вердикте «findings present» создаётся delta-ADAPT
ADAPT-002-delta-1(forward + backward); при «no findings» delta-ADAPT не создаётся, а производные артефакты ссылаются наsource.tz-sectiondelta-ТЗ. - Backward finding: «PDF export не входил в Forward §3 ADAPT-002».
- Решение клиента по находке оформляется ACTZ — протоколом уточнения ТЗ с двусторонней подписью (standard/07 §7.13); находка получает
decided-in: ACTZ-003 §1. - Delta-ADAPT утверждается подписью архитектора (§7.5) → новые SR/SPEC/TC. Итоговое ТЗ пересчитывается, AT перегенерируются от новой редакции.
Anti-pattern: direct commit в sr/SR-08 без delta-ref — drift class 4.11.6 (standard/04 §4.11).
См. standard/07 §7.6, guide/02-transition-guide.
6. E7 — Подсистема как самостоятельный продукт (implements-edge)¶
Контекст: платформа acme (система) состоит из подсистемы acme.notify — отдельный продукт с собственным бизнес-владельцем (Notify Lead), отдельной командой, отдельным releases-циклом. Сценарий §6.8.2 RENAR Standard.
6.1 Иерархия артефактов¶
acme (система)
├── BR-01 (приём заказов с AI-консультацией) level: system
├── BR-05 (мониторинг и алерты для операционной службы) level: system
└── acme.notify (подсистема, самостоятельный продукт)
└── BR-01 (доставка уведомлений по multichannel) level: subsystem
implements:
- id: BR-01 (раскрывает «приём заказов»: уведомления при изменениях статуса)
scope: { system: acme }
- id: BR-05 (раскрывает «мониторинг»: уведомления о SLA-нарушениях)
scope: { system: acme }
↓
SR-01..SR-12 (notify-внутренние требования)
SPEC-INT-01 (интеграция с acme через message bus)
SPEC-API-01 (REST API для notify-клиентов)
acme.notify.BR-01 — корневой узел своего дерева требований (parent отсутствует, как и у любого BR). Связь с системой выражена типизированным ребром implements[], не parent-edge.
6.2 frontmatter acme.notify/br/BR-01-multichannel-delivery.md (фрагмент)¶
---
id: BR-01
title: "Доставка уведомлений по multichannel"
type: BR
level: subsystem
scope:
system: acme
subsystem: acme.notify
owner: "Notify Lead (notify-side); Architect (acme-side)"
source:
adapt: ADAPT-NOTIFY-001
adapt-section: "Forward §2"
tz-section: "ТЗ-NOTIFY §3"
# === implements-edge §6.8.2 ===
implements:
- id: BR-01
scope:
system: acme
rationale: "ADAPT-NOTIFY-001 §2.1 — уведомления при изменении статуса заказа"
- id: BR-05
scope:
system: acme
rationale: "ADAPT-NOTIFY-001 §2.4 — алерты SLA для operations"
business-context:
stakeholder: "Notify Lead"
business-goal: "Своевременная доставка уведомлений end-customer и operations team"
---
# BR-01: Доставка уведомлений по multichannel
Notify-подсистема доставляет уведомления …
6.3 Машиночитаемая trace chain¶
TC-NOTIFY-15
→ verifies SR-NOTIFY-08 (rate-limit для email канала)
├─ parent: acme.notify.BR-01 v1.2
│ └─ implements: acme.BR-01 v3.0, acme.BR-05 v1.4
│ (типизированное межуровневое ребро)
├─ source.adapt: ADAPT-NOTIFY-001 §Forward §2.2
└─ constrained-by: SPEC-API-01, SPEC-OPS-01 (scope: acme.notify)
При аудите от TC-NOTIFY-15 восстанавливается полная цепочка: SR → BR подсистемы → BR системы. До v1.0 (без implements-edge) цепочка обрывалась на acme.notify.BR-01 и продолжалась только через текст раздела «Контекст».
6.4 Гейты на стороне носителя¶
При попытке approve acme.notify.BR-01 нативный для носителя hook проверяет (см. standard/10 §10.11.1):
acme.BR-01иacme.BR-05существуют в носителе поid + scope.system.- Оба target BR входят в утверждённую версию комплекта своей системы.
- Цепочка
acme.notify.BR-01 → acme.BR-01 → …не образует цикла. acme.notify.BR-01.level = subsystem(правило:implements[]не применяется наlevel: system).
Если любая проверка проваливается — approve блокируется. Поведение при acme.BR-01 = deprecated: warning, не fatal (Architect решает: обновить implements на актуальный BR или отметить acme.notify.BR-01 как требующий пересмотра).
6.5 Эволюция «модуль → подсистема» через implements¶
Когда модуль приобретает бизнес-владельца (standard/06 §6.9.1):
- Бизнес-владелец фиксируется через backward finding ADAPT (категория
scope). - После approved delta-ADAPT — модуль повышается до подсистемы; создаётся BR подсистемы.
- Новый шаг (v1.0+): BR подсистемы декларирует
implements[]на applicable BR системы. Без этого шага сценарий §6.8.2 несёт несовместимое с v1.1 conformance отсутствие traceability.
Anti-pattern: создать acme.notify.BR-01 с level: subsystem, но без implements[] — формально допустимо на v1.0 (recommended), но non-conformant на v1.1+. Если родительская система имеет approved BR, отсутствие implements[] обязано быть явно обосновано в разделе «Контекст» BR со ссылкой на ADAPT§.
См. standard/06 §6.5.2, §6.8.2, §6.10.3, standard/13 §13.3.8.
7. E8 — Интерфейсная часть E3: пример, доведённый до конца¶
Информативный раздел. Пример не является нормативным текстом и не создаёт обязательств. При расхождении с главами стандарта верны главы. Нормативные требования, которым пример следует, названы в каждом подразделе ссылкой.
Зачем он здесь. Остальные примеры библиотеки останавливаются на frontmatter и выдержках: они показывают оболочку артефакта — идентификаторы, статусы, рёбра графа. Но агент, выводящий реализацию, читает не оболочку, а утверждение. E8 продолжает E3 (§2) интерфейсной частью и доводит до конца три тела, которых в корпусе не было ни одного: тело SR (standard/06 §6.6.3), тело SPEC-UI (standard/08 §8.5.6) и пару ux-TC (standard/09 §9.6.1).
Что именно он доказывает — и чего не доказывает. Границу лучше провести сразу, до чтения. Пример проверяет форму обязательного тела: что разделы §8.4.1 и §8.5.6 заполняются осмысленно, что требование «покрыть каждое доступное через интерфейс действие» операционализуемо, что ux-TC пишется по §9.6.1 без изобретения полей. Пример не проверяет объём: в нём три экрана, и на трёх экранах вывод «требование всех экранов подъёмно на реальной системе» заработать нельзя.
7.1 Граница «всех экранов» проходит по Scope спецификации¶
Одна частность §8.5.6 обнаруживается только при попытке написать тело, и её стоит назвать до примера.
Формулировка обязательного тела SPEC-UI требует описать «все экраны системы». Буквально прочитанная, она означала бы, что один SPEC-UI обязан описать интерфейс всей системы целиком — от входа до администрирования. Так она не работает и так не задумана: границу описываемого проводит раздел Scope того же обязательного тела (standard/08 §8.4.1, пункт 2), а «все экраны» означает полноту внутри объявленного Scope, без отбора по значимости.
Обе половины существенны:
- Scope сужать можно — он часть обязательного тела и объявляется явно, поэтому не попавшее в него не теряется молча, а видно как граница.
- Внутри Scope отбирать нельзя — именно это запрещает положение «Полнота охвата» §8.4.1: не «опишите важные экраны выгрузки», а «опишите все экраны выгрузки».
Ниже Scope объявлен интерфейсом выгрузки персональных данных; экранов в нём три, и описаны все три.
Полнота по системе — перечень экранов. Scope и §8.4.1 дают полноту внутри документа; что сумма всех SPEC-UI покрывает интерфейс целиком, обеспечивают перечень экранов в обязательном теле SPEC-ARCH-01 системы E3 и правило покрытия (standard/08 §8.5.6.1). В §2.4 SPEC-ARCH-01 не приводился; здесь — та часть его перечня, которая касается раздела «Приватность»:
| Код | Экран | Источник | Покрывающий SPEC-UI |
|---|---|---|---|
| Э-01 | Запрос выгрузки | SR-10 |
SPEC-UI-02 |
| Э-02 | Выгрузка готовится | SR-10 |
SPEC-UI-02 |
| Э-03 | Запрос отклонён | SR-10 |
SPEC-UI-02 |
| Э-04 | Подтверждение личности вторым фактором | SR-08 |
SPEC-UI-01 |
| Э-05 | Выдача переопределения (роль privacy-officer) |
SPEC-ARCH-01, контейнер «Кабинет privacy-officer» |
— |
Последняя колонка — не часть перечня, а итог проверки при утверждении версии комплекта: перечень ведёт SPEC-ARCH, покрытие объявляет каждый SPEC-UI в screens[]. Э-05 в перечне есть, а SPEC-UI на него нет — версия комплекта с таким перечнем не утверждается (standard/10 §10.7.2), пока экран не описан либо не исключён из перечня решением, видимым в записи версии. Источник перечня — только описание: SR-08 и SR-10 называют экраны, SPEC-ARCH-01 — контейнер кабинета; маршрут, найденный в реализации и отсутствующий в перечне, — дрейф источника истины и обратная находка, а не основание пополнить перечень задним числом.
7.2 SR-10 — заполненное тело (§6.6.3)¶
Продолжает SR-08 из §2.3: тот описывает создание задачи выгрузки со стороны службы, SR-10 — со стороны интерфейса.
# sr/SR-10-export-request-ui.md
id: SR-10
type: SR
parent: { id: BR-02 }
title: "Субъект данных инициирует выгрузку через интерфейс приватности"
source: { adapt: ADAPT-002, adapt-section: "Forward §3", tz-section: "§3.1" }
constrained-by: ["SPEC-UI-02", "SPEC-SEC-03"]
Требование¶
Когда субъект данных подтверждает запрос на экране «Приватность → Выгрузка моих данных», система должна создать задачу выгрузки и перевести пользователя на экран состояния этой задачи.
Форма — событийная (standard/06 §6.6.3.1): маркер условия «когда» стоит первым словом и пишется строчной буквой; модальность «должна» — строчная каноническая. Утверждение одно: создание задачи и переход на экран состояния — единый наблюдаемый исход одного действия, а не два независимых требования.
Поведение¶
Экран запроса доступен субъекту данных в разделе «Приватность» и показывает состав выгрузки до её заказа: профиль, журнал действий за 730 календарных дней и согласия на маркетинговые рассылки (ТЗ §4.4 в §2.1, уточнение B-01 из ADAPT-002).
Пока личность субъекта не подтверждена вторым фактором, система должна держать действие «Заказать выгрузку» недоступным и показывать причину недоступности рядом с ним. Подтверждение выполняется существующим механизмом второго фактора; отдельного механизма для выгрузки не вводится.
Если с момента прошлой выгрузки прошло менее 30 дней и переопределение не выдано, то система должна отказать в заказе. Дата, начиная с которой заказ снова возможен, называется субъекту на экране отказа (ТЗ §4.5 в §2.1).
После создания задачи система показывает состояние подготовки и остаётся на экране состояния до появления ссылки на скачивание либо до истечения срока подготовки в 72 часа (ТЗ §4.3 в §2.1). Доставка готового архива нормируется отдельно — SR-09.
Каждый заказ, каждый отказ и каждое переопределение записываются в журнал аудита (ТЗ §4.5 в §2.1, уточнение B-02).
Ограничения¶
Срок подготовки — не более 72 часов с момента подтверждения личности. Частота — не чаще одного заказа в 30 дней без переопределения. Переопределение выдаёт участник в роли privacy-officer. Полные ограничения — в SPEC-SEC-03.
Связь с SPEC¶
SPEC-UI-02 нормирует интерфейсную часть: состав экранов, покрытие действий, состояния ожидания и отказа, доступность и языковые версии. SPEC-SEC-03 нормирует правило частоты, роль выдающего переопределение и срок жизни ссылки на скачивание.
7.3 Пять форм утверждения на одном материале¶
Standard/06 §6.6.3.1 вводит пять форм. На материале E3 они выглядят так — таблица показывает форму, а не полный текст требований:
| Случай | Утверждение |
|---|---|
| Постоянное | Система должна записывать в журнал аудита каждый заказ выгрузки. |
| По состоянию | Пока личность субъекта не подтверждена вторым фактором, система должна держать действие «Заказать выгрузку» недоступным. |
| Событийное | Когда субъект данных подтверждает запрос, система должна создать задачу выгрузки. |
| Нежелательное поведение | Если с момента прошлой выгрузки прошло менее 30 дней, то система должна отказать в заказе. |
| Опциональная возможность | При наличии выданного переопределения система должна принять заказ раньше 30 дней. |
Три частности формы видны на этих же строках: маркер «при наличии» вместо кальки «где»; обязательное «то» после «если»; одно утверждение в одном предложении — там, где хотелось написать «отказать и назвать дату», отказ и сообщение разделены на два предложения, потому что склеенное утверждение верифицируется неделимо и один TC доказывал бы половину.
7.4 SPEC-UI-02 — заполненное обязательное тело (§8.4.1 + §8.5.6)¶
# specs/ui/SPEC-UI-02-privacy-export.md
id: SPEC-UI-02
type: SPEC
spec-type: SPEC-UI
title: "Интерфейс выгрузки персональных данных"
source: { adapt: ADAPT-002, adapt-section: "Forward §3" }
depends-on: ["SPEC-SEC-03", "SPEC-API-04"]
screens: ["Э-01", "Э-02", "Э-03"] # коды из перечня экранов SPEC-ARCH-01 (§7.1)
ui-platform: web
target-users: [{ role: data-subject, persona: "ADAPT-002 §2.1" }]
design-system: "AcmeCRM Design Kit 4"
accessibility-level: WCAG-AA
i18n: required
mockup-links: [{ tool: figma, url: "<ссылка на макет>", version: "v3" }]
baseline-images:
- "ai-concepts/baselines/SPEC-UI-02-screen-01.png"
- "ai-concepts/baselines/SPEC-UI-02-screen-02.png"
- "ai-concepts/baselines/SPEC-UI-02-screen-03.png"
Назначение¶
Спецификация нормирует интерфейс, которым субъект данных заказывает выгрузку своих персональных данных, наблюдает за её подготовкой и получает отказ с объяснимой причиной. Она даёт агенту, реализующему интерфейс, единственный источник истины о составе экранов и о том, что на них доступно; всё, что здесь не описано, источника истины не имеет и домысливанию не подлежит (standard/02 §2.3.3).
Scope¶
Входит: три экрана раздела «Приватность → Выгрузка моих данных» — запрос выгрузки, состояние подготовки, отказ; все действия, доступные субъекту данных на этих экранах; сквозные элементы этих экранов.
Не входит: экран подтверждения второго фактора (Э-04 перечня: правило — SPEC-SEC-03, экран — SPEC-UI-01; переиспользуется без изменений); интерфейс участника в роли privacy-officer, выдающего переопределение (отдельная спецификация, в E8 не рассматривается); почтовое уведомление о готовности архива (не экран).
Общая структура интерфейса¶
Раздел «Приватность» — вкладка в настройках учётной записи. Выгрузка — один из её пунктов; экраны выгрузки образуют линейную последовательность без ветвлений: запрос → состояние, либо запрос → отказ. Возврат в настройки доступен с любого из трёх экранов. Всплывающих окон в разделе нет: отказ и состояние — полноценные экраны, потому что оба адресуемы ссылкой и оба обязаны переживать перезагрузку страницы.
Экраны¶
Экранов три; описаны все три.
| Код | Экран | Когда показывается |
|---|---|---|
| Э-01 | Запрос выгрузки | Субъект открыл пункт «Выгрузка моих данных»; активной задачи нет |
| Э-02 | Выгрузка готовится | Задача создана и не завершена, либо завершена и ссылка ещё жива |
| Э-03 | Запрос отклонён | Заказ отклонён правилом частоты или неподтверждённой личностью |
Э-01 «Запрос выгрузки». Содержит: заголовок раздела; перечень того, что войдёт в архив, — профиль, журнал действий за 730 дней, согласия на рассылки; строку о сроке подготовки до 72 часов; строку о частоте не чаще раза в 30 дней; отметку о подтверждении личности с текущим состоянием; действие «Заказать выгрузку»; действие «Вернуться в настройки».
Э-02 «Выгрузка готовится». Содержит: состояние подготовки словами, без доли выполнения в процентах — доля на стороне интерфейса неизвестна; время создания задачи; предельный срок готовности; действие «Обновить состояние»; действие «Отменить выгрузку»; действие «Вернуться в настройки». После появления ссылки на том же экране появляется действие «Скачать архив» и срок жизни ссылки.
Э-03 «Запрос отклонён». Содержит: причину отказа обычным языком; дату, начиная с которой заказ снова возможен, — для отказа по частоте; действие «Запросить переопределение»; действие «Вернуться в настройки». Для отказа по неподтверждённой личности вместо даты показывается действие «Подтвердить личность».
Пути пользователя и покрытие действий¶
Покрытие проверяется поимённо: каждое действие каждого экрана названо ниже хотя бы раз (standard/08 §8.5.6 — «покрывающие каждое доступное через интерфейс пользовательское действие»).
| Путь | Экраны | Покрытые действия |
|---|---|---|
| П-1. Обычный заказ | Э-01 → Э-02 | Раскрытие перечня состава архива, «Заказать выгрузку», «Обновить состояние», «Скачать архив» |
| П-2. Заказ до подтверждения личности | Э-01 → Э-03 → Э-01 | «Подтвердить личность» |
| П-3. Повторный заказ раньше срока | Э-01 → Э-03 | «Запросить переопределение» |
| П-4. Отказ от начатой выгрузки | Э-02 → Э-01 | «Отменить выгрузку» |
| П-5. Выход из раздела | Э-01, Э-02, Э-03 | «Вернуться в настройки» с каждого из трёх экранов |
Сверка счётом: действий на трёх экранах восемь — раскрытие перечня состава архива, «Заказать выгрузку», «Вернуться в настройки», «Обновить состояние», «Отменить выгрузку», «Скачать архив», «Запросить переопределение», «Подтвердить личность». Все восемь названы в путях П-1…П-5. Непокрытых действий нет.
Сквозные элементы¶
Права доступа. Все три экрана доступны только владельцу учётной записи. Участник в роли privacy-officer этих экранов не видит и заказать выгрузку за субъекта не может; его интерфейс — вне Scope.
Уведомления. Интерфейс не уведомляет о готовности сам: уведомление уходит почтой. На Э-02 это сказано явно, чтобы субъект не держал вкладку открытой.
Состояния ошибки. Отказ по правилам — это Э-03, полноценный экран. Сбой связи и недоступность службы выгрузки показываются на том экране, где произошли, сообщением с действием «Повторить»; они не переводят на Э-03, потому что заказ не отклонён, а не доставлен.
Пустые состояния. У Э-01 пустого состояния нет — перечень состава непуст всегда. На Э-02 пустое состояние невозможно по построению: экран показывается только при существующей задаче.
Тон и стиль¶
Обращение на «вы» со строчной буквы. Причина отказа называется прямо и без извинений: «Выгрузка доступна раз в 30 дней. Следующий заказ — с 12 июня». Служебные слова — «задача», «архив», «журнал действий» — не заменяются техническими: job, bundle, activity log на экранах не появляются.
Доступность¶
Уровень — WCAG-AA. Существенно для этих трёх экранов: смена состояния на Э-02 объявляется программе экранного доступа как живая область, иначе субъект не узнает о готовности архива; причина недоступности действия «Заказать выгрузку» связана с самим действием программно, а не только расположена рядом; отказ на Э-03 не передаётся одним лишь цветом; порядок обхода с клавиатуры совпадает с порядком чтения на всех трёх экранах.
Языковые версии¶
Обязательны русская и английская. Дата возможного повторного заказа выводится в языковом формате, а не одним видом для обеих версий. Длина строки причины отказа не ограничена шириной кнопки: английская формулировка длиннее русской, и экран обязан переносить её, а не обрезать.
Связь с требованиями¶
SR-10 — заказ выгрузки через интерфейс (constrained-by). SR-09 — доставка готового архива, интерфейсная часть которой ограничена действием «Скачать архив» на Э-02. BR-02 — деловое требование, из которого оба выведены.
Связь с другими SPEC¶
SPEC-SEC-03 — правило частоты, роль выдающего переопределение, срок жизни ссылки; интерфейс эти правила показывает, но не определяет. SPEC-API-04 — источник состояний задачи, отображаемых на Э-02.
Verification¶
TC-090 и TC-091 (§7.5). Доступность проверяется отдельными TC типа accessibility, языковые версии — TC типа i18n; в E8 они не развёрнуты.
7.5 Пара ux-TC (§9.6.1)¶
Двухслойная структура §9.6.1: слой намерения исполняет управляющий агент, слой перцептивной проверки — рецензирующая модель. Обязательное расширение frontmatter — judge.vendor, judge.model, baseline.artifact, baseline.perceptual-diff-threshold. Секции тела — по standard/09 §9.4, включая обязательный «Out of scope».
---
id: TC-090
title: "Субъект заказывает выгрузку и видит экран подготовки"
type: TC
tc-type: ux
automation: { status: automated, set-version: "1.0" }
verifies:
- id: SR-10
statement: 1 # SR-10#1 — «Требование», событийная форма
negative: false
judge: { vendor: google, model: "gemini-2.5-pro" }
baseline:
artifact: "ai-concepts/baselines/SPEC-UI-02-screen-02.png"
perceptual-diff-threshold: 0.03
---
Контекст. SR-10, раздел «Требование»: «Когда субъект данных подтверждает запрос … система должна создать задачу выгрузки и перевести пользователя на экран состояния этой задачи». Экран Э-02 по SPEC-UI-02.
Предусловия. Учётная запись субъекта с подтверждённым вторым фактором; активных задач выгрузки нет; прошлая выгрузка была более 30 дней назад. Состояние подготовлено механизмом заполнения данных.
Шаги. Намерение, не селекторы: субъект данных хочет получить архив своих данных после входа в раздел приватности.
Pass-критерий. На отрисованном состоянии виден экран подготовки: состояние названо словами, показаны время создания задачи и предельный срок готовности, доступно действие обновления состояния. Перцептивное расхождение с эталоном не превышает 0.03.
Fail-критерий. Наблюдаемые признаки нарушения: остались на экране запроса; доля выполнения показана в процентах; предельный срок отсутствует либо показан как «неизвестно»; ссылка на скачивание предъявлена до готовности архива; задача создана дважды при одном подтверждении.
Постусловия. Ровно одна задача выгрузки в состоянии подготовки; запись в журнале аудита создана. Задача снимается механизмом очистки после прогона.
Out of scope. Не проверяется доставка готового архива и срок жизни ссылки — покрыто парой TC для SR-09. Не проверяется отказ по правилу частоты — покрыто TC-091. Не проверяется доступность экрана — покрыто TC типа accessibility.
---
id: TC-091
title: "Повторный заказ раньше 30 дней отклонён с названной датой"
type: TC
tc-type: ux
automation: { status: automated, set-version: "1.0" }
verifies:
- id: SR-10
statement: 5 # SR-10#5 — «Поведение», отказ по сроку
negative: true
judge: { vendor: google, model: "gemini-2.5-pro" }
baseline:
artifact: "ai-concepts/baselines/SPEC-UI-02-screen-03.png"
perceptual-diff-threshold: 0.03
---
Контекст. SR-10, раздел «Поведение»: «Если с момента прошлой выгрузки прошло менее 30 дней и переопределение не выдано, то система должна отказать в заказе». Экран Э-03 по SPEC-UI-02.
Предусловия. Учётная запись субъекта с подтверждённым вторым фактором; прошлая выгрузка завершена 5 дней назад; переопределение не выдавалось.
Шаги. Субъект данных хочет заказать выгрузку повторно после недавно полученного архива.
Pass-критерий. На отрисованном состоянии виден экран отказа: причина названа обычным языком, указана дата возможного следующего заказа, доступно действие запроса переопределения. Перцептивное расхождение с эталоном не превышает 0.03.
Fail-критерий. Наблюдаемые признаки нарушения: задача выгрузки создана вопреки правилу; отказ показан без даты следующего заказа либо с датой в прошлом; отказ передан только цветом, без текста; отказ показан всплывающим сообщением вместо экрана; действие запроса переопределения отсутствует; причина изложена служебным текстом сбоя.
Постусловия. Новых задач выгрузки нет; в журнале аудита создана запись об отказе.
Out of scope. Не проверяется выдача переопределения участником в роли privacy-officer — его интерфейс вне Scope SPEC-UI-02. Не проверяется отказ по неподтверждённой личности — отдельный TC той же пары форм.
Эталоны. Оба TC сверяются с эталонными изображениями из baseline-images спецификации. Замена эталона проходит механизм утверждения с отметкой [baseline-update] (standard/09 §9.13); автоматическое обновление запрещено, иначе изменившийся интерфейс сам себя объявит верным.
7.6 SPEC-UC-01 — сценарий использования (§8.5.12)¶
Сценарий сшивает SR-10, SPEC-UI-02 и SPEC-API-01; исполнитель — человек, поэтому каждый шаг покрыт ux-TC, а не system-TC в обход интерфейса (standard/09 §9.8).
---
id: SPEC-UC-01
title: "Заказ выгрузки персональных данных субъектом"
type: SPEC-UC
spec-type: SPEC-UC
level: system
role: human
persona: "ADAPT-003 §Persona: субъект данных"
covers: [SR-10, SPEC-UI-02, SPEC-API-01]
entry: SPEC-UI-02
steps:
- { n: 1, action: "Открывает экран запроса выгрузки", ref: SPEC-UI-02, expects: "Экран Э-01 с формой запроса" }
- { n: 2, action: "Подтверждает запрос", ref: SR-10#1, expects: "Создана задача выгрузки; переход на Э-02" }
- { n: 3, action: "Ожидает подготовки", ref: SPEC-UI-02, expects: "Э-02 показывает состояние задачи" }
- { n: 4, action: "Получает отказ при повторном заказе раньше 30 дней", ref: SR-10#5, expects: "Э-03 с причиной отказа" }
source: { adapt: "ADAPT-003", adapt-section: "Forward §4", tz-section: "§5.2" }
---
## Цель и исполнитель
Субъект данных заказывает выгрузку своих данных и видит состояние задачи.
## Предусловия
Личность подтверждена; предыдущей выгрузки не было либо прошло ≥ 30 дней.
## Основной путь
Шаги 1–3 из frontmatter; каждый ссылается на утверждение `SR-10` или экран `SPEC-UI-02`.
## Альтернативные и негативные ветви
Шаг 4 — отказ по сроку (`SR-10`, «Поведение»); отказ по неподтверждённой личности — вне Scope (см. `SPEC-UI-02`).
## Постусловия
Задача выгрузки существует в состоянии «в подготовке» либо отказ зафиксирован в журнале.
## Покрывающие TC
`TC-090` (шаги 1–3, positive), `TC-091` (шаг 4, negative); оба `tc-type: ux`.
Шаг без ref — нарушение структурной полноты (§8.5.12.1): версия комплекта с таким сценарием не утверждается.
7.7 Что этот пример не доказывает¶
Отмечено явно, чтобы пример не читался как больше, чем он есть.
- Подъёмность «всех экранов» на реальной системе. Экранов три. На трёх экранах проверена форма обязательного тела, а не его объём. Продукт с полусотней экранов даст другую цену, и она этим примером не измерена.
- Пригодность формы утверждения на накопленном описании. Пять форм §6.6.3.1 применены к пяти утверждениям, написанным сразу по форме. Перевод существующего описания в эти формы — другая задача, и модальность правила остаётся рекомендательной именно поэтому (standard/06 §6.6.3.1).
- Машинная проверка покрытия перечня экранов. Таблица §7.1 сведена вручную; статический TC, сверяющий
screens[]всех SPEC-UI с перечнемSPEC-ARCH-01, в примере не написан. - Работоспособность перцептивной проверки.
TC-090иTC-091написаны по §9.6.1, но не прогонялись: эталонных изображений в корпусе нет, и рецензирующая модель к примеру не подключалась. Проверено, что поля §9.6.1 заполняются без изобретения новых, — не более.
Guide RENAR 1.1 — renar.tech