Resolve the login pin across a git worktree #34
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
_gitea.find_pin(skills/sync/scripts/_gitea.py:51-69) ищет.claude/settings.local.json, поднимаясь только по предкам CWD. Каталогgit worktree— сосед основного чекаута, а не его потомок, поэтому пин туда недоходит, и вся трекерная половина плагина внутри worktree мертва. При этом стор
из того же worktree резолвится правильно:
issue.repo_root(issue.py:81-95)специально умеет читать
.gitкак файл.Spec
skills/sync/scripts/_gitea.py
Steps to reproduce
Завести worktree рядом с чекаутом (стандартная схема работы над issue):
Создать локальную issue и попробовать её опубликовать:
Expected
Пин находится: это тот же репозиторий, тот же оператор, тот же remote. Файл
.claude/settings.local.jsonлежит в общем корне(
/Users/naudachu/Documents/projects/llm/is/tea), и.gitвнутри worktreeпрямо на него указывает:
Actual
--dry-runпри этом проходит целиком — сети он не касается, — так что проблемавсплывает ровно в тот момент, когда работа готова к отправке.
Два последствия, оба неприятные:
/tea:authвнутри worktree создаствторой
settings.local.jsonв каталоге, который будет удалён вместе сworktree, — и попросит оператора выбирать логин, который уже выбран.
запускать скрипт с CWD в основном чекауте и передавать
--out <worktree>/tmp/issues. Тогдаpush.py:202-214(git_branch) читаетветку основного чекаута, и в Gitea уезжает
ref: mainвместо ветки, накоторой работа реально живёт. Ровно то поле, ради которого
branch:существует.
Environment
Ветка
main, коммит2ac3015. macOS,git worktree, пин в/Users/naudachu/Documents/projects/llm/is/tea/.claude/settings.local.json.Затрагивает все скрипты, зовущие
_gitea.require_login:pull.py,push.py,comment.py,remote.py,labels.py,wiki_*.py.Acceptance criteria
push.pyиpull.py, запущенные из каталога worktree, находят пиносновного чекаута и не требуют
/tea:authи наведённый на чужой проект, не должен смотреть на свой собственный
каталог); worktree — дополнительная ветка поиска через
gitdir:из файла.gitsettings.local.jsonв worktree не создаётсяbranch:у issue, отправленной из worktree, равен ветке worktreeиз worktree находит логин
Дубликат #24 — закрываю в его пользу.
Проблема поймана тремя независимыми агентами в один заход, поэтому каноническая
issue теперь несёт все случаи сразу.
Уникальные вклады этой issue перенесены в #24 целиком:
.gitвнутри worktree — файл сgitdir:, и это готовая ветка поиска;добавлено в Environment вместе с выводом
cat .git;--dry-runпроходит полностью, поэтому отказ всплывает ровно в моментотправки — добавлено в Actual;
push.py:202-214(git_branch) читает ветку поCWD, и в Gitea уезжает
ref: mainвместо ветки worktree;__file__» — вынесено в отдельнуюсекцию Constraints, потому что оно противоречило исходному критерию #24 и
выигрывает: плагин, установленный вне репозитория, не должен смотреть на свой
каталог;
branch:равен веткеworktree», плюс тест на второе.
Покрытие тестами теперь одно на все случаи — см. критерии в #24.