Attach the current git branch to pushed issues #8

Closed
opened 2026-08-09 19:08:38 +00:00 by claude · 0 comments
Collaborator

Summary

Gitea хранит у issue поле ref — привязку к ветке. Научить /tea:sync его
возить: новое поле branch: в файле issue, при пустом значении push
подставляет текущую ветку git.

Spec

none

Motivation

Ветка — то место, где работа по issue реально живёт, и Gitea умеет её
показывать. Сейчас to_payload (skills/sync/scripts/map.py:163) собирает
title, body, labels, assignees, milestone, state — и всё; ref не
отправляется, а from_api его не читает. Привязку приходится ставить руками в
веб-интерфейсе, то есть не ставить никогда.

Автоподстановка текущей ветки покрывает обычный случай без единого флага: issue
заводят из рабочего дерева, в котором уже сделан checkout нужной ветки. Явное
поле оставляет выход для остальных: issue завели с main, а работа пойдёт в
другой ветке — вписал руками, push не перетрёт.

branch: — поле sync-слоя, а не домена: значение берётся вызовом git и
означает ровно ref в Gitea. Домен проносит его через load/save вербатим, как
gitea: и url:, и никогда не читает — доменный слой не знает ни про git, ни
про трекер.

Acceptance criteria

  • map.to_payload кладёт ref в тело запроса, когда у issue есть
    непустой branch:; при пустом поле ключ ref не отправляется
  • map.from_api записывает ref из ответа в branch:; pull синхронизирует
    значение, выставленное на стороне Gitea
  • push.py при пустом branch: подставляет текущую ветку
    (git rev-parse --abbrev-ref HEAD) и после успешной записи сохраняет её
    в файл issue
  • уже заполненный branch: push не перезаписывает — ни при create, ни при
    --update
  • detached HEAD и запуск вне git-репозитория не роняют push: ref просто
    не отправляется, в stderr идёт предупреждение
  • branch: рендерится в блоке sync-полей, после доменных, и переживает
    круг load → save без изменений
  • skills/issue/ не изменён: grep -rh '^import \|^from ' skills/issue/scripts/
    по-прежнему даёт только stdlib и не содержит subprocess
  • поле описано в таблице полей references/format.md как принадлежащее
    sync-слою, и в skills/sync/SKILL.md

Constraints

  • Не входит в объём: создание веток, checkout, любые пишущие операции с git.
    Чтение текущей ветки — единственное обращение к git.
  • Не входит в объём: связывание issue с pull request'ами.
  • ref в Gitea — свободная строка; существование ветки на сервере не
    проверяем.
## Summary Gitea хранит у issue поле `ref` — привязку к ветке. Научить `/tea:sync` его возить: новое поле `branch:` в файле issue, при пустом значении push подставляет текущую ветку git. ## Spec none ## Motivation Ветка — то место, где работа по issue реально живёт, и Gitea умеет её показывать. Сейчас `to_payload` (`skills/sync/scripts/map.py:163`) собирает `title`, `body`, `labels`, `assignees`, `milestone`, `state` — и всё; `ref` не отправляется, а `from_api` его не читает. Привязку приходится ставить руками в веб-интерфейсе, то есть не ставить никогда. Автоподстановка текущей ветки покрывает обычный случай без единого флага: issue заводят из рабочего дерева, в котором уже сделан checkout нужной ветки. Явное поле оставляет выход для остальных: issue завели с `main`, а работа пойдёт в другой ветке — вписал руками, push не перетрёт. `branch:` — поле sync-слоя, а не домена: значение берётся вызовом git и означает ровно `ref` в Gitea. Домен проносит его через load/save вербатим, как `gitea:` и `url:`, и никогда не читает — доменный слой не знает ни про git, ни про трекер. ## Acceptance criteria - [x] `map.to_payload` кладёт `ref` в тело запроса, когда у issue есть непустой `branch:`; при пустом поле ключ `ref` не отправляется - [x] `map.from_api` записывает `ref` из ответа в `branch:`; pull синхронизирует значение, выставленное на стороне Gitea - [x] `push.py` при пустом `branch:` подставляет текущую ветку (`git rev-parse --abbrev-ref HEAD`) и после успешной записи сохраняет её в файл issue - [x] уже заполненный `branch:` push не перезаписывает — ни при create, ни при `--update` - [x] detached HEAD и запуск вне git-репозитория не роняют push: `ref` просто не отправляется, в stderr идёт предупреждение - [x] `branch:` рендерится в блоке sync-полей, после доменных, и переживает круг load → save без изменений - [x] `skills/issue/` не изменён: `grep -rh '^import \|^from ' skills/issue/scripts/` по-прежнему даёт только stdlib и не содержит `subprocess` - [x] поле описано в таблице полей `references/format.md` как принадлежащее sync-слою, и в `skills/sync/SKILL.md` ## Constraints - Не входит в объём: создание веток, checkout, любые пишущие операции с git. Чтение текущей ветки — единственное обращение к git. - Не входит в объём: связывание issue с pull request'ами. - `ref` в Gitea — свободная строка; существование ветки на сервере не проверяем.
claude added the comp/sync
type
task
labels 2026-08-09 19:08:38 +00:00
claude added reference feat/issue-cache-scripts 2026-08-10 10:18:30 +00:00
Sign in to join this conversation.