Compare commits

...
2 Commits
7 changed files with 229 additions and 2 deletions

No files matched your search

+14
View File
@@ -60,3 +60,17 @@
- Уважай существующие изменения пользователя и не откатывай их без запроса. - Уважай существующие изменения пользователя и не откатывай их без запроса.
- Предпочитай минимальные изменения, которые делают курс проще и устойчивее для новичка. - Предпочитай минимальные изменения, которые делают курс проще и устойчивее для новичка.
- Если непонятно, какой маршрут сейчас актуален, доверяй `START_HERE.md` и `docs/course_program.md`, а не старым HOWTO или планам. - Если непонятно, какой маршрут сейчас актуален, доверяй `START_HERE.md` и `docs/course_program.md`, а не старым HOWTO или планам.
## Agent skills
### Трекер задач
Задачи ведутся в Gitea Issues этого репозитория через `tea`. Подробнее: `docs/agents/issue-tracker.md`.
### Метки триажа
В репозитории используются пять стандартных меток триажа. Подробнее: `docs/agents/triage-labels.md`.
### Документация предметной области
Документация предметной области устроена по схеме `single-context`. Подробнее: `docs/agents/domain.md`.
+45
View File
@@ -0,0 +1,45 @@
# Документация предметной области
Правила работы инженерных навыков с документацией предметной области при
изучении кодовой базы.
## Что прочитать перед изучением кодовой базы
- **`CONTEXT.md`** в корне репозитория
- **`CONTEXT-MAP.md`** в корне репозитория, если он существует: файл указывает
на отдельные `CONTEXT.md` для разных контекстов
- **`docs/adr/`**: ADR, относящиеся к области предстоящих изменений
Если какого-либо файла или каталога нет, продолжай работу без предупреждения.
Не отмечай его отсутствие и не предлагай создать его заранее. Навык
`/domain-modeling` создаёт такие документы по мере необходимости, когда
появляются новые термины или архитектурные решения.
## Структура файлов
Этот репозиторий использует схему `single-context`:
```text
/
├── CONTEXT.md
├── docs/adr/
│ ├── 0001-example-decision.md
│ └── 0002-another-decision.md
└── src/
```
## Используй термины из глоссария
Когда в результате работы появляется понятие предметной области — например, в
названии задачи, предложении по рефакторингу, гипотезе или названии теста, —
используй термин из `CONTEXT.md`. Не заменяй его синонимами, которые глоссарий
явно исключает.
Если нужного понятия в глоссарии нет, проверь, действительно ли оно относится
к проекту. Если относится, зафиксируй пробел для последующей проработки через
`/domain-modeling`.
## Отмечай противоречия с ADR
Если предлагаемое изменение противоречит существующему ADR, явно укажи на
конфликт, а не отменяй ранее принятое решение молча.
+63
View File
@@ -0,0 +1,63 @@
# Трекер задач: Gitea
Задачи и спецификации этого репозитория хранятся в Gitea Issues:
`git.dementev.space/ddmitry/mini-lakehouse-lab`. Для работы с ними используй
CLI `tea`.
## Основные команды
- **Создать задачу**:
`tea issues create --title "..." --description "..."`
- **Прочитать задачу вместе с комментариями**:
`tea issues <номер> --comments --output yaml`
- **Получить список задач**:
`tea issues list --state open --output json`; при необходимости добавь
фильтры, например `--labels`
- **Добавить комментарий**:
`tea comments add <номер> --description "..."`
- **Добавить или удалить метки**:
`tea issues edit <номер> --add-labels "..."` или
`tea issues edit <номер> --remove-labels "..."`
- **Назначить исполнителя**:
`tea issues edit <номер> --add-assignees "<имя пользователя>"`
- **Закрыть задачу**: сначала опубликуй итоговый комментарий через
`tea comments add`, затем выполни `tea issues close <номер>`
Запускай команды из каталога репозитория: `tea` определит Gitea-подключение и
репозиторий по Git remote.
## Pull request как источник задач для триажа
**Обрабатывать pull request как входящие задачи: нет.**
Измени значение на `да`, если в будущем репозиторий начнёт рассматривать
внешние pull request как запросы на изменение. Навык `/triage` читает эту
настройку.
## Когда навык просит опубликовать задачу в трекере
Создай Gitea Issue с помощью `tea issues create`.
## Когда навык просит получить связанную задачу
Выполни `tea issues <номер> --comments --output yaml`.
## Операции Wayfinder
Навык `/wayfinder` использует одну задачу-карту и связанные с ней дочерние
задачи.
- **Карта**: задача с меткой `wayfinder:map`, содержащая разделы Notes,
Decisions-so-far и Fog
- **Дочерняя задача**: задача, описание которой начинается со строки
`Part of #<номер карты>` и содержит метку типа `wayfinder:<тип>`:
`research`, `prototype`, `grilling` или `task`
- **Блокировка**: строка `Blocked by: #<номер>, #<номер>` в начале описания;
задача разблокирована, когда закрыты все перечисленные задачи
- **Фронтир**: найди открытые дочерние задачи карты, исключи назначенные и
заблокированные, затем выбери первую по порядку в карте
- **Взять в работу**: назначь исполнителя командой
`tea issues edit <номер> --add-assignees "<имя пользователя>"`; это первая
запись в трекер в рамках сессии
- **Завершить**: опубликуй ответ в комментарии, закрой дочернюю задачу и добавь
в раздел Decisions-so-far карты ссылку на сохранённый контекст
+16
View File
@@ -0,0 +1,16 @@
# Метки триажа
Навыки используют пять стандартных ролей триажа. Таблица связывает эти роли с
метками трекера данного репозитория.
| Роль в mattpocock/skills | Метка в нашем трекере | Значение |
| ------------------------ | --------------------- | -------- |
| `needs-triage` | `needs-triage` | Сопровождающий должен оценить задачу |
| `needs-info` | `needs-info` | Для продолжения нужен ответ автора |
| `ready-for-agent` | `ready-for-agent` | Задача полностью описана и готова для автономного агента |
| `ready-for-human` | `ready-for-human` | Задачу должен выполнить человек |
| `wontfix` | `wontfix` | Задача не будет выполняться |
Когда навык упоминает роль, используй соответствующую метку из этой таблицы.
Если набор меток репозитория изменится, обнови правый столбец.
+2
View File
@@ -42,6 +42,8 @@
| `plans/` | Внутренний статус работ, живые планы, декомпозиция задач | Источник истины для student-facing маршрута | | `plans/` | Внутренний статус работ, живые планы, декомпозиция задач | Источник истины для student-facing маршрута |
| `docs/archive/` | Справочный legacy-контент | Актуальные инструкции без явной пометки `legacy` | | `docs/archive/` | Справочный legacy-контент | Актуальные инструкции без явной пометки `legacy` |
Отзывы студентов и порядок следующих доработок собраны в [плане развития курса](../plans/course-roadmap.md). Подробные задания и текущий статус исполнения ведутся в [Gitea Issues](https://git.dementev.space/ddmitry/mini-lakehouse-lab/issues); правила работы с трекером описаны в [issue-tracker.md](./agents/issue-tracker.md).
## Порядок приоритетов, если документы расходятся ## Порядок приоритетов, если документы расходятся
- Для реального поведения стенда: `docker-compose.yml` и runtime-конфиги важнее `README.md`. - Для реального поведения стенда: `docker-compose.yml` и runtime-конфиги важнее `README.md`.
+8 -2
View File
@@ -2,14 +2,20 @@
Этот каталог хранит внутренние рабочие планы по развитию учебного курса. Этот каталог хранит внутренние рабочие планы по развитию учебного курса.
## Развитие после первой версии
[План развития курса](./course-roadmap.md) — отзывы студентов, ближайшие доработки, их порядок и ссылки на задачи в Gitea.
## Правила хранения ## Правила хранения
- Формат: `living docs`. - Формат: `living docs`.
- История изменений хранится в git. - История изменений хранится в git.
- Именование файлов: `module-NN-<english-slug-from-module-title>.md`. - Именование планов отдельных модулей: `module-NN-<english-slug-from-module-title>.md`.
- В каждом плане фиксируются `Статус` и `Последнее обновление`. - В каждом плане фиксируются `Статус` и `Последнее обновление`.
## Оглавление ## Планы разработки модулей первой версии
Ниже сохранены планы разработки восьми модулей. Их статусы отражают записи в этих документах; актуальный маршрут прохождения описан в [программе курса](../docs/course_program.md).
| Модуль | План | Статус | Целевые артефакты | Обновлён | | Модуль | План | Статус | Целевые артефакты | Обновлён |
| --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- |
+81
View File
@@ -0,0 +1,81 @@
# План развития курса «Lakehouse без магии»
Статус: ближайшие доработки определены, реализация впереди.
Последнее обновление: 2026-09-15.
Здесь собираем отзывы студентов, выбираем следующие улучшения и объясняем их порядок. Подробные задания, критерии приёмки и актуальный статус исполнения хранятся в [Gitea Issues](https://git.dementev.space/ddmitry/mini-lakehouse-lab/issues).
Текущие рамки курса задаёт [PRD](../docs/course_prd.md), а состав уроков — [программа](../docs/course_program.md). Запись в этом плане означает будущую работу. При реализации изменения сначала обновляем соответствующий канонический документ, затем учебные материалы и ссылки на них.
## Обратная связь
### Базовая настройка Spark-сессии
- **Источник:** отзыв Арсения Деева, переданный автором курса и зафиксированный 2026-09-15. На момент отзыва студент дошёл до модуля 4.
- **Наблюдение студента:** курс подходит начинающим, но не хватает базовой настройки Spark-сессии без сложного тюнинга.
- **Учебный пробел:** студент использует подготовленную сессию; ему нужна практика, чтобы понять, какие настройки потребуются вне готового ноутбука.
- **Решение:** добавить короткую обязательную практику после модуля 2, перед работой с raw-данными в модуле 3. До её разработки проверить воспроизводимость создания сессий.
Отзыв относится к уже пройденной части курса. Замечания по модулям 5–8 пока не получены.
## Ближайшие работы
### 1. Проверить и исправить создание Spark-сессий
**Статус:** запланировано; выполняется первым.
**Задача:** [#1 — подключение Spark-сессий в новом ядре](https://git.dementev.space/ddmitry/mini-lakehouse-lab/issues/1).
В `src/spark/cluster_smoke.py` адрес master задаётся явно. В модуле 2 комментарий говорит, что master берётся из `spark-defaults.conf`, однако в этом файле нет `spark.master`. В модулях 2–8 сессия создаётся без явного `.master(...)`. Это подтверждённое расхождение исходников; фактический режим работы этих ноутбуков в новом ядре ещё не проверен.
Нужно проверить создание сессии каждого ноутбука в отдельном новом ядре, зафиксировать фактический master и привести код и пояснения к воспроизводимому способу подключения. Повторное прохождение сохраняет учебные данные из предыдущих модулей: независимость от состояния ядра не означает независимость от этих данных.
**Результат:** каждый ноутбук подключается к ожидаемому Spark-кластеру после перезапуска ядра; документация правильно объясняет источник настроек. Проверки и необходимые исправления описываются в задаче.
### 2. Добавить практику «Как настроен Spark в нашем стенде»
**Статус:** запланировано; зависит от результата работы 1.
**Задача:** [#2 — практика базовой настройки SparkSession](https://git.dementev.space/ddmitry/mini-lakehouse-lab/issues/2), заблокирована задачей #1.
Практику разместить в начале модуля 3. Ориентир — 20–30 минут; фактическую длительность проверить при прохождении.
Студент должен научиться:
- объяснять роли `SparkSession`, `SparkContext`, driver и executors на примере стенда;
- читать код с `master`, `appName` и `getOrCreate`;
- находить источник настройки: конфигурационный файл, параметры запуска или код;
- проверять фактический master и выбранные настройки каталога Iceberg и MinIO;
- различать настройки, меняемые во время работы, и настройки, требующие нового запуска;
- понимать, что повторное выполнение ячейки может использовать уже существующую сессию.
**Практика и checkpoint:** студент заполняет небольшой шаблон создания сессии, задаёт подключение к кластеру и имя приложения, использует подготовленные настройки каталога, проверяет фактическое подключение и читает небольшую учебную Iceberg-таблицу. Таблица должна создаваться самой практикой: демонстрационные таблицы модуля 2 могут быть удалены при его завершении. Студент объясняет, какие настройки он задал сам, какие предоставил стенд и что потребуется повторить в новом ядре.
При реализации обновить learning outcomes и scope в PRD, содержание и checkpoint модуля 3 в программе, ноутбук и связанные справочные материалы. Сохранить структуру из восьми модулей.
**Граница темы:** базовая настройка подключения и жизненный цикл сессии. Подробный подбор памяти, числа executors, shuffle и GC остаётся за рамками этой доработки.
### 3. Собрать замечания по оставшейся части курса
**Статус:** ожидается продолжение обратной связи.
По мере прохождения Арсением остальных модулей добавлять конкретные наблюдения в этот документ. После полного прохода выбрать следующие доработки с учётом повторяющихся затруднений, самостоятельности студента и общей длительности курса.
Новые issues создавать, когда понятны проблема, ожидаемый результат и способ его проверки.
## Отложенные идеи
- Небольшой дополнительный опыт с числом партиций и наблюдением выполнения в Spark UI. Вернуться к нему после проверки объёма базовой практики; потребуется объяснить распределённое выполнение.
- Другие возможные расширения перечислены в [разделе 7 программы](../docs/course_program.md#7-что-не-входит-в-первую-версию-курса). Их включение и порядок пока не определены.
Номер и дата следующего релиза пока не назначены.
## Как обновлять этот план
Для нового предложения записывать: источник и этап прохождения → наблюдение → учебный пробел → предлагаемое изменение → проверяемый результат → статус и ссылка на issue.
После реализации добавлять ссылку на итог задачи и кратко отмечать, что изменилось для студента. Подробные критерии и ход исполнения сохранять в issue.
## Выпущенные улучшения
Доработки из этого плана ещё не выпущены.