Skip to content
This repository was archived by the owner on Sep 11, 2026. It is now read-only.

feat(lint): worktree-only гейт для lint --full + bring-back/cleanup для taze - #138

Merged
vitaliytv merged 2 commits into
mainfrom
claude/taze-worktree-automation-70c1e1
Jul 19, 2026
Merged

vitaliytv merged 2 commits into
mainfrom
claude/taze-worktree-automation-70c1e1

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Summary

Продовження #133 (уже змерджено) — та сама гілка отримала два додаткові коміти вже ПІСЛЯ мержу, тож вони лишились поза main. Ця PR містить лише їх:

  • taze: bring-back + cleanup. Якщо worktree був автостворений самим taze — по завершенню прогону (і при успіху, і при кинутому винятку, через finally) зміни копіюються назад у вихідне дерево як untracked-файли (bringChangesBackToOriginal, за git status --porcelain), а сам worktree разом з ефемерною гілкою прибирається (removeAutoCreatedWorktree, npx @7n/mt worktree remove). Якщо викликач уже сидів у своєму worktree — нічого не переноситься й не прибирається.
  • lint --full: той самий гейт. npx @7n/rules lint --full мав main.json.worktree: true, але єдиний реальний JS-гейт (assertCwdIsProjectRoot) перевіряв лише «корінь git-репо», не ізоляцію в .worktrees/ — запуск --full прямо з основного дерева тихо мутував його на місці. Тепер підключено той самий auto-create + bring-back + cleanup, але лише коли full && !noFix (реальна full-repo мутація) — delta-лінт і --full --no-fix (detect-only) не чіпаються.
  • Спільна логіка винесена в новий npm/scripts/lib/auto-worktree.mjs (ensureRunningInWorktree/bringChangesBackToOriginal/removeAutoCreatedWorktree) — taze тепер лише тонкий виклик з suffix: 'taze'.
  • Новий запобіжник — requireCleanTree (дефолт true). Auto-create worktree — це checkout HEAD, без незакомічених змін вихідного дерева. Якщо вихідне дерево брудне, bring-back копіюванням файлів мовчки затер би незакомічені правки версією без них. Гейт тепер кидає на брудному дереві замість ризикувати чужою роботою — це заодно закрило ту саму латентну діру й у taze (раніше — лише документована, не enforced передумова з SKILL.md).

Test plan

  • bun run vitest run npm/scripts/lib/tests/auto-worktree.test.mjs npm/skills/taze/js/tests/orchestrate.test.mjs npm/scripts/lib/lint-surface/tests/ npm/scripts/tests/cli-entry.test.mjs — 194/194 passed
  • npx @7n/rules lint — чисто
  • Доки (orchestrate.md, новий auto-worktree.md, index.md) перегенеровані, CRC свіжий
  • Change-файли покладено (3× minor/Changed|Added)

🤖 Generated with Claude Code

vitaliytv and others added 2 commits July 19, 2026 08:14
…назад і прибирати його

Якщо worktree був автостворений самим taze (ensureRunningInWorktree),
по завершенню прогону — і при успіху, і при кинутому винятку всередині
try (finally) — зміни копіюються назад у вихідне дерево як
untracked/незакомічені файли (bringChangesBackToOriginal, за
`git status --porcelain` у worktree), а сам worktree разом з ефемерною
гілкою прибирається (removeAutoCreatedWorktree, npx @7n/mt worktree
remove). Якщо викликач уже сидів у своєму worktree (autoCreated: false)
— це не наш worktree, нічого не переноситься й не прибирається.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…back + cleanup

npx @7n/rules lint --full мав main.json.worktree: true, але єдиний реальний
JS-гейт (assertCwdIsProjectRoot) перевіряв лише «корінь git-репо», не
ізоляцію в .worktrees/ — запуск --full прямо з основного дерева тихо мутував
його на місці, без throw і без ізоляції.

Спільну логіку з taze (ensureRunningInWorktree/bringChangesBackToOriginal/
removeAutoCreatedWorktree) винесено в npm/scripts/lib/auto-worktree.mjs;
taze тепер лише тонкий виклик з suffix:'taze'. Гейт активний лише для
full && !noFix (реальна full-repo мутація) — delta-лінт і --no-fix
(detect-only) не чіпаються: delta має працювати на живому дереві задачі,
detect-only нічого не мутує.

Новий запобіжник (requireCleanTree, дефолт true): auto-create worktree —
checkout HEAD, без незакомічених змін вихідного дерева; перенесення
результату назад копіюванням файлів затерло б їх версією без цих правок.
Гейт кидає на брудному дереві замість мовчки ризикувати чужою роботою.
Той самий запобіжник тепер діє і для taze (раніше — лише документована,
не enforced передумова).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv force-pushed the claude/taze-worktree-automation-70c1e1 branch from df0f03b to 001f38c Compare July 19, 2026 05:15
@vitaliytv
vitaliytv merged commit b488231 into main Jul 19, 2026
5 of 7 checks passed
@vitaliytv
vitaliytv deleted the claude/taze-worktree-automation-70c1e1 branch July 25, 2026 05:03
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant