🎯 [Хвост] Тесты и сейф-нет — 23 находки по файлам
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- python
- Domain
- testing-qa
Research direction
Start by reading docs/audit/2026-08-10-full-roles.md (§ 5 and § 5-bis) and the listed tests, especially tests/test_property.py and tests/test_output_comparison.py; run the relevant tests before making changes. The issue calls for stronger negative and regression cases across several test files. Done means each finding is closed by a PR or explicitly rejected, and no listed test stays green when its checked function is replaced with an identity function.
Written by the indexing model from the issue text.
Description
Хвост аудита 2026-08-10 по направлению. Полные формулировки, доказательства и репро — в документе:
docs/audit/2026-08-10-full-roles.md (§ 5 и § 5-бис). Эпик хвоста: #995
23 находки: 0 high · 0 medium · 23 low. Все верифицированы скептиками.
Находки по файлам
Чек-лист ведётся по файлам, а не по каждой находке: когда их два-три десятка, построчный список нечитаем и правится с конфликтами. Строка закрывается, когда закрыты все её ID. Галочка ставится тем же заходом, что и мерж закрывающего PR, и называет исход.
-
tests/test_import_dag.py— 3:ARCH-1-03— построен второй граф, с ленивыми рёбрами: циклов два, оба объявлены с причиной, третий оказался призракомTYPE_CHECKING·ARCH-2-04— список grade-ядра выведен из фасада, прямой импорт вне фасада стал храповиком ·REV-5-04— одиннадцать модулей не имели строки вarchitecture.md, сверка пошла в обе стороны (#1437) -
tests/e2e/test_journeys.py— 2:— модификатор стал портируемым (QA-2-06ControlOrMeta+A): на macOSControl+Aпереводит курсор в начало строки, и набор ломался по смыслу, оставаясь зелёным (#1443) ·STR2-4-03— открыта: файла регрессий вердиктов нет -
tests/e2e/test_not_silently_skipped.py— 2:QA-2-02·QA-2-03— «набор не скипнулся» считалось по СОБРАННЫМ тестам, а сторож запуска браузера пропускал сам себя (#1266) -
tests/e2e/test_xss_regression.py— 2:SEC-1-06— набор закрывает три стока вместо одного (вывод решения, имя каталога, введённый путь), и граница зелёного названа прямо: сверки всех вызововesc()нет, это объявленная слепая зона ·SEC-1-07— файл переписан по-русски — PR #1442 -
tests/test_facade_contract.py— 2:— приватных реэкспортов замораживалось шесть из двадцати девяти, состав сверяется в обе стороны (#1439) ·AUD-1-01STR2-4-05— паритет CLI↔web↔sandbox↔cache: остаётся открытой -
tests/test_output_comparison.py— 2:ADD-5-04·ADD-5-05 -
tests/test_property.py— 2:ADD-5-01— три свойства были верны и для тождественной функции (#1252) ·QA-2-07— пропажаhypothesisдавала «8 skipped» и код возврата 0 (#1435) -
tests/test_result.py— 2:ADD-5-06·QA-1-06— формат 2 был покрыт одной идеальной парой файлов (#959) -
tests/e2e/test_load_failures.py— 1:QA-2-04— «Повторить» не доказывал повторный запрос, теперь считается счётчиком обращений (#1266) -
tests/e2e/test_poller_resilience.py— 1:QA-2-05— ассерт «слово в любой из двух локалей» проходил и на постороннем сообщении; язык стенда детерминированно русский, и это теперь проверяется (#1435) -
— отклонена при разборе #921:tests/test_mode_detector.py— 1:ADD-5-02is_function_only_solutionпокрыт 23 обращениями через фасад вtests/test_analyzer.py; верно лишь то, что покрытие лежит в другом файле (#1252) -
tests/test_packaging.py— 1:PKG-1-02— содержимое собранного колеса не проверялось →scripts/check_wheel_contents.py+ шагVerify wheel contents(#1127) -
tests/test_runner.py— 1:QA-1-03— семнадцать тестов сверяли аргументыprlimitи оставались зелёными на неработающем лимите; добавлен настоящий прогон, проверено подменой (#1441) -
tests/test_stepik_client.py— 1:STR-3-02— нет канарейки дрейфа Stepik API: весь сетевой слой на моках
Почему все low — и почему это не значит «неважно»
Скептики честно понизили всё направление: отсутствующий тест сам по себе ничего не ломает. Но именно эти пробелы позволили пройти мимо девяти high, и связь прямая.
Тест зелен при подменённой функции (ADD-5-01, QA-2-07): три property-теста нормализации остаются зелёными, если заменить проверяемую функцию на тождественную. Такой тест не проверяет ничего — он проверяет, что код запускается.
Формат 2 покрыт одной идеальной парой файлов (QA-1-06, ADD-5-*): ни потерянный expected_N, ни пара с ведущим нулём тестами не ловились. Оба дефекта нашёл прогон — и оба оказались high.
test_loader.py имеет профильный юнит-тест, который пропускает дефект (QA-1-01 из #996): тест есть, но проверяет не то.
Что делать
- Мутационная проверка на ключевых тестах: заменить проверяемую функцию на тождественную и убедиться, что тест краснеет. Начать с
test_property.pyиtest_output_comparison.py. - Негативные наборы для всех трёх форматов: потерянный файл, ведущий ноль, смешение форматов, битая кодировка — каждый случай отдельным кейсом.
- Регрессионный тест на каждый вернувшийся дефект (см. #987) — именно его отсутствие позволило
DIVE-02вернуться незамеченной.
Критерий приёмки
Каждая находка либо закрыта PR, либо явно отклонена с причиной. Отдельно: ни один тест из списка не остаётся зелёным при подмене проверяемой функции на тождественную.
Чек-лист отставал от дерева (правило 173 каталога). Пять строк выше закрыты
не сегодня: QA-2-02/QA-2-03/QA-2-04 уехали в #1266, ADD-5-01 и
отклонение ADD-5-02 — в #1252, а галочки за ними не пошли. Каждая сверена с
деревом, а не с документом аудита: там QA-2-05 значилась закрытой, хотя в
tests/e2e/test_poller_resilience.py оставался прежний ассерт — расхождение
выправлено в #1435 вместе с самой находкой.
Generated by Claude Code
- Dominant language
- Python
- Stars
- 3
- Forks
- 6
- Avg merge
- 12h 26m
- Merged PRs (30d)
- 51
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from ArtVsMark/Stepik-Python-Grader
-
area/glossary bug difficulty/medium
Difficulty 4/5 3-5 days Newbie friendliness 35/100
ArtVsMark/Stepik-Python-Grader#1629 ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 8/100
ArtVsMark/Stepik-Python-Grader#1626 ·
Maintainers usually reply within 1 day
-
area/core difficulty/hard enhancement
Difficulty 4/5 3-5 days Newbie friendliness 35/100
ArtVsMark/Stepik-Python-Grader#1621 · 1 comment ·
Maintainers usually reply within 1 day
-
area/ci difficulty/easy tech-debt
Difficulty 3/5 Half a day Newbie friendliness 25/100
ArtVsMark/Stepik-Python-Grader#1613 ·
Maintainers usually reply within 1 day
-
area/web difficulty/medium enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 18/100
ArtVsMark/Stepik-Python-Grader#1608 ·
Maintainers usually reply within 1 day
All issues in ArtVsMark/Stepik-Python-Grader
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
spec-kitty/spec-kitty#6112 ·
Maintainers usually reply within 1 day
-
[Bug]: OpenRouter streaming chunks report the requested router name instead of the model OpenRouter servedPossibly taken @Mrun25 claimed this today. Openbug llm translation
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
BerriAI/litellm#46095 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
uberdeveloper/fastbt#29 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
andrew-blake/melcloudhome#368 ·
Maintainers usually reply within 1 day
-
lane:discover
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SPARDiffData/differential-data-collection#33 ·
Maintainers usually reply within 1 day