Stop materializing the issue store for label payloads #19

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

Summary

labels.py передаёт корень стора только ради каталога .payload/, и на
чекауте без стора молча создаёт tmp/issues/.payload/. Бутстрапу меток стор
issue не нужен вообще.

Spec

none

Steps to reproduce

  1. Свежий клон репозитория; tmp/issues отсутствует.
  2. Прогнать бутстрап меток:
    python3 skills/sync/scripts/labels.py --bootstrap
    
  3. ls -a tmp/issues

Expected

Каталога tmp/issues нет. Работа с метками репозитория не касается стора
issue: ни читает его, ни создаёт.

Actual

Появился tmp/issues/.payload/ с JSON-телами запросов. Стор материализован как
побочный эффект операции, которая к issue не относится, и ничем об этом не
сообщено.

Environment

  • skills/sync/scripts/labels.py:189,215out_root=issue.ISSUE_ROOT
    передаётся исключительно затем, чтобы _gitea.api было куда положить файл
    запроса.
  • skills/sync/scripts/_gitea.py:90-95os.makedirs(pdir, exist_ok=True)
    для <out_root>/.payload/<name>.json; каталог создаётся безусловно.

Найдено при работе над resolve-the-issue-store-path-independently-of
(claude-skills/tea#15). Та issue убрала промах по cwd: путь теперь абсолютный
и указывает на настоящий стор, а не на случайный подкаталог. Побочное создание
она не трогала — восемь скриптов, которые она перечисляет, labels.py не
включают, а наивная защита сломала бы labels.py на свежем чекауте.

Каталог запросов и стор issue — разные вещи, которые совпали по пути. Развилка,
которую надо решить: увести payload в место, не являющееся стором (тогда
меняются все вызовы _gitea.api), либо оставить путь и сделать так, чтобы
labels.py не тянул за собой стор. Первое честнее, второе меньше.

Acceptance criteria

  • labels.py не создаёт и не требует стора issue ни на одном пути
  • каталог для payload не является стором issue и назван так, чтобы это было
    видно
  • остальные скрипты слоя sync кладут payload туда же — либо переезжают все
    вместе, вразнобой быть не должно
  • .gitignore покрывает новое место, если оно вне tmp/
  • тест: прогон labels.py на дереве без tmp/issues не создаёт этот
    каталог
<!-- tea:id stop-materializing-the-store-for-label-payloads --> ## Summary `labels.py` передаёт корень стора только ради каталога `.payload/`, и на чекауте без стора молча создаёт `tmp/issues/.payload/`. Бутстрапу меток стор issue не нужен вообще. ## Spec none ## Steps to reproduce 1. Свежий клон репозитория; `tmp/issues` отсутствует. 2. Прогнать бутстрап меток: ```bash python3 skills/sync/scripts/labels.py --bootstrap ``` 3. `ls -a tmp/issues` ## Expected Каталога `tmp/issues` нет. Работа с метками репозитория не касается стора issue: ни читает его, ни создаёт. ## Actual Появился `tmp/issues/.payload/` с JSON-телами запросов. Стор материализован как побочный эффект операции, которая к issue не относится, и ничем об этом не сообщено. ## Environment - `skills/sync/scripts/labels.py:189,215` — `out_root=issue.ISSUE_ROOT` передаётся исключительно затем, чтобы `_gitea.api` было куда положить файл запроса. - `skills/sync/scripts/_gitea.py:90-95` — `os.makedirs(pdir, exist_ok=True)` для `<out_root>/.payload/<name>.json`; каталог создаётся безусловно. Найдено при работе над `resolve-the-issue-store-path-independently-of` (`claude-skills/tea#15`). Та issue убрала промах по cwd: путь теперь абсолютный и указывает на настоящий стор, а не на случайный подкаталог. Побочное создание она не трогала — восемь скриптов, которые она перечисляет, `labels.py` не включают, а наивная защита сломала бы `labels.py` на свежем чекауте. Каталог запросов и стор issue — разные вещи, которые совпали по пути. Развилка, которую надо решить: увести payload в место, не являющееся стором (тогда меняются все вызовы `_gitea.api`), либо оставить путь и сделать так, чтобы `labels.py` не тянул за собой стор. Первое честнее, второе меньше. ## Acceptance criteria - [ ] `labels.py` не создаёт и не требует стора issue ни на одном пути - [ ] каталог для payload не является стором issue и назван так, чтобы это было видно - [ ] остальные скрипты слоя sync кладут payload туда же — либо переезжают все вместе, вразнобой быть не должно - [ ] `.gitignore` покрывает новое место, если оно вне `tmp/` - [ ] тест: прогон `labels.py` на дереве без `tmp/issues` не создаёт этот каталог
claude added the comp/sync
type
bug
severity
low
labels 2026-08-10 11:41:00 +00:00
Sign in to join this conversation.