Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

🎯 [Хвост] Тесты и сейф-нет — 23 находки по файлам

Open
#1,004 0 comments 0 reactions 0 assignees View on GitHub

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

area/core audit difficulty/medium

Хвост аудита 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-06 — модификатор стал портируемым (ControlOrMeta+A): на macOS Control+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: AUD-1-01 — приватных реэкспортов замораживалось шесть из двадцати девяти, состав сверяется в обе стороны (#1439) · STR2-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)
  • tests/test_mode_detector.py — 1: ADD-5-02 — отклонена при разборе #921: is_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): тест есть, но проверяет не то.

Что делать

  1. Мутационная проверка на ключевых тестах: заменить проверяемую функцию на тождественную и убедиться, что тест краснеет. Начать с test_property.py и test_output_comparison.py.
  2. Негативные наборы для всех трёх форматов: потерянный файл, ведущий ноль, смешение форматов, битая кодировка — каждый случай отдельным кейсом.
  3. Регрессионный тест на каждый вернувшийся дефект (см. #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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ArtVsMark/Stepik-Python-Grader

All issues in ArtVsMark/Stepik-Python-Grader

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.