Commit Graph
11 Commits
Author SHA1 Message Date
ddadminandClaude Opus 5 8903b6a054 docs(agents): усложнение не бесплатно — платит учебная ценность
- Зачем:
  - у вопроса «чему на этом научится менти?» не хватало второй половины:
    он отсеивал бесполезное, но не взвешивал цену полезного. Стенд
    учебный, и чем он сложнее, тем хуже как учебный материал.
  - прогон #41 показал механизм: две слепые линии ревью дали 15 находок,
    саморевью ещё 7, и каждая по устройству триажа превратилась в правку.
    Шага, на котором кто-нибудь вычитает, в конвейере не было ни разу —
    только воронка. Проход на вычитание потом срезал 149 строк и 6 тестов,
    и всё срезанное появилось после ревью, а не при замысле.
- Что:
  - в раздел «Цель репозитория» добавлены три абзаца: внимание менти как
    конечная валюта и вопрос «что он платит и что получает»; почему
    оборонительный код дороже прочего и врёт про опасность; проход на
    вычитание как обязательный шаг перед приёмкой заметной работы.
  - записано частное правило, выведенное владельцем на двух резах подряд:
    не сторожить ошибку, которую человек делает сам себе и тут же видит —
    разбирательство с ней и есть урок.
- Проверка:
  - правка текстовая, целей make не задевает; make config-test зелёный.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 12:04:43 +03:00
ddadminandClaude Opus 5 bbbe17cfb0 refactor(smoke): цели проверки по назначению — смоук, ClickHouse, службы
- Зачем:
  - смоук перестал быть быстрым: 42 секунды из 48 съедали шесть проверок,
    которые ждут службу — запуск DAG, вход в Superset, Kafka с машины.
  - имена целей врали: смоуком звались и глубокая проверка кластера, и
    интеграционные проверки; префикс достался им от общего происхождения.
  - нигде не было записано, зачем в репозитории каждая цель и куда класть
    новую проверку, — без записи скрипт дорастёт снова.
- Что:
  - ось деления — кого спрашивают, а не сколько стоит: make smoke (стенд
    собран), make check-clickhouse (спрашивают у ClickHouse), новая
    make check-services (службы работают).
  - шесть тяжёлых проверок переехали в scripts/stand-services.sh; общее —
    счёт, обращение к Compose, зависимости машины и check_containers_survived
    — вынесено в scripts/stand-common.sh, копипасты нет.
  - smoke-cluster переименована в check-clickhouse; имя файла скрипта не
    тронуто (в него встраивается проверка договора со схемой), расхождение
    названо в карте.
  - смоук и check-services печатают своё время в строке ИТОГ; порога по
    времени нет — по доводу ADR 0004.
  - docs/architecture/testing.md: карта всех семи целей, правило быстрого
    смоука словами, лесенка по частоте и правило про краснеющую проверку,
    переехавшее из README; указатель из AGENTS.md.
  - README: описания целей сокращены, карта не дублируется; быстрый старт
    показывает работающий стенд, а не только собранный.
  - планка приёмки этапа в спеке названа поимённо: три цели вместо
    «smoke-проверки».
- Проверка:
  - make config-test, make smoke (19 проверок, 6 с), make check-clickhouse
    (8 проверок, 7 с), make check-services (7 проверок, 44 с) — зелёные.
  - 19 + 7 = 25 разных проверок, как и до деления: check_containers_survived
    считается дважды намеренно.
  - краснеют обе разделённые цели: со снятым prometheus смоук дал три ошибки,
    с подменённым UUID подключения Superset покраснел check-services.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:34:02 +03:00
ddadminandClaude Opus 5 6afa26b7be docs(agents): вопрос об учебной ценности как шлагбаум
Зачем: учебная ценность в AGENTS.md заявлена дважды, но обе строки —
утверждения о ценности, а не действие в момент письма. При них проверок
в репозитории выросло больше, чем продукта.

Что: в раздел «Цель репозитория» добавлен проверяемый вопрос к любой
доработке — чему на ней научится менти — с ветвью: не складывается ответ,
значит это вопрос владельцу, а не строчка кода.

