Files
ddadminandClaude Opus 4.6 5b98a5b203 docs(main): очистка docs, адаптация для студентов, починка ссылок
Шаг 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>
2026-03-12 23:14:22 +03:00

8.8 KiB
Raw Permalink Blame History

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).
  • 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.