From ef3e9b08667c7c91577ea275bd2cb5be37cfdf2a Mon Sep 17 00:00:00 2001 From: Antigravity Date: Wed, 7 Oct 2026 16:21:50 +0300 Subject: [PATCH] docs: register BUG-03 and BUG-04 in bug backlog --- TODO.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/TODO.md b/TODO.md index d3464c8..ff936f9 100644 --- a/TODO.md +++ b/TODO.md @@ -482,6 +482,16 @@ - **Симптом**: в списке карточек словаря на главной странице нет кнопок 🔊 для воспроизведения аудио слова и контекстного предложения. - **Диагностика**: в шаблоне рендеринга `renderCardsList` (`app/static/js/modules/dictionary.js`) внутри `.card-top` и `.card-context` не отрисовываются кнопки аудиовызова с вызовом `playAudio()` / `playTextSpeech()`, хотя модуль `ui.js` полностью поддерживает их воспроизведение. - **Статус**: зафиксировано, ожидает команды на исправление. +- [ ] **BUG-03: Спойлер корня слова в переводе грамматических форм в тестах (например, `(прош. вр. от explain)`)**: + - **Симптом**: при добавлении словоформ в словарь (например, `explained`) в переводе сохраняются пометки словообразования: `объяснять, объяснить (прош. вр. от explain)`. Во время теста (SRS / Урок) отображение этого перевода напрямую спойлерит английское слово `explain`. + - **Диагностика**: в `app/dictionary.py` функция `clean_russian_translation` (строки 235–277) намеренно защищает грамматические пометки вида `(прош. вр. от ...)`, и они попадают в поле `card.translation`. Во время тестирования в `srs.js` и `lesson.js` эта строка выводится в вопросе теста целиком без фильтрации. + - **Варианты решения**: по умолчанию скрывать пометку под интерактивный кликабельный спойлер `[+ грамматика]` или вырезать английский корень из вопроса теста через regex `/\s*\([^)]*от\s+[a-zA-Z\x27-]+\)/gi`. + - **Статус**: зафиксировано, ожидает команды на исправление. +- [ ] **BUG-04: В квизе «4 варианта» правильный ответ всегда находится на 1-м месте**: + - **Симптом**: в комплексном уроке и SRS при выборе режима «4 варианта» правильный ответ всегда гарантированно оказывается первым вариантом. + - **Диагностика**: в `app/static/js/modules/ui.js` (строка 28) функция `shuffleArray(array)` возвращает новый скопированный массив (`return arr;`), не мутируя оригинал на месте. В `app/static/js/modules/lesson.js` (строка 778) и `app/static/js/modules/srs.js` (строка 461) написано `shuffleArray(options);`, но результат возврата игнорируется (`options` не перезаписывается), из-за чего правильный ответ, добавленный первым в `[correctText, ...]`, всегда остаётся на позиции 0. + - **Варианты решения**: переписать вызовы на `options = shuffleArray(options);` (или сделать `shuffleArray` мутирующим). + - **Статус**: зафиксировано, ожидает команды на исправление. ---