🎯 [Хвост] Ядро проверки — 282 находки по файлам
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 20/100
Direzione di ricerca
Start with docs/audit/2026-08-10-full-roles.md, especially sections 5 and 5-бис, then check this issue’s file checklist and verify which findings remain open. The work spans many core modules; choose a single finding and its file, then run the relevant tests. Done means each finding is fixed in a PR or explicitly rejected with a reason, with closed IDs and PR numbers recorded.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Хвост аудита 2026-08-10 по направлению. Полные формулировки, доказательства и репро — в документе:
docs/audit/2026-08-10-full-roles.md (§ 5 — фаза чтения кода, § 5-бис — прогон, документы, ревизия). Эпик хвоста: #995
282 находки: 16 high · 91 medium · 175 low. Все верифицированы скептиками.
Карта работ по файлам
Чек-лист по файлам, а не построчно: почти три сотни пунктов нечитаемы и правятся с конфликтами. Строка закрывается, когда закрыты все её ID; частично закрытая остаётся неотмеченной, а закрытые ID названы явно с номером PR. Закрывать пачками: один PR = один файл или одна причина.
-
core/test_loader.py— 44 (8/20/16). Закрыты 9:QA-1-01·RUN-1-01·RUN-2-07·PY-1-05— непарные файлы и коллизия индексов (#1021);ADD-5-03— формат 2 покрыт одной идеальной парой (#959);RUN-2-03·RUN-2-05·PY-1-04— cp1251 и рассогласование блоков (#939, #246);REV-1-02—.typeчитается терпимо, BOM снят (#1128). Осталось 35:MTX-1-02·MTX-5-03·REV-1-01·RUN-2-01·STR-5-01·STR2-1-04·CANON-3-01·CANON-3-03·FZZ-1-02·FZZ-1-04·FZZ-3-01·FZZ-3-02·JRN-1-02·MTX-3-04·MTX-4-01·MTX-5-02·MTX-5-04·RUN-1-03·RUN-2-08·STR2-4-01·CANON-3-04·CANON-3-07·CANON-3-08·FZZ-3-03·LNCH-3-03·MTX-2-03·MTX-7-04·PAIR-1-04·PY-1-06·PY-1-07·QA-1-02·REV-1-05·REV-7-02·RUN-1-05·STR2-5-03 -
core/reporter.py— 24 (0/3/21). Закрыты 3:MET-1-01— вход кейса при RE и TLE (#1184);RUN-4-02— обработка вывода без границ (#1182);REV-4-01—[ERROR]печатался целиком, до 10 МБ в терминал (#1119). Осталось 21:MTX-9-03·DES-2-01·DES-2-02·DES-2-04·DES-2-05·DES-2-06·DES-2-07·FZZ-2-01·FZZ-2-04·FZZ-2-05·FZZ-3-04·INS-1-04·INS-2-01·JRN-1-06·JRN-5-03·MTX-8-05·READER-1-05·REV-4-02·RUN-4-07·STR-5-03·STR-5-04 -
core/grader_core.py— 23 (0/9/14). Закрыта 1:PY-1-01— хвостовые нули float давали ложный AC (#1027). Осталось 22 -
core/runner.py— 22 (0/8/14). Закрыта 1:RUN-4-01— верное решение получало WA с пустымActual, если оставило дочерний процесс (#1182). Осталось 21 -
core/history.py— 21 (2/12/7). Частично: миграция схемы 1→2 больше не удваивает агрегат «Прогресса» (#947) -
core/insights.py— 16 (0/2/14) -
core/stats.py— 14 (0/1/13). Частично: нечитаемый журнал отличается от «статистика выключена» (#1005) -
config.py— 12 (0/6/6). Закрыты 2:INS-4-01·LNCH-3-04— чужойpyproject.tomlвыше по дереву и два корня настроек (#1009) -
core/cache.py— 11 (0/6/5). Закрыты 5:CNC-5-05·PERF-1-01·PY-3-01·PY-3-02·SBX-5-01— ключ кэша не учитывал условия исполнения (#1011) -
core/microbench_runner.py— 9 (1/3/5). Закрыты 4:MTX-3-01·PERF-1-02— tracemalloc смещал ранжирование (#1028);DEV-2-06·REV-6-01— bench-скрипт уехал из общего/tmpвmkdtemp -
core/ai_hints.py— 8 (0/3/5). Частично: reasoning-семейства и причина отказа провайдера (#1123).MET-1-06жива: выключателя отправки кода нет -
core/progress_export.py— 8 (0/1/7) -
core/normalizers.py— 7 -
core/result.py— 6 (0/1/5). Закрыты 3:ARCH-1-06·QA-1-05·PAIR-2-04—exit_codeтерялся на round-trip, round-trip-тест был зелёным по построению, докстринг расходился с кодом (#1198). Отклонены 3 с причиной:STR2-1-01(терминальный статус UNVERIFIABLE),STR2-1-02(RunManifest),STR2-4-06(тип измерения) — все три предлагают новые сущности контракта, а не правкуresult.py; такое решается ADR и меняет CLI/web/JSON разом, поэтому не хвост аудита. Живого issue нет — при необходимости заводить отдельно -
core/user_settings.py— 6 (0/2/4):ARCH-3-04— настройки жили per-cwd при глобальной базе истории (#1186). Остальные пять ID закрыты правками окна лаунчера и записи настроек:PROD-1-02·JRN-4B-03·LNCH-3-05·LNCH-5-03·SET-2-06(#1133, #1136, #1140) — сверить перед архивацией документа -
core/diag_log.py— 5 (0/1/4). Закрыта 1:ADD-4-03—redactне ловил формуtoken='...'в кавычках (#1120). Проверено прогоном:token='…',token="…",token=…,password='…',api_key='…'редактируются все -
core/parsers.py— 4 (0/3/1). Закрыта 1:RUN-2-04— BOM вinput.txt/output.txtдавал ноль кейсов (#939) -
core/wrapper_builder.py— 4 (2/0/2). Закрыты обеhighранее:DEV-2-01— обёртка связывала аргумент со своим же импортом (#938);SBX-1-01— function-кейсы падали под--sandboxпоголовно (#992). Закрыты обеlow(#1199):RUN-1-06— блок-драйвер, вызывающий решение на верхнем уровне безprint, давал ложныйREна классах и терял вывод на функциях;MTX-4-03— контракт «сравнивается напечатанное, тип возврата не участвует» задокументирован (вариант «печататьrepr()» проверен и отклонён: у чисел, списков и словарейrepr()совпадает соstr(), а строкам добавил бы кавычки) -
core/history_recording.py— 3 -
core/mode_detector.py— 3 (1/0/2). Закрыты 2:RUN-2-02— вспомогательная функция выше целевой давала ложный RE (#938);PY-3-04— повреждённыйmeta.jsonронял прогон вместо отката к эвристике (#1197). ОсталасьCANON-3-05(документационная:.typeприменяется на уровне папки) -
core/stepik_reference.py— 3 (0/1/2) -
core/test_source_fetcher.py— 3 (1/1/1) -
core/tracer.py— 3 (0/1/2) -
core/feedback.py— 2 (0/1/1). Закрыты обе:ADD-4-01—collect_commit()тянул subject коммита ЛЮБОГО репозитория в CWD прямо в публичный issue;ADD-4-04— бюджет поля мерился исходными символами, а лимит URL — символами percent-encoded ссылки, и русский лог доезжал наполовину там, где английский того же объёма проходил целиком (#1200). Вторая половина рекомендации (truncatedпарами «осталось из скольких») отклонена с причиной: это публичный контракт/api/feedback, его читаютweb/static/feedback.jsи строка локалиfeedback_truncated -
core/lint.py— 2 -
core/task_page_parser.py— 2 (1/1/0). Закрыта 1:ADD-2-01—<br>в таблице задачи не давал перевода строки (#941) -
db.py— 2 (0/1/1) -
downloader_config.py— 2 -
pytest_plugin.py— 2 (0/1/1). Закрыта 1:VIS-2-01— решения безtests/исчезали из сбора молча (#1183). ОсталасьVIS-2-02 -
.pre-commit-config.yaml— 1:REL-2-08— восемь guardrail-скриптов гонялись только в CI, и о нарушении контрибьютор узнавал после пуша, кругом в 5–10 минут вместо секунды на коммите (preflight.pyих тоже не звал). Все восемь добавлены local-хуками, каждый привязан к своим файлам; замер — ~3.6 с суммарно, регулярки проверены прогоном поgit ls-files. Тест сторожит дрейф в обе стороны (#1209) -
__init__.py— 1:PKG-1-06— пакет не экспортировал__version__/__all__. Экспортирует лениво, через__getattr__(PEP 562): корневой__init__исполняется раньше чисткиsys.path, и обычныйimport importlib.metadataтам тянетjson— то есть отменял бы фиксINS-3-01этим же импортом (#1205) -
__main__.py— 1 (0/1/0):INS-3-01—python -m stepik_graderиз каталога задачи падал на файле-однофамильце stdlib (json.py,string.py,random.py,logging.py— обычные имена учебной задачи), не показав ни одного экрана. cwd вычищается изsys.pathдо импорта CLI.types.pyпо-прежнему падает и не может не падать: он нужен самомуrunpy, до нашей первой строки, — граница закреплена отдельным тестом (#1205) -
atomic_io.py— 1:PY-3-05— temp-файл утекал при любом не-OSErrorпрерывании: Ctrl+C приходитKeyboardInterrupt, а онBaseExceptionи шёл мимо перехвата (#1203). Закрыто вместе сARCH-3-05— одна причина -
core/__init__.py— 1:AUD-1-04— докстринг был по-английски вопреки § Язык артефактов; переписан, заодно объявлен пустой__all__— пакет ничего не реэкспортирует (#1205) -
mtime_cache.py— 1:PERF-1-03— подпись источника считала толькоmax(mtime), а список файлов у обоих bundled-потребителей приходит изglobпо каталогу: удаление файла не сдвигало максимум (карточки удалённого оставались в витрине), добавление файла со старым mtime — тоже, и оба случая держались до перезапуска. Теперь подпись считает и число файлов — ноль дополнительных обращений к ФС (#1204). Модуль переехал на верхний уровень (#1202), путь в реестре —mtime_cache.py, а неcore/.
Была помечена к отклонению и отклонение снято: первое рассуждение опиралось на «bundled read-only, store — один файл», а чтение кода показалоglobу обоих потребителей и оба сценария живыми. Прецедент на будущее: отклонение находки проверяется по коду так же, как исправление -
core/oauth_flow.py— 1 (0/1/0):ADD-2-02— ответ 200 безaccess_tokenуходил вsecrets.jsonкак есть: протухший токен оставался, аexpires_atсдвигался на час вперёд, иtoken_is_valid()целый час отвечалTrue, пока каждый запрос получал 401. Закрыта раньше, в #943 (_validate_token_payload+ три теста) — здесь только отмечена по факту сверки с кодом и прогона -
core/run_dir.py— 1:OPS-1-07— каталоги прогонов, брошенные аварийным завершением (SIGKILL, падение интерпретатора), подметаются при следующем запуске — по префиксу, не по симлинку, старше суток; отказ уборки идёт в диагностический лог, а не только вwarnings.warn, которое в CLI не показывается (#1201) -
core/storage.py— 1:ARCH-3-05— два «единых» атомарных писателя JSON расходились правами:save_json_fileнаследовал права существующего файла,atomic_write_jsonвсегда оставлял 0600, и один и тот жеchmod g+rсохранялся или отменялся в зависимости от того, какой модуль записал файл. Наследование переехало в общий писатель, шесть потребителей переведены,save_json_fileудалён;save_secretsостался отдельно — у него принудительные 0600 (#1203) -
core/tests_writer.py— 1 (0/1/0):OPS-1-08— перескачивание стирало дописанные тест-кейсы, теперь они переезжают вtests.bak/(#951) -
rules/json_provider.py— 1:ARCH-3-01—rules/тянулcore/mtime_cache, единственное во всём проекте нарушение инварианта «подпакетыglossary//rules/не тянутcore/» (ADR-0011). Хелпер переехал на верхний уровень, какatomic_io/db/stdio_encoding; инвариант закрыт параметризованным щитом вtest_import_dag.py— прежде его не проверяло ничто (#1202)
Подтверждено закрытыми не меньше 50 находок из 282; пятнадцать строк закрыто целиком.
С чего продолжать
Плотность важнее списка: test_loader.py (44), reporter.py (24), grader_core.py (23) держат наибольшую долю направления. По test_loader.py стратегический срез посчитал отдельно: 92.5 находки на KLOC против 20.8 по всему core, и одна функция load_test_cases держит больше половины подтверждённых high проекта. Это кандидат на переписывание участком, а не на серию заплат — тем более что девять его находок уже закрыты точечно, и следующая заплата ляжет поверх них.
Однофайловые строки кончились — все закрыты. Осталось из мелких: db.py (2), downloader_config.py (2), core/lint.py (2), pytest_plugin.py (1 живая), core/tracer.py (3), core/history_recording.py (3), core/stepik_reference.py (3), core/test_source_fetcher.py (3), core/mode_detector.py (1 живая, документационная).
Проверять «уже закрыто» перед работой. Две находки этого захода (ADD-2-02, часть core/lint.py) оказались закрытыми более ранними PR, а в реестре числились открытыми: пометка ✅/◐ в документе аудита означает верификацию скептиком, а не состояние кода.
Критерий приёмки
Каждая находка либо закрыта PR, либо явно отклонена с причиной — молча удалённая находка вернётся следующим аудитом. Состояние ведёт этот чек-лист; в документе аудита реестр заполняется один раз, при архивации.
Состояние на 26.08.2026 (сверено с реестром)
Закрыто 90 находок из 307; файлов закрыто целиком — 13 из 40.
Галочки проставлены по реестру § 5-квater документа аудита, а не по памяти:
файл отмечается, когда каждая его находка либо стоит в реестре с номером PR, либо
отклонена в § 6 с причиной. Реестр перед этим сверен с историей мержей и вырос с
57 записей до 209 — до сверки счётчик здесь врал в обе стороны.
Рукописные пояснения в пунктах оставлены как есть: они называют, что именно
починено, а этого в реестре нет.
Дальше сводка обновляется тем же расчётом, что и галочки, — ночной прогон
tracker-guardrails.yml следит, чтобы реестр не отставал от main
(scripts/check_audit_registry.py).
Generated by Claude Code
- Lingua principale
- Python
- Stelle
- 3
- Fork
- 6
- Merge medio
- 4h 7m
- PR unite (30g)
- 49
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ArtVsMark/Stepik-Python-Grader
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 48/100
ArtVsMark/Stepik-Python-Grader#1636 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 35/100
ArtVsMark/Stepik-Python-Grader#1635 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 18/100
ArtVsMark/Stepik-Python-Grader#1634 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 32/100
ArtVsMark/Stepik-Python-Grader#1633 ·
I maintainer di solito rispondono entro 1 giorno
-
Каталог v1.12.0: Python 3.14 / 3.15 / 3.16 — 3.15 в основной CI, 3.16 в python-next, подъём действийAperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 30/100
ArtVsMark/Stepik-Python-Grader#1632 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di ArtVsMark/Stepik-Python-Grader
Issue simili
-
URLValidator ignores an explicit empty scheme allowlistForse già presa @IlyaKhalafi l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
tortoise/tortoise-orm#2393 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
frappe/frappe_docker#2046 ·
I maintainer di solito rispondono entro 1 giorno
-
Weekly link check failedAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
AXI SMU SPEC
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
tenstorrent/tt-oca-harness#3556 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
microsoft/agent-framework#9946 ·
I maintainer di solito rispondono entro 1 giorno