ТЗ ступени 2 «Свой график в Superset» и порядок программы в индексе лаб #226

Closed
opened 2026-09-03 23:43:03 +03:00 by ddmitry · 1 comment
Owner

Part of #206

Цель

Первая очередь карты (документация вокруг стенда) закрыта. Дальше — основная
программа. Этот тикет дает два результата:

  1. ТЗ ступени 2 «Свой отчет в Superset» — новый файл
    docs/labs/superset-chart.md.
  2. Порядок программы в docs/labs/README.md: семь ступеней и пять разделов
    факультативов по спеке
    «Программа учебных лаб»,
    раздел 3 и 4.

Урок ступени (спека): увидеть, как собственный результат из хранилища
становится отчетом в BI, не превращая знакомство с инструментом в отдельный
проект. Один график. Результат проверяется глазами.

Решения, принятые здесь

Это вкусовая часть; исполнитель их не пересматривает.

ТЗ ступени 2.

  • Файл docs/labs/superset-chart.md, заголовок «Свой график в Superset».
    Форма — по образцу docs/labs/superset-dashboard.md: «Чему учит», роль,
    что сделать, «Как проверить себя», «Приемка» чекбоксами. Обращение — «ты»,
    как в соседних ТЗ. Объем — заметно короче ТЗ дашборда: один график.

  • Витрина — dm.session_overview_v, результат задания 3 ступени 1. Вопрос
    графика: с какого устройства чаще уходят после первой страницы. Показать
    долю отказов по категориям устройств за весь период витрины. Тип —
    столбики, измерение device_category, одна метрика.

  • Метрика живет в датасете, а не в графике: выражение
    SUM(bounce_sessions) / SUM(sessions), русское имя «Доля отказов»,
    формат D3 .1%. Два довода, оба назвать в ТЗ: урок задания 3 — доля
    считается из слагаемых, среднее по готовым долям врет; правило зоны —
    подписи и формат живут в датасете, график только ссылается на них
    (справочник docs/architecture/superset.md, «Дерево импорта»).
    Практическая деталь: метрика заводится в редакторе датасета, вкладка
    «Metrics», поля «Metric Key», «Label», «SQL expression», «D3 format»
    (проверено на живом Superset 6.1.0 стенда). Вкладка «Custom SQL» есть
    только в конструкторе графика, и метрика оттуда живет в одном графике, а
    не в датасете; ТЗ на нее не отправляет.

  • Датасет — физический: подключение ClickHouse, схема dm, объект
    session_overview_v. Русские имена хотя бы у device_category и
    report_date.

  • Дашборд не создается. Сохраненного графика достаточно; экран из нескольких
    графиков — факультатив «Свой дашборд в Superset».

  • Ловушка календаря, назвать прямо в ТЗ: по умолчанию график строится без
    фильтра по времени («No filter»), и это правильный выбор. Стоит выбрать
    относительный период («Last week») — график опустеет: модельный календарь
    стенда отстает от настоящего на месяцы (сейчас витрины стенда заканчиваются
    2026-06-10, на дворе сентябрь; проверено запросом к API графиков). Период —
    без фильтра либо явные даты. Дата 2026-06-10 в ТЗ не пишется: она уедет;
    пишется «загляни в max(report_date)».

  • Проверка — глазами и одним запросом в SQL Lab:

    SELECT device_category,
           round(100 * sum(bounce_sessions) / sum(sessions), 1) AS bounce_pct
    FROM dm.session_overview_v
    GROUP BY device_category
    ORDER BY device_category;
    

    Запрос отдает проценты с одним знаком, как и формат .1% на графике:
    числа должны совпасть один в один. Задачи в homework_check для этой
    ступени нет, сказать это прямо, как в ТЗ дашборда.

  • Стендовые объекты не трогать. Что переживает make up и что стирает
    make clean — ссылкой на главу путеводителя docs/handbook/superset.md,
    «Стендовые объекты и ваши», без пересказа.

  • «Сначала прочитать» внутри ТЗ: глава путеводителя «Немного Superset» и
    задание 3.

