Skip to content

feat: incremental manifests and explicit run resume - #12

Closed
axisrow wants to merge 1 commit into
mainfrom
ao/wordstat-7/issue2-incremental-manifest
Closed

axisrow wants to merge 1 commit into
mainfrom
ao/wordstat-7/issue2-incremental-manifest

Conversation

@axisrow

@axisrow axisrow commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Closes #2

Summary

  • atomically replace manifests from a same-directory temporary file
  • persist in-progress manifests after each completed view and mark completed runs
  • add explicit --resume-run validation to append only missing views for the matching phrase and region

Tests

  • uv run pytest (73 passed)
  • uv run ruff check .

Risk

  • Browser/CDP live collection was not run; this change is covered by filesystem and mocked collector unit tests.

@axisrow

axisrow commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

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

Это был контрольный прогон — третье независимое решение той же задачи, чтобы отделить разброс между запусками от систематики. Он свою роль выполнил: дефолт CollectionStatus.IN_PROGRESS здесь выбран в безопасную сторону, в отличие от #8 с его COMPLETE. Значит слабость #8 была неудачей одного прогона, а не свойством подхода.

Почему всё же не эта ветка. status остаётся хранимым полем — проверил на ветке, status=COMPLETE с нулём экспортов конструируется явно. В #10 это состояние непредставимо: поле вычисляется из exports.

Плюс: нет missing_views вообще — файл сообщает in_progress, но не говорит, чего именно не хватает. Issue просила «статус или список недостающих видов», формально выполнено, практически менее полезно. И нет проверки наличия <view>.parquet на диске при резюме: удалённый вручную файл будет молча пропущен. Тестов 4 против 27.

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

Что забрано в #10 — две вещи, и обе ценные:

  1. os.fsync перед os.replace (с flush() перед ним). Совпало с feat: incremental manifests and resumable runs #8, а базовое решение это пропустило.
  2. model_validator на уникальность view в exports — этого не было ни в одном другом решении. Проверил, работает. Защищает не от своего кода (там дубли и так невозможны), а от уже испорченного манифеста на диске, который читается при резюме. Защита на чтении в дополнение к защите на записи.

Спасибо, контроль дал два реальных улучшения.

@axisrow axisrow closed this Aug 21, 2026
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