Шаг 5 плана main/solution split: - Удалены внутренние документы с main: plans/, archive/, PRD, assignment_design, pxf_bookings, bookings_tz, benchmarks, TODO.md - AGENTS.md: убраны упоминания plans/archive, agent-dag-testing - Починены 19 битых markdown-ссылок во всех оставшихся файлах - bookings_ods_design: airplanes/seats помечены как студенческие, обновлён DAG-граф (routes без зависимости от airplanes) - bookings_dds_design: обновлено описание DQ факта (student SK) - bookings_to_gp_dds: обновлена DQ-семантика для main - qa-plan: уточнено — ods.airplanes/seats пусты by design на main Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.8 KiB
8.8 KiB
Agent System Instructions & Repository Guidelines
Этот репозиторий — учебный DWH-стенд (Airflow, Greenplum, Postgres) для начинающих Data инженеров.
1. Главное правило генерации кода (Баланс)
Создаваемый код должен иметь учебную ценность: быть эталоном для "боевого" применения, но без избыточного усложнения (over-engineering).
- Production-ready: Учитывайте идемпотентность DAG'ов, транзакционность, отсутствие хардкода секретов.
- KISS: Не используйте сложные ООП-паттерны, метапрограммирование или избыточные абстракции, если задачу решает стандартный оператор (например,
PostgresOperator). - Фокус на «Почему»: При использовании специфичных паттернов DWH (например,
delete + insertдля инкремента в Greenplum вместоmerge) — добавляйте краткий комментарий, объясняющий этот выбор студентам.
2. Карта проекта (Навигация для Агента)
airflow/dags/— DAG-файлы (напр.bookings_to_gp_stage.py).sql/— DDL и SQL-скрипты. Разделены на слои: src/ (исходные системы), stg/ (стейджинг), ods/ (операционное хранилище), dds/ (детальное хранилище), dm/ (слой витрин).- Правило ИИ: DDL таблиц хранится строго рядом с объектом (напр.
sql/stg/bookings_ddl.sql).
- Правило ИИ: DDL таблиц хранится строго рядом с объектом (напр.
docs/— документация. Подкаталоги:design/(дизайн, стандарты),reference/(справочники),assignment/(задание для студента).docs/design/naming_conventions.md— единый источник нейминга служебных и SCD-полей. Правило ИИ: всегда сверяться при генерации DDL/SQL.- Полные дизайн-документы (PRD, assignment_design, планы, архив) — в ветке
solution.
tests/— pytest-тесты (smoke-тесты DAG'ов и юнит-тесты)..env— Настройки окружения (все секретыGP_*,AIRFLOW_*берем только отсюда).
3. Среда и Инструменты (Терминал)
Мы используем uv для управления зависимостями и make для автоматизации.
- Запрещено использовать
pip install --user. Толькоuv. - Если нужно запустить команду в терминале, используйте
uv run ... - Доступные Make-таргеты (агент может вызывать их для проверок):
make fmt,make lint— форматирование (black,isort) и линтинг кода.make test— запускpytest.make up/make stop/make down— управление контейнерами docker-compose.make ddl-gp— накат DDL на Greenplum.
4. Airflow + SQL Специфика
- В учебных DAG'ах основная логика выносится в SQL. По умолчанию используйте
PostgresOperator+ Airflow Connections (sql='sql/stg/bookings_load.sql'). - Сложную работу с соединениями (например,
psycopg2напрямую в Python) используйте только там, где реально много Python-логики и это служит учебной цели.
5. Стиль и Оформление
- Язык: Комментарии, docstrings, тексты ошибок — на русском языке. Ошибки должны быть дружелюбными и подсказывать студенту, что делать дальше.
- Код: Переменные, функции, SQL-идентификаторы (
snake_case) — на английском. - Коммиты: Придерживайтесь Conventional Commits (
feat:,fix:,docs:,refactor:). Если меняется логика DAG'а, в описании PR (или коммита) указывайте, что именно изменилось.
Структура и нейминг SQL (слои DWH)
- В каталоге
sql/придерживаемся слоёв DWH:sql/src/— скрипты, работающие с исходными системами (например,bookings_generate_day_if_missing.sql);sql/stg/— скрипты для стейджинга (bookings_ddl.sql,bookings_load.sql,bookings_dq.sql);sql/ods/— скрипты ODS (операционное хранилище);sql/dds/— скрипты DDS (детальное хранилище, star schema);sql/dm/— скрипты DM (витрины / data marts).
- Нейминг служебных полей и SCD-полей фиксирован в
docs/design/naming_conventions.md(единый источник для всех новых слоёв). - Именование файлов:
{объект}_{роль}.sql, где:объект— логическое имя сущности (bookings,orders, и т.п.);роль—ddl(создание/изменение объектов),load(загрузка/инкремент),dq(проверки качества данных) и т.п.
- Общие DDL-скрипты (например,
sql/ddl_gp.sql) могут подключать файловые DDL через\i, но сами определения таблиц живут рядом с объектом (sql/stg/bookings_ddl.sqlи т.п.).
Airflow + SQL
- В учебных DAG’ах, где основная логика — в SQL, по умолчанию используем
PostgresOperator+ Airflow Connections:- DAG оркестрирует шаги и подключение к БД;
- SQL-скрипты лежат в
sql/...и подключаются по пути (sql='sql/stg/bookings_load.sql').
- Сложную ручную работу с подключениями (
psycopg2, ENV-фоллбеки) используем только там, где реально много Python-логики и это помогает учебной цели.
Тестирование
- Тесты лежат в
tests/(pytest). Запуск:make test. - Есть smoke‑тесты DAG‑структуры (
tests/test_dags_smoke.py). - Smoke‑тесты DAG автоматически пропускаются, если Airflow не установлен в venv.
- Для ручного прогона стенда см.
TESTING.md(пошаговый чек‑лист для студентов).
Pull Requests
- Conventional Commits:
feat:,fix:,docs:,chore:,refactor:. Пример:feat(dags): load orders to Greenplum. - Держите изменения минимальными и локальными. Не переименовывайте Make‑таргеты без обновления документации.
- В описании PR добавляйте скрин DAG‑графа или логи задач, если менялась логика.
- При изменении схемы/поведения — обновляйте
README.mdиsql/ddl_gp.sql.
Безопасность и конфигурация
- Все настройки — через
.env; креды в коде не хардкодим. Частые переменные:GP_*,PG_*,AIRFLOW_*. make cleanудаляет тома — предупреждайте студентов, что данные пропадут.
Для агента (особенности аудитории)
- Пишите простыми словами. Добавляйте короткие комментарии к нетривиальной логике.
- Избегайте больших рефакторингов и сложных паттернов — студенты только начинают.
- Ошибки и логи — дружелюбные и понятные (лучше с подсказкой «что сделать дальше»).
- Перед релевантными правками валидируйте локально:
make up, затем откройте DAG в UI и/или прогонитеmake test.