Apply --limit to the write, not to the selection #18

Closed
opened 2026-08-10 11:41:00 +00:00 by claude · 0 comments
Collaborator

Summary

Докстрока pull.py обещает, что --limit ограничивает запись, а не выборку.
На деле лимит режет выборку — до того, как закрытые issue отбрасываются, — и
закрытые расходуют бюджет, не попадая в стор.

Spec

none

Steps to reproduce

  1. Репозиторий, где среди первых issue по порядку много закрытых.
  2. Потянуть с фильтром и лимитом:
    python3 skills/sync/scripts/pull.py --milestone 6 --state all --limit 20
    
  3. Посчитать, сколько файлов реально появилось в сторе.

Expected

20 записанных issue, если в трекере под фильтр подходит хотя бы 20 незакрытых.
Ровно это и обещано в pull.py:26: «The limit is on the write, not on the
selection».

Actual

Записано меньше 20. Закрытые issue вошли в выборку, израсходовали бюджет и
были отброшены уже после — их места никто не занял. На стороне вывода это видно
как расхождение между строкой «N closed issue(s) enumerated, not stored»
(pull.py:206-209) и числом записанных.

Environment

Цепочка целиком:

  • pull.py:26 — докстрока обещает лимит на запись.
  • pull.py:150args.limit передаётся в list_issues.
  • _gitea.py:209got[:limit], обрезка выборки.
  • pull.py:178 — закрытые отбрасываются позже, уже после обрезки.

skills/sync/SKILL.md:82 про это не говорит ничего, так что докстрока —
единственное утверждение о поведении, и оно ложное.

Отдельно стоит решить, что делать с --limit в remote.py: там нет записи
вообще, только stdout, поэтому «лимит на запись» смысла не имеет и семантика
честно остаётся «лимит на выборку». Разные значения одного флага в двух
скриптах — то, что надо либо развести в документации, либо назвать по-разному.

Acceptance criteria

  • pull.py --limit N записывает N issue, если под фильтр подходит хотя бы
    N незакрытых
  • пагинация продолжает запрашивать страницы, пока не набрано N записанных
    либо страницы не кончились
  • лишние страницы не запрашиваются: набрали N — остановились
  • докстрока pull.py, skills/sync/SKILL.md и поведение говорят одно и то
    же; расхождение remote.py описано явно
  • тест: выборка, где половина issue закрыта, при --limit N даёт ровно N
    файлов в сторе
<!-- tea:id apply-limit-to-the-write-not-the-selection --> ## Summary Докстрока `pull.py` обещает, что `--limit` ограничивает запись, а не выборку. На деле лимит режет выборку — до того, как закрытые issue отбрасываются, — и закрытые расходуют бюджет, не попадая в стор. ## Spec none ## Steps to reproduce 1. Репозиторий, где среди первых issue по порядку много закрытых. 2. Потянуть с фильтром и лимитом: ```bash python3 skills/sync/scripts/pull.py --milestone 6 --state all --limit 20 ``` 3. Посчитать, сколько файлов реально появилось в сторе. ## Expected 20 записанных issue, если в трекере под фильтр подходит хотя бы 20 незакрытых. Ровно это и обещано в `pull.py:26`: «The limit is on the write, not on the selection». ## Actual Записано меньше 20. Закрытые issue вошли в выборку, израсходовали бюджет и были отброшены уже после — их места никто не занял. На стороне вывода это видно как расхождение между строкой «N closed issue(s) enumerated, not stored» (`pull.py:206-209`) и числом записанных. ## Environment Цепочка целиком: - `pull.py:26` — докстрока обещает лимит на запись. - `pull.py:150` — `args.limit` передаётся в `list_issues`. - `_gitea.py:209` — `got[:limit]`, обрезка **выборки**. - `pull.py:178` — закрытые отбрасываются позже, уже после обрезки. `skills/sync/SKILL.md:82` про это не говорит ничего, так что докстрока — единственное утверждение о поведении, и оно ложное. Отдельно стоит решить, что делать с `--limit` в `remote.py`: там нет записи вообще, только stdout, поэтому «лимит на запись» смысла не имеет и семантика честно остаётся «лимит на выборку». Разные значения одного флага в двух скриптах — то, что надо либо развести в документации, либо назвать по-разному. ## Acceptance criteria - [ ] `pull.py --limit N` записывает N issue, если под фильтр подходит хотя бы N незакрытых - [ ] пагинация продолжает запрашивать страницы, пока не набрано N записанных либо страницы не кончились - [ ] лишние страницы не запрашиваются: набрали N — остановились - [ ] докстрока `pull.py`, `skills/sync/SKILL.md` и поведение говорят одно и то же; расхождение `remote.py` описано явно - [ ] тест: выборка, где половина issue закрыта, при `--limit N` даёт ровно N файлов в сторе
claude added the comp/sync
type
bug
severity
low
labels 2026-08-10 11:41:00 +00:00
Sign in to join this conversation.