README лаб.

  • Заголовок — «Учебные задания». Вступление: две части — основная
    программа из семи ступеней, которые идут по порядку, и факультативы, которые
    берут по желанию. Довод порядка и четыре формы заданий — ссылкой на спеку,
    не пересказом.
  • Раздел «Основная программа»: таблица из семи строк «ступень / задание /
    чему учит». Строка ступени 1 — «пять витрин слоя DM» с уроком ступени
    одной фразой и отсылкой к таблице ниже. Строка ступени 2 — ссылка на новое
    ТЗ. Ступени 3–7 — названия и урок одной строкой из раздела 3 спеки, без
    ссылок и без файлов-заглушек: ТЗ появятся по мере продвижения, и README это
    говорит одной фразой.
  • Сразу под таблицей — подраздел «Ступень 1: пять витрин слоя DM»: нынешняя
    таблица заданий 1–5 со своими ссылками и уроками, без изменений содержания.
  • Раздел «Факультативы»: пять разделов по спеке, у каждого — после какой
    ступени открывается и одна строка, о чем он. Сюжеты внутри разделов не
    перечислять: за списком — ссылка на раздел 4 спеки. Единственная ссылка на
    ТЗ — «Свой дашборд в Superset» в разделе «Superset и BI».
  • Разделы «Общие правила» и «Самопроверка» остаются как есть: это правила
    пяти витрин ступени 1, и в заголовке или первой фразе должно быть видно,
    что они про ступень 1. Раздел «Уборка» — общий для всех заданий, его не
    сужать. Внешних ссылок на якоря этих разделов нет (проверено
    grep -rn 'labs/README.md#'), переименовывать заголовки можно.
  • Обращение во всей папке docs/labs/ — «ты», как в ТЗ и в сохраняемых
    разделах README; новое вступление README пишется так же. Слово «менти»
    уходит из README и из первых строк ТЗ дашборда: вместо «остальные витрины
    строит менти» — «остальные строишь ты».
  • Точечная правка docs/labs/superset-dashboard.md, только шапка и слово
    «менти»: заголовок «Свой дашборд в Superset» без номера «Задание 6», первый
    абзац после «Чему учит» говорит, что это факультатив раздела «Superset и
    BI», открывается после ступени 2 и опирается на витрины ступени 1. Тело ТЗ
    дальше не трогается.

Кому поручать

Русскую прозу пишет Codex на gpt-5.6-terra, medium (владелец: лимиты
Sol сегодня кончаются). Ревью постановки — deep-reasoner. Ревью
реализации — одна линия, craftsman свежей сессией: уместность и вкус,
факты против спеки и кода. Финальная вычитка — свежий тред Codex terra
по скиллу ai-text-lint плюс оптика литературного русского; фактура
(имена, SQL, пути, состав ступеней) заморожена.

Критерии приемки

  • docs/labs/superset-chart.md существует, содержит все решения из
    раздела выше: витрина, вопрос, тип графика, метрика в датасете с
    выражением и форматом, ловушка календаря, запрос сверки, приемка
    чекбоксами.
  • docs/labs/README.md показывает семь ступеней и пять разделов
    факультативов; ссылки только на существующие файлы; файлов-заглушек
    нет.
  • Правила пяти витрин ступени 1 сохранены целиком и помечены как правила
    ступени 1.
  • grep -n 'ё' docs/labs/README.md docs/labs/superset-chart.md docs/labs/superset-dashboard.md молчит; grep -n 'менти' по тем же
    трем файлам молчит.
  • В docs/labs/superset-dashboard.md изменены только шапка и строка со
    словом «менти».
  • Все относительные ссылки из трех файлов ведут на существующие файлы,
    а якоря в спеку — на существующие заголовки (скрипт в командах
    проверки печатает только битые ссылки; пусто — зеленый).

Границы

  • Меняются три файла: docs/labs/README.md, новый
    docs/labs/superset-chart.md и шапка docs/labs/superset-dashboard.md.
    ТЗ 1–5, путеводитель, справочники, спека, DDL, даги, дерево импорта
    Superset не трогаются. make lint папку docs/labs/ не покрывает, гонять
    его незачем.
  • Стенд не трогать: витрин ступени 1 на нем нет, и строить их не нужно.
  • Никаких коммитов: правки остаются в рабочем дереве.

