Skip closed issues when pulling a repository in bulk #10
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Summary
Массовый
pull.pyв режиме фильтра пишет в стор всё, что вернул сервер, включаязакрытые issues. Закрытые не должны попадать в стор при массовом чтении: их
нужно отбрасывать перед записью, если оператор не запросил их явным
--state closed.Spec
none
Motivation
Режим фильтра (
--milestone/--label/-q) по умолчанию берёт--state open(skills/sync/scripts/pull.py:65-67), и серверный фильтрработает корректно. Дыра — в
--state all: он расширяет выборку, а обход вskills/sync/scripts/pull.py:131-149пишет на диск каждый payload из очередибез проверки состояния. Клиентская перепроверка фильтра
(
skills/sync/scripts/_gitea.py:176-183) сверяет milestone и labels, но неstate.Наблюдаемый результат:
tmp/issues/issue-workflow.md—state: closed,gitea: claude-skills/tea#1— лежит в сторе с тем жеsynced: 2026-08-09T19:11:39Z, что и четыре открытых issue. Один массовый прогонзатащил закрытый #1 вместе с рабочими.
Цена — контекст. Стор читают целиком:
INDEX.md,grepпоtmp/issues/*.md.Закрытый issue занимает строку в индексе и попадает в каждую выборку, не будучи
единицей работы.
--state allпри этом остаётся полезным как способ увидетьвсю картину — ограничение нужно на запись, а не на выборку.
Точечное чтение по номеру (
pull.py 1) — это адресный запрос, а не массовоечтение, и под правило не подпадает.
Acceptance criteria
pull.pyне создаёт новый файл в сторе для payload сstate: closed, если--state closedне передан явно--state allпродолжает перечислять закрытые (выборка не сужается), нозакрытые не записываются
--state closedзаписывает закрытые — явный запрос выполняетсякопия получает
state: closed, а не остаётся навсегдаopenотбрасывания нет
pull.py 1,#1,owner/repo#1, URL) не затронуто:закрытый issue по явному номеру тянется как раньше
skills/sync/SKILL.mdописывает правило в разделе PullingConstraints
pull.py, а не в_gitea.py: транспорт не знает, что сторсчитает единицей работы.
matches()остаётся перепроверкой серверногофильтра.
--deps(закрытые зависимости), фильтрациязакрытых в
remote.pyи скрытие закрытых вINDEX.md.Ignore reading closed issues while bunch repository readto Skip closed issues when pulling a repository in bulkfeat/issue-cache-scriptsto feat/issue-cache-scripts