---
type: infra-requirements
work_item_id: ET-005
title: "Инфраструктурные требования — ET-005: Переключение единиц измерения (км/мили)"
version: 1
status: approved
created_at: 2026-05-21
authors:
  - "agent:architect"
---

# Инфраструктурные требования — ET-005

## 1. Резюме

ET-005 — изменение **исключительно фронтенда** (`src/web/index.html`,
`src/web/app.js`, `src/web/app.css` и новый файл `src/web/units.js`).
Новой инфраструктуры не требуется. Документ зафиксирован для полноты
work-item и явно подтверждает отсутствие инфра-воздействия (см.
`06-adr/adr-0001-unit-toggle-client-side.md`).

## 2. Контейнеры и сервисы

| Аспект | Требование |
|--------|------------|
| Новые контейнеры | Нет |
| Изменения существующих сервисов (api, osrm, nginx) | Нет |
| Изменения `docker-compose.yml` | Нет |
| Изменения `Dockerfile` | Нет — `units.js` это статика, попадает в образ тем же путём, что и `app.js` |

## 3. Сеть

| Аспект | Требование |
|--------|------------|
| Новые порты | Нет |
| Изменения reverse proxy (nginx, `/enduro/`) | Нет |
| Новые внешние домены / DNS | Нет |
| Исходящие сетевые вызовы из фронтенда | Нет (конвертация и хранение — локальные) |

## 4. Хранилища данных

| Аспект | Требование |
|--------|------------|
| Изменения схемы SQLite/Spatialite | Нет |
| Миграции БД (`migrations/`) | Нет |
| Серверное хранилище состояния | Нет |
| Клиентское хранилище | `localStorage`, ключ `distance_unit` (`'km'`/`'mi'`), ≈ 2 байта полезной нагрузки на браузер |

Подробности по данным — `08-data-requirements.md`.

## 5. Конфигурация и секреты

| Аспект | Требование |
|--------|------------|
| Новые переменные окружения | Нет |
| Новые секреты | Нет |
| Изменения конфигурации FastAPI / uvicorn | Нет |

## 6. Зависимости

| Аспект | Требование |
|--------|------------|
| Новые npm/Python пакеты | Нет |
| Новые внешние сервисы | Нет |
| Новые CDN-скрипты | Нет — `units.js` это локальный файл проекта, не внешний CDN |
| Версия MapLibre GL JS | Без изменений |

## 7. Сборка и деплой

- **Pipeline:** существующий Gitea Actions без изменений (`lint`, `test`,
  `build`).
- **Артефакт:** статические ассеты фронтенда (`src/web/`), включая новый
  `units.js`. Деплой — штатная пересборка/перевыкладка и
  `docker compose up -d` на mva154.
- **Порядок подключения скриптов:** `units.js` должен подключаться в
  `index.html` **строго перед** `app.js` (см. ADR-0001, риск R7 в
  `10-tech-risks.md`). Контрольная точка для review.
- **Простой (downtime):** нет — изменение только в статике фронтенда.
- **План отката:** обратный коммит (revert) и повторный деплой;
  миграций/серверного состояния, требующих отдельного отката, нет.
  `localStorage`-ключ `distance_unit` у пользователей при откате
  безвреден (игнорируется старым кодом).

## 8. Ресурсы (CPU / RAM / диск)

Воздействие отсутствует. Конвертация расстояний — несколько
арифметических операций в браузере клиента; тайлы и маршруты не
перезапрашиваются. Размер `units.js` пренебрежимо мал (единицы КБ).

## 9. Наблюдаемость

Новые метрики, логи и алерты не требуются. Поведение проверяется
unit-тестами модуля `units.js` и e2e-тестами фронтенда согласно
`04-test-plan.yaml` (TP-01…TP-05).

## 10. Влияние на C4

Состав компонентов системы **не меняется** — добавляется лишь файл
внутри уже существующего компонента «Frontend». Обновление
`docs/architecture/c4-*.mmd` не требуется (диаграммы C4 в репозитории
на данный момент отсутствуют — только `docs/architecture/README.md`).

## 11. Вывод

Инфраструктурных, сетевых, конфигурационных изменений и изменений БД
**нет**. ET-005 безопасен для деплоя в рамках обычного релизного цикла
фронтенда. Эскалация `arch:major-change` не требуется.