Сначала прочитать

  1. Спека docs/specs/2026-09-01-labs-program.md, разделы 2–4.
  2. docs/labs/README.md и docs/labs/superset-dashboard.md — нынешний
    индекс и образец формы ТЗ по Superset.
  3. docs/labs/session-overview.md — состав колонок витрины и урок про доли.
  4. docs/handbook/superset.md и docs/architecture/superset.md — что
    можно ссылкой, а не пересказом.
  5. AGENTS.md, раздел «Язык».

Команды проверки

F="docs/labs/README.md docs/labs/superset-chart.md docs/labs/superset-dashboard.md"
grep -n 'ё' $F
grep -n 'менти' $F
python3 - $F <<'PY'
import re, sys, os
for f in sys.argv[1:]:
    for m in re.finditer(r'\]\(([^)#]+)(#[^)]*)?\)', open(f).read()):
        path, anchor = m.group(1), m.group(2)
        if path.startswith('http'): continue
        t = os.path.normpath(os.path.join(os.path.dirname(f), path))
        if not os.path.exists(t): print(f, 'нет файла', path); continue
        if anchor and t.endswith('.md'):
            heads = [re.sub(r'[^\w\s-]', '', h.lower()).strip().replace(' ', '-')
                     for h in re.findall(r'^#+\s+(.*)$', open(t).read(), re.M)]
            if anchor[1:] not in heads: print(f, 'нет якоря', path + anchor)
PY

Скрипт ссылок печатает только битые; якоря сверяются по правилу Gitea:
строчные буквы, знаки препинания убраны, пробелы — дефисы.

