Skip to content

fix(validate): читать очередь теми же правилами, что и прогон - #8

Merged
retrobich921 merged 2 commits into
mainfrom
fix/validate-on-invalid
Sep 5, 2026
Merged

retrobich921 merged 2 commits into
mainfrom
fix/validate-on-invalid

Conversation

@retrobich921

Copy link
Copy Markdown
Contributor

Что и зачем

rake submit — это route --on-invalid skip плюс validate по тем же файлам. Прогон битую заявку
переживал (карантин + предупреждение), а validate следом читал очередь строгим загрузчиком и падал
на ней же с кодом 2. Файлы решений и отчёта к тому моменту уже лежали в корне, но сдача оставалась
без вердикта — и происходило бы это ровно в час стопкода, когда разбираться некогда.

Нашлось на репетиции сдачи: синтетическая очередь на 302 заявки (шесть банков, карты и СБП, суммы
1–300 тыс., числа строкой, целочисленные operation_id, дата без «T», неизвестные поля и две
заведомо битые строки).

Как сделано

  • у validate появился флаг --on-invalid fail|skip — тот же, что у route; по умолчанию,
    как и раньше, fail;
  • rake submit передаёт --on-invalid skip, так что проверка видит ровно ту очередь, которую
    роутил прогон;
  • карантин не проглатывается: покрытие сверяется по уцелевшим заявкам, а рядом печатается
    WARN в карантине N заявок, решений по ним нет: … со списком идентификаторов. Неполный файл
    решений не должен выглядеть полным;
  • в чек-лист перед стопкодом добавлен шаг «разобрать заявки из WARN руками» и шаг про свои
    providers.json и историю от организаторов (rake submit берёт пути по умолчанию);
  • цифры в документации сверены с прогоном: 243 спека, покрытие строк 96.2% / ветвей 80.3%,
    доля Python приведена к одному основанию (9% от всего Ruby, 12% от рантайма lib + bin).

Как проверить

bundle exec rake              # 243 спека, 0 падений; rubocop без замечаний
bundle exec rake validate     # скрипт организаторов 29/0/0, наш валидатор 30/0/0

Регресс-тест — spec/payout_router/cli_spec.rb: без флага validate падает с кодом 2, с
--on-invalid skip проверяет уцелевшие заявки и печатает WARN про карантин.

Репетиция сдачи на 302 заявках после исправления: 300 решений, ни одного selected_provider: null,
303 проверки, 0 ошибок, 1 предупреждение, 0.45 с.

🤖 Generated with Claude Code

https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk

retrobich921 and others added 2 commits September 5, 2026 16:52
`rake submit` роутил очередь с `--on-invalid skip`, а `validate` следом читал ту же
очередь строгим загрузчиком — и падал с кодом 2 на первой же битой заявке. Файлы
решений и отчёта при этом уже лежали в корне, но сдача оставалась без вердикта,
причём ровно в час стопкода.

Теперь `--on-invalid` есть и у `validate`, и `rake submit` его передаёт. Карантин
не проглатывается: покрытие сверяется по уцелевшим заявкам, а рядом печатается
`WARN в карантине N заявок, решений по ним нет` со списком идентификаторов —
неполный файл решений не должен выглядеть полным.

Проверено репетицией на очереди из 302 заявок с двумя заведомо битыми строками:
300 решений, 0 `selected_provider: null`, 303 проверки, 0 ошибок, 1 предупреждение.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk
- 243 спека вместо 242, покрытие строк 96.2% и ветвей 80.3% — после нового
  регресс-теста на карантин в `validate`;
- доля Python приведена к одному основанию: 1 056 строк — 9% от всего Ruby-кода
  (10 639 с тестами) и 12% от рантайма `lib` + `bin` (7 548); раньше в разных
  документах стояли 9% и 12% без объяснения, откуда разница;
- в чек-лист перед стопкодом добавлены две строки: перезаписать `data/providers.json`
  и историю, если организаторы дадут свои (`rake submit` берёт пути по умолчанию),
  и разобрать руками заявки, о которых валидатор напечатал WARN про карантин;
- в `docs/criteria.md` записана репетиция сдачи на 302 заявках.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk
@retrobich921
retrobich921 merged commit 055935f into main Sep 5, 2026
1 check passed
@retrobich921
retrobich921 deleted the fix/validate-on-invalid branch September 5, 2026 13:55
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