# 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=`, `Action=Remove prohibited content` * **Recovery**: Удалить артефакты, повторно запустить проверку из того же экрана. ### Scenario B: Найден внешний источник ресурсов * **System Response (TUI)**: * Итог: `FINAL STATUS: BLOCKED` * Запись в деталях: `Category=External Source`, `Endpoint=`, `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-профиль», «релиз-кандидат», «внутренний сервер», «блокировка выпуска». * Не использовать размытые формулировки вроде «возможно» или «вероятно». * В сообщениях о нарушениях указывать: категорию, объект, действие для исправления.