Part of #206 ## Цель Первая очередь карты (документация вокруг стенда) закрыта. Дальше — основная программа. Этот тикет дает два результата: 1. ТЗ ступени 2 «Свой отчет в Superset» — новый файл `docs/labs/superset-chart.md`. 2. Порядок программы в `docs/labs/README.md`: семь ступеней и пять разделов факультативов по спеке [«Программа учебных лаб»](https://git.dementev.space/ddmitry/clickstream-data-platform/src/branch/main/docs/specs/2026-09-01-labs-program.md), раздел 3 и 4. Урок ступени (спека): увидеть, как собственный результат из хранилища становится отчетом в BI, не превращая знакомство с инструментом в отдельный проект. Один график. Результат проверяется глазами. ## Решения, принятые здесь Это вкусовая часть; исполнитель их не пересматривает. **ТЗ ступени 2.** - Файл `docs/labs/superset-chart.md`, заголовок «Свой график в Superset». Форма — по образцу `docs/labs/superset-dashboard.md`: «Чему учит», роль, что сделать, «Как проверить себя», «Приемка» чекбоксами. Обращение — «ты», как в соседних ТЗ. Объем — заметно короче ТЗ дашборда: один график. - Витрина — `dm.session_overview_v`, результат задания 3 ступени 1. Вопрос графика: с какого устройства чаще уходят после первой страницы. Показать долю отказов по категориям устройств за весь период витрины. Тип — столбики, измерение `device_category`, одна метрика. - Метрика живет в датасете, а не в графике: выражение `SUM(bounce_sessions) / SUM(sessions)`, русское имя «Доля отказов», формат D3 `.1%`. Два довода, оба назвать в ТЗ: урок задания 3 — доля считается из слагаемых, среднее по готовым долям врет; правило зоны — подписи и формат живут в датасете, график только ссылается на них (справочник `docs/architecture/superset.md`, «Дерево импорта»). Практическая деталь: метрика заводится в редакторе датасета, вкладка «Metrics», поля «Metric Key», «Label», «SQL expression», «D3 format» (проверено на живом Superset 6.1.0 стенда). Вкладка «Custom SQL» есть только в конструкторе графика, и метрика оттуда живет в одном графике, а не в датасете; ТЗ на нее не отправляет. - Датасет — физический: подключение `ClickHouse`, схема `dm`, объект `session_overview_v`. Русские имена хотя бы у `device_category` и `report_date`. - Дашборд не создается. Сохраненного графика достаточно; экран из нескольких графиков — факультатив «Свой дашборд в Superset». - Ловушка календаря, назвать прямо в ТЗ: по умолчанию график строится без фильтра по времени («No filter»), и это правильный выбор. Стоит выбрать относительный период («Last week») — график опустеет: модельный календарь стенда отстает от настоящего на месяцы (сейчас витрины стенда заканчиваются 2026-06-10, на дворе сентябрь; проверено запросом к API графиков). Период — без фильтра либо явные даты. Дата 2026-06-10 в ТЗ не пишется: она уедет; пишется «загляни в `max(report_date)`». - Проверка — глазами и одним запросом в SQL Lab: ```sql SELECT device_category, round(100 * sum(bounce_sessions) / sum(sessions), 1) AS bounce_pct FROM dm.session_overview_v GROUP BY device_category ORDER BY device_category; ``` Запрос отдает проценты с одним знаком, как и формат `.1%` на графике: числа должны совпасть один в один. Задачи в `homework_check` для этой ступени нет, сказать это прямо, как в ТЗ дашборда. - Стендовые объекты не трогать. Что переживает `make up` и что стирает `make clean` — ссылкой на главу путеводителя `docs/handbook/superset.md`, «Стендовые объекты и ваши», без пересказа. - «Сначала прочитать» внутри ТЗ: глава путеводителя «Немного Superset» и задание 3. **README лаб.** - Заголовок — «Учебные задания». Вступление: две части — основная программа из семи ступеней, которые идут по порядку, и факультативы, которые берут по желанию. Довод порядка и четыре формы заданий — ссылкой на спеку, не пересказом. - Раздел «Основная программа»: таблица из семи строк «ступень / задание / чему учит». Строка ступени 1 — «пять витрин слоя DM» с уроком ступени одной фразой и отсылкой к таблице ниже. Строка ступени 2 — ссылка на новое ТЗ. Ступени 3–7 — названия и урок одной строкой из раздела 3 спеки, без ссылок и без файлов-заглушек: ТЗ появятся по мере продвижения, и README это говорит одной фразой. - Сразу под таблицей — подраздел «Ступень 1: пять витрин слоя DM»: нынешняя таблица заданий 1–5 со своими ссылками и уроками, без изменений содержания. - Раздел «Факультативы»: пять разделов по спеке, у каждого — после какой ступени открывается и одна строка, о чем он. Сюжеты внутри разделов не перечислять: за списком — ссылка на раздел 4 спеки. Единственная ссылка на ТЗ — «Свой дашборд в Superset» в разделе «Superset и BI». - Разделы «Общие правила» и «Самопроверка» остаются как есть: это правила пяти витрин ступени 1, и в заголовке или первой фразе должно быть видно, что они про ступень 1. Раздел «Уборка» — общий для всех заданий, его не сужать. Внешних ссылок на якоря этих разделов нет (проверено `grep -rn 'labs/README.md#'`), переименовывать заголовки можно. - Обращение во всей папке `docs/labs/` — «ты», как в ТЗ и в сохраняемых разделах README; новое вступление README пишется так же. Слово «менти» уходит из README и из первых строк ТЗ дашборда: вместо «остальные витрины строит менти» — «остальные строишь ты». - Точечная правка `docs/labs/superset-dashboard.md`, только шапка и слово «менти»: заголовок «Свой дашборд в Superset» без номера «Задание 6», первый абзац после «Чему учит» говорит, что это факультатив раздела «Superset и BI», открывается после ступени 2 и опирается на витрины ступени 1. Тело ТЗ дальше не трогается. ## Кому поручать Русскую прозу пишет Codex на `gpt-5.6-terra`, `medium` (владелец: лимиты Sol сегодня кончаются). Ревью постановки — `deep-reasoner`. Ревью реализации — одна линия, `craftsman` свежей сессией: уместность и вкус, факты против спеки и кода. Финальная вычитка — свежий тред Codex `terra` по скиллу `ai-text-lint` плюс оптика литературного русского; фактура (имена, SQL, пути, состав ступеней) заморожена. ## Критерии приемки - [ ] `docs/labs/superset-chart.md` существует, содержит все решения из раздела выше: витрина, вопрос, тип графика, метрика в датасете с выражением и форматом, ловушка календаря, запрос сверки, приемка чекбоксами. - [ ] `docs/labs/README.md` показывает семь ступеней и пять разделов факультативов; ссылки только на существующие файлы; файлов-заглушек нет. - [ ] Правила пяти витрин ступени 1 сохранены целиком и помечены как правила ступени 1. - [ ] `grep -n 'ё' docs/labs/README.md docs/labs/superset-chart.md docs/labs/superset-dashboard.md` молчит; `grep -n 'менти'` по тем же трем файлам молчит. - [ ] В `docs/labs/superset-dashboard.md` изменены только шапка и строка со словом «менти». - [ ] Все относительные ссылки из трех файлов ведут на существующие файлы, а якоря в спеку — на существующие заголовки (скрипт в командах проверки печатает только битые ссылки; пусто — зеленый). ## Границы - Меняются три файла: `docs/labs/README.md`, новый `docs/labs/superset-chart.md` и шапка `docs/labs/superset-dashboard.md`. ТЗ 1–5, путеводитель, справочники, спека, DDL, даги, дерево импорта Superset не трогаются. `make lint` папку `docs/labs/` не покрывает, гонять его незачем. - Стенд не трогать: витрин ступени 1 на нем нет, и строить их не нужно. - Никаких коммитов: правки остаются в рабочем дереве. ## Сначала прочитать 1. Спека `docs/specs/2026-09-01-labs-program.md`, разделы 2–4. 2. `docs/labs/README.md` и `docs/labs/superset-dashboard.md` — нынешний индекс и образец формы ТЗ по Superset. 3. `docs/labs/session-overview.md` — состав колонок витрины и урок про доли. 4. `docs/handbook/superset.md` и `docs/architecture/superset.md` — что можно ссылкой, а не пересказом. 5. `AGENTS.md`, раздел «Язык». ## Команды проверки ```bash F="docs/labs/README.md docs/labs/superset-chart.md docs/labs/superset-dashboard.md" grep -n 'ё' $F grep -n 'менти' $F python3 - $F <<'PY' import re, sys, os for f in sys.argv[1:]: for m in re.finditer(r'\]\(([^)#]+)(#[^)]*)?\)', open(f).read()): path, anchor = m.group(1), m.group(2) if path.startswith('http'): continue t = os.path.normpath(os.path.join(os.path.dirname(f), path)) if not os.path.exists(t): print(f, 'нет файла', path); continue if anchor and t.endswith('.md'): heads = [re.sub(r'[^\w\s-]', '', h.lower()).strip().replace(' ', '-') for h in re.findall(r'^#+\s+(.*)$', open(t).read(), re.M)] if anchor[1:] not in heads: print(f, 'нет якоря', path + anchor) PY ``` Скрипт ссылок печатает только битые; якоря сверяются по правилу Gitea: строчные буквы, знаки препинания убраны, пробелы — дефисы.
ddmitry added the wayfinder:task label 2026-09-03 23:43:40 +03:00
ddmitry self-assigned this 2026-09-03 23:43:41 +03:00
Author
Owner

