- Зачем:
- runbook требовал незафиксированного контекста для первого деплоя и восстановления сайта на чистой VPS.
- Что:
- добавлены prerequisites, установка пакетов, первый workflow, UFW и проверенный атомарный откат.
- спецификация и PRD обновлены по факту завершённого переноса на VPS.
- локальные команды Snap uv заменены на persistent Python venv.
- Проверка:
- mkdocs build --strict выполнен через persistent venv пользователя gitea-runner.
- последовательность rollback проверена на временном дереве releases и symlink.
- Зачем:
- стандартный nginx-vhost отдавал welcome page по IP, а HTTPS по IP получал сертификат de.dementev.space.
- Что:
- default vhost настроен на HTTP 404 и отказ TLS для IP и неизвестного SNI.
- runbook дополнен точной процедурой Certbot, восстановлением и проверками.
- завершённая задача публикации перенесена в раздел «Сделано».
- Проверка:
- live и bootstrap-конфигурации прошли nginx -t; доменный HTTPS отдаёт 200, неизвестный Host — 404, TLS по IP отклоняется.
- mkdocs build --strict выполнен через persistent venv пользователя gitea-runner.
- Зачем:
- Snap uv не запускался внутри ограниченного systemd-сервиса без cap_dac_override.
- Что:
- workflow переведён на постоянный Python venv с pinned requirements.
- повторные сборки проверяют зависимости через pip без их переустановки.
- Snap удалён из PATH runner, runbook дополнен python3-venv и описанием окружения.
- Проверка:
- от имени gitea-runner дважды выполнены pip install, pip check и mkdocs build --strict; второй запуск переиспользовал окружение.
- обновлённый systemd unit прошёл systemd-analyze verify и успешно перезапущен.
- Зачем:
- основной сайт не должен зависеть от заблокированной учётной записи GitHub.
- Что:
- добавлены строгая сборка и атомарная публикация через repository-scoped runner.
- добавлены воспроизводимые конфигурации systemd, nginx и эксплуатационный runbook.
- проектная документация и ссылки на репозиторий обновлены для Gitea.
- Проверка:
- выполнены mkdocs build --strict, Bash/YAML-проверки и локальный HTTP smoke-check.
- runner зарегистрирован, ограничен средствами systemd и виден в Gitea как online.
- Зачем:
- нужен согласованный вариант публикации сайта без зависимости от GitHub Pages.
- Что:
- описан контур Gitea Actions, host runner, nginx и резерв на GitHub Pages.
- в архитектурный документ добавлена ссылка на новую спецификацию.
- Проверка:
- git diff --cached --check.
- Зачем:
- единственный пробел заявленной базы: все стенды консольные, а в
роадмапе не было ни одного упоминания bash/ssh/командной строки (P1).
- Что:
- в блок «Git и базовые инструменты» добавлен подраздел с видео-интро,
тремя статьями (навигация и grep, права файлов, ssh) и опциональным
интерактивным курсом Hexlet; примечание про WSL для Windows.
- критерии готовности блока дополнены терминалом, grep и правами/ssh;
в оглавление добавлен Linux; задача перенесена в «Сделано» в TODO.
- Проверка:
- mkdocs build --strict — сборка без ошибок;
- все ссылки проверены на живость и соответствие содержимого
(curl --noproxy для RU-доменов, покрытие видео — по субтитрам).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- project/TODO.md не упоминался в AGENTS.md — агенты и участники
его не находили при планировании работ;
- список не имел приоритетов, выполненное не отмечалось
- Что:
- в AGENTS.md добавлен указатель на project/TODO.md как бэклог проекта;
- задачи сгруппированы по приоритетам P1–P3: наверху CI-проверка
ссылок и подраздел «Linux и терминал», ниже перенос учебника
Airflow, GA, трудозатраты, шаблон прогресса, затем dbt-стенд,
абзац про DQ и бейджи статусов (помечены сомнения);
- раздел «Сделано»: пункт про сложность алгоритмов закрыт
коммитом 6f61c0e
- Проверка:
- mkdocs build --strict (без ошибок; project/ исключён из сайта)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- введение Lakehouse было одним громоздким абзацем, тяжело читалось;
- секция ClickHouse, наоборот, начиналась сразу со списка ссылок
- Что:
- введение Lakehouse разбито на три коротких абзаца с простыми фразами,
смысл сохранён (разделение хранения и вычислений, роль табличного
формата, вариативность технологий);
- в ClickHouse добавлены два вводных предложения: что это и почему
тема важна для собеседований
- Проверка:
- mkdocs build --strict (без ошибок)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- менти спрашивают, что такое Lakehouse и чем он отличается от
классического DWH — во введении секции не было ответа и ссылки;
- материалы по Iceberg лежали в «Дополнительных материалах», где их
не найти по пути через секцию Lakehouse;
- заглушка «в подготовке» выглядела незавершённостью раздела
- Что:
- во введение секции добавлено объяснение отличия Lakehouse от
классического DWH (открытые форматы, объектное хранилище,
независимое масштабирование движков);
- добавлено введение: статья Arenadata «Как не утонуть в данных:
выбираем между DWH, Data Lake и Lakehouse» (Habr);
- добавлен блок «Глубже про Iceberg»: видео Владимира Озерова
«Как на самом деле работает Apache Iceberg» и статья VK Tech
«Введение в устройство Parquet и Iceberg» (с пометкой о сложности);
- из «Дополнительных материалов» в этот блок перенесены статья
ivan-shamaev про Iceberg и видео «Spark + Iceberg in 1 Hour»;
- удалена строка «Видео по прохождению собеседований из сообщества
ОМ — в подготовке»
- Проверка:
- mkdocs build --strict (без ошибок);
- все три новые ссылки отвечают 200 (проверены с обходом прокси)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- порядок секций противоречил анонсу раздела (Streaming объявлен первым);
- Kafka из Streaming-блока — прямой вход в clickstream-стенд ClickHouse;
- Lakehouse был помечен «в разработке», хотя стенд mini-lakehouse-lab
уже содержит полноценный курс
- Что:
- секция Streaming (NiFi + Kafka) перенесена перед ClickHouse,
добавлена связка «Kafka пригодится на стенде ClickHouse»;
- ClickHouse: уточнено, что упражнения курса Яндекса можно делать
в их облаке (платно) или бесплатно на clickhouse-learning-cluster;
clickstream-стенд обозначен как следующий шаг со своими уроками;
- Lakehouse: убрана заглушка «Секция в разработке», секция переписана
вокруг курса «Lakehouse без магии» (8 модулей, ~12–15 часов,
raw → bronze → silver на NYC Taxi, Spark + Trino, checkpoint'ы);
- оглавление: порядок «Streaming, ClickHouse, Lakehouse, dbt»
- Проверка:
- mkdocs build --strict (без ошибок);
- порядок h3-заголовков в site/index.html соответствует новому
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- отдельный раздел «Понятие сложности алгоритмов» избыточен для DE-роадмапа;
- SQL-часть (JOIN, индексы, объём сканирования) уже покрыта курсом QPT
- Что:
- раздел удалён из блока практики;
- в «продвинутые» темы Python добавлена статья «Сложность алгоритмов.
Разбор Big O» (habr.com/ru/articles/782608)
- Проверка:
- mkdocs build --strict (без ошибок);
- в оглавлении ссылок на удалённый раздел не было
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- относительные ссылки на каталоги sql/ и data/ давали 404 на GitHub Pages;
- em-dash в заголовках нарушает правило AGENTS.md (расходятся слаги GitHub/MkDocs);
- 2-пробельная вложенность и списки без пустой строки ломали рендер в MkDocs
- Что:
- ссылки на папки заменены на GitHub-tree-ссылки (работают на обеих платформах);
- в 26 заголовках « — » заменено на «: » или убрано (README, SCD, DataVault, домашка);
- пустая строка перед списком «Главные правила» в DataVault;
- вложенные списки DataVault переведены на 4-пробельный отступ
- Проверка:
- mkdocs build --strict (без ошибок);
- grep по репо — якорных ссылок на старые слаги заголовков нет;
- grep по site/dwh-modeling/*.html — списки рендерятся <ul>/<li>, вложенность сохранена
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- расширить роадмап практическим разделом о работе с ИИ-ассистентами.
- Что:
- добавлена вводная страница ai-dev/README.md.
- добавлен перевод «Лучшие практики работы с coding agents» (ai-dev/best-practice.md).
- добавлен перевод «Механизм памяти coding agents» (ai-dev/memory-mechanism.md).
- добавлен раздел «Разработка с ИИ» в навигацию mkdocs.yml.
- Проверка:
- mkdocs build --strict проходит без ошибок.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- менти и посетителям сайта нужен быстрый способ связаться с ментором.
- Что:
- добавлена floating-кнопка Telegram (левый нижний угол, всегда видна при скролле).
- добавлены иконки Telegram и GitHub в футер через extra.social.
- создан template override (overrides/main.html) с inline-стилями.
- Проверка:
- mkdocs build --strict проходит без ошибок.
- кнопка видна на всех страницах, ведёт на t.me/dementev_dev.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- роадмап нуждается в презентабельном виде с навигацией и поиском, а не только GitHub README.
- Что:
- создан mkdocs.yml (Material, docs_dir: ., поиск на русском, тёмная/светлая тема).
- создан .github/workflows/deploy-site.yml (push в main → сборка → GitHub Pages).
- адаптирован Markdown для dual compatibility (GitHub + MkDocs): пустые строки перед списками, отступы 2sp→4sp, заголовки README #→## для корректного TOC.
- заменены em-dash на запятые в 4 заголовках dwh-modeling/README.md (фикс расхождения якорей).
- добавлены правила Markdown Style и команды MkDocs/Playwright в AGENTS.md.
- Проверка:
- uv run --with 'mkdocs-material==9.6.14' --with 'mkdocs-same-dir==0.1.3' mkdocs build --strict
- Зачем:
- плейсхолдеры и внутренние заметки ментора были видны студентам.
- Что:
- заменён плейсхолдер про резюме на описание совместной практики с ментором.
- секция «Навыки поиска работы с HH и Habr карьера» переименована в «Поиск работы и собеседования».
- убран дубль ссылки на видео про испытательный срок.
- плейсхолдеры про собесы заменены на пункт «мок-собеседования с ментором» и отметку «в подготовке».
- Проверка:
- визуальная проверка рендеринга README.md.
- Зачем:
- упрощение роадмапа: курсовая и практика Greenplum теперь используют один стенд.
- Что:
- курс Yandex по Greenplum выделен как основной.
- практика по Greenplum привязана к стенду airflow-dwh-gp-lab.
- курсовая работа переписана под использование того же стенда.
- добавлено описание эталонного DWH и автоматической проверки.
- удалена секция "Стенд в Docker Compose" из оглавления.
- Проверка:
- git diff HEAD~1 README.md.
- Зачем:
- объединить улучшенные учебные материалы по DWH-моделированию в основную ветку.
- Что:
- добавлен COMMIT_RULES.md с правилами оформления коммитов.
- добавлено решение домашнего задания (09_dml_hw_customer_status_solution.sql).
- улучшена документация: расширены разделы 3NF и Звезда, добавлены пояснения по ODS.
- исправлены опечатки и SQL-скрипты по результатам ревью.
- обновлены CSV-данные для корректной работы примеров.
- Проверка:
- git log --oneline -5.
- просмотр изменённых файлов в dwh-modeling/.
- customer_segment: убрана несуществующая колонка dim_customer, заменена
на CASE по сумме (как в 06_dml_dm.sql)
- MATERIALIZED VIEW заменён на TRUNCATE + INSERT INTO (как в скриптах),
упоминание MV оставлено в ремарке
- добавлен комментарий о недетерминированности CURRENT_DATE в bounds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- в статье и скриптах обнаружены фактические ошибки и несостыковки
- Что:
- README: f.order_date -> d.date_actual в примере витрины (колонки order_date нет в fact_sales)
- README: «календарь на 10 лет» -> «5 лет» (соответствует генерации 2023-2027 в скрипте)
- 09_solution: bounds CTE теперь использует CURRENT_DATE для открытых интервалов (valid_to IS NULL)
- 09_solution: комментарий про дубли в STG при повторном запуске блока 3
- 05_ddl_dm: выравнивание total_line_items
- AGENTS.md: обновлён диапазон скриптов 01-09
- Проверка:
- визуальная проверка diff
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- менти видит два разных паттерна ODS (снимок vs event log) и не понимает почему
- Что:
- в решении домашки (блок 1 ODS): комментарий, почему customer_status хранит все события
- в домашке (раздел 3.2): пометка о сознательном выборе модели ODS
- Проверка:
- визуальная проверка diff
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- решение домашки должно быть самодостаточным и наглядным для самопроверки
- Что:
- добавлены контрольные SELECT после каждого блока (ODS, DDS, инкремент, DM)
- блок 3 (инкремент) стал самодостаточным: загрузка в STG + UPSERT в ODS + SCD2
- DDL витрины вынесен из решения/шаблона/домашки в 07_ddl_hw_customer_status.sql
- предусловия в домашке дополнены (05_ddl_dm.sql, пояснение про dim_date)
- в шапку решения добавлено напоминание сначала попробовать самостоятельно
- Проверка:
- визуальная проверка diff
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- разделы 3NF и Звезда были слишком краткими для учебного материала,
менти не видел разницу между моделями на практике
- Что:
- 3NF: добавлена mermaid-диаграмма с dim_city и SQL-запрос (3 JOIN)
- Звезда: добавлена явная связь с разделом 5, SQL-запрос (2 JOIN) для контраста
- оба примера отвечают на один вопрос: «сколько потратил клиент из Москвы?»
- Проверка:
- визуальная проверка diff
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- убрать путаницу, дублирование и неточности в демо-скриптах и домашке
- Что:
- CSV: заголовок load_ts → _load_ts во всех файлах (совпадает с именем в таблицах)
- домашка: убраны оговорки о расхождении load_ts/_load_ts, добавлена ссылка на эталонное решение
- 09_dml_hw_customer_status_solution.sql: эталонное решение скопировано из ветки solution/hw_customer_status в основную
- 02_dml: добавлена карта загрузки в шапку (что откуда строится)
- 05_ddl_dm + 06_dml_dm: total_orders → total_line_items (название точнее отражает содержимое)
- Проверка:
- визуальная проверка diff, скрипты не запускались (демо-стенд не поднят)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Зачем:
- нужна единая спецификация для сообщений коммитов
- облегчение code review и читаемости истории
- Что:
- создан COMMIT_RULES.md с правилами Conventional Commits
- адаптированы scopes под репозиторий: sql, modeling, bookings, docs, data
- обновлена секция в AGENTS.md с ссылкой на полные правила
- Проверка:
- git log --oneline -1
- cat COMMIT_RULES.md | head -20