Follow dependencies on every pull by default #21

Closed
opened 2026-08-10 12:21:04 +00:00 by claude · 0 comments
Collaborator

Summary

pull.py восстанавливает depends: и подтягивает блокеры только под флагом
--deps (skills/sync/scripts/pull.py:135). Без него issue приезжает без
графа. Сделать поведение --deps умолчанием и добавить --no-deps для отказа.

Spec

AGENTS.md, skills/issue/references/format.md

Motivation

После перехода на «push удаляет локальную копию» единственный способ получить
issue обратно — pull.py <n>. Ребро зависимости живёт теперь только в нативном
графе Gitea: map.from_api кладёт в прозу ## Depends on слаги, а не #N
(skills/sync/scripts/map.py:257-268), поэтому по телу граф не восстановить.
Флаг --deps — единственный источник этих рёбер (pull.py:221, :237-244).

Значит по умолчанию pull.py <n> отдаёт файл с пустым depends:, и
issue_tree.py рисует его корнем без блокеров. Граф не потерян в Gitea, но
локально его нет, и это ровно тот контекст, ради которого issue тянут.

Pull должен отдавать единицу работы целиком: саму issue и то, от чего она
зависит. Отказ от блокеров — осознанное сужение, а не дефолт.

Acceptance criteria

  • pull.py <n> без флагов заполняет depends: из нативного графа Gitea
  • pull.py <n> без флагов рекурсивно тянет блокеры до --depth (умолчание 3)
  • добавлен --no-deps, отключающий и заполнение depends:, и рекурсию
  • в filter-режиме (--milestone, --label, -q) блокер, не попавший в
    выборку, всё равно оказывается в сторе, и это описано в докстроке
  • стоимость названа: native_deps — один запрос на issue; докстрока
    pull.py говорит, сколько запросов стоит bulk-пул и как это отключить
  • --deps остаётся принятым флагом (no-op), чтобы существующие вызовы и
    команды в /tea:sync не ломались
  • докстрока pull.py и таблица команд в /tea:sync описывают новое умолчание
  • тест: pull.py <n> без флагов возвращает depends: для issue с блокером
  • тест: --no-deps оставляет depends: пустым и не делает лишних запросов

Constraints

Не входит в объём: изменение формата ## Depends on (слаги остаются слагами),
и запись #N в прозу. Ребро берётся из нативного графа, не из тела.

<!-- tea:id follow-dependencies-on-every-pull-by-default --> ## Summary `pull.py` восстанавливает `depends:` и подтягивает блокеры только под флагом `--deps` (`skills/sync/scripts/pull.py:135`). Без него issue приезжает без графа. Сделать поведение `--deps` умолчанием и добавить `--no-deps` для отказа. ## Spec `AGENTS.md`, `skills/issue/references/format.md` ## Motivation После перехода на «push удаляет локальную копию» единственный способ получить issue обратно — `pull.py <n>`. Ребро зависимости живёт теперь только в нативном графе Gitea: `map.from_api` кладёт в прозу `## Depends on` слаги, а не `#N` (`skills/sync/scripts/map.py:257-268`), поэтому по телу граф не восстановить. Флаг `--deps` — единственный источник этих рёбер (`pull.py:221`, `:237-244`). Значит по умолчанию `pull.py <n>` отдаёт файл с пустым `depends:`, и `issue_tree.py` рисует его корнем без блокеров. Граф не потерян в Gitea, но локально его нет, и это ровно тот контекст, ради которого issue тянут. Pull должен отдавать единицу работы целиком: саму issue и то, от чего она зависит. Отказ от блокеров — осознанное сужение, а не дефолт. ## Acceptance criteria - [ ] `pull.py <n>` без флагов заполняет `depends:` из нативного графа Gitea - [ ] `pull.py <n>` без флагов рекурсивно тянет блокеры до `--depth` (умолчание 3) - [ ] добавлен `--no-deps`, отключающий и заполнение `depends:`, и рекурсию - [ ] в filter-режиме (`--milestone`, `--label`, `-q`) блокер, не попавший в выборку, всё равно оказывается в сторе, и это описано в докстроке - [ ] стоимость названа: `native_deps` — один запрос на issue; докстрока `pull.py` говорит, сколько запросов стоит bulk-пул и как это отключить - [ ] `--deps` остаётся принятым флагом (no-op), чтобы существующие вызовы и команды в `/tea:sync` не ломались - [ ] докстрока `pull.py` и таблица команд в `/tea:sync` описывают новое умолчание - [ ] тест: `pull.py <n>` без флагов возвращает `depends:` для issue с блокером - [ ] тест: `--no-deps` оставляет `depends:` пустым и не делает лишних запросов ## Constraints Не входит в объём: изменение формата `## Depends on` (слаги остаются слагами), и запись `#N` в прозу. Ребро берётся из нативного графа, не из тела.
claude added this to the Self-improvement milestone 2026-08-10 12:21:04 +00:00
claude added the comp/sync
type
task
labels 2026-08-10 12:21:04 +00:00
Sign in to join this conversation.