Резолюция

Сделано в PR #227 (ветка 226-superset-chart), слияние закроет тикет.

Решения, которые остаются:

  • Ступень 2 — файл docs/labs/superset-chart.md: витрина dm.session_overview_v, вопрос «с каких устройств чаще уходят после первой страницы», столбики по device_category, одна метрика. Метрика живет в датасете (вкладка «Metrics» редактора датасета, поля «Metric Key» / «Label» / «SQL expression» / «D3 format»), выражение SUM(bounce_sessions) / SUM(sessions), ключ bounce_share, формат .1%. Вкладка «Custom SQL» конструктора графика дает метрику одного графика — ТЗ на нее не отправляет. Дашборд не создается.
  • В Superset 6.1 столбики — только echarts_timeseries_bar: категория идет в «X-axis», «Dimensions» пустые. Значения на столбиках видны через «Show Value» или во всплывающей подсказке.
  • Период графика по умолчанию «No filter», и это правильно; относительный период («Last week») дает пустой график, потому что модельный календарь отстает от настоящего на месяцы. В ТЗ дата не пишется, вместо нее запрос max(report_date).
  • Сверка — запрос в SQL Lab с round(100 * …, 1): проценты с одним знаком, как формат графика. Задачи в homework_check нет.
  • README лаб: таблица семи ступеней, под ней подраздел «Ступень 1» со старой таблицей пяти витрин; ступени 3–7 без ссылок и без файлов-заглушек. Факультативы — пять разделов с «открывается после ступени N», сюжеты не перечислены, ссылка на раздел 4 спеки. «Общие правила» и «Самопроверка» помечены как правила ступени 1, «Уборка» общая. Обращение во всей папке docs/labs/ — «ты».
  • Точечная правка ТЗ дашборда: заголовок без номера, факультатив «Superset и BI» после ступени 2.

Как делалось: постановка — Fable; ревью постановки — Opus (deep-reasoner): 9 находок, главная — «Custom SQL» не в редакторе датасета, все внесены решениями. Проза — Codex gpt-5.6-terra medium; слепое ревью — Opus (craftsman) одной линией: 12 находок (неверный элемент управления, безличное обращение, удаленный вводный абзац, кальки), все закрыты и перепроверены тем же ревьюером. Вычитка — свежий тред Codex terra по ai-text-lint. Приемка глазами: поправлены падеж («с каких устройств»), союз во вступлении и форма пяти аннотаций факультативов («Открывается после ступени N. …»).

Вне тикета, замечено ревью: docs/architecture/dm.md:50 называет лабу дашборда «после этапа 8» — словарь старый; форма раздела «Сначала прочитать» в ТЗ — вопрос формы для ступеней 3–7; round() ClickHouse и d3 .1% округляют по-разному на точной середине — на этих данных маловероятно.

Дальше по карте: ТЗ ступени 3 «Нарежь сессии сам» — первое задание с расследованием; форма счетной сверки с VisitID и ручного сопоставления границ.

## Резолюция Сделано в PR #227 (ветка `226-superset-chart`), слияние закроет тикет. **Решения, которые остаются:** - Ступень 2 — файл `docs/labs/superset-chart.md`: витрина `dm.session_overview_v`, вопрос «с каких устройств чаще уходят после первой страницы», столбики по `device_category`, одна метрика. Метрика живет в датасете (вкладка «Metrics» редактора датасета, поля «Metric Key» / «Label» / «SQL expression» / «D3 format»), выражение `SUM(bounce_sessions) / SUM(sessions)`, ключ `bounce_share`, формат `.1%`. Вкладка «Custom SQL» конструктора графика дает метрику одного графика — ТЗ на нее не отправляет. Дашборд не создается. - В Superset 6.1 столбики — только `echarts_timeseries_bar`: категория идет в «X-axis», «Dimensions» пустые. Значения на столбиках видны через «Show Value» или во всплывающей подсказке. - Период графика по умолчанию «No filter», и это правильно; относительный период («Last week») дает пустой график, потому что модельный календарь отстает от настоящего на месяцы. В ТЗ дата не пишется, вместо нее запрос `max(report_date)`. - Сверка — запрос в SQL Lab с `round(100 * …, 1)`: проценты с одним знаком, как формат графика. Задачи в `homework_check` нет. - README лаб: таблица семи ступеней, под ней подраздел «Ступень 1» со старой таблицей пяти витрин; ступени 3–7 без ссылок и без файлов-заглушек. Факультативы — пять разделов с «открывается после ступени N», сюжеты не перечислены, ссылка на раздел 4 спеки. «Общие правила» и «Самопроверка» помечены как правила ступени 1, «Уборка» общая. Обращение во всей папке `docs/labs/` — «ты». - Точечная правка ТЗ дашборда: заголовок без номера, факультатив «Superset и BI» после ступени 2. **Как делалось:** постановка — Fable; ревью постановки — Opus (deep-reasoner): 9 находок, главная — «Custom SQL» не в редакторе датасета, все внесены решениями. Проза — Codex `gpt-5.6-terra` medium; слепое ревью — Opus (craftsman) одной линией: 12 находок (неверный элемент управления, безличное обращение, удаленный вводный абзац, кальки), все закрыты и перепроверены тем же ревьюером. Вычитка — свежий тред Codex `terra` по ai-text-lint. Приемка глазами: поправлены падеж («с каких устройств»), союз во вступлении и форма пяти аннотаций факультативов («Открывается после ступени N. …»). **Вне тикета, замечено ревью:** `docs/architecture/dm.md:50` называет лабу дашборда «после этапа 8» — словарь старый; форма раздела «Сначала прочитать» в ТЗ — вопрос формы для ступеней 3–7; `round()` ClickHouse и d3 `.1%` округляют по-разному на точной середине — на этих данных маловероятно. **Дальше по карте:** ТЗ ступени 3 «Нарежь сессии сам» — первое задание с расследованием; форма счетной сверки с `VisitID` и ручного сопоставления границ.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#226