Реализовано в PR #91 (смержен).
Что сделано:
- Новый leaf-модуль
core/cache.py (stdlib hashlib + core/storage.py для JSON I/O; новых рёбер/циклов в DAG нет).
- Ключ кэша — пара sha256: содержимое файла решения + все файлы тест-директории. Любое изменение инвалидирует запись.
- Хранилище — один
.grader_cache/results.json в CWD (добавлен в .gitignore); битый/несовместимый по версии файл трактуется как пустой кэш, без падения.
- CLI:
--cache / --no-cache (argparse.BooleanOptionalAction, дефолт из [tool.stepik-grader] use_cache / GraderConfig.use_cache) и --clear-cache. Только для --mode 1/2; режимы 3/4 (бенчмарк) кэш не используют.
- Режим 1 печатает пометку о попадании в кэш, режим 2 — сводку «N из M из кэша».
- 15 тестов; общий сьют 637 passed, покрытие 95%; ruff/format/mypy — чисто.
- Документация: README, CHANGELOG, CLAUDE.md.
Реализовано в PR #91 (смержен).
Что сделано:
core/cache.py(stdlibhashlib+core/storage.pyдля JSON I/O; новых рёбер/циклов в DAG нет)..grader_cache/results.jsonв CWD (добавлен в.gitignore); битый/несовместимый по версии файл трактуется как пустой кэш, без падения.--cache/--no-cache(argparse.BooleanOptionalAction, дефолт из[tool.stepik-grader] use_cache/GraderConfig.use_cache) и--clear-cache. Только для--mode 1/2; режимы 3/4 (бенчмарк) кэш не используют.