Skip to content

zavod #54: Рукописные уроки 113–120 - #41

Merged
gon7187 merged 4 commits into
mainfrom
zavod/54-rukopisnye-uroki-113-120
Oct 22, 2026
Merged

gon7187 merged 4 commits into
mainfrom
zavod/54-rukopisnye-uroki-113-120

Conversation

@gon7187

@gon7187 gon7187 commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Рукописные уроки 113–120

Круг: 2

Критерии

  • ✓ c1 — tests/test_handwritten_async_capstones.py:136–157 проверяет LESSONS, реестр, 120 уроков, номера и названия; отчёт круга: 75 passed, без skipped.
  • ✓ c2 — tests/test_handwritten_async_capstones.py:98–133 проверяет три карточки, выполнение примеров, id вопросов, reference, starter и отсутствие шаблонных фраз; test_c2_lesson_meets_handwritten_contract:160–162; отчёт круга: 75 passed.
  • ✓ k113 — tests/test_handwritten_async_capstones.py:236–243 проверяет reference через run_code для steps('загрузка', 2) и генераторный результат; отчёт круга: 75 passed.
  • ✓ k114 — tests/test_handwritten_async_capstones.py:246–250 проверяет через run_code round_robin([iter('ab'), iter('xyz')]) == ['a', 'x', 'b', 'y', 'z']; отчёт круга: 75 passed.
  • ✓ k115 — tests/test_handwritten_async_capstones.py:253–257 проверяет через run_code gather_results([1, 5, 2], 3) == ['ok', 'timeout', 'ok']; отчёт круга: 75 passed.
  • ✓ k116 — tests/test_handwritten_async_capstones.py:260–268 проверяет через run_code конкурентное и последовательное выполнение, включая пустой список; отчёт круга: 75 passed.
  • ✓ k117 — tests/test_handwritten_async_capstones.py:271–281 проверяет через run_code создание TaskManager, add, done и pending одним выражением через lambda; отчёт круга: 75 passed.
  • ✓ k118 — tests/test_handwritten_async_capstones.py:284–294 проверяет через run_code поиск ХЛЕБ в тексте заметки и результат ['Покупки']; отчёт круга: 75 passed.
  • ✓ k119 — tests/test_handwritten_async_capstones.py:297–301 проверяет через run_code сбор страниц [[1, 2], [3], []] в [1, 2, 3]; отчёт круга: 75 passed.
  • ✓ k120 — tests/test_handwritten_async_capstones.py:304–314 проверяет через run_code точный текст двух разделов и отсутствие пустого раздела; отчёт круга: 75 passed.
  • ✓ c3 — app/handwritten/lessons_async_capstones.py:89–1028: карточки следуют порядку объяснение → применение → ошибка; choice содержат полный код и сопоставимые варианты вывода. tests/test_handwritten_async_capstones.py:165–222 проверяет комментарии вывода, фактический stdout, вопросы на понимание и форму вариантов; отчёт круга: 75 passed.
  • ✓ c4 — app/handwritten/lessons_async_capstones.py:138–151,253–267,352–372,492–503: run=False используется для примеров с asyncio. tests/test_handwritten_async_capstones.py:225–233 проверяет отклонение таких примеров раннером и выполнение остальных; отчёт круга: 75 passed.

Изменённые файлы

  • app/handwritten/lessons_async_capstones.py
  • tests/test_handwritten_async_capstones.py

Предложения новых задач

  • tests/test_handwritten_async_capstones.py: сверять «# Вывод:» с настоящим stdout и для карточек с "run": False, иначе расхождение в неисполняемом раннером примере снова пройдёт мимо теста.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T23:02:42.105895Z 26c115e PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 26c115eb31

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +404 to +409
_term(
"async-gather-timeouts",
"Сколько результатов вернёт gather для трёх задач?",
["3", "три", "3 результата"],
"`gather` возвращает по результату на каждую задачу, даже если часть "
"из них завершилась таймаутом.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Model timeout failures before claiming gather returns results

When any child operation raises an uncaught TimeoutError, asyncio.gather propagates that exception instead of returning one result per task; wrapping the whole gather in a timeout can also cancel the group. Therefore the answer “3” and its explanation teach incorrect behavior unless the lesson first specifies that every child catches its own timeout and returns a sentinel value.

Useful? React with 👍 / 👎.

Comment on lines +743 to +748
_code(
"capstones-notes-app",
"Напиши `search_notes(notes, query)`: верни заголовки заметок, у "
"которых `query` встречается в заголовке или тексте без учёта "
"регистра. Порядок заметок сохраняется.",
"def search_notes(notes, query):\n # найди подходящие заголовки\n pass\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve JSON persistence in the notes capstone

This replacement reduces lesson 118 to an in-memory text search, while the course definition in app/extended_curriculum.py:1343-1348 specifies “Файл, JSON и поиск” and serialization. Because handwritten lessons replace the generated theory and questions wholesale, learners now complete this capstone without reading, writing, or serializing notes; the exercise should retain a file/JSON persistence requirement.

Useful? React with 👍 / 👎.

Comment on lines +864 to +869
_code(
"capstones-api-client",
"Напиши `fetch_all(get_page)`: вызывай `get_page(1)`, `get_page(2)` и "
"так далее, пока страница не пустая, и склей все элементы в один "
"список.",
"def fetch_all(get_page):\n # собери все страницы\n pass\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore the API-client contract instead of reteaching pagination

The course definition for lesson 119 requires requests, errors, and caching (app/extended_curriculum.py:1351-1357), but this exercise only iterates over pages supplied by a callback. Pagination is already the dedicated http-pagination lesson, so the handwritten override removes all practice of successful/error responses and cache behavior from the API-client capstone.

Useful? React with 👍 / 👎.

Comment on lines +981 to +986
_code(
"capstones-release",
"Напиши `release_notes(changes)`: собери строки `'feat: …'` в раздел "
"«Новое:», а `'fix: …'` — в «Исправлено:». Каждый пункт начинается с "
"`'- '`, пустой раздел не выводится.",
"def release_notes(changes):\n # собери текст релиза\n pass\n",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep the final capstone about packaging and verification

Lesson 120 is defined in app/extended_curriculum.py:1360-1366 as the final assembly covering project structure, tests, README, installation, and launch, but this replacement turns it into a changelog-formatting function. Since the handwritten content replaces the original subtitle, theory, and questions, the course now ends without exercising any of its intended release-readiness workflow.

Useful? React with 👍 / 👎.

@gon7187
gon7187 merged commit 8ec52d5 into main Oct 22, 2026
2 checks passed
@gon7187
gon7187 deleted the zavod/54-rukopisnye-uroki-113-120 branch October 22, 2026 23:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant