# 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-профиль», «релиз-кандидат», «внутренний сервер», «блокировка выпуска».
  * Не использовать размытые формулировки вроде «возможно» или «вероятно».
  * В сообщениях о нарушениях указывать: категорию, объект, действие для исправления.