Фаза L: подготовить стенд к локальному сквозному прогону по реальному курсу

Aperta
#1,012 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
python
Ambito
testing, tooling

Direzione di ricerca

Read docs/agent/environments.md and docs/agent/local-sweep.md, then inspect corpus_sweep.py, corpus_fetch.py, and the referenced AI modules. Treat the four requested additions as separate work areas: AI coverage, an end-to-end scenario, a read-only history report, and a phase-0 snapshot. Done means each is covered by tests or a documented safe local procedure, with no live Stepik submissions or writes to the owner's history database.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

area/core difficulty/medium enhancement

Зачем

После закрытия кодовых issue аудита 2026-08-10 предстоит фаза L — локальный сквозной прогон на машине владельца: наполнить базу реальными задачами уже пройденного курса и снять всё, что сломалось на настоящих данных. Порядок фаз — docs/agent/environments.md, инструкция прогона — docs/agent/local-sweep.md.

Сам стенд уже есть (corpus_fetch.py + corpus_sweep.py), но в нём три дыры. Пока они открыты, фаза L проверит меньше, чем должна, — и выяснится это уже за локальной машиной, где переделывать дорого. Подготовка делается в облачном окне и заранее.

Что сделать

1. Группа ai в corpus_sweep.py

MODULE_KEYS сейчас — core, learning, glossary, extras. Подсистема AI-подсказок (core/ai_hints.py, core/ai_grounding.py) не прогоняется ничем, хотя это единственная часть продукта, где полный цикл «решил → упал → получил объяснение» замыкается на внешний сервис.

Что должна покрыть группа на каждой упавшей задаче:

  • сборка FailureContext по реальному падению и получение подсказки;
  • grounding: карточки глоссария действительно попадают в промпт, их число соответствует ai_grounding_k;
  • потолок ai_max_hints — обрыв сообщается явной строкой, а не выглядит как «подсказки кончились»;
  • поведение без согласия, с отозванным согласием (--revoke-ai-consent) и без настроенного провайдера — ни один из трёх случаев не должен ронять прогон;
  • собственный ai_system_prompt подхватывается вместо встроенного.

Внешние вызовы в CI — на моках; живой провайдер только в локальном прогоне.

2. Сценарий «полный цикл на одной задаче»

Группы гоняются по отдельности — это проверка узлов. Фаза L существует ради цепочки, а разрывы живут на стыках:

скачал задачу → решил → проверил → история записалась
   → «Прогресс» показал верное → «Подучить» дал рекомендацию → экспорт собрался

Нужен режим, который прогоняет эту последовательность на одной задаче целиком и сверяет согласованность между звеньями (одна запись в истории, а не две; ключ задачи один и тот же во всех отчётах; экспорт содержит то же, что показал «Прогресс»).

3. Режим чтения настоящей базы истории

Прогон намеренно пишет во временную папку — это правильно и менять не нужно. Но отдельно нужен неразрушающий отчёт по реальной истории владельца: месяцы прогонов — единственные данные, на которых видно, врут ли агрегаты «Прогресса», серия и бейджи. Только чтение, без единой записи в ~/.stepik-grader/history.db.

4. Слепок фазы 0

Короткий сбор, снимаемый до облачных волн следующего аудита: формы накопленной истории (числа и структура, не содержимое), реальные имена папок задач курса (кириллица, точки, пробелы, длина), инвентарь курса --dry-run, версии ОС и Python. По нему строятся фикстуры облачных волн — фикстура по настоящим объёмам ловит то, что синтетическая пропускает.

Границы

  • Ничего не отправляется на Stepik: батч-отправка решений под живым аккаунтом исключена (см. local-sweep.md § Границы).
  • Чужой контент не коммитится: условия и тесты курса живут вне git.
  • Слепок фазы 0 не содержит секретов и содержимого решений — только формы и числа.
  • Локальная сессия не печатает содержимое secrets.json и не переносит его в отчёт.

Когда выполнять

Подготовка (пункты 1–4) — сейчас, в облаке.

Сам прогон — после закрытия кодовых issue аудита. Документационные его не блокируют: прогон не читает README, ADR и docstring, поэтому их состояние на результат не влияет физически, и ждать их значит откладывать фазу L без пользы. Кодовые, наоборот, обязательны — иначе прогон выдаст заново то, что уже разбирается, и настоящие находки утонут в известных.

Граница проходит по вопросу: изменит ли фикс то, что продукт делает в прогоне — что напечатает грейдер, что покажет браузер, что ляжет в базу. Тексты ошибок, строки интерфейса и локали по этому критерию — код.

Не путать с условием архивации документа аудита: та требует закрытия или отклонения каждой находки, включая документационные. Это два разных рубежа.

Кто исполняет

Тот же Claude Code, запущенный на машине владельца, — не отдельный локальный агент: второе окно отличается окружением, а не исполнителем.

Lingua principale
Python
Stelle
3
Fork
6
Merge medio
4h 7m
PR unite (30g)
49

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ArtVsMark/Stepik-Python-Grader

Tutte le issue di ArtVsMark/Stepik-Python-Grader

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.