- Зачем:
- нужно зафиксировать состояние трекера после рабочего коммита issue 14.
- Что:
- задача 14 переведена в done.
- журнал coordinator-loop дополнен ревью-гейтом и коммит-гейтом.
- Проверка:
- git diff --cached --check.
- Зачем:
- суточная волна должна быть видна на занятии за минуты, а не за сутки работы стенда.
- Что:
- профиль daily-wave переведён на speed 60 при тике 1 секунда.
- приглушены подробные live-логи успешного тика без изменения сохранения state.
- обновлены тесты, спека и инструкции запуска быстрого профиля.
- Проверка:
- make generator-test.
- git diff --cached --check.
- Зачем:
- нужно зафиксировать состояние трекера после рабочего коммита issue 12.
- Что:
- задача 12 переведена в done.
- журнал coordinator-loop дополнен ревью-гейтом и коммит-гейтом.
- Проверка:
- git diff --cached --check.
- Зачем:
- нужен основной ручной интерфейс стенда для backfill/import/check без консольной матрицы переменных.
- Что:
- добавлен DAG generator_control с параметрами Airflow, ветвлением операций и ожиданием ETL.
- вынесена общая логика запуска и предпроверок генератора для Airflow.
- обновлены compose-настройки, зависимости, тесты и документация по пульту.
- Проверка:
- uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q.
- docker compose config --quiet.
- Зачем:
- подготовить цепочку 12 -> 14 -> 09 -> 10 -> 08 к передаче в coordinator-loop:
задаче 12 не хватало решений после 07 и 11, задача 14 родилась из обсуждения
учебного UX (суточная волна вживую).
- Что:
- issue 12 (DAG-пульт): решения 2026-07-04 — без Docker-доступа из Airflow,
операции как Python-код генератора в тасках, генератор без автостарта,
границы пульта, предпроверки чистоты (топики + STG), ожидание ETL перед
check; учтены находки адверсарного ревью и ревью Codex.
- issue 14 (новая): профиль daily-wave переводится на speed=60 при тике 1 с —
модельный час за настенную минуту без изменения фактуры мира.
- issue 08: мягкие зависимости от 14 и 09 (артефакт курса рождается после
них), режим ревью; PRD: задача 14 в списке и графе, 12 помечена дооформленной.
- Проверка:
- вычитка: статусы задач ready-for-agent, порядок в PRD и Blocked by
согласованы; mermaid-граф рендерится.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- нужно зафиксировать итог coordinator-loop и обновить порядок оставшихся задач.
- Что:
- PRD обновлен после завершения issue 07 и 11.
- журнал дополнен финальным review и диагностикой nested reviewer tools.
- Проверка:
- git diff --cached --check.
- Зачем:
- узкое место — время человека на ручную приёмку: без DAG-пульта проверять
миграцию курса пришлось бы через консоль.
- Что:
- PRD, раздел «Задачи»: номер файла объявлен идентификатором (не порядком),
порядок задан ветками и mermaid-графом; основная цепочка 07 -> 11 -> 12,
миграция курса 08 — последней.
- issue 08: добавлена мягкая зависимость от 12 (приёмка уроков через пульт).
- handoff триажа: раздел «Следующий шаг» обновлён под новый порядок.
- Проверка:
- mermaid-диаграмма проверена валидатором Mermaid; статусы задач не менялись.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- закрыть последний шаг триажа: без Acceptance criteria и способа приёмки
задачи нельзя передавать Codex на исполнение.
- Что:
- issue 09: причина уточнена по коду (расходится источник фактуры — донор
против seed_click_id, а не индекс), зафиксировано решение хранить донора
в state, критерии расширены полями location (referer, utm) по итогам ревью.
- issue 10: приёмка по скриншотам playwright-cli с определением «читаемо»,
поправлена длительность пересборки (6 часов по умолчанию, не 2 суток),
отмечено, что legacy world_map, похоже, не умеет легенду и tooltip.
- handoff триажа дополнен сдвигами в понимании и итогом тройного ревью.
- Проверка:
- утверждения по коду сверены с generation.py, runtime.py, state.py и
sql/ddl/dds/30_dds.sql двумя независимыми ревью-агентами.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- продолжение работы планируется в новой сессии; нужен одноразовый
handoff по ADR-0003 с решениями дня и точкой входа.
- Что:
- записан handoff: рабочая форма Claude/Codex, решения по целеполаганию
и бэклогу, очередь задач, следующий шаг — дооформить 09 и 10 до
ready-for-agent, затем передача Codex.
- Проверка:
- просмотр .scratch/handoffs/2026-07-04-generator-backlog-triage.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- в конвенции набора скиллов нет состояния «сделано» (в GitHub это
закрытие issue), из-за чего закрытые задачи помечались случайными
ролями триажа (ready-for-human на сделанных 01-06).
- Что:
- в issue-tracker.md добавлено: завершённая задача — Status: done,
состояние жизненного цикла трекера, а не роль триажа;
triage-labels.md с пятью ролями не тронут.
- Проверка:
- просмотр docs/agents/issue-tracker.md, раздел «Соглашения».
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- follow-up задачи после ревью 2026-06-14 лежали без триажа; решения по
артефакту, громкому отказу и интерфейсу приняты 2026-07-04 и должны
попасть в задачи до передачи исполнителю.
- Что:
- задачи 07 (миграция курса) и 08 (артефакт) поменяны местами — номера
отражают порядок; ссылки обновлены.
- 07 (артефакт + runbook) дооформлен: импорт строго через Kafka (напрямую
в ClickHouse не пишет), громкий отказ при несовместимом state с правкой
спеки, граница runbook «использование, не устройство»; ready-for-agent.
- 08 дооформлен: устройство генератора вне пути менти, реальный объём
(make data во всех уроках 00-05), демо вне скоупа; ready-for-agent.
- новые задачи: 11 глаголы/длительность/профили (после 07, до 12),
12 Airflow-DAG как пульт (приоритет поднят), 13 доливка (после 09).
- задачи 01-06 переведены в done (стояли ошибочные ready-for-human);
PRD фичи дополнен списком задач 7-13 с порядком и зависимостями.
- Проверка:
- head -1 .scratch/generator-model-time-startup-history/issues/*.md;
grep по старым именам файлов ничего не находит вне handoff.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- целеполагание было размазано по обсуждениям: место стенда в менторской
программе и иерархия целей нигде не были записаны, а демо-употребление
стенда устарело (выросло в отдельный проект).
- Что:
- PRD курса §1: место стенда в треке ClickHouse (теория и лабы вне репо,
здесь — интеграции), иерархия целей курс -> стенд -> генератор;
схема потока обновлена на генератор как источник.
- PRD §7: закрыта развилка про урок о генераторе (урока не будет,
генератор — скрытая инфраструктура), добавлена открытая развилка про
кластерную конфигурацию.
- удалены DEMO_CHEATSHEET_5MIN.md и DEMO_SCRIPT_10_15MIN.md; ссылок на них
в репозитории не осталось.
- Проверка:
- grep -rn "DEMO_CHEATSHEET\|DEMO_SCRIPT" --include="*.md" . — только
исторический handoff.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- после coordinator-loop нужно независимое ревью результатов модельного
времени и стартовой истории; пропущенный внешний review gate после задачи 5
закрыт другой родословной.
- Что:
- добавлен verification-handoff: что проверено независимо, дефект стыка
(issue 09) и открытые пробелы (×K, crash recovery, коридоры мат-спеки,
воспроизводимость, review gate задачи 3).
- заведены issues 08 (портативный артефакт + runbook + идеи интерфейса),
09 (баг браузерной фактуры на стыке), 10 (читаемость гео-карты).
- в docs/course/PRD.md §7 — открытый вопрос «генератор как скрытая
инфраструктура vs отдельный урок».
- Проверка:
- git show --stat HEAD
- чтение .scratch/handoffs/2026-06-14-generator-model-time-verification-review.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- авторитетная версия должна жить у навыка (dotfiles), рядом с handoff-побратимом; здесь — чтобы не плодить расходящиеся копии.
- Что:
- полное содержимое заменено коротким указателем на dotfiles-версию.
- Проверка:
- открыть .scratch/handoffs/2026-06-14-coordinator-loop-context-economy.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- сохранить выводы сессии проектирования, пока свежие; без записи они теряются при компактизации и в новой сессии.
- Что:
- добавлен handoff с диагностикой двух «пожаров» — контекста координатора и токенов — по логам прогона Codex.
- зафиксированы prior art (obra:superpowers), два принятых правила, кандидаты-фиксы и открытые вопросы.
- Проверка:
- открыть .scratch/handoffs/2026-06-14-coordinator-loop-context-economy.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- чистый стенд должен строить аналитику из генерации, а не из архивного JSONL-сида.
- Что:
- добавлены команды generated-history-analytics и generated-history-check.
- обновлены README, operations и Superset-документы под путь generator backfill -> DM -> Superset.
- создан follow-up на миграцию учебных материалов с архивного сида.
- Проверка:
- make generated-history-analytics.
- make generated-history-check.
- reviewer gate issue 06 пройден без блокирующих находок.
- Зачем:
- стенду нужна повторяемая история с живым продолжением от модельной границы без дублей и разрыва визитов.
- Что:
- добавлен backfill-режим с `GEN_MODEL_T_END`, manifest и state на `T_end`.
- live-запуск восстанавливается из manifest без настенной дельты и проверяет совместимость state.
- добавлены SQL-проверки формы данных, повторяемости и стыка backfill с live.
- Проверка:
- make generator-test.
- два чистых ClickHouse-прогона backfill дали одинаковые manifest checksums и digest.
- reviewer gate issue 05 пройден после исправлений state/manifest.
- Зачем:
- рестарт генератора должен продолжать поток от модельной точки без дублей и смешивания state разных настроек.
- Что:
- state v2 хранит модельную и настенную метки, скорость, timezone, T0 и seed.
- live-восстановление считает модельную точку по настенной дельте и проверяет совместимость config.
- добавлен путь восстановления от T_end и тесты короткого и долгого простоя.
- Проверка:
- make generator-test.
- ClickHouse-сценарии короткого и долгого восстановления state.
- reviewer gate issue 04 пройден после исправления совместимости state.
- Зачем:
- ускоренный стенд должен проходить больше модельного времени и давать соответствующий событийный бюджет.
- Что:
- расчёт интенсивности переведён на модельную длительность тика.
- добавлена устойчивая выборка бюджета при больших λ.
- усилены тесты ×K, дневного коэффициента и независимости от настенного часа.
- Проверка:
- make generator-test.
- review gate после issue 03 пройден после исправления underflow Poisson.
- Зачем:
- генератор должен писать события от модельной точки T0 и проверяться повторяемо в ClickHouse.
- Что:
- добавлены настройки модельного времени и передача модельной точки в live-тик.
- дневной коэффициент считается по модельному времени и часовому поясу.
- обновлены проверки, compose, документация и статус issue 02.
- Проверка:
- make generator-test.
- два чистых ClickHouse-прогона с GEN_STATE_RESET=true дали одинаковые контрольные числа.
- Зачем:
- нужно закрепить принятое человеком HITL-решение до кодовых задач 02-06.
- Что:
- добавлен рабочий контракт настроек, хода часов, state, манифеста и ClickHouse-проверки.
- выбран один живой ход часов через фиксированный модельный шаг без отдельной матрицы драйверов.
- уточнена граница стартовой истории как [T0, T_end) и закрыт чек-лист issue 01.
- Проверка:
- git diff --cached --check.
- Зачем:
- ревью выявило слабые места в критериях приёмки модельного времени.
- Что:
- уточнены правила повторяемости, чистого прогона и review gate.
- добавлены критерии для однородности визита через восстановление и T_end.
- обновлён handoff с важными рисками для следующего агента.
- Проверка:
- git diff --check.
- Зачем:
- нужен рабочий план для реализации модельного времени и стартовой истории.
- Что:
- добавлен parent PRD с инвариантами, зависимостями и review gate.
- добавлены шесть локальных issue для последовательной работы.
- добавлен handoff для продолжения в новой сессии.
- Проверка:
- git diff --check.
- Зачем:
- ADR-0006 сделал генерацию единственным источником аналитики, а статический
сид — архивным; глоссарий и спеки это ещё не отражали.
- Что:
- CONTEXT.md: «статический сид» переименован в «архивный статический сид»
(короткое имя сохранено), описан как временная кладовка значений с целью
полного вывода; «стартовая история» получила синонимы «стартовый сид» и
«новый сид»; раздел «Слои данных» отмечает переход аналитики на генерацию.
- мат-спека: разделы «Персистентность через рестарты» и «Воспроизводимость»
помечены как переописанные в спеке модельного времени (ссылкой, без повтора).
- спека модельного времени: синоним «стартовый сид» добавлен в определение и
в заметку о влиянии на документацию.
- Проверка:
- git diff: термины и перекрёстные ссылки читаются непротиворечиво; ADR не
правились (статус «архивный» не переносится в документы до ADR-0006).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- сохранить контекст сессии для продолжения работы в новой сессии.
- Что:
- добавлен handoff: что сделано и закоммичено, контекст вне артефактов, очередь шагов, ограничения.
- Проверка:
- чтение .scratch/handoffs/2026-06-14-adr0006-source-flip-and-model-time-spec.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- кириллица занимает примерно в 1,5–2 раза больше токенов; рассуждения можно вести экономнее.
- Что:
- добавлено правило: внутренние рассуждения и промежуточные пометки — на английском.
- русский остаётся для ответов пользователю, документов, комментариев в коде и сообщений коммитов.
- Проверка:
- чтение AGENTS.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- генератор даёт здоровую пирамиду, и стенду нужен единый источник аналитики вместо вырожденного статического сида.
- Что:
- добавлен ADR-0006: генерация — единственный источник аналитики, статический сид становится архивным (кладовка значений до синтеза фактуры).
- добавлена спека модельного времени: точка отсчёта, заливка прошлого, стартовая история, сохранение состояния, воспроизводимость и проверка в два шага.
- в ADR-0004 и ADR-0005 добавлены указатели вперёд на ADR-0006 и спеку.
- Проверка:
- чтение документов; перекрёстные ссылки между ADR-0004/0005/0006 и спекой согласованы.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- закрыть отложенный заход эксперимента: внешнее ревью результата
автономной петли моделью другой родословной (дизайн-линия, не Кодекс).
- Что:
- добавлена секция об итогах ревью: прогноз по находке A не оправдался,
петля её поймала (try→fresh + регрессионный тест в коммите 640050e).
- зафиксировано, что внешний взгляд добавил сквозные находки (расхождение
живого/восстановленного путей, форма распределения длины визита).
- уточнена гипотеза о пользе reviewer-а другой родословной.
- Проверка:
- git show --stat HEAD; чтение docs/research/2026-06-11-subagent-coordinator-experiment.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- выводы агентного эксперимента нужны как durable-основа для будущего скилла, а не как одноразовый handoff.
- Что:
- добавлена research note с гипотезой, протоколом, наблюдениями и ограничениями эксперимента.
- зафиксированы роли координатора, worker-а и reviewer-а, классификация находок и инварианты будущего скилла.
- Проверка:
- ручная перечитка docs/research/2026-06-11-subagent-coordinator-experiment.md.
- Зачем:
- инвариант «время генератора ≡ реальное ×1» неудобен для учебного плана:
медленные явления (возвраты, воронка) не успеть показать на уроке, а
историческую глубину живой генератор не создаёт.
- Что:
- добавлен ADR-0005: модельные часы отвязаны от настенного времени, режимы
(живой ×1 / ускоренный ×K / заливка) — драйверы одного шва, правило 30 минут
переопределено в модельном времени; сид-продолжение помечено как будущее.
- в CONTEXT.md разведены три значения «сида» и добавлен термин модельного
времени и масштаба ×K.
- добавлен handoff с отложенным ревью петли и реконсиляцией мат-спеки.
- Проверка:
- прочитать docs/adr/0005-generator-model-clock.md и раздел «Три значения
слова сид» в CONTEXT.md; git log -1.
- Зачем:
- наблюдения по задаче 07 нужны для итоговой рефлексии эксперимента с субагентами.
- Что:
- добавлен вывод о роли reviewer-а в проверке силы интеграционного теста.
- Проверка:
- git diff -- .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
- Зачем:
- после калибровки потока и 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.
- Зачем:
- результаты первых циклов эксперимента нужно сохранить отдельно от рабочих изменений генератора.
- Что:
- зафиксированы выводы по саморевью, reviewer-субагенту и второму кругу ревью.
- описана классификация reviewer-находок перед отправкой worker-агенту.
- Проверка:
- git diff --stat -- .scratch/handoffs/2026-06-11-subagent-coordinator-experiment.md.
- Зачем:
- генератор должен переживать рестарт без потери популяции пользователей и коротко прерванных активных визитов.
- Что:
- добавлен компактный state v2 для популяции, активных визитов и остатка бюджета рождений.
- сервис генератора переведён на единый тиковый поток с сохранением и восстановлением состояния.
- добавлена безопасная деградация для старого state v1 и битого state v2.
- покрыты короткий и долгий простой, reset состояния и валидация вложенного state.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
- git diff --check.
- Зачем:
- поток генератора должен соответствовать модели интенсивности и профилю сида перед реализацией состояния версии 2.
- Что:
- событийный бюджет тика переведён в рождения визитов через ожидаемую среднюю длину визита.
- дефолты интенсивности и обычный docker-compose запуск синхронизированы с целевыми 30 событиями в минуту.
- добавлены статистические проверки длины визита, воронки, новых пользователей, межсессионных пауз и долгого окна потока.
- обновлены README, OPERATIONS и карточка задачи 05.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q.
- git diff --check.
- Зачем:
- перед запуском задачи 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.
- Зачем:
- steady-stream генератору нужны устойчивые пользователи и возвраты между визитами, чтобы поток был похож на живую модель поведения.
- Что:
- добавлена ограниченная популяция с кулдауном возврата, ротацией новых пользователей и защитой от второго активного визита.
- UUID переведены на единый ГПСЧ генератора, а завершение визита считается по запланированному последнему событию.
- добавлены регрессионные тесты и обновлена документация генератора.
- Проверка:
- uv run --with-requirements generator/requirements.txt pytest generator/tests -q
- Зачем:
- генератор должен выпускать события визита по запланированным тикам, не приклеивая весь визит к одному запуску.
- Что:
- добавлен тиковый слой `TickStreamGenerator` с активными визитами и выпуском созревших событий.
- добавлена валидация потолка активных визитов относительно потолка популяции.
- сохранён событийный смысл `event_budget` и добавлен регрессионный тест против разгона интенсивности.
- Проверка:
- `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed.
- Зачем:
- перед задачей активных визитов нужно отделить модель генератора от сервисной обвязки.
- Что:
- добавлена спека уборки сервиса генератора перед задачей 03.
- добавлена промежуточная issue 02.5 с критериями приёмки.
- уточнены требования к Dockerfile и временному тиковому слою.
- задача 03 заблокирована новой задачей уборки.
- Проверка:
- просмотрен staged diff через `git diff --cached --stat`.
- Зачем:
- локальные инструкции должны отражать актуальные правила работы с Python в репозитории.
- Что:
- добавлено требование использовать uv для Python.
- удалена устаревшая строка цели репозитория из AGENTS.md.
- Проверка:
- git diff --cached -- AGENTS.md
- Зачем:
- генератор должен создавать учебно полезный визит с общим click_id, правдоподобным путём и честным тиковым бюджетом событий.
- Что:
- добавлена марковская цепочка страниц, запланированные метки времени и потолок GEN_MAX_SESSION_EVENTS.
- добавлен набор тикового батча из нескольких визитов до рассчитанного бюджета событий.
- обновлены тесты, README, KNOWN_ISSUES и статусы задач 01/02.
- Проверка:
- uv run --with pytest --with-requirements generator/requirements.txt pytest generator/tests -q
- Зачем:
- нужен первый проверяемый срез новой модели, где один визит содержит несколько связанных событий.
- Что:
- добавлен индекс browser-событий по click_id для выбора сид-визита как основы.
- generate_batch теперь выпускает несколько browser-событий с одним новым click_id и общим device/geo-контекстом.
- добавлен тест публичного контракта связанного визита.
- Проверка:
- make generator-test.
- Зачем:
- переработку steady-stream генератора нужно передать агентам как набор
проверяемых вертикальных задач, а не как один крупный rewrite.
- Что:
- создан локальный набор из семи ready-for-agent задач для реализации новой
иерархической модели генератора.
- добавлен handoff с текущим состоянием обсуждения, рекомендуемым следующим
шагом через TDD и примером команды /goal для запуска задачи 01.
- Проверка:
- git diff HEAD~1 --stat.