Skip to content

status=complete при нулевом row_count — манифест не отражает фактическую пустоту представлений #16

Description

@axisrow

Наблюдение

Обнаружено при перепроверке #11 на коммите 45512d402cd75e8c30703c2bfdb86cb1a7a059e5 (2026-08-21). Это отдельная проблема от #11: #11 — про то, что top_popular/top_related физически пустые; здесь — про то, что manifest.json не сигнализирует об этой пустоте потребителю.

Два прогона wordstat collect --keep-raw («купить телефон», «курсы английского языка», регион «Россия», --cdp-url http://127.0.0.1:9223) дали:

Фраза top_popular rows top_related rows dynamics rows regions rows
купить телефон 0 0 24 950
курсы английского языка 0 0 24 813

При этом оба manifest.json содержат:

{
  "missing_views": [],
  "status": "complete"
}

То есть манифест утверждает, что сбор полностью успешен и ни одно представление не пропущено — при том что два из четырёх представлений физически не содержат ни одной строки данных.

Почему это важно (возможно, важнее самого #11)

missing_views/status — это единственный программный сигнал, по которому потребитель манифеста (без ручного похода в CSV/parquet и проверки row_count) решает, доверять ли данным конкретного прогона. Если пустое представление помечается как complete наравне с непустым:

  • wordstat-trends#10 (загрузчик) не отличит «Топы запросов реально пусты в этом окне» от «сбор прошёл штатно, просто нечего показывать» — оба случая выглядят как status: complete.
  • wordstat-trends#16 (мониторинг) не сможет алертить на деградацию конкретно этих представлений, потому что манифест не даёт для этого сигнала — алерт видит только status, а не row_count по каждому view.
  • Любой будущий потребитель манифеста, который не знает про top_popular/top_related возвращают 0 строк данных при --keep-raw, хотя интерфейс показывает данные #11 руками, унаследует эту слепую зону молча.

Предлагаемый инвариант

Представление с row_count == 0 не должно попадать в status: "complete" неотличимо от непустого представления. Варианты (на усмотрение мейнтейнера):

  1. Пустое представление (row_count == 0) добавляется в missing_views, даже если файл технически скачан и сконвертирован — семантически это «не собрано» с точки зрения потребителя.
  2. Либо: у каждого export в manifest.json появляется явный признак пустоты (например "empty": true рядом с "row_count": 0"), а status на верхнем уровне становится не бинарным (complete/incomplete), а различает complete/complete_with_empty_views/аналог.

Любой из двух достаточен — важно, чтобы потребитель манифеста мог отличить «успешный сбор с нулевым результатом» от «успешный сбор с данными», не открывая каждый CSV/parquet руками.

Данные для воспроизведения

Оба замера (2026-08-21, коммит 45512d4) — сырые manifest.json из соответствующих прогонов, доступны по запросу (сохранены локально при проверке, не приложены к этому issue — уже задокументированы построчно выше и в #11).

Связанное

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions