Commit Graph
22 Commits
Author SHA1 Message Date
Dmitry Dementiev e6e34f2605 docs(docs): добавлено исследование формата кликстрима Яндекса
- Зачем:
  - владелец стенда выбирает целевую модель данных (тикет #27):
    оставлять четыре топика со склейкой или перейти на одно широкое
    событие по образцу Яндекса
- Что:
  - добавлен docs/research/2026-07-26-yandex-clickstream-format.md
  - разобран Logs API Метрики: хиты и визиты, состав полей, массивы,
    метки времени, идентификаторы, ограничения выгрузки
  - разобрана форма доставки: батч через Logs API (TSV) и поток
    только в Метрике Про через Yandex Data Transfer, задержка до 15 минут
  - разобраны AppMetrica (event_json, Data Stream), ecommerce и выручка,
    схемы hits_v1/visits_v1 из документации ClickHouse
  - дано сравнение со Snowplow, Segment и Amplitude
  - зафиксирован вывод: плоское ядро с массивами, список 53 полей
    для широкого события и перечень того, что копировать не стоит
- Проверка:
  - каждое утверждение со ссылкой на первоисточник
  - DDL hits_v1/visits_v1 сверен через MCP Context7 (/clickhouse/clickhouse-docs)
  - неподтверждённое вынесено в отдельный раздел
2026-07-26 18:27:46 +03:00
Dmitry Dementiev ce3552eaf2 docs(research): зафиксирован эксперимент с координатором субагентов
- Зачем:
  - выводы агентного эксперимента нужны как durable-основа для будущего скилла, а не как одноразовый handoff.
- Что:
  - добавлена research note с гипотезой, протоколом, наблюдениями и ограничениями эксперимента.
  - зафиксированы роли координатора, worker-а и reviewer-а, классификация находок и инварианты будущего скилла.
- Проверка:
  - ручная перечитка docs/research/2026-06-11-subagent-coordinator-experiment.md.
2026-06-11 18:44:07 +03:00
Dmitry Dementiev 341637c810 docs(generator): зафиксирована модель времени генератора (ADR-0005)
- Зачем:
  - инвариант «время генератора ≡ реальное ×1» неудобен для учебного плана:
    медленные явления (возвраты, воронка) не успеть показать на уроке, а
    историческую глубину живой генератор не создаёт.
- Что:
  - добавлен ADR-0005: модельные часы отвязаны от настенного времени, режимы
    (живой ×1 / ускоренный ×K / заливка) — драйверы одного шва, правило 30 минут
    переопределено в модельном времени; сид-продолжение помечено как будущее.
  - в CONTEXT.md разведены три значения «сида» и добавлен термин модельного
    времени и масштаба ×K.
  - добавлен handoff с отложенным ревью петли и реконсиляцией мат-спеки.
- Проверка:
  - прочитать docs/adr/0005-generator-model-clock.md и раздел «Три значения
    слова сид» в CONTEXT.md; git log -1.
2026-06-11 18:37:27 +03:00
Dmitry Dementiev 2eaeda3308 docs(generator): зафиксирован вывод финального reviewer-цикла
- Зачем:
  - наблюдения по задаче 07 нужны для итоговой рефлексии эксперимента с субагентами.
- Что:
  - добавлен вывод о роли reviewer-а в проверке силы интеграционного теста.
- Проверка:
  - git diff -- .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
2026-06-11 18:26:57 +03:00
Dmitry Dementiev 6c4e0f4d16 feat(generator): подключена новая модель к steady-stream сервису
- Зачем:
  - после калибровки потока и state v2 генератор нужно принять как рабочий steady-stream источник, а не как исторически сломанный прототип.
- Что:
  - добавлен сервисный тест multi-event визита с мок-публикацией во все четыре Kafka-топика.
  - compose позволяет переопределять демо-параметры генератора без правки файла, сохраняя внутренние контейнерные адреса.
  - README, OPERATIONS, KNOWN_ISSUES и карточка задачи синхронизированы с новой моделью и state v2.
- Проверка:
  - uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
  - git diff --check.
  - GEN_STATE_RESET=true GEN_POPULATION_MAX=123 docker compose config.
2026-06-11 18:26:39 +03:00
Dmitry Dementiev 4a08465f7d docs(generator): дополнены наблюдения эксперимента с субагентами
- Зачем:
  - результаты первых циклов эксперимента нужно сохранить отдельно от рабочих изменений генератора.
- Что:
  - зафиксированы выводы по саморевью, reviewer-субагенту и второму кругу ревью.
  - описана классификация reviewer-находок перед отправкой worker-агенту.
- Проверка:
  - git diff --stat -- .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
2026-06-11 18:02:25 +03:00
Dmitry Dementiev 640050e409 feat(generator): добавлено состояние версии 2 для рестартов
- Зачем:
  - генератор должен переживать рестарт без потери популяции пользователей и коротко прерванных активных визитов.
- Что:
  - добавлен компактный state v2 для популяции, активных визитов и остатка бюджета рождений.
  - сервис генератора переведён на единый тиковый поток с сохранением и восстановлением состояния.
  - добавлена безопасная деградация для старого state v1 и битого state v2.
  - покрыты короткий и долгий простой, reset состояния и валидация вложенного state.
- Проверка:
  - uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
  - git diff --check.
2026-06-11 18:01:57 +03:00
Dmitry Dementiev 8f1e997cc9 feat(generator): откалиброван поток steady-stream генератора
- Зачем:
  - поток генератора должен соответствовать модели интенсивности и профилю сида перед реализацией состояния версии 2.
- Что:
  - событийный бюджет тика переведён в рождения визитов через ожидаемую среднюю длину визита.
  - дефолты интенсивности и обычный docker-compose запуск синхронизированы с целевыми 30 событиями в минуту.
  - добавлены статистические проверки длины визита, воронки, новых пользователей, межсессионных пауз и долгого окна потока.
  - обновлены README, OPERATIONS и карточка задачи 05.
- Проверка:
  - uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
  - git diff --check.
2026-06-11 17:17:34 +03:00
Dmitry Dementiev d7c5a56675 docs(generator): зафиксирован процесс эксперимента с субагентами
- Зачем:
  - перед запуском задачи 05 нужно отделить координационные договорённости от будущих изменений генератора.
- Что:
  - добавлен handoff с правилами эксперимента координатора и субагентов.
  - уточнён порядок возврата к задаче состояния версии 2 после калибровки потока.
- Проверка:
  - git diff -- .scratch/feature-data-generator/issues/06-state-v2-and-restart.md .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
2026-06-11 16:34:45 +03:00
Dmitry Dementiev fda5db8ad9 feat(generator): добавлена популяция пользователей
- Зачем:
  - steady-stream генератору нужны устойчивые пользователи и возвраты между визитами, чтобы поток был похож на живую модель поведения.
- Что:
  - добавлена ограниченная популяция с кулдауном возврата, ротацией новых пользователей и защитой от второго активного визита.
  - UUID переведены на единый ГПСЧ генератора, а завершение визита считается по запланированному последнему событию.
  - добавлены регрессионные тесты и обновлена документация генератора.
- Проверка:
  - uv run --with-requirements generator/requirements.txt pytest generator/tests -q
2026-06-11 16:08:37 +03:00
Dmitry Dementiev d8da27187e feat(generator): добавлен поток активных визитов по тикам
- Зачем:
  - генератор должен выпускать события визита по запланированным тикам, не приклеивая весь визит к одному запуску.
- Что:
  - добавлен тиковый слой `TickStreamGenerator` с активными визитами и выпуском созревших событий.
  - добавлена валидация потолка активных визитов относительно потолка популяции.
  - сохранён событийный смысл `event_budget` и добавлен регрессионный тест против разгона интенсивности.
- Проверка:
  - `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed.
2026-06-11 15:32:53 +03:00
Dmitry Dementiev 642789d484 refactor(generator): разнесён сервис генератора по src-пакету
- Зачем:
  - перед активными визитами нужно отделить генеративную модель от Kafka, состояния и сервисного цикла.
- Что:
  - перенесены модули генератора в пакет `src/clickstream_generator`.
  - `generator.py` оставлен фасадом и точкой входа с совместимыми импортами.
  - обновлены Dockerfile, тесты, README, спека и issue 02.5.
- Проверка:
  - `docker build -t generator:test generator`.
  - `docker run --rm -v /home/dmitry/sources/clickstream-ch-kafka-superset-demo:/workspace -w /workspace/generator generator:test pytest tests/ -q`.
  - `python -m py_compile generator.py src/clickstream_generator/*.py` в Docker.
2026-06-11 15:00:50 +03:00
Dmitry Dementiev 48e3bf2900 docs(generator): добавлена задача уборки сервиса
- Зачем:
  - перед задачей активных визитов нужно отделить модель генератора от сервисной обвязки.
- Что:
  - добавлена спека уборки сервиса генератора перед задачей 03.
  - добавлена промежуточная issue 02.5 с критериями приёмки.
  - уточнены требования к Dockerfile и временному тиковому слою.
  - задача 03 заблокирована новой задачей уборки.
- Проверка:
  - просмотрен staged diff через `git diff --cached --stat`.
2026-06-11 13:48:24 +03:00
Dmitry Dementiev eaf4888ed9 docs(agents): обновлены правила работы агента
- Зачем:
  - локальные инструкции должны отражать актуальные правила работы с Python в репозитории.
- Что:
  - добавлено требование использовать uv для Python.
  - удалена устаревшая строка цели репозитория из AGENTS.md.
- Проверка:
  - git diff --cached -- AGENTS.md
2026-06-11 12:59:29 +03:00
Dmitry Dementiev 32f4fee41c feat(generator): добавлена модель связанного визита
- Зачем:
  - генератор должен создавать учебно полезный визит с общим click_id, правдоподобным путём и честным тиковым бюджетом событий.
- Что:
  - добавлена марковская цепочка страниц, запланированные метки времени и потолок GEN_MAX_SESSION_EVENTS.
  - добавлен набор тикового батча из нескольких визитов до рассчитанного бюджета событий.
  - обновлены тесты, README, KNOWN_ISSUES и статусы задач 01/02.
- Проверка:
  - uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q
2026-06-11 12:52:48 +03:00
Dmitry Dementiev d38124263a feat(generator): добавлен связанный визит в генератор
- Зачем:
  - нужен первый проверяемый срез новой модели, где один визит содержит несколько связанных событий.
- Что:
  - добавлен индекс browser-событий по click_id для выбора сид-визита как основы.
  - generate_batch теперь выпускает несколько browser-событий с одним новым click_id и общим device/geo-контекстом.
  - добавлен тест публичного контракта связанного визита.
- Проверка:
  - make generator-test.
2026-06-11 11:00:39 +03:00
Dmitry Dementiev f0370cdb90 docs(generator): добавлены задачи реализации и handoff
- Зачем:
  - переработку steady-stream генератора нужно передать агентам как набор
    проверяемых вертикальных задач, а не как один крупный rewrite.
- Что:
  - создан локальный набор из семи ready-for-agent задач для реализации новой
    иерархической модели генератора.
  - добавлен handoff с текущим состоянием обсуждения, рекомендуемым следующим
    шагом через TDD и примером команды /goal для запуска задачи 01.
- Проверка:
  - git diff HEAD~1 --stat.
2026-06-11 10:48:37 +03:00
Dmitry DementievandClaude Fable 5 bcca8f5127 docs(generator): уточнена мат-спека по итогам ревью, handoff для передачи
- Зачем:
  - повторное адверсариальное ревью нашло ошибку в формуле межсессионной
    паузы (двойной счёт кулдауна) и незакрытый контракт публикации
    device/geo; дизайн-этап завершён, работа передаётся исполнителю.
- Что:
  - исправлена формула паузы (баланс цикла, минус длительность визита);
    зафиксированы каденция device/geo «на каждое событие, как в сиде»,
    правило выбора возвращающегося, стартовое распределение страниц,
    калибровка по медиане и среднему, инвариант потолков конфигурации,
    компактное хранение профиля ссылкой на сид-сессию.
  - уточнены критерии приёмки (среднее паузы вместо медианы, счёт шага
    «товары», имена полей времени) в обеих спеках.
  - добавлен handoff .scratch/handoffs/2026-06-10-generator-spec-to-codex.md
    (передача на детальный план/реализацию), отработавший handoff от
    2026-06-09 удалён.
- Проверка:
  - цифры спеки сверены замерами по полным data/*.jsonl (стартовые страницы
    58/24/17, шаги воронки 98>=94>=56>=35>=25, device 1000 строк / 99
    уникальных); повторное ревью свежим агентом блокеров не оставило.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 18:02:57 +03:00
Dmitry DementievandClaude Fable 5 0b5fc64f6f docs(agents): добавлено правило понятного русского языка
- Зачем:
  - ответы и документы агентов должны быть читаемы неспециалистом,
    без англицизмов и непереведённых слов.
- Что:
  - в AGENTS.md (раздел «Обязательные правила») добавлено требование к
    языку: понятный русский, устоявшиеся английские термины допустимы,
    сложные темы объяснять доступно.
- Проверка:
  - git diff AGENTS.md; правило видно в начале раздела обязательных правил.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 17:34:29 +03:00
Dmitry DementievandClaude Fable 5 6efa031023 docs(generator): добавлена мат-спека модели и исправлен профиль сида
- Зачем:
  - закрыть Open questions спеки формы доработки перед передачей на
    реализацию; адверсариальное ревью показало, что прежние ориентиры
    (популяция/паузы/интенсивность) взаимно несовместимы, а документы
    опираются на неверный факт о сиде («1..7 событий на визит»).
- Что:
  - добавлена docs/specs/2026-06-10-generator-math-model.md: марковская
    цепочка по страницам, формула связи «популяция-интенсивность-пауза»
    (λ по умолчанию 30/мин), кулдаун возврата, правило 30 минут на рестарт,
    критерии приёмки.
  - в CONTEXT.md добавлен профиль сид-датасета (полный замер: длины визитов
    1..27, медиана 10, конверсия 25%, петли и события после /confirmation)
    и исправлено ложное «разброс времени внутри click_id <= 1 мин».
  - исправлен факт «1..7 событий» в KNOWN_ISSUES.md и ADR-0004; критерии
    Validation спеки формы доработки приведены к фактам сида.
- Проверка:
  - перекрёстные ссылки между спеками/ADR/CONTEXT.md открываются; цифры
    профиля сида воспроизводятся скриптом подсчёта по полным data/*.jsonl.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 17:32:47 +03:00
Dmitry DementievandClaude Opus 4.8 bce1ded9c4 docs(handoff): добавлен handoff по переработке генератора
- Зачем:
  - продолжить работу над генератором в новой сессии без потери контекста.
- Что:
  - .scratch/handoffs/2026-06-09-generator-rework.md: где остановились,
    ссылки на ADR/спеку, следующий шаг, suggested skills, состояние git.
- Проверка:
  - прочитать .scratch/handoffs/2026-06-09-generator-rework.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:04:08 +03:00
Dmitry DementievandClaude Opus 4.8 6ddc7a90d4 docs(generator): зафиксировано направление переработки генератора
- Зачем:
  - при возврате к генератору не переоткрывать выбор «генератор vs реплей»
    и иметь готовую рамку требований под реализацию steady-stream.
- Что:
  - ADR-0004: steady-stream питается синтетическим иерархическим генератором,
    не реплеем сида (обоснование + отклонённые варианты C/B).
  - спека docs/specs/2026-06-09: требования к иерархической модели сущностей
    и критерии приёмки; математика делегирована follow-up-спеке.
  - CONTEXT.md: термины «популяция пользователей», «возвращающийся пользователь».
- Проверка:
  - прочитать ADR-0004 и спеку; сверить термины в CONTEXT.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:04:00 +03:00