B3: allow-правило git push origin --delete — строка в adopt/new-project, проверка в doctor (#22, 0.4.2) #23

Merged
aep merged 1 commits from feat/22-allow-push-delete into main 2026-10-23 22:42:07 +03:00
Owner

Closes #22 — B3 из бэклога ретро (RT-3), решение владельца 2. Bounded: без OpenSpec change и плана; дизайн утверждён в чате.

Что сделано

  • doctor.sh, раздел «Проект» (git-репозиторий и workspace): ищет allow-правило, покрывающее git push origin --delete <любая ветка>.
    • Где ищет: .claude/settings.json и .claude/settings.local.json проекта, глобальный settings.json.
    • Правило найдено → ok allow git push origin --delete (<файл>).
    • Правила нет → WARN с готовой строкой "Bash(git push origin --delete:*)".
    • Битый JSON → info, doctor не падает.
    • Подходят широкие правила (Bash, Bash(git push:*), Bash(git push *)). Узкие вроде …--delete feat/:* не подходят: в чеклисте удаляются и chore/archive-….
  • adopt-project.sh (обычный режим) и new-project.sh (оба режима) печатают эту строку в «Дальше». Раньше её печатал только adopt --workspace. Файл настроек они не пишут: правило добавляет владелец.
  • SKILL.md: пункт чеклиста про новый WARN — это находка для владельца, агент settings.json не правит.
  • HARNESS.md:
    • шаг 10 — «чеклист из 8 пунктов (roles/dev.md)», раньше было «7 пунктов (см. CLAUDE.md)»;
    • рецепт п. 4.
  • roles/dev.md, п. 4:
    • кто печатает строку и кто проверяет;
    • git worktree remove теперь раньше git branch -D: ветку, выведенную в worktree, git не удаляет.
  • CHANGELOG 0.4.2. В CLAUDE.md, «Текущая работа»: B3 сделан, B4 закрыт в #6, B10 относится к awp-ca (часть 2 #2).

Проверка

  • bash tests/run.sh — passed 487, failed 0. Новые тесты (15):

    • test-doctor (8): WARN в workspace и в git-проекте, ok из проектного settings.json, узкое правило не покрывает, settings.local.json, битый JSON, глобальный settings.json;
    • test-workspace (5): строку печатают new-project в обоих режимах и adopt в обычном; adopt не создаёт settings.json;
    • test-roles (2): порядок в п. 4, кто печатает строку.

    Все новые тесты сначала были красными.

  • Вживую: doctor.sh из ветки на этом репозитории показывает WARN нет allow-правила … "Bash(git push origin --delete:*)" — у репозитория .claude/settings.json нет.

Находки

Маркер Что Статус
O-12 roles/dev.md, п. 4: git branch -D стоял раньше git worktree remove, а git не удаляет ветку, выведенную в worktree fixed 1d1c70f
O-13 я советовал класть пользовательские allow-правила в ~/.claude/settings.local.json; по документации Claude Code такого пользовательского файла нет, правила для всех проектов — в ~/.claude/settings.json fixed (совет исправлен, вне репозитория)

Rulings I made

  • Глобальный ~/.claude/settings.local.json doctor не проверяет: в документации Claude Code его нет в иерархии настроек (user settings.json, project settings.json, project local settings.local.json, managed). Цена: если Claude Code всё же читает этот файл, правило в нём doctor не увидит и покажет WARN.
  • Правило считается подходящим, только если покрывает любую ветку. Цена: тот, у кого правила только на feat/, увидит WARN, хотя для фич удаление проходит.
  • CLAUDE.md, «Текущая работа», сразу в «Сделано»: у bounded-задачи нет архивного PR, где статус обновился бы позже. Цена: до merge статус опережает факт.

🤖 Generated with Claude Code

Closes #22 — B3 из бэклога ретро (RT-3), решение владельца 2. Bounded: без OpenSpec change и плана; дизайн утверждён в чате. ## Что сделано - **`doctor.sh`**, раздел «Проект» (git-репозиторий и workspace): ищет allow-правило, покрывающее `git push origin --delete <любая ветка>`. - Где ищет: `.claude/settings.json` и `.claude/settings.local.json` проекта, глобальный `settings.json`. - Правило найдено → `ok allow git push origin --delete (<файл>)`. - Правила нет → `WARN` с готовой строкой `"Bash(git push origin --delete:*)"`. - Битый JSON → `info`, doctor не падает. - Подходят широкие правила (`Bash`, `Bash(git push:*)`, `Bash(git push *)`). Узкие вроде `…--delete feat/:*` не подходят: в чеклисте удаляются и `chore/archive-…`. - **`adopt-project.sh`** (обычный режим) и **`new-project.sh`** (оба режима) печатают эту строку в «Дальше». Раньше её печатал только `adopt --workspace`. Файл настроек они не пишут: правило добавляет владелец. - **`SKILL.md`**: пункт чеклиста про новый WARN — это находка для владельца, агент `settings.json` не правит. - **`HARNESS.md`**: - шаг 10 — «чеклист из 8 пунктов (`roles/dev.md`)», раньше было «7 пунктов (см. CLAUDE.md)»; - рецепт п. 4. - **`roles/dev.md`, п. 4**: - кто печатает строку и кто проверяет; - `git worktree remove` теперь раньше `git branch -D`: ветку, выведенную в worktree, git не удаляет. - `CHANGELOG` 0.4.2. В `CLAUDE.md`, «Текущая работа»: B3 сделан, B4 закрыт в #6, B10 относится к awp-ca (часть 2 #2). ## Проверка - `bash tests/run.sh` — passed 487, failed 0. Новые тесты (15): - `test-doctor` (8): WARN в workspace и в git-проекте, ok из проектного `settings.json`, узкое правило не покрывает, `settings.local.json`, битый JSON, глобальный `settings.json`; - `test-workspace` (5): строку печатают `new-project` в обоих режимах и `adopt` в обычном; `adopt` не создаёт `settings.json`; - `test-roles` (2): порядок в п. 4, кто печатает строку. Все новые тесты сначала были красными. - Вживую: `doctor.sh` из ветки на этом репозитории показывает `WARN нет allow-правила … "Bash(git push origin --delete:*)"` — у репозитория `.claude/settings.json` нет. ## Находки | Маркер | Что | Статус | |---|---|---| | O-12 | `roles/dev.md`, п. 4: `git branch -D` стоял раньше `git worktree remove`, а git не удаляет ветку, выведенную в worktree | fixed 1d1c70f | | O-13 | я советовал класть пользовательские allow-правила в `~/.claude/settings.local.json`; по документации Claude Code такого пользовательского файла нет, правила для всех проектов — в `~/.claude/settings.json` | fixed (совет исправлен, вне репозитория) | ## Rulings I made - Глобальный `~/.claude/settings.local.json` doctor не проверяет: в документации Claude Code его нет в иерархии настроек (user `settings.json`, project `settings.json`, project local `settings.local.json`, managed). Цена: если Claude Code всё же читает этот файл, правило в нём doctor не увидит и покажет WARN. - Правило считается подходящим, только если покрывает любую ветку. Цена: тот, у кого правила только на `feat/`, увидит WARN, хотя для фич удаление проходит. - `CLAUDE.md`, «Текущая работа», сразу в «Сделано»: у bounded-задачи нет архивного PR, где статус обновился бы позже. Цена: до merge статус опережает факт. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-23 22:40:15 +03:00
Решение владельца 2: удаление серверных веток (чеклист закрытия, п. 4)
разрешается allow-правилом в настройках проекта; строку добавляет
владелец, обвязка её даёт.

- doctor.sh, раздел «Проект» (git и workspace): ищет правило, покрывающее
  `git push origin --delete <любая ветка>`, в .claude/settings.json и
  settings.local.json проекта и в глобальном settings.json; ok с файлом,
  WARN с готовой строкой, битый JSON — info.
- adopt-project.sh (обычный режим) и new-project.sh (оба режима) печатают
  строку в «Дальше»; файл настроек не пишут.
- SKILL.md: пункт чеклиста для нового WARN.
- HARNESS.md: шаг 10 — 8 пунктов в roles/dev.md, рецепт п. 4.
- roles/dev.md, п. 4: кто печатает строку; worktree remove раньше
  branch -D (ветку, выведенную в worktree, git не удаляет).
- CHANGELOG 0.4.2, CLAUDE.md «Текущая работа».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 89e647f230 into main 2026-10-23 22:42:07 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/claude-harness#23
No description provided.