Проверка: не требуется, правка документа.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 12:37:06 +03:00
ddadminandClaude Opus 5 31b274175a docs(storage): конвенции и приём событий выправлены после ревью
- Зачем:
  - три холодных ревью и сверка с документацией ClickHouse нашли противоречия
    между докой, ADR и спекой: исполнитель #37 получал два разных ответа на
    один вопрос, а два утверждения о движке оказались неверными.
- Что:
  - раскладка файлов DDL перестроена — сначала таблицы, матвью приёма
    последней: иначе часть событий тихо минует ODS.
  - синхронная вставка снята с пути приёма: настройка недостижима для потока
    Kafka-движка и связывает шарды; на ETL-вставках осталась.
  - у таблицы ошибок появился класс брака с порядком проверки, у сырья и
    ошибок названы движки и ключи сортировки.
  - в доку добавлен раздел «Что проверено»: сверенное с документацией,
    проверяемое на стенде и сказанное по памяти разведены.
  - в спеке выправлены источник матвью разбора, пять опорных колонок, имена
    четырёх витрин и ссылка на несуществующую цель make.
- Проверка:
  - make config-test
  - grep по устаревшим именам файлов DDL и витрин — пусто

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:25:35 +03:00
ddadminandClaude Opus 5 2890c7f9fb feat(generator): каркас проекта и контракт схемы события
- Зачем:
  - этап 2 начинается с формы: контракт схемы — источник истины и для
    генерации событий, и для DDL хранилища, а имена пакета и модулей
    задают границы всем следующим тикетам этапа.
- Что:
  - заведён uv-проект generator/ (pyproject.toml и uv.lock в git; numpy,
    pytest и ruff), пакет clickstream_generator.
  - schema.py — контракт: чистые данные о 47 колонках выгрузки (имя
    Метрики, тип ClickHouse, тип numpy, имя для DDS, группа); порядок
    несёт сам кортеж COLUMNS, отдельного поля с номером нет намеренно.
  - schema_doc.py собирает из контракта описание выгрузки
    docs/formats/clickstream-event.md — по нему пишется сторона
    хранилища; документ руками не правится.
  - тесты: инварианты контракта (состав, уникальность, заполненность,
    согласие типов и порядок групп) и свежесть описания выгрузки.
  - цели make lint, make test и make docs; README, AGENTS.md и
    CONTEXT.md дополнены генератором, форматами и словарной статьёй.
- Проверка:
  - make test (248 тестов), make lint, make config-test;
  - make docs, затем git diff --exit-code docs/ — пусто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 22:22:14 +03:00
ddadminandClaude Opus 5 a9fade84f5 docs(agents): развилки решений — маршрут на скилл brainstorm-with-docs
Зачем: практика веера жила только в заметках карты #26 и памяти агента —
хрупко и локально для одной машины. Строку в AGENTS.md читает каждая
сессия, включая чартинг будущих wayfinder-карт.

Что: подраздел «Развилки решений» в Agent skills — существенные развилки
вести через скилл brainstorm-with-docs: веер вариантов, потом конвергенция.
Состав веера и запись отклонённых — в самом скилле, без дублирования.

Проверка: чтение. Сам скилл версионируется в dotfiles владельца.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 18:30:41 +03:00
ddadminandClaude Opus 5 316c3ed68d docs(agents): линии ревью назначаются по разным основаниям
Зачем.
Правило склеивало два разных требования. Различие родословных нужно для
покрытия классов ошибок, свежая сессия — для независимости от рассуждений
автора; из склейки следовал вывод, что линию уместности надо отдавать
просто тому, кто не писал код. На вкусовой линии это ломается: если писал
Opus, вторым оказывается Codex, у которого вкуса нет. В прогоне #18 он вёл
линию по коду с полными руками и вернул пустой вердикт по коду
неправильной формы.

Что.
Линия дефектов назначается по различию, линия уместности — по умению.
Плата названа прямо: общая слепота автора и ревьюера одной родословной
проходит дважды; где цена ошибки этого не терпит — третья модель.

Проверка.
make config-test — пройдено 3, 3 и 6, ошибок 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 15:35:03 +03:00
ddadminandClaude Opus 5 903b483eb1 docs(agents): контракт — кому поручать вкусовую работу, кому техническую
Зачем.
Учебная ценность записана как базовая, но вывода о выборе исполнителя из
неё не делалось. Прогон #18 показал цену пропуска: код технически
безупречен и при этом неправильной формы — монолитная задача в DAG, ручная
машинерия там, где у Airflow есть свой механизм, ноль комментариев к самому
неочевидному решению.

Что.
Новый раздел «Кому что поручать»: то, что человек будет читать и разбирать,
пишет модель с чувством меры; техническая работа без вкусовых решений — за
Codex; делить работу по подзадачам при планировании, вкусовая часть первой.
Про ревью сказано прямо: когда вкусовую линию ведёт та же родословная, что
писала код, независимость частично теряется — это плата за вкус, и гасится
она свежей сессией и другой линзой.

Проверка.
make config-test — пройдено 3, 3 и 6, ошибок 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 15:31:16 +03:00
ddadminandClaude Opus 5 81f9754c54 docs(agents): контракт — кому поручать вкусовую работу, кому техническую
Зачем.
Учебная ценность записана как базовая, но вывода о выборе исполнителя из
неё не делалось. Прогон #18 показал цену пропуска: код технически
безупречен и при этом неправильной формы — монолитная задача в DAG, ручная
машинерия там, где у Airflow есть свой механизм, ноль комментариев к самому
неочевидному решению.

Что.
В «Цель репозитория» добавлено правило: всё, что человек будет читать и
разбирать, пишет модель с чувством меры; техническая работа без вкусовых
решений — Кодексу; линии ревью всегда разных родословных. Отдельно
отмечено, что экономия лимитов на читаемом коде ложная.

Проверка.
make config-test — пройдено 3, 3 и 6, ошибок 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 15:22:38 +03:00
ddadmin d3bc2f7c18 docs(agents): контракт скиллов — трекер, метки триажа, доки и нейминг
- Зачем:
  - инженерные скиллы (to-tickets, triage, wayfinder, domain-modeling) ждут
    репо-локальную настройку; без неё они не знают, чем заводить issues и
    какими метками размечать. Дока трекера жила ссылкой на репозиторий
    предшественника — внешняя зависимость на месте источника истины.
- Что:
  - заведён docs/agents/: issue-tracker.md (Gitea через tea, команды,
    wayfinding, отдельный раздел про то, что «Закрывает #NN» issue не
    закрывает), triage-labels.md (пять канонических меток без переименований)
    и domain.md (один контекст, CONTEXT.md и docs/adr/).
  - в AGENTS.md добавлен раздел «Agent skills» со ссылками на эти файлы,
    ссылка на доку предшественника заменена локальной.
  - в «Структуре» закреплён нейминг: ГГГГ-ММ-ДД-слаг для docs/specs/ и
    docs/research/, NNNN-слаг для docs/adr/.
- Проверка:
  - tea labels list — все пять меток триажа заведены в репозитории;
  - tea api version — Gitea 1.27.0, команды из доки отвечают живьём.
2026-07-31 09:45:19 +03:00
Dmitry Dementiev 8046e543d0 chore(repo): заложен репозиторий v2 — контракт, спека, исследование
- Зачем:
  - спека «Боевой реализм стенда» исполняется в новом репозитории:
    предшественник замораживается как стабильный учебный стенд,
    v2 стартует пустым и переносит только нужное
- Что:
  - README: что это, статус «строится по спеке», ссылки на спеку и на
    репозиторий-предшественник
  - AGENTS.md написан заново, а не скопирован: язык, uv, обязательная
    проверка API через MCP Context7, контракт трекера Gitea (спека —
    источник истины, корневой issue тонкий), метки триажа, новые доки в docs/
  - .gitignore: Python и uv, .env, секреты, IDE, логи
  - docs/specs/2026-07-30-stand-v2-realism.md перенесена из v1; содержание
    не менялось, поправлены только ссылки: добавлена строка о переезде,
    ссылка на generator-realism.md переведена на абсолютный URL v1
  - docs/research/2026-07-26-yandex-clickstream-format.md перенесено:
    источник истины по формату широкого события
  - лицензии у предшественника нет, переносить нечего
- Проверка:
  - git show --stat: 5 файлов
  - относительные ссылки спеки ведут на существующие файлы репозитория
2026-07-30 15:47:55 +03:00