docs(task): B7 — зафиксировать исправленный дефект мастера и потребовать проверку на несуществующие методы
Добавлен раздел P0-0: правка _finish уже в main (7090c8a), её нельзя
потерять при слиянии. Там же второй дефект того же класса —
splash.py вызывает несуществующий AssetManager.get_splash_logo.
Дефект «вызов несуществующего метода» встречается третий раз и под
pythonw всегда молчаливый, поэтому в критерии приёмки добавлено
требование механической проверки UI-слоя.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
7090c8ae6f
commit
559289d839
1 changed files with 27 additions and 9 deletions
|
|
@ -49,6 +49,22 @@ git checkout main; git reset --hard origin/main
|
|||
|
||||
Каждое проверено по коду. Ниже — что относится к вам; пункты 1 (частично) и 2 уходят в backend отдельным заданием A8.
|
||||
|
||||
## P0-0. Уже исправлено на main — не откатите при слиянии
|
||||
|
||||
Владелец сообщил: «завершить кнопка нажимается, но окно не закрывается». Найдено и исправлено ревьюером в `7090c8a`, файл вашей зоны — `add_account_wizard.py`.
|
||||
|
||||
Причина: `_finish` первой строкой вызывал `EventLogService.get().log_event(...)`. Метода `log_event` у сервиса **нет** — настоящая сигнатура `log(category, message, details=None, level="info")`. `AttributeError` уходил в обработчик Tk, консоли под `pythonw` нет, и для пользователя кнопка просто не работала: окно оставалось открытым, `on_complete` не вызывался, подключённый аккаунт не попадал в маршрутизацию.
|
||||
|
||||
Правка: вызов приведён к настоящему API; журналирование и `on_complete` обёрнуты так, чтобы сбой в них не запирал пользователя в мастере. Регрессия закрыта тестом `tests/test_ui_wizard_finish.py`.
|
||||
|
||||
**От вас требуется:**
|
||||
|
||||
1. При слиянии сохранить эту правку. Ветку создавать от свежего `origin/main` — тогда конфликта не будет.
|
||||
2. Найденный тем же способом второй дефект: `ui/splash.py:40` вызывает `AssetManager.get().get_splash_logo(...)` — такого метода нет, есть `get_logo_image`. Модуль сейчас **нигде не импортируется**, то есть это мёртвый код. Либо подключить и починить, либо удалить. Решение обосновать в отчёте.
|
||||
3. **Механическая проверка на весь UI-слой.** Это третий дефект класса «вызов несуществующего метода», и все они молчаливые: под `pythonw` трейсбек Tk уходит в никуда, кнопка выглядит нерабочей. Нужен тест, который статически обходит UI-слой и проверяет, что вызываемые методы существуют у своих классов. Ревьюер проверял разбором AST по образцу `Klass.get().method(...)` — этого хватило, чтобы найти оба дефекта; ваш вариант может быть шире.
|
||||
|
||||
---
|
||||
|
||||
## P0-1. «Настроить» в маршрутизации не делает ничего
|
||||
|
||||
`hermes_hub_app.py:632`:
|
||||
|
|
@ -116,15 +132,17 @@ AutoAssigner.find_free_slot(self.selected_provider) or f"{self.selected_provider
|
|||
## Критерии приёмки
|
||||
|
||||
1. Ни один файл чужой зоны не изменён.
|
||||
2. «Настроить» открывает работающий редактор цепочки; изменение сохраняется и видно после перезапуска.
|
||||
3. Ошибка любого действия видна пользователю в месте действия; модалка при ошибке остаётся открытой.
|
||||
4. Шаг с кодом устройства содержит пронумерованную инструкцию и кнопки копирования для ссылки и кода.
|
||||
5. При отсутствии свободного слота мастер объясняет причину и не подставляет выдуманный идентификатор.
|
||||
6. Пустое состояние «Обзора» ведёт к подключению аккаунта.
|
||||
7. Тесты на каждый пункт: редактор цепочки сохраняет порядок; ошибка действия отображается; мастер без свободных слотов не завершается молча.
|
||||
8. Прогон **в обоих окружениях** — без UI-зависимостей и с `customtkinter`/`pillow`/`psutil`; обе команды и оба результата в отчёте.
|
||||
9. `ruff check .` чисто; release gate не ухудшен.
|
||||
10. **Скриншоты живого сценария**: подключение аккаунта, назначение роли, редактор цепочки — с реальными данными.
|
||||
2. Правка `_finish` из `7090c8a` сохранена; `tests/test_ui_wizard_finish.py` проходит.
|
||||
3. Есть тест, механически ловящий вызовы несуществующих методов в UI-слое; на нём проверено, что таких вызовов не осталось.
|
||||
4. «Настроить» открывает работающий редактор цепочки; изменение сохраняется и видно после перезапуска.
|
||||
5. Ошибка любого действия видна пользователю в месте действия; модалка при ошибке остаётся открытой.
|
||||
6. Шаг с кодом устройства содержит пронумерованную инструкцию и кнопки копирования для ссылки и кода.
|
||||
7. При отсутствии свободного слота мастер объясняет причину и не подставляет выдуманный идентификатор.
|
||||
8. Пустое состояние «Обзора» ведёт к подключению аккаунта.
|
||||
9. Тесты на каждый пункт: редактор цепочки сохраняет порядок; ошибка действия отображается; мастер без свободных слотов не завершается молча.
|
||||
10. Прогон **в обоих окружениях** — без UI-зависимостей и с `customtkinter`/`pillow`/`psutil`; обе команды и оба результата в отчёте.
|
||||
11. `ruff check .` чисто; release gate не ухудшен.
|
||||
12. **Скриншоты живого сценария**: подключение аккаунта, назначение роли, редактор цепочки — с реальными данными.
|
||||
|
||||
## Порядок сдачи
|
||||
Передать точный `FINAL_COMMIT_SHA`.
|
||||
|
|
|
|||
Loading…
Reference in a new issue