Замер на поднятом стенде 6 августа 2026 года, рядом с прежними 48 секундами
на 25 проверок в одном скрипте:
Цель
Проверок
Время
make smoke
20
8 с
make check-clickhouse (бывшая smoke-cluster)
8
7 с
make check-services (новая)
7
44 с
Проверок было 25, стало 26. Разбор расхождения:
25 прежних разошлись как 19 + 6, содержание ни одной не менялось;
check_containers_survived считается дважды — это дублирование разрешено
тикетом: стенд нагружает check-services, но увидеть отказ по памяти нужно
и тому, кто гонял один смоук (ADR 0004);
+1 новая — check_kafka_external_listener, заведена сверх тикета по
решению владельца по ходу работы (см. «Одна проверка сверх переноса»).
Зависимости машины считает только смоук: «на машине есть Docker, curl и jq» —
вопрос к машине, и на оси он стоит рядом с «стенд собран». Для check-services
это условие запуска, ЗЕЛЁНО за него там не печатается.
Ось деления
Цели различаются не ценой, а тем, кого спрашивают. Быстрота — следствие:
ClickHouse отвечает сам и за миллисекунды, Airflow — через такт планировщика,
Superset — через сессию и обход метаданных.
Совпадение цены и назначения побочное, и это видно по дырам: make smoke не
заметит перепутанных макросов shard — обе ноды здоровы и порты отвечают; make check-clickhouse не заметит потерянного подключения Superset — он про
ClickHouse и только.
Форма разделения
Два скрипта плюс общий файл, без копипасты:
scripts/stand-smoke.sh — 20 проверок;
scripts/stand-services.sh — 7;
scripts/stand-common.sh — счёт проверок, обращение к Compose, published_port, зависимости машины, check_containers_survived, строка
ИТОГ. Сам не запускается.
Имена файлов не трогал: scripts/clickhouse-smoke.sh занят веткой #43, и
переименование устроило бы конфликт на ровном месте. Расхождение имени цели и
имени файла названо строкой в карте. Единственная правка в том файле — два
сообщения об оборванной уборке, где стояло «повторите make smoke-cluster»:
команды с таким именем больше нет.
Одна проверка сверх переноса
Деление оставило дыру, которой раньше не было. Про Airflow, Superset,
Prometheus и Grafana смоук стучится с машины в отображённый порт, а про Kafka
после переезда check_kafka_from_host знал только «контейнер здоров» — а этот
вердикт приходит из healthcheck в compose.yaml, и тот спрашивает брокер
изнутри по внутреннему слушателю. Объявленный наружу адрес может вести не туда,
и Kafka всё равно останется здоровой.
Поломка популярная и показательная: клиент подключается, получает метаданные и
молча виснет на адресе, которого с его стороны не существует. Менти узнаёт, что
у брокера два слушателя и зачем нужен advertised.listeners. Генератор будет
писать в Kafka именно с машины.
Проверка стоит 2,6 секунды, и почти всё это — старт JVM в разовом контейнере, а
не разговор с брокером. Ожидание ответа ограничено 15 секундами при замеренных
2,6 — впятеро больше зелёного прогона.
Карта проверок
docs/architecture/testing.md — новый файл по конвенции каталога. В нём все
семь целей: что утверждает, нужен ли стенд, сколько стоит. Там же правило про
быстрый смоук словами, наблюдение к нему (дорого обходится не работа, а
ожидание службы), лесенка по частоте и переехавшая из README мысль «проверка,
которая не умеет краснеть, бесполезна». Практическая мерка: по документу
решается, куда класть новую проверку, без чтения скриптов — ответ даёт ось.
Автоматического порога по времени нет и заводить его не следует (ADR 0004,
спека генератора: «наблюдаемость без порогов»). Смоук и check-services
печатают своё время в строке ИТОГ — как замер, а не как порог.
Из AGENTS.md — строка-указатель. Из README карта не дублируется: описания целей
и лесенка переехали, остались быстрый старт, рабочий цикл и ссылка. Быстрый
старт правлен осознанно: первое знакомство запускает все три цели на стенде —
пара make up && make smoke после деления уже не показывает, что Airflow
запускает DAG, а Superset ходит в базу.
Планка приёмки этапа в спеке названа поимённо: make smoke, make check-clickhouse, make check-services вместо общего «smoke-проверки»,
иначе она тихо опустилась бы при том же названии команды.
Проверка
Все цели на поднятом стенде зелёные:
make config-test ЗЕЛЁНО
make smoke 20 проверок, 8 с
make check-clickhouse 8 проверок, 7 с
make check-services 7 проверок, 44 с
Краснеть умеют обе разделённые цели — проверено руками, а не рассуждением:
со снятым prometheus смоук дал три ошибки и ненулевой код возврата;
с подменённым ожидаемым UUID подключения Superset покраснел check-services;
новую проверку Kafka проверили её собственной поломкой: брокеру объявлен
адрес kafka-nowhere:29092 при целом внутреннем слушателе — проверка
состояния контейнера осталась зелёной, смоук покраснел именно на этой строке.
Kafka возвращена в исходное состояние, посторонних контейнеров не осталось.
Обе цели краснеют и когда на машине не хватает команды из списка зависимостей.
Холодное ревью
Линию дефектов вёл Codex свежим тредом, без общего контекста. Две находки:
MINOR, исправлено: в карте абзац замеров спорил с таблицей — «5 и 6
секунд» осталось от версии до добавления проверки Kafka.
MAJOR, отклонено с доводом:kafka-topics.sh --list проверяет код
возврата, поэтому объявленный адрес, ведущий на другой живой кластер Kafka,
дал бы зелёное. Это не регрессия — переехавшая check_kafka_from_host
устроена так же и подмену кластера тоже не заметит. Сценарий требует второго
достижимого брокера на той же машине при портах, привязанных к 127.0.0.1.
Закрытие стоит второго запуска JVM (сверка CLUSTER_ID) — плюс 30% к смоуку
ради случая, которого на локальной машине не бывает. Отложенный риск: если
стенд поедет в общую среду, проверку надо усилить сверкой идентификатора
кластера.
Что осталось за границами
make config-test проверяет синтаксис Bash не так, как обещает: bash -n со
списком файлов разбирает только первый, остальные уходят в аргументы. Проверено
отдельно — заведомо сломанный второй файл проходит зелёным. Чинится циклом в
одну строку, но это вне границ #54; стоит отдельного тикета.
Closes #54.
## Счёт и время
Замер на поднятом стенде 6 августа 2026 года, рядом с прежними **48 секундами
на 25 проверок** в одном скрипте:
| Цель | Проверок | Время |
|---|---|---|
| `make smoke` | 20 | 8 с |
| `make check-clickhouse` (бывшая `smoke-cluster`) | 8 | 7 с |
| `make check-services` (новая) | 7 | 44 с |
Проверок было 25, стало 26. Разбор расхождения:
- 25 прежних разошлись как **19 + 6**, содержание ни одной не менялось;
- `check_containers_survived` считается дважды — это дублирование разрешено
тикетом: стенд нагружает `check-services`, но увидеть отказ по памяти нужно
и тому, кто гонял один смоук (ADR 0004);
- **+1 новая** — `check_kafka_external_listener`, заведена сверх тикета по
решению владельца по ходу работы (см. «Одна проверка сверх переноса»).
Зависимости машины считает только смоук: «на машине есть Docker, curl и jq» —
вопрос к машине, и на оси он стоит рядом с «стенд собран». Для `check-services`
это условие запуска, ЗЕЛЁНО за него там не печатается.
## Ось деления
Цели различаются не ценой, а тем, **кого спрашивают**. Быстрота — следствие:
ClickHouse отвечает сам и за миллисекунды, Airflow — через такт планировщика,
Superset — через сессию и обход метаданных.
Совпадение цены и назначения побочное, и это видно по дырам: `make smoke` не
заметит перепутанных макросов `shard` — обе ноды здоровы и порты отвечают;
`make check-clickhouse` не заметит потерянного подключения Superset — он про
ClickHouse и только.
## Форма разделения
Два скрипта плюс общий файл, без копипасты:
- `scripts/stand-smoke.sh` — 20 проверок;
- `scripts/stand-services.sh` — 7;
- `scripts/stand-common.sh` — счёт проверок, обращение к Compose,
`published_port`, зависимости машины, `check_containers_survived`, строка
ИТОГ. Сам не запускается.
Имена файлов не трогал: `scripts/clickhouse-smoke.sh` занят веткой #43, и
переименование устроило бы конфликт на ровном месте. Расхождение имени цели и
имени файла названо строкой в карте. Единственная правка в том файле — два
сообщения об оборванной уборке, где стояло «повторите `make smoke-cluster`»:
команды с таким именем больше нет.
## Одна проверка сверх переноса
Деление оставило дыру, которой раньше не было. Про Airflow, Superset,
Prometheus и Grafana смоук стучится с машины в отображённый порт, а про Kafka
после переезда `check_kafka_from_host` знал только «контейнер здоров» — а этот
вердикт приходит из `healthcheck` в `compose.yaml`, и тот спрашивает брокер
изнутри по внутреннему слушателю. Объявленный наружу адрес может вести не туда,
и Kafka всё равно останется здоровой.
Поломка популярная и показательная: клиент подключается, получает метаданные и
молча виснет на адресе, которого с его стороны не существует. Менти узнаёт, что
у брокера два слушателя и зачем нужен `advertised.listeners`. Генератор будет
писать в Kafka именно с машины.
Проверка стоит 2,6 секунды, и почти всё это — старт JVM в разовом контейнере, а
не разговор с брокером. Ожидание ответа ограничено 15 секундами при замеренных
2,6 — впятеро больше зелёного прогона.
## Карта проверок
`docs/architecture/testing.md` — новый файл по конвенции каталога. В нём все
семь целей: что утверждает, нужен ли стенд, сколько стоит. Там же правило про
быстрый смоук словами, наблюдение к нему (дорого обходится не работа, а
ожидание службы), лесенка по частоте и переехавшая из README мысль «проверка,
которая не умеет краснеть, бесполезна». Практическая мерка: по документу
решается, куда класть новую проверку, без чтения скриптов — ответ даёт ось.
Автоматического порога по времени нет и заводить его не следует (ADR 0004,
спека генератора: «наблюдаемость без порогов»). Смоук и `check-services`
печатают своё время в строке ИТОГ — как замер, а не как порог.
Из AGENTS.md — строка-указатель. Из README карта не дублируется: описания целей
и лесенка переехали, остались быстрый старт, рабочий цикл и ссылка. Быстрый
старт правлен осознанно: первое знакомство запускает все три цели на стенде —
пара `make up && make smoke` после деления уже не показывает, что Airflow
запускает DAG, а Superset ходит в базу.
Планка приёмки этапа в спеке названа поимённо: `make smoke`,
`make check-clickhouse`, `make check-services` вместо общего «smoke-проверки»,
иначе она тихо опустилась бы при том же названии команды.
## Проверка
Все цели на поднятом стенде зелёные:
```
make config-test ЗЕЛЁНО
make smoke 20 проверок, 8 с
make check-clickhouse 8 проверок, 7 с
make check-services 7 проверок, 44 с
```
Краснеть умеют обе разделённые цели — проверено руками, а не рассуждением:
- со снятым `prometheus` смоук дал три ошибки и ненулевой код возврата;
- с подменённым ожидаемым UUID подключения Superset покраснел `check-services`;
- новую проверку Kafka проверили её собственной поломкой: брокеру объявлен
адрес `kafka-nowhere:29092` при целом внутреннем слушателе — проверка
состояния контейнера осталась зелёной, смоук покраснел именно на этой строке.
Kafka возвращена в исходное состояние, посторонних контейнеров не осталось.
Обе цели краснеют и когда на машине не хватает команды из списка зависимостей.
## Холодное ревью
Линию дефектов вёл Codex свежим тредом, без общего контекста. Две находки:
- **MINOR, исправлено:** в карте абзац замеров спорил с таблицей — «5 и 6
секунд» осталось от версии до добавления проверки Kafka.
- **MAJOR, отклонено с доводом:** `kafka-topics.sh --list` проверяет код
возврата, поэтому объявленный адрес, ведущий на *другой* живой кластер Kafka,
дал бы зелёное. Это не регрессия — переехавшая `check_kafka_from_host`
устроена так же и подмену кластера тоже не заметит. Сценарий требует второго
достижимого брокера на той же машине при портах, привязанных к `127.0.0.1`.
Закрытие стоит второго запуска JVM (сверка `CLUSTER_ID`) — плюс 30% к смоуку
ради случая, которого на локальной машине не бывает. Отложенный риск: если
стенд поедет в общую среду, проверку надо усилить сверкой идентификатора
кластера.
## Что осталось за границами
`make config-test` проверяет синтаксис Bash не так, как обещает: `bash -n` со
списком файлов разбирает только первый, остальные уходят в аргументы. Проверено
отдельно — заведомо сломанный второй файл проходит зелёным. Чинится циклом в
одну строку, но это вне границ #54; стоит отдельного тикета.
- Зачем:
- смоук перестал быть быстрым: 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>
- Зачем:
- деление целей оставило дыру: про Airflow, Superset, Prometheus и Grafana
смоук стучится с машины в отображённый порт, а про Kafka после переезда
check_kafka_from_host знал только «контейнер здоров».
- вердикт этот приходит из healthcheck в compose.yaml, а тот спрашивает
брокер изнутри и по внутреннему слушателю: объявленный наружу адрес может
вести не туда, и Kafka всё равно останется здоровой.
- поломка популярная и показательная: клиент подключается, получает
метаданные и молча виснет на адресе, которого с его стороны нет. Менти
узнаёт, что у брокера два слушателя и зачем нужен advertised.listeners.
Генератор будет писать в Kafka именно с машины.
- Что:
- check_kafka_external_listener в make smoke: запрос списка топиков с машины
через отображённый порт, ответ приходит только если объявленный адрес ведёт
туда же. Комментарий у проверки объясняет, от чего она заведена.
- ожидание ответа ограничено 15 секундами при замеренных 2,6 — впятеро
больше, чем стоит зелёный прогон.
- README и карта проверок: новая проверка названа, доводы записаны, цена
смоука обновлена с 6 до 8 секунд.
- Проверка:
- make config-test, make smoke (20 проверок, 8 с), make check-clickhouse,
make check-services — зелёные.
- краснеет на своей поломке: брокеру объявлен адрес kafka-nowhere:29092 при
целом внутреннем слушателе — проверка состояния контейнера осталась
зелёной, смоук покраснел именно на этой строке. После проверки Kafka
возвращена в исходное состояние, посторонних контейнеров не осталось.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ddmitry
merged commit 4245daf3f1 into main2026-08-06 16:04:44 +03:00
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.
Closes #54.
Счёт и время
Замер на поднятом стенде 6 августа 2026 года, рядом с прежними 48 секундами
на 25 проверок в одном скрипте:
make smokemake check-clickhouse(бывшаяsmoke-cluster)make check-services(новая)Проверок было 25, стало 26. Разбор расхождения:
check_containers_survivedсчитается дважды — это дублирование разрешенотикетом: стенд нагружает
check-services, но увидеть отказ по памяти нужнои тому, кто гонял один смоук (ADR 0004);
check_kafka_external_listener, заведена сверх тикета порешению владельца по ходу работы (см. «Одна проверка сверх переноса»).
Зависимости машины считает только смоук: «на машине есть Docker, curl и jq» —
вопрос к машине, и на оси он стоит рядом с «стенд собран». Для
check-servicesэто условие запуска, ЗЕЛЁНО за него там не печатается.
Ось деления
Цели различаются не ценой, а тем, кого спрашивают. Быстрота — следствие:
ClickHouse отвечает сам и за миллисекунды, Airflow — через такт планировщика,
Superset — через сессию и обход метаданных.
Совпадение цены и назначения побочное, и это видно по дырам:
make smokeнезаметит перепутанных макросов
shard— обе ноды здоровы и порты отвечают;make check-clickhouseне заметит потерянного подключения Superset — он проClickHouse и только.
Форма разделения
Два скрипта плюс общий файл, без копипасты:
scripts/stand-smoke.sh— 20 проверок;scripts/stand-services.sh— 7;scripts/stand-common.sh— счёт проверок, обращение к Compose,published_port, зависимости машины,check_containers_survived, строкаИТОГ. Сам не запускается.
Имена файлов не трогал:
scripts/clickhouse-smoke.shзанят веткой #43, ипереименование устроило бы конфликт на ровном месте. Расхождение имени цели и
имени файла названо строкой в карте. Единственная правка в том файле — два
сообщения об оборванной уборке, где стояло «повторите
make smoke-cluster»:команды с таким именем больше нет.
Одна проверка сверх переноса
Деление оставило дыру, которой раньше не было. Про Airflow, Superset,
Prometheus и Grafana смоук стучится с машины в отображённый порт, а про Kafka
после переезда
check_kafka_from_hostзнал только «контейнер здоров» — а этотвердикт приходит из
healthcheckвcompose.yaml, и тот спрашивает брокеризнутри по внутреннему слушателю. Объявленный наружу адрес может вести не туда,
и Kafka всё равно останется здоровой.
Поломка популярная и показательная: клиент подключается, получает метаданные и
молча виснет на адресе, которого с его стороны не существует. Менти узнаёт, что
у брокера два слушателя и зачем нужен
advertised.listeners. Генератор будетписать в Kafka именно с машины.
Проверка стоит 2,6 секунды, и почти всё это — старт JVM в разовом контейнере, а
не разговор с брокером. Ожидание ответа ограничено 15 секундами при замеренных
2,6 — впятеро больше зелёного прогона.
Карта проверок
docs/architecture/testing.md— новый файл по конвенции каталога. В нём всесемь целей: что утверждает, нужен ли стенд, сколько стоит. Там же правило про
быстрый смоук словами, наблюдение к нему (дорого обходится не работа, а
ожидание службы), лесенка по частоте и переехавшая из README мысль «проверка,
которая не умеет краснеть, бесполезна». Практическая мерка: по документу
решается, куда класть новую проверку, без чтения скриптов — ответ даёт ось.
Автоматического порога по времени нет и заводить его не следует (ADR 0004,
спека генератора: «наблюдаемость без порогов»). Смоук и
check-servicesпечатают своё время в строке ИТОГ — как замер, а не как порог.
Из AGENTS.md — строка-указатель. Из README карта не дублируется: описания целей
и лесенка переехали, остались быстрый старт, рабочий цикл и ссылка. Быстрый
старт правлен осознанно: первое знакомство запускает все три цели на стенде —
пара
make up && make smokeпосле деления уже не показывает, что Airflowзапускает DAG, а Superset ходит в базу.
Планка приёмки этапа в спеке названа поимённо:
make smoke,make check-clickhouse,make check-servicesвместо общего «smoke-проверки»,иначе она тихо опустилась бы при том же названии команды.
Проверка
Все цели на поднятом стенде зелёные:
Краснеть умеют обе разделённые цели — проверено руками, а не рассуждением:
prometheusсмоук дал три ошибки и ненулевой код возврата;check-services;адрес
kafka-nowhere:29092при целом внутреннем слушателе — проверкасостояния контейнера осталась зелёной, смоук покраснел именно на этой строке.
Kafka возвращена в исходное состояние, посторонних контейнеров не осталось.
Обе цели краснеют и когда на машине не хватает команды из списка зависимостей.
Холодное ревью
Линию дефектов вёл Codex свежим тредом, без общего контекста. Две находки:
секунд» осталось от версии до добавления проверки Kafka.
kafka-topics.sh --listпроверяет кодвозврата, поэтому объявленный адрес, ведущий на другой живой кластер Kafka,
дал бы зелёное. Это не регрессия — переехавшая
check_kafka_from_hostустроена так же и подмену кластера тоже не заметит. Сценарий требует второго
достижимого брокера на той же машине при портах, привязанных к
127.0.0.1.Закрытие стоит второго запуска JVM (сверка
CLUSTER_ID) — плюс 30% к смоукуради случая, которого на локальной машине не бывает. Отложенный риск: если
стенд поедет в общую среду, проверку надо усилить сверкой идентификатора
кластера.
Что осталось за границами
make config-testпроверяет синтаксис Bash не так, как обещает:bash -nсосписком файлов разбирает только первый, остальные уходят в аргументы. Проверено
отдельно — заведомо сломанный второй файл проходит зелёным. Чинится циклом в
одну строку, но это вне границ #54; стоит отдельного тикета.
- Зачем: - смоук перестал быть быстрым: 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>- Зачем: - деление целей оставило дыру: про Airflow, Superset, Prometheus и Grafana смоук стучится с машины в отображённый порт, а про Kafka после переезда check_kafka_from_host знал только «контейнер здоров». - вердикт этот приходит из healthcheck в compose.yaml, а тот спрашивает брокер изнутри и по внутреннему слушателю: объявленный наружу адрес может вести не туда, и Kafka всё равно останется здоровой. - поломка популярная и показательная: клиент подключается, получает метаданные и молча виснет на адресе, которого с его стороны нет. Менти узнаёт, что у брокера два слушателя и зачем нужен advertised.listeners. Генератор будет писать в Kafka именно с машины. - Что: - check_kafka_external_listener в make smoke: запрос списка топиков с машины через отображённый порт, ответ приходит только если объявленный адрес ведёт туда же. Комментарий у проверки объясняет, от чего она заведена. - ожидание ответа ограничено 15 секундами при замеренных 2,6 — впятеро больше, чем стоит зелёный прогон. - README и карта проверок: новая проверка названа, доводы записаны, цена смоука обновлена с 6 до 8 секунд. - Проверка: - make config-test, make smoke (20 проверок, 8 с), make check-clickhouse, make check-services — зелёные. - краснеет на своей поломке: брокеру объявлен адрес kafka-nowhere:29092 при целом внутреннем слушателе — проверка состояния контейнера осталась зелёной, смоук покраснел именно на этой строке. После проверки Kafka возвращена в исходное состояние, посторонних контейнеров не осталось. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>