- Зачем:
- исполнение спеки «Боевой реализм стенда» идёт в новом репозитории;
читатель v1 должен сразу видеть, где продолжение, а спека — где её
актуальная версия.
- Что:
- README: блок-указатель у начала — стенд заморожен для новых фич,
остаётся учебным, развитие в clickstream-data-platform.
- docs/specs/2026-07-30-stand-v2-realism.md: строка «Источник истины
переехал в v2» со ссылкой на копию спеки в новом репозитории.
- Проверка:
- ссылки открываются, содержание спеки не менялось.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- зафиксировать вердикт владельца по трём помеченным отступлениям и
закрыть приёмку спеки.
- Что:
- статус Draft -> Accepted; подтверждены порядок страховочных срезов
и VisitID как эталон самопроверки.
- Sign взят как колонка формата без механики (всегда 1, 47-я колонка
события); честность — комментарий в DDL, абзац в документе о
реализме, лекционный крючок про CollapsingMergeTree.
- в опорные точки добавлена рамка лабы сессий: сначала собрать самому,
потом рассказ про VisitID в хитах с октября 2025.
- Проверка:
- вычитка разделов 1.1, 1.2, 10, 12 и шапки статуса.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- слепое ревью постановки нашло места, где исполнителю пришлось бы
молча изобретать решение.
- Что:
- зафиксированы: правило соединения purchaseID[1]=order_id, исключение
declared_* из правила «деньги по бэкенду», имена массивов позиций
dds.order, контракт присутствия всех 46 полей, класс awaiting_order
в сверке, счётчик дельт сумм в манифесте.
- шардирование в разделе 6 и dds.identity_map приведено к
cityHash64 — буквально тем же выражением, что в 1.3.
- Проверка:
- сверка правок с индексом находок ревью (SOL-1..SOL-8, кроме
отклонённого SOL-7).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- сохранить состояние сессии ревью спеки #17 на случай сбоя
инфраструктуры (ADR-0003: handoff'ы живут в .scratch/handoffs/).
- Что:
- добавлена записка 20260730-1003: состояние спеки, открытые вопросы
владельцу, рецепт запуска ревью Сола, грабли с 529.
- Проверка:
- чтение записки в свежей сессии по шагам раздела «Дальше».
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- собрать резолюции карты #10 (#14, #15, #16, #18) в одну целевую
картину v2 и защитить черновик от потери до конца ревью.
- Что:
- создана docs/specs/2026-07-30-stand-v2-realism.md (статус Draft):
широкое событие, заказы слепками, кластер 2×1, анонимность и склейка,
карта слоёв, оценка объёма и этапы для /to-tickets.
- внесены правки четырёх волн ревью (сверка с резолюциями, грилинг,
вычитка, правки владельца); внешнее ревью ещё идёт.
- Проверка:
- вычитка документа; вердикт владельца по трём помеченным отступлениям —
перед сменой статуса на Accepted.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- вопрос о доме репозитория и трекера висел без решения после блокировки
GitHub-аккаунта; своя площадка выигрывает по существу, а не только как
вынужденная мера.
- Что:
- добавлен ADR-0007: активная разработка в Gitea, GitHub — публичное
зеркало кода (push-mirror, направление одно).
- зафиксировано, что issues не зеркалируются, а durable-часть (спеки, ADR,
история коммитов) уезжает в зеркало вместе с кодом.
- репозиторий v2 создаём сразу в Gitea.
- Проверка:
- чтением docs/adr/0007-gitea-as-development-home.md.
- Зачем:
- продолжение работы в новой сессии: контракт трекера переписан,
граф блокировок карты #10 восстановлен, часть веток не влита.
- Что:
- добавлен .scratch/handoffs/20260729-2125-gitea-tracker-tea-setup.md
с состоянием карты, списком хвостов и подсказками по скиллам.
- Проверка:
- текст читается, ссылки на docs/ и на трекер ведут в существующие места.
- Зачем:
- GitHub-аккаунт заблокирован, работа идёт в Gitea на git.dementev.space,
а инструкции для агентов всё ещё описывали GitHub Issues и gh.
- Что:
- docs/agents/issue-tracker.md переписан под Gitea и tea 0.15.0: установка,
вход, скоупы токена, обход прокси, команды для issues/комментариев/меток;
- блокировки переведены на нативные зависимости Gitea через tea api,
текстовые строки Blocked by из тел тикетов убраны;
- GitHub ушёл одной строкой в раздел «Архив»;
- docs/agents/triage-labels.md и блок «Agent skills» в AGENTS.md
переобвязаны на Gitea.
- Проверка:
- tea issues list, tea labels list — читают трекер;
- граф блокировок карты #10 собран заново и прочитан обратно через
tea api repos/{owner}/{repo}/issues/<n>/dependencies.
- Зачем:
- GitHub-аккаунт заблокирован 2026-07-26; трекер карты «боевой
реализм» перенесён на git.dementev.space, контекст нужен новой
сессии независимо от исхода апелляции.
- Что:
- .scratch/backup/ — слепок всех 27 issues и резолюция тикета #15
на момент блокировки;
- .scratch/handoffs/ — handoff с состоянием карты, нюансами доступа
к Gitea и списком хвостов (апелляция, выбор основного трекера).
- Проверка:
- тексты читаются; ссылки на Gitea-трекер открываются
(git.dementev.space/ddmitry/clickstream-ch-kafka-superset-demo).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- владелец стенда выбирает целевую модель данных (тикет #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)
- неподтверждённое вынесено в отдельный раздел
Тесты на дословные фразы документов и комментариев удалены: прозу
сторожит ревью, а не pytest. Оставлены структурные инварианты (порядок
задач, монтирования, версии, живые перекрёстные ссылки). В шапке файла —
критерий «инвариант должен переживать честную переписку текста».
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Зачем: тикет #23 — каждое цитируемое число курса сверено с живым
стендом; до этого в уроках стояли заглушки.
Что:
- уроки 00–04: 18 маркеров заполнены числами свежего импорта
(280 437 событий, нули в таблицах ошибок, счётчики ODS/DDS);
- лаба 07: таблица manifest после дня 4 (374 092 / 34 801 / 5 388),
переходящие визиты по стыкам (35/22/26), числа после дня 5;
- лаба 08: каноническая граница трёх дней, пример замера свежести
(лаг 3:45 модельного времени до догона, ETL ~29 с) и вернувшегося
пользователя; две живые поправки разбора времени: убран
принудительный UTC в разборе STG и суффикс +00:00 в сравнении
границы (ловились только на живом стенде).
Проверка: детерминизм подтверждён двумя независимыми циклами
сброс→импорт→инкремент (числа manifest и checksum_sha256 дней 4 и 5
совпали бит в бит); chain-check зелёный; сценарий лабы 08 прогнан
вживую, включая стоп/продолжение и красный full_refresh=false из
урока 4; grep «сверить-на-стенде» пуст; ссылки и якоря целы;
make test (219+31) и make lint зелёные; /ai-text-lint по лабам — без
существенных находок.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Зачем: два слепых ревью (Codex CODE-1..9, Claude TASK-1..2) и
перепроверки нашли дефекты в лабах и метадоках; финал лабы 08
переделан по решению пользователя.
Что:
- канонический сброс в README курса теперь снимает DAG'и с паузы
(все создаются на паузе);
- имя дашборда исправлено на «E-commerce Analytics Dashboard»;
- финал лабы 08: вместо мифа «users == sessions на статике» —
вернувшийся пользователь через границу заморозки и измеренное
обещание свежести; §2 велит записать границы и время (§6 их требует);
- CONTEXT.md: эталонный мир — замороженный живой,
4 056 пользователей / 26 083 визита, возвраты уже есть;
- уроки 5–6 ведут в обязательный маршрут, живое упражнение
урока 5 требует канонический сброс;
- контрактные тесты: убран якорь на удалённую команду; добавленные
на триаже тесты-цитаты срезаны до устойчивых инвариантов
(прозаический легаси-жанр — issue #24);
- handoff обновлён до текущего состояния.
Проверка: make test (219 generator + 31 contract) и make lint зелёные;
SQL вернувшегося пользователя проверен на эфемерном ClickHouse 25.1
(на полном наборе — в #23).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Зачем: два новых режима роста мира не имели уроков, а метадокументы
курса не знали о новом маршруте.
Что: лаба 07 «Следующий день и границы времени» — инкремент дня,
сверка manifest, переходящие визиты запросом в dds.event, включение
расписания на один запуск, цена роста full_refresh; лаба 08 «Живой
поток и свежесть данных» — расслоение свежести слоёв, стоп/продолжение
генератора, users < sessions, врезка про модельное время; LEARNING_PLAN
и README курса согласованы с маршрутом 0–8; в CONTEXT.md починена
ссылка «урок 7» (теперь ведёт на врезку лабы 08). Числа со стенда
помечены маркером «сверить-на-стенде».
Проверка: обе лабы по шаблону LESSON_STANDARD (6 секций, явный «верни
как было»); внутренние ссылки разрешаются; git diff --check чистый.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Зачем: после редизайна пути менти курс ссылался на старый путь
generated-history-analytics/backfill и не проходился по новому стенду.
Что: в README курса — единый блок подготовки и канонического сброса
(make clean -> make up + ddl_init/world_init -> make superset-init),
таблица уроков дополнена лабами 07–08 («в работе»); LESSON_STANDARD и
уроки 0–6 ссылаются на канонический блок; урок 1 переведён на дозаливку
через world_next_day (кнопкой-анонсом, цена в минутах названа); урок 4 —
лесенка DAG-ов; урок 5 — словарь «база import / живой поток»; урок 6
обязателен; цифры старого мира помечены маркером «сверить-на-стенде».
Проверка: grep по generated-history-analytics/backfill в docs/course/
пуст; правки только в docs/course/; git diff --check чистый.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- курс целиком сидит на старом пути backfill и после редизайна
пути менти (issue #9) не заработает; issue #7 требует постановки
- Что:
- спека docs/specs/2026-07-23-course-labs-redesign.md: урок 6
становится обязательным, две обязательные лабы 07 (next-day:
инкремент и границы дня) и 08 (continue: живой поток и свежесть),
канонический сброс через import, вердикты по урокам 0-6 и метадокам
- handoff для продолжения работы в новой сессии
- Проверка:
- адверсарное ревью спеки против кода и доков: 8 находок внесены
решениями, повторная проверка ревьюером — все закрыты
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- триаж issue #2: ошибка `p.dagRuns is undefined` — баг UI Airflow 2.10.x
(в `useGridData.ts` нет проверки формы ответа), а спусковой крючок —
потеря сеанса: `/object/grid_data` отдаёт HTML страницы входа.
- Что:
- в docs/OPERATIONS.md (Troubleshooting) добавлен симптом, причина и что делать.
- Проверка:
- curl -sL http://localhost:8080/object/grid_data?dag_id=... без cookie
отдаёт 200 text/html со страницей входа.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Зачем:
- world_next_day перечитывал всю историю топиков Kafka ради
накопительных счётчиков — время прогона росло с возрастом мира
(issue #5, находка F9).
- Что:
- счётчики засеваются при import из уже прочитанного артефакта и при
backfill из потока; next-day продвигает их только событиями нового
дня, полного чтения Kafka больше нет;
- катящаяся контрольная сумма — сумма SHA-256 событий по модулю 2^256
(инкремент равен полному пересчёту), старый формат артефакта
принимается без изменений;
- точные множества click_id/user_domain_id вынесены из manifest в
цепочку контент-адресуемых фрагментов (<=10 000 ID, SHA-256-цепочка,
отдельный топик counter_chunks) — потолок сообщения Kafka не грозит,
предел 900 000 байт проверяется явно с понятной ошибкой;
- порядок записи всюду: фрагменты -> manifest -> state; старое локальное
состояние отклоняется с подсказкой перезапустить import;
- документация manifest/state обновлена (ARCHITECTURE, OPERATIONS,
runbook startup-history).
- Проверка:
- make test (216+31) и make lint зелёные;
- живая приёмка на чистом стенде: import 235 с; три прогона
world_next_day — 716/718/716 с (плоское время, O(нового дня));
мир 3->6 дней, 561 942 события; make generated-history-chain-check —
все порции и стыки однородны;
- тест равенства инкремента и полного пересчёта:
test_incremental_counters_equal_full_recompute.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- зафиксировать состояние конвейера #5 перед долгой живой приёмкой,
чтобы новая сессия продолжила без потери контекста.
- Что:
- в handoff добавлена дельта 23:10: обе находки FIXED (фрагменты ID
с SHA-256-цепочкой), перепроверка линией B — APPROVED;
- обновлено состояние стенда: им владеет сценарий приёмки;
- в .scratch/issue5-run добавлены свежие отчёты, перепроверка и
сценарий приёмки acceptance-issue5.sh.
- Проверка:
- git show --stat; лог приёмки — до строки SCRIPT_EXIT_CODE=.
- Зачем:
- пользователь делает compaction прямо сейчас; свежие детали конвейера
ещё нигде не были записаны.
- Что:
- дельта: вердикт линии A, запуск триаж-раунда, владелец дерева —
задача Codex mrwhhml9, остановленный дубль и как проверить дерево.
- Проверка:
- чтение раздела «Дельта 23:45» свежим взглядом.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- подстраховать продолжение работы в новой сессии: #5 реализован,
но не закоммичен, два ревью в полёте.
- Что:
- новый handoff с состоянием конвейера #5 (CODE-1 High про лимит
Kafka, порядок триажа) и уроками приёмки этой сессии;
- отработанный handoff от 20:29 удалён по ADR-0003;
- обменные файлы прогона #5 скопированы в .scratch/issue5-run/
(без коммита — локальная копия на случай потери /tmp).
- Проверка:
- git show --stat HEAD; чтение handoff свежим взглядом.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- список DAG'ов должен читаться лесенкой ddl_init → world_init →
world_next_day, а путь менти — проходиться пустыми формами
(issue #4, спека редизайна пути менти, решения 2–3).
- Что:
- generator_control переименован в world_init, дефолт операции —
import; next-day ушёл из выпадашки в отдельный DAG;
- новый беспараметрный world_next_day: расписание */30 * * * *,
создаётся на паузе, catchup=False, max_active_runs=1; общие
задачи вынесены в airflow/dags/utils/startup_history_tasks.py;
- доки и контрактные тесты обновлены синхронно; быстрый старт
README — без make ddl, схему создаёт DAG ddl_init.
- Проверка:
- make test (210 + 31) и make lint зелёные;
- живая приёмка на чистом стенде: world_init пустой формой
импортировал эталонный мир за 217 с (3 дня, 280 437 событий),
world_next_day после снятия с паузы добавляет ровно один день
за прогон, дашборд Superset собирается.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- следующая сессия после compaction продолжает конвейерное
исполнение фичи; нужен свежий вход без потери уроков приёмки #3.
- Что:
- новый handoff 20260722-2029: порядок #4 → #5, уроки приёмки,
сводная карта работ (карта #10 и бэклог ждут решения #18).
- удалены два отработанных handoff'а (одноразовые по ADR-0003).
- Проверка:
- cat .scratch/handoffs/20260722-2029-finish-mentee-path.md
- Зачем:
- зафиксировать точку продолжения: фронтир фичи (#4, #5) и фронтир
карты (#18 «Модель данных») для следующей сессии.
- Что:
- handoff 20260722-1913: итоги по issues #6/#3, эталонный мир в git,
карта wayfinder #10 с тремя закрытыми тикетами, состояние стенда,
грабли WSL.
- Проверка:
- не требуется (одноразовый документ по ADR-0003).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- менти должен понимать, какой опыт со стенда переносится на бой
напрямую, а какой требует поправки на учебные упрощения
(тикет «Реализм генератора» карты боевого реализма, issue #11).
- Что:
- docs/generator-realism.md: что честно как в бою (схема, воронка,
сессии, суточная волна, обвязка) и что упрощено (четыре топика,
только pageview, клонированные пользователи, нет «грязи», масштаб);
- ссылка на документ в списке документации README.
- Проверка:
- make test (210 + 31) зелёный.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- менти собирал мир генерацией (минуты и десятки минут CPU); теперь
готовый трёхдневный мир загружается импортом за ~2 минуты, и числа
у всех менти совпадают число-в-число (issue #3).
- Что:
- артефакт data/startup_history/reference-world.json.xz в git:
3 модельных дня daily-wave, ~850 МБ JSON → 32 МБ xz;
- чтение и запись артефакта понимают .xz потоково (lzma); пустое поле
artifact_path в пульте и make startup-history-import читают эталон;
- длительность профиля daily-wave стала 3d — в тон эталонному миру;
- предпроверка чистого стенда ставит зависимости генератора через uv;
экспорт и импорт разведены отдельными переменными Makefile;
- доки и runbook обновлены; новые контрактные тесты: xz round-trip
и дефолтные пути артефакта.
- Проверка:
- make test (210 + 31) и make lint зелёные; импорт на чистом стенде
за 2м03с, manifest совпал (280437 событий), Superset-проверка
зелёная; независимое ревью — APPROVED.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- менти доставался плоский тестовый профиль ci; учебный профиль
должен быть один — daily-wave с суточной волной (issue #6).
- Что:
- дефолт daily-wave во всех точках: форма пульта generator_control,
launch.py (API и CLI), Config, Makefile, четыре shell-скрипта.
- автопроверки передают ci явно; контрактный тест пульта теперь
проверяет сам дефолт Param профиля (через AST), а не подстроку.
- доки в том же изменении: README, OPERATIONS, TEST_PLAN,
generator/README, runbook startup-history.
- Проверка:
- make test (206 + 31 passed) и make lint — зелёные.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- handoff должен отражать, что уже в трекере, а что осталось завести.
- Что:
- список «не забыть» сокращён: #1 и #2 созданы, остались лабы и
инкрементальный ETL.
- Проверка:
- gh issue list — два открытых issue.
- Зачем:
- full_refresh на каждый world_next_day пересчитывает весь мир —
с ростом мира это следующее узкое место после счётчиков manifest.
- Что:
- в список issues «не забыть» добавлен инкрементальный ETL со ссылкой
на legacy-план plans/incremental-etl-v2.md.
- Проверка:
- вычитка handoff.
- Зачем:
- следующая сессия должна стартовать от актуальной точки.
- Что:
- раздел «Что дальше» переписан: спека и контракт трекера сделаны,
остались issues и конвейер задач.
- Проверка:
- вычитка handoff.
- Зачем:
- три обещания спеки расходились с фактами кода и замеров HITL.
- Что:
- в путь менти возвращён шаг make superset-init; критерий «терминал
только make up» поправлен честно.
- критерий стоимости world_next_day сужен до генерации+manifest:
ETL full_refresh растёт с миром — явно вынесен в «чего не делаем».
- проверка профиля ×1 уточнена: runtime-seam уже на daily-wave,
проверять надо дефолты launch.py и автотесты.
- Проверка:
- сверка с scripts/run_generated_history_runtime_check.sh, Makefile
и замерами HITL (ETL 30 с на 110k событий).
- Зачем:
- находки ручного HITL 2026-07-19 требовали проектного решения: путь
менти через backfill медленный, бедный и путаный; нужна база import
эталонного мира и две ветки роста.
- Что:
- спека docs/specs/2026-07-19-mentee-path-redesign.md: целевая модель
(import + next-day + continue), эталонный 3-дневный мир в git (xz),
переименование пульта в world_init с дефолтом import, отдельный
world_next_day, инкрементальные счётчики manifest, один учебный
профиль; форма работ — 4 дочерних issue.
- CONTEXT.md: термины «мир (стенда)», «эталонный мир», «три режима
менти».
- .scratch/hitl-findings.md восстановлен из среза 0e312b3 как рабочий
материал фичи (до разбора в issues).
- Проверка:
- вычитка против hitl-findings и решений обсуждения 2026-07-19.
- Зачем:
- пилот нативного трекера на фиче mentee-path: спека в git как
источник истины, тонкий корневой issue, дочерние issues-постановки.
- Что:
- docs/agents/issue-tracker.md переписан с локального markdown на
GitHub Issues (gh CLI, правило тонкого корневого issue, архив
старых задач — в истории git, срез 0e312b3).
- triage-метки стали настоящими метками GitHub (созданы в репозитории),
AGENTS.md обновлён.
- Проверка:
- gh label list — пять канонических меток на месте.
- Зачем:
- после слияния feature/data-generator одноразовые материалы .scratch
(задачи 01-21, PRD, журналы, старые handoff'ы) больше не нужны:
долговечное живёт в docs/, история — в git (срез 0e312b3).
- Что:
- удалено всё содержимое .scratch (50 файлов).
- добавлен handoff 20260719-2229-mentee-path-start.md: направление
редизайна пути менти (4 задачи) и пилот GitHub Issues.
- Проверка:
- git show --stat; в .scratch остался только новый handoff.
- Зачем:
- перед слиянием в main документация должна совпадать с кодом:
ARCHITECTURE.md и REPO_MAP.md не знали про операцию next-day,
каталог generator/ и семь новых скриптов.
- Что:
- в ARCHITECTURE.md операция next-day добавлена в описание DAG
generator_control (три места).
- в REPO_MAP.md добавлены раздел Generator и семь скриптов
стартовой истории; описание generator_control дополнено.
- Проверка:
- make lint — зелёный; сверка списков с airflow/dags и scripts/.
- Зачем:
- форма Trigger DAG требовала заполнить все поля: канонический запуск
«выбрать профиль, остальное пусто» через UI был невозможен (находка F1
ручного HITL); артефакты backfill (data/*.json, 49 МБ) рисковали
попасть в коммит.
- Что:
- пять необязательных Param переведены на Param(None, type=["null",
"string"]) — идиома необязательного поля, проверено по Context7
(Airflow 2.10.5); все места чтения уже None-безопасны (or "").
- контрактный тест дополнен: у необязательных Param есть "null" в type,
у operation/profile — нет.
- .gitignore: правило data/*.json (сиды data/*.jsonl остаются под git);
задача 21 закрыта в .scratch.
- Проверка:
- make test (205 + 31 passed) и make lint — зелёные.
- Зачем:
- долг ручной HITL-проверки пути менти переносился пятый handoff подряд;
проверка вскрыла набор находок и наметила редизайн пути менти.
- Что:
- добавлены находки HITL (F1-F9) с рамочной моделью трёх режимов менти:
import-база, ветки next-day и continue, под каждую — свой урок/лаба.
- зафиксированы решения: 3-дневный артефакт на daily-wave, сжатие xz,
один учебный профиль, беспараметрный next-day, инкрементальные счётчики.
- добавлен handoff по ADR-0003 с планом раскладки находок в постановки.
- Проверка:
- чтение .scratch/generator-model-time-startup-history/hitl-findings.md
и .scratch/handoffs/20260719-2144-hitl-mentee-path-redesign.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Зачем:
- передать контекст новой сессии: конвейер задачи 13 завершён, следующие
шаги — задача про расписание, HITL-проверка пути менти, уроки плейбука.
- Что:
- добавлен handoff 20260712-2359 (итоги конвейера, состояние стенда,
план и отклонения процесса).
- убран отработанный handoff 20260712-2015 (одноразовый по ADR-0003).
- Проверка:
- вычитка handoff'а; ссылки на задачу 13 и коммиты f5dee26/540989d.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- режим кормления стенда порциями: менти триггерит «следующий день»,
видит полный цикл DWH за один шаг (задача 13, вариант 2 — генерация
от слепка T_end).
- Что:
- новый ограниченный режим next-day: восстановление мира из state,
генерация ровно [T_end, T_end+24h), публикация данные -> state ->
манифест (манифест — точка фиксации, автоотката нет).
- операция next-day в DAG generator_control: своя предпроверка границы
вместо clean-guard, идемпотентность через параметр expected_t_end.
- цепочка границ — накопительное поле boundaries в манифесте, старый
формат читается как [T0, T_end]; импорт не изменён.
- новая проверка цепочки (make generated-history-chain-check): непарные
счётчики и однородность по каждой границе, явный статус нулевого
стыка, хвост за границей по всем четырём топикам, литералы в UTC
с микросекундами.
- документация OPERATIONS.md: глагол, предпроверка, восстановление
после сбоя, ограничение retention; в задаче 13 — решения двух слепых
ревью постановки и кода с аргументами отклонений.
- Проверка:
- make test: 204 теста генератора + 31 контракт корня, зелёные.
- make generated-history-chain-check: зелёный, 2 внутренние границы,
непарные счётчики нулевые; учебный цикл: DM 322 -> 10026 -> 19196
за два next-day подряд.
- make generated-history-runtime-check (регрессия задачи 20): зелёный.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- два слепых ревью постановки (Codex и Claude) вернули CHANGES_REQUIRED:
guard чистого стенда противоречил доливке, не были заданы механизм
идемпотентности, точка фиксации, формат цепочки границ и проверки.
- Что:
- добавлен раздел «Решения по ревью постановки»: next-day как новый
ограниченный режим, день = [T_end, T_end+24h), предпроверка границы,
параметр expected_t_end, манифест как точка фиксации, поле boundaries,
батчевый режим проверки цепочки, расписание вынесено в отдельную задачу.
- критерии приёмки финализированы (были черновыми), добавлен раздел
«Границы (что не трогать)», исправлены ссылки на строки кода.
- Проверка:
- вычитка задачи; факты сверены обоими ревьюерами по коду ветки
(индексы находок — в обменном каталоге сессии).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>