Repository navigation
feat(report): примеры решений в отчёте по просьбе чекпоинта 2, команда bound и сверка с критериями - #6
Merged
Conversation
…еделения AssignmentBound был написан, но не выведен наружу — запустить его можно было только скриптом. Теперь это команда `bound`, она же в CI вместе со стресс-прогоном. Исправлена ошибка модели: оптимум с квотами получался выше оптимума без них. Причина — self-provider был доступен эталону без ограничений, а по модели одобрения он выглядит лучше всех внешних (нет истории, заявленные 0.95 против откалиброванных 0.62–0.80, нет лимитов). Квоты выталкивали заявки на него и «улучшали» результат. Теперь эталону разрешено ровно столько заявок на self-provider, сколько использовал наш роутер: наше распределение заведомо допустимо в его задаче, и оптимум становится настоящей верхней границей. Правильные цифры: на очередях в 200–1000 заявок наш онлайновый роутер берёт 92–96% от всезнающего пакетного оптимума (было заявлено 96–97%). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk
Добавлен docs/criteria.md — каждый подкритерий трека (100 + 140 + 20) против конкретного артефакта и команды, которой это проверяется за минуту, плюс раздел «что знаем и не прячем». Дублирующая таблица в docs/plan.md заменена указателем на него. Удалён docs/checkpoint2.md: он повторял docs/checkpoint.md и уже разошёлся с ним в цифрах. Уникальное перенесено туда, где ему место: «задача простыми словами» и таблица «если что-то не так» — в README (их читает жюри), три новых вопроса к экспертам — в docs/checkpoint.md §5. Сверены с прогоном все числа во всех документах: 236 спеков, покрытие строк 96.0%, 14 hard-правил, 13 целей, 13 правил рекомендаций, 10 пресетов, 11 политик в compare, бэктест 72.2 → 75.6, соотношение Ruby/Python 91/9. Раньше в разных файлах стояли 211/213/181 спек, 11/12/13 правил рекомендаций и бэктест «+6.9%», которого давно нет. docs/plan.md приведён к фактическому состоянию на 5 сентября: что из плана чекпоинта 2 сделано, а что осознанно отложено за стопкод. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk
…то-если» Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
0. Главное: сделано то, что попросили на чекпоинте 2
Эксперты 05.09: «добавьте несколько примеров в отчёт — если в итоговом отчёте видна логика
отмены заявок и поиска новых решений, проверяющий быстрее найдёт соответствующий код и оценит его».
В
routing_report.jsonпоявился блокexamples— четыре характерных случая, по одному на механизм:choice_among_severalsingle_eligibleretry_after_failurefallback_to_self_providerУ каждого примера: кто выбран и почему (
reason,score, чем именно обошёл соперника),почему отсеяны остальные (код правила + детали), исход — и
sourceс файлом и методом,где это решение принимается. Ровно то, о чём просили: по отчёту находится код.
Демонстрационный прогон каскада теперь подбирает seed так, чтобы в отчёте были видны обе
ветки сразу — и переотправка после отказа, и fallback. То же самое отдельной секцией в HTML-дашборде.
routing_decisions.jsonпри этом не изменился: логика роутинга не тронута, менялся только отчёт.Кастомные поля эксперты подтвердили дважды — на чекпоинте 1 и на чекпоинте 2
(«собственные названия и константы на баллы не влияют»).
Ниже — то, что было в этом PR до чекпоинта: строгая сверка репозитория с критериями трека,
ревизия всех документов и одна найденная при этом ошибка в модели.
1. Сверка с критериями — новый
docs/criteria.mdКаждый подкритерий трека (эксперты 100 + жюри 140 + отраслевые 20) против конкретного артефакта
и команды, которой это проверяется за минуту. Плюс раздел «что знаем и не прячем» — слабые места
названы прямо, а не спрятаны.
Дублирующая таблица «за счёт чего побеждаем» из
docs/plan.mdзаменена указателем на него.Дыр по критериям не нашлось, но нашлась одна невыведенная наружу возможность — см. пункт 2.
2. Команда
bound+ исправленная модель эталонаAssignmentBoundиз #5 существовал, но запустить его можно было только скриптом — из CLI оннедоступен, то есть для жюри его как бы нет. Теперь это команда
bound, она же в CI.При выводе наружу вскрылась ошибка модели: оптимум с квотами по долям получался выше
оптимума без квот — невозможный результат. Причина: self-provider был доступен эталону без
ограничений, а по модели одобрения он выглядит лучше всех внешних (нет истории, заявленные 0.95
против откалиброванных 0.62–0.80, нет лимитов, лучшая маржа). Квоты выталкивали заявки на него
и «улучшали» результат.
Исправление: эталону разрешено ровно столько заявок на self-provider, сколько использовал наш
роутер. Тогда наше распределение заведомо допустимо в его задаче, и оптимум — настоящая верхняя
граница. Инвариант закреплён спеком (
оптимум ≥ наш роутинг ≥ худшее допустимое).Правильные цифры: на очередях в 200–1000 заявок наш онлайновый роутер берёт 92–96%
от всезнающего пакетного оптимума. В #5 было заявлено 96–97% — это исправлено в
docs/search.md.В CI добавлены
rake stressиbound— инварианты и эталон теперь проверяются и на Linux.3. Ревизия всех
.mdСверены с фактическим прогоном все числа во всех документах. Было расхождение почти везде:
compare)pr compareexplain op_110Каждая цифра проверена командой, а не переписана по памяти.
4. Убрано лишнее
docs/checkpoint2.mdудалён. Он повторялdocs/checkpoint.md(демо, вопросы, чек-лист)и уже разошёлся с ним в цифрах — ровно тот случай, из-за которого документы и врут.
Уникальное перенесено туда, где ему место:
README.md(её читает жюри, а не только команда);README.md;docs/checkpoint.md§5 (теперь их шесть).out/demo/вычищены из рабочей копии (в git их и не было).5.
docs/plan.mdприведён к реальностиРаздел «где мы сейчас» — на 5 сентября; по чекпоинту 2 отмечено, что сделано (
search,bound,пресет
bank_affinity_first), а что осознанно отложено за стопкод (calibrate, вкладки в HTML).Риск для сдачи: нулевой
Дефолтная политика, режим
optimisticи форматattemptsне тронуты.bundle exec rake publicперегенерируетrouting_decisions.jsonиrouting_report.jsonбайт в байт такими же — проверено после каждого шага.
Как проверить
Посмотреть примеры в отчёте:
routing_report.json→examples, или открытьrouting_report.htmlи раскрыть секцию «Разобранные примеры».
Читать:
docs/criteria.md— сверка с критериями,docs/manual_check.md§7 — новые команды.🤖 Generated with Claude Code
https://claude.ai/code/session_01N7LBzBD5qBUzAAPsGTB9Nk