Первая очередь карты (документация вокруг стенда) закрыта. Дальше — основная
программа. Этот тикет дает два результата:
ТЗ ступени 2 «Свой отчет в Superset» — новый файл docs/labs/superset-chart.md.
Порядок программы в 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)».
Запрос отдает проценты с одним знаком, как и формат .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 на нем нет, и строить их не нужно.
Никаких коммитов: правки остаются в рабочем дереве.
docs/labs/README.md и docs/labs/superset-dashboard.md — нынешний
индекс и образец формы ТЗ по Superset.
docs/labs/session-overview.md — состав колонок витрины и урок про доли.
docs/handbook/superset.md и docs/architecture/superset.md — что
можно ссылкой, а не пересказом.
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:
строчные буквы, знаки препинания убраны, пробелы — дефисы.
Сделано в 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` и ручного сопоставления границ.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #206
Цель
Первая очередь карты (документация вокруг стенда) закрыта. Дальше — основная
программа. Этот тикет дает два результата:
docs/labs/superset-chart.md.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:
Запрос отдает проценты с одним знаком, как и формат
.1%на графике:числа должны совпасть один в один. Задачи в
homework_checkдля этойступени нет, сказать это прямо, как в ТЗ дашборда.
Стендовые объекты не трогать. Что переживает
make upи что стираетmake clean— ссылкой на главу путеводителяdocs/handbook/superset.md,«Стендовые объекты и ваши», без пересказа.
«Сначала прочитать» внутри ТЗ: глава путеводителя «Немного Superset» и
задание 3.
README лаб.
программа из семи ступеней, которые идут по порядку, и факультативы, которые
берут по желанию. Довод порядка и четыре формы заданий — ссылкой на спеку,
не пересказом.
чему учит». Строка ступени 1 — «пять витрин слоя DM» с уроком ступени
одной фразой и отсылкой к таблице ниже. Строка ступени 2 — ссылка на новое
ТЗ. Ступени 3–7 — названия и урок одной строкой из раздела 3 спеки, без
ссылок и без файлов-заглушек: ТЗ появятся по мере продвижения, и README это
говорит одной фразой.
таблица заданий 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.
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/не покрывает, гонятьего незачем.
Сначала прочитать
docs/specs/2026-09-01-labs-program.md, разделы 2–4.docs/labs/README.mdиdocs/labs/superset-dashboard.md— нынешнийиндекс и образец формы ТЗ по Superset.
docs/labs/session-overview.md— состав колонок витрины и урок про доли.docs/handbook/superset.mdиdocs/architecture/superset.md— чтоможно ссылкой, а не пересказом.
AGENTS.md, раздел «Язык».Команды проверки
Скрипт ссылок печатает только битые; якоря сверяются по правилу Gitea:
строчные буквы, знаки препинания убраны, пробелы — дефисы.
Резолюция
Сделано в PR #227 (ветка
226-superset-chart), слияние закроет тикет.Решения, которые остаются:
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» конструктора графика дает метрику одного графика — ТЗ на нее не отправляет. Дашборд не создается.echarts_timeseries_bar: категория идет в «X-axis», «Dimensions» пустые. Значения на столбиках видны через «Show Value» или во всплывающей подсказке.max(report_date).round(100 * …, 1): проценты с одним знаком, как формат графика. Задачи вhomework_checkнет.docs/labs/— «ты».Как делалось: постановка — Fable; ревью постановки — Opus (deep-reasoner): 9 находок, главная — «Custom SQL» не в редакторе датасета, все внесены решениями. Проза — Codex
gpt-5.6-terramedium; слепое ревью — Opus (craftsman) одной линией: 12 находок (неверный элемент управления, безличное обращение, удаленный вводный абзац, кальки), все закрыты и перепроверены тем же ревьюером. Вычитка — свежий тред Codexterraпо ai-text-lint. Приемка глазами: поправлены падеж («с каких устройств»), союз во вступлении и форма пяти аннотаций факультативов («Открывается после ступени N. …»).Вне тикета, замечено ревью:
docs/architecture/dm.md:50называет лабу дашборда «после этапа 8» — словарь старый; форма раздела «Сначала прочитать» в ТЗ — вопрос формы для ступеней 3–7;round()ClickHouse и d3.1%округляют по-разному на точной середине — на этих данных маловероятно.Дальше по карте: ТЗ ступени 3 «Нарежь сессии сам» — первое задание с расследованием; форма счетной сверки с
VisitIDи ручного сопоставления границ.