fix(pipeline-oracle): explicit API failure handling in issue resolution #90
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/pipeline-oracle/api-failure-handling"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
resolve_number(): 404 от/issues/{N}теперь единственный путь к ghost; прочие non-200 (500, 401, сетевой сбой) →errorс деталью (HTTP <код>/ описание ошибки, для 401 — подсказка проFORGEJO_TOKEN).find_open_prs_for_issue(): возвращает(found, reliable); non-200 на любой странице пагинации →reliable=False, молчаливый обрыв невозможен.main():error→AMBIGUOUS: сбой Forgejo API при проверке issue #N (<деталь>) — повторите позже+NEXT: уточните статус вручную, exit 1;error_pulls→AMBIGUOUS: не удалось получить список открытых PR (сбой API)+ тот же NEXT, exit 1. Ни ghost, ни bootstrap.— (API сбой)вместо ложной ссылки на PR./issues/{N}→ AMBIGUOUS (не ghost), 401 → AMBIGUOUS с подсказкой токена, сетевое исключение → AMBIGUOUS, сбой на 2-й странице пагинации → AMBIGUOUS (не bootstrap), плюс main-уровневые проверки обеих AMBIGUOUS-веток.Почему
Аудит после PR #80: любой non-200 при проверке issue классифицировался как ghost (вводящий в заблуждение «не существует»), а обрыв пагинации давал усечённый список кандидатов → ложный bootstrap → риск дубль-PR.
Watch out
find_open_prs_for_issueизменена на кортеж(found, reliable)— обновлены все вызывающие (resolve_number, dashboard) и тесты.⚠️ pipeline-status failed (exit 1), что run-pipeline трактует как STOP (совместимо с контрактом скилла).Pending
—
Closes #85
Code Review Summary
PR корректно закрывает issue #85: non-404 API-сбои при резолве номера больше не классифицируются как ghost, сбой пагинации открытых PR →
error_pulls(не ложный bootstrap), dashboard помечает недостоверный список PR. Логикаresolve_numberтеперь детерминирована: ghost только при 404 на обоих запросах, 401 даёт подсказку про FORGEJO_TOKEN. Все вызывающие обновлены в этом же PR, TS-обёртка и run-pipeline skill совместимы (exit 1 →⚠️ failed→ STOP, AMBIGUOUS в stderr → STOP). CI green, 6 новых тестов с assert'ами.Positives
reliable-флаг вfind_open_prs_for_issueзащищает от ложного bootstrap при усечённой пагинации — риск дубль-PR закрыт— (API сбой)вместо ложной ссылки на PR_failure_detail— аккуратная централизация человекочитаемых деталей ошибкиSuggestions (info, not blocking)
/pulls/{N}(это проверка PR, а не issue). Номер тот же и суть сообщения верна, но можно уточнить: «при проверке номера #N» — покрывает оба случая.Verdict: APPROVE