chore(specs): move clean-repo-enterprise spec from 020 to 023

This commit is contained in:
2026-03-03 19:50:53 +03:00
parent da24fb9253
commit 19898b1570
10 changed files with 1549 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
# UX Reference: Clean Repository Enterprise Preparation
**Feature Branch**: `023-clean-repo-enterprise`
**Created**: 2026-03-03
**Status**: Draft
## 1. User Persona & Context
* **Who is the user?**: Release Manager и инженер сопровождения корпоративной платформы.
* **What is their goal?**: Подготовить и выпустить clean-дистрибутив без тестовых данных и без зависимости от внешнего интернета.
* **Context**: Работа в изолированной сети организации.
* **Interaction Model (explicit)**: Пользовательский интерфейс реализуется как **интерактивный консольный TUI-скрипт на базе `ncurses` (или полностью совместимого аналога)**. Веб-интерфейс для этого сценария не является целевым.
## 2. The "Happy Path" Narrative
Оператор запускает TUI-скрипт и видит главный экран подготовки enterprise clean-релиза. В форме выбирается релиз-кандидат и профиль `enterprise-clean`, затем запускается проверка одной горячей клавишей. На экране в реальном времени обновляются этапы проверки: чистота данных, проверка источников ресурсов и изоляция от внешнего интернета. После завершения пользователь получает итоговый статус `COMPLIANT`, ID отчёта и короткую сводку для передачи в релизный процесс. Весь путь проходится в одном ncurses-экране без переходов во внешние инструменты.
## 3. Interface Mockups
### CLI Interaction (TUI / ncurses)
```bash
$ clean-release-tui
```
```text
┌──────────────────────────────────────────────────────────────────────────────┐
│ Enterprise Clean Release Validator (TUI) │
├──────────────────────────────────────────────────────────────────────────────┤
│ Candidate: [2026.03.03-rc1 ] Profile: [enterprise-clean]│
│ │
│ Checks: │
│ [ ] Data Purity (no test/demo payloads) │
│ [ ] Internal Sources Only (company servers) │
│ [ ] No External Internet Endpoints │
│ [ ] Release Manifest Consistency │
│ │
│ Allowed Internal Sources: │
│ - repo.intra.company.local │
│ - artifacts.intra.company.local │
│ - pypi.intra.company.local │
│ │
│ Status: READY │
├──────────────────────────────────────────────────────────────────────────────┤
│ F5 Run Check F6 Export Report F10 Exit │
└──────────────────────────────────────────────────────────────────────────────┘
```
```text
┌──────────────────────────────────────────────────────────────────────────────┐
│ Check Progress │
├──────────────────────────────────────────────────────────────────────────────┤
│ [1/4] Data Purity................................. PASS │
│ [2/4] Internal Sources Only....................... PASS │
│ [3/4] No External Internet Endpoints.............. PASS │
│ [4/4] Manifest Consistency........................ PASS │
│ │
│ FINAL STATUS: COMPLIANT │
│ Report ID: CCR-2026-03-03-001 │
├──────────────────────────────────────────────────────────────────────────────┤
│ Enter View Details F6 Export Report F10 Exit │
└──────────────────────────────────────────────────────────────────────────────┘
```
### UI Layout & Flow (for TUI screen states)
**Screen/Component**: Main ncurses validation screen
* **Layout**:
* Верхний блок: выбор релиз-кандидата и профиля.
* Средний блок: список проверок и прогресс.
* Нижний блок: журнал сообщений/ошибок и подсказки горячих клавиш.
* **Key Elements**:
* **Candidate Field**: выбор проверяемого релиз-кандидата.
* **Profile Field**: фиксированное значение `enterprise-clean`.
* **Allowed Sources Panel**: видимый список допустимых внутренних серверов.
* **Violations Table (details mode)**: нарушения с категорией, путём и рекомендацией.
* **States**:
* **Default**: готовность к запуску проверки.
* **Running**: поэтапный прогресс проверок.
* **Compliant**: успешное завершение и экспорт отчёта.
* **Blocked**: выпуск заблокирован до устранения нарушений.
## 4. The "Error" Experience
**Philosophy**: Ошибка должна блокировать выпуск и сразу показывать конкретное нарушение и путь исправления в терминах релизного процесса.
### Scenario A: Найдены тестовые/демо-данные
* **User Action**: Нажимает `F5 Run Check`.
* **System Response (TUI)**:
* Итог: `FINAL STATUS: BLOCKED`
* Запись в деталях: `Category=Data Purity`, `Path=<artifact-path>`, `Action=Remove prohibited content`
* **Recovery**: Удалить артефакты, повторно запустить проверку из того же экрана.
### Scenario B: Найден внешний источник ресурсов
* **System Response (TUI)**:
* Итог: `FINAL STATUS: BLOCKED`
* Запись в деталях: `Category=External Source`, `Endpoint=<external-host>`, `Action=Replace with approved internal server`
* **Recovery**: Заменить источник на внутренний из реестра разрешённых, затем повторить проверку.
### Scenario C: Недоступен внутренний сервер ресурсов
* **System Response (TUI)**:
* Этап помечается как `FAILED: Internal source unavailable`
* Итог: `BLOCKED (operational risk)`
* **Recovery**: Восстановить доступность внутреннего сервера и перезапустить проверку (F5).
## 5. Tone & Voice
* **Style**: Операционный, короткий, однозначный.
* **Terminology**:
* Использовать: «enterprise clean-профиль», «релиз-кандидат», «внутренний сервер», «блокировка выпуска».
* Не использовать размытые формулировки вроде «возможно» или «вероятно».
* В сообщениях о нарушениях указывать: категорию, объект, действие для исправления.