You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit f031558
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,10 +24,12 @@ uv run pytest -q
24
24
- У урока есть лестница от примера и прогноза к воспроизведению, Parsons/изменению и обязательному коду.
25
25
- Ни теория, ни отвлекающие варианты, ни заготовка, ни подсказка, ни скрытый тест не используют инструмент до вводящего урока.
26
26
- Кодовые задания должны быть короткими, детерминированными и совместимыми с учебным раннером.
27
-
- Финальное задание комбинирует текущую тему только с уже знакомыми навыками и проверяет минимум два сценария, когда это возможно.
27
+
- Каждая Python-карточка теории должна быть самодостаточной и явно указывать ожидаемый консольный вывод, включая пустой вывод для определений и присваиваний.
28
+
- Финальное задание комбинирует текущую тему только с уже знакомыми навыками и проверяет минимум два поведенческих сценария. 108 тематических заданий расширенной части и все проекты хранят исполняемый эталон для CI в `reference_solution`; он должен проходить все сценарии и никогда не отдаётся публичным API.
29
+
- Структурный `source`-тест допустим только вместе с поведенческими проверками, когда конкретная форма входит в цель урока.
28
30
- Не добавляйте большие заимствованные фрагменты чужих курсов. Пересказывайте идеи своими словами и ссылайтесь на первоисточник в PR.
29
31
30
-
Полный норматив и чек-лист автора находятся в [docs/LEARNING_DESIGN.md](docs/LEARNING_DESIGN.md). Любое изменение контента должно сохранять пустой результат `audit_learning_pipeline(LESSONS)`; это проверяется тестами CI.
32
+
Полный норматив и чек-лист автора находятся в [docs/LEARNING_DESIGN.md](docs/LEARNING_DESIGN.md). Любое изменение контента должно сохранять пустой результат `audit_learning_pipeline(LESSONS)`, `audit_projects(PROJECTS, LESSONS)` и `audit_exam_coverage(EXAMS, LESSONS, QUESTION_BY_ID)`; это проверяется тестами CI.
2. Строки, модули, файлы, JSON/CSV, исключения и ООП.
45
46
3. Типы, стандартная библиотека, регулярные выражения, тесты и Git.
46
47
4. CLI, окружения, HTTP/API, SQL, параллельность и async.
47
-
5.Четыре выпускных мини-проекта: задачи, заметки, API-клиент и релиз приложения.
48
+
5.Выпускной блок: менеджер задач, заметки, API-клиент и подготовка приложения к релизу.
48
49
49
50
Перед основным курсом есть «Спокойный старт» из 20 микроуроков: `print`, строки, переменные, типы, `len`, f-строки, `input`, преобразования и строковые методы — без перегрузки несколькими новыми идеями сразу. Пороговые темы тоже раздроблены: отдельно изучаются `if`/`else`, цикл/накопитель, `while`/`break`, вызов/параметр/`return`, список/`append`, `split`, `sum`, словарь и множество.
- Каждый урок содержит подробную теорию, исполняемые примеры с выводом и переход от узнавания к самостоятельному коду.
56
57
- Используются выбор, свободное воспроизведение, Parsons-блоки, код и накопительные финальные задачи.
57
-
- Подсказки исчезают постепенно: направление → план → почти готовая форма.
58
-
-Следующий урок открывается после успешного прохождения предыдущего.
59
-
- Урок нельзя сдать, пропустив обязательный код; контрольная точка требует 70% и практические задания.
58
+
- Подсказки открываются постепенно: направление → инструмент → алгоритм → почти готовая форма. Последняя доступна только после своей попытки, а решение с подсказкой не считается самостоятельным повторением.
59
+
-Если забыл точное имя, каждое задание с редактором даёт справочник нужных уже изученных функций, методов и конструкций с формой вызова, объяснением и нейтральным примером.
60
+
- Урок нельзя сдать, пропустив обязательный код; порог урока — 75%. Новый раздел откроется только после экзамена предыдущего. В экзамене код получает отдельный, ранее не показанный поведенческий сценарий и может быть написан любым эквивалентным способом.
60
61
- Практика берёт только завершённые уроки, чередует форматы и распределяет повторения по интервалам 1/3/7/14/30 дней.
61
62
- Ошибка попадает в мягкий режим повторения и исчезает из слабых мест после двух последовательных верных решений.
62
-
- Код проверяется в изолированном Python-процессе с AST-фильтром и двухсекундным лимитом.
63
+
- Код проверяется в отдельном Python-процессе с AST-фильтром и двухсекундным лимитом. Доступны виртуальные файлы, SQLite, `argparse`, async, очереди и до четырёх потоков.
63
64
-`input()` работает через безопасный симулятор: ответы вводятся под редактором, по одной строке для каждого вызова.
64
65
- Вкладка «Песочница» даёт свободный редактор с историей запусков и консолью: можно экспериментировать без проверки задания.
65
66
- После сдачи урока и серии практики показывается реальный консольный вывод выполненного кода.
66
-
- В разделе «Проекты» есть шесть мини-инструментов: они открываются по конкретным prerequisite-урокам и проверяются на нескольких входных сценариях.
67
-
- Curriculum-linter проверяет метаданные, скрытые тесты и запрет незнакомых конструкций до объяснения.
67
+
- В разделе «Проекты» есть 15 инструментов: они открываются по конкретным prerequisite-урокам и проверяются на нескольких сценариях.
68
+
- Curriculum-linter проверяет метаданные, все видимые поверхности, эталонные решения, скрытые тесты и запрет незнакомых конструкций до объяснения.
68
69
- Один пользователь, локальный SQLite: можно заниматься без регистрации и облака.
3.**Смешанная серия** — чередовать выбор, воспроизведение, Parsons и код из разных изученных тем.
77
78
4.**Выбранный раздел** — тренировать все завершённые уроки раздела, а не только последний.
78
79
79
-
У каждого задания есть план решения, а после серии показывается результат и понятный следующий шаг.
80
+
У каждого кодового задания есть план решения и тот же справочник инструментов, что в уроке: практика не требует помнить наизусть, что `.lower()` меняет регистр, `.split()` возвращает список, а `.get()` умеет дать запасное значение. После серии показывается результат и понятный следующий шаг.
80
81
81
82
## Личный прогресс и тесты
82
83
@@ -99,9 +100,12 @@ uv run pytest -q
99
100
app/
100
101
main.py # FastAPI-приложение и JSON API
101
102
content.py # базовые уроки и объединение программы
103
+
gentle_start.py # первые 19 коротких уроков без перегрузки
102
104
foundation_expansion.py # плавные микроуроки и накопительные задачи
103
105
extended_curriculum.py # 108 уроков расширенной части
Copy file name to clipboardExpand all lines: SECURITY.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,9 @@
2
2
3
3
## Учебный раннер
4
4
5
-
Python Path выполняет только короткий код для учебных задач. Перед запуском код проверяется по AST, импорт ограничивается allowlist, а файлы доступны только через временную виртуальную папку (`open`/безопасный `pathlib`). Выполнение идёт отдельным Python-процессом с ограниченным набором встроенных функций и завершается по таймауту. Системные, процессные и произвольные сетевые операции закрыты.
5
+
Python Path выполняет только короткий код для учебных задач. Перед запуском код проверяется по AST, импорт ограничивается allowlist, а выполнение идёт отдельным Python-процессом с ограниченным набором builtin-функций и двухсекундным таймаутом.
6
+
7
+
Учебные `open()`, `pathlib.Path` и SQLite перенаправлены в одну временную папку; SQLite запрещает `ATTACH`, загрузку расширений и файловые функции. `argparse` не читает аргументы из файлов, `sys` отдаёт только безопасные учебные поля, а одновременно можно запустить не более четырёх потоков. Дочерние процессы, произвольные сетевые операции и доступ к хостовым файлам закрыты.
6
8
7
9
Это снижает риск для локального тренажёра, но не заменяет инфраструктурную изоляцию. Не размещайте текущую версию как публичный сервис, в котором чужие пользователи могут исполнять произвольный код.
0 commit comments