# dev-make-workflow Specification ## Purpose Make-интерфейс разработчика: установка Android-клиента на выбранное устройство и обзор доступных целей сборки. ## Requirements ### Requirement: Установка Android-приложения через Make-цель Проект SHALL предоставлять Make-цель `install-android-app`, которая собирает debug-APK Android-клиента и устанавливает его на выбранное устройство. Повторный запуск SHALL переустанавливать приложение без ручного удаления. #### Scenario: Установка на устройство - **WHEN** цель запущена и устройство выбрано - **THEN** собирается debug-APK и устанавливается на это устройство #### Scenario: Повторная установка - **WHEN** приложение уже установлено и цель запущена снова - **THEN** установка завершается успешно без ручного удаления приложения ### Requirement: Выбор устройства для установки Цель установки SHALL брать устройство из явно заданного серийного номера, а при его отсутствии — из единственного подключённого устройства. Если подключено несколько устройств и серийный номер не задан, цель SHALL напечатать список устройств и SHALL не выполнять установку. #### Scenario: Серийный номер задан - **WHEN** задан серийный номер устройства - **THEN** приложение устанавливается именно на это устройство #### Scenario: Единственное устройство - **WHEN** серийный номер не задан и подключено ровно одно устройство - **THEN** приложение устанавливается на него #### Scenario: Несколько устройств без выбора - **WHEN** серийный номер не задан и подключено несколько устройств - **THEN** цель печатает список устройств, не выполняет установку и завершается ненулевым кодом #### Scenario: Нет устройств - **WHEN** не подключено ни одного устройства - **THEN** цель сообщает об ошибке и завершается ненулевым кодом ### Requirement: Обзор доступных Make-целей Голый `make` (без цели) SHALL печатать список доступных целей и SHALL не запускать сборку. Любая цель, включая сборку фронтенда, SHALL оставаться доступной по явному имени. #### Scenario: Голый make - **WHEN** `make` запущен без цели - **THEN** печатается список доступных целей, сборка не запускается #### Scenario: Явная цель - **WHEN** `make` запущен с именем цели, например `make frontend` - **THEN** выполняется именно эта цель ### Requirement: Сборка WASM-модуля фильтров Фильтры правок в браузере SHALL считаться WASM-модулем, собираемым из исходников на Rust в каталоге `frontend/wasm/light`. Сборка фронтенда SHALL обновлять модуль перед сборкой статики. Если инструмент сборки модуля недоступен, SHALL использоваться готовый модуль из репозитория, а сборка SHALL NOT прерываться. Готовый модуль SHALL храниться в репозитории, чтобы фронтенд собирался без Rust-инструментов. #### Scenario: Сборка фронтенда с модулем - **WHEN** выполняется сборка фронтенда - **THEN** перед сборкой статики обновляется WASM-модуль фильтров #### Scenario: Нет Rust-инструментов - **WHEN** инструмент сборки модуля недоступен - **THEN** используется готовый модуль из репозитория, а сборка завершается успешно #### Scenario: Готовый модуль в репозитории - **WHEN** репозиторий проверяется на чистоту - **THEN** собранный модуль фильтров присутствует в нём