Skip to content

feat: incremental manifests and resumable runs - #8

Closed
axisrow wants to merge 1 commit into
mainfrom
ao/wordstat-5/root
Closed

axisrow wants to merge 1 commit into
mainfrom
ao/wordstat-5/root

Conversation

@axisrow

@axisrow axisrow commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Summary

  • make manifest writes atomic with same-directory temp files and os.replace
  • persist incomplete status and missing views after each successful export
  • add explicit --resume with phrase/region manifest validation

Tests

  • uv run pytest -q (71 passed)
  • uv run ruff check . (All checks passed)

Known limitation: browser/CDP live collection was not run; this change is covered by filesystem/unit tests.

@axisrow
axisrow marked this pull request as draft August 21, 2026 01:30
@axisrow

axisrow commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Закрываю по итогам сравнения трёх независимых решений issue #2. За базу взят #10.

Почему не эта ветка. status/missing_views здесь — хранимые поля с дефолтом CollectionStatus.COMPLETE. Проверил на ветке:

CollectionManifest(phrase='p', region='r', ..., exports=[]).status  ->  complete

Манифест без единого экспорта заявляет, что прогон полный — ровно тот молчаливый отказ, ради устранения которого заведена issue («частичный результат виден как частичный»). В коде PR поля выставляются правильно, так что баг латентный, но защита, которую можно обойти забывчивостью вызывающего, защитой не является. В #10 status/missing_views выведены из exports через computed_field, и расхождение непредставимо.

Дополнительно: views_to_collect доверяет манифесту, не проверяя наличие <view>.parquet на диске — удалённый вручную файл резюм молча пропустит. Валидация --resume только внутри коллектора, без предварительной проверки до запуска Chrome. Тестов 3 против 27, коллектор не покрыт — инкрементальная запись, главное поведение фичи, не проверена.

Прогнал сам: 71 passed, ruff чистый — отчёт подтвердился.

Что забрано в #10: os.fsync перед os.replace. Этого не было в базовом решении, а без него содержимое временного файла может не дойти до диска при потере питания. Спасибо — пункт по делу.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant