# Прун тест-слоя мозга через стену (v6)

> Порядок по рекомендации судьи: precondition-проверка копий в claude-brain → `git rm --dry-run` (превью списка) → **обязательная пауза на подтверждение владельцем** → реальный `git rm` → Edit package.json (последним). Деструктив начинается только после подтверждённого gate. Финальный `git commit` — отдельно.

**Goal:** Убрать из текущего репозитория `Документация` тест-слой управляющего слоя — `tools/*.test.mjs` + `app/vitest.config.tools.mjs` + скрипт `test:tools` — не читаемый ни одним рабочим процессом (settings.json-хуки + lefthook проверены) и автономно живущий в `claude-brain` (там 3931 passed). Рабочая копия рантайма (`tools/*.mjs`, observer, registry, квинтет) и Лидерра не затрагиваются.

**Architecture:** Read-only gate'ы перед деструктивом, destructive — последними. Шаг 1 — `ls` подтверждает копии **именно в `claude-brain`** (без зелёного — стоп). Шаг 2 — `git rm --dry-run` печатает точный перечень удаляемого, ничего не удаляя. Пауза — владелец сверяет dry-run с ожидаемым. Шаг 3 — реальный `git rm`. Шаг 4 — Edit package.json последним (конфиг не трогается, пока удаление не подтверждено и не выполнено). `git rm` (dry-run и реальный) содержит токен `rm` → пол блокирует и печатает точную `FLOOR-ESCAPE: bash:…`; владелец вставляет → повтор проходит; на floor-блоке указатель плана не двигается. Всё обратимо `git restore`.

## Файлы

- Verify (read-only): `claude-brain/vitest.config.tools.mjs` + все `claude-brain/tools/*.test.mjs` (копии сохранены)
- Delete (git rm): `tools/*.test.mjs`, `app/vitest.config.tools.mjs`
- Modify (последним): `package.json` (удалить скрипт `test:tools`)

## Цель

Самодостаточный безопасный прун ({#D4} п.2) через стену в порядке судьи: подтвердить копии в claude-brain → dry-run превью → пауза-подтверждение → реальный git rm → Edit package.json. Рабочие входы ({#D4} «не трогаются») не затрагиваются.

## Шаги

```skills-json
[]
```

```steps-json
[
  {"op": "Bash", "object": "ls \"C:/моя/проекты/claude-brain/vitest.config.tools.mjs\" \"C:/моя/проекты/claude-brain/tools/\"*.test.mjs", "ref": "D4"},
  {"op": "Bash", "object": "git rm --dry-run tools/*.test.mjs app/vitest.config.tools.mjs", "ref": "D4"},
  {"op": "Bash", "object": "git rm tools/*.test.mjs app/vitest.config.tools.mjs", "ref": "D4"},
  {"op": "Edit", "object": "package.json", "ref": "D4"}
]
```

### Шаг 1 — precondition gate (read-only)

`ls` тест-конфига + всех тест-файлов **в `claude-brain`** (целевой каталог, не исходник). Если чего-то нет — `ls` ошибётся, **прун не продолжать** (копии не сохранены → удаление потеряет файлы). Ранее подтверждено: 3931 passed в claude-brain.

### Шаг 2 — dry-run превью

`git rm --dry-run tools/*.test.mjs app/vitest.config.tools.mjs` печатает **точный перечень** файлов, которые удалит реальный `git rm`, **без удаления**. Пол заблокирует по `rm`-паттерну → владелец даёт floor_escape по точной строке из блок-сообщения → повтор печатает список.

### ⛔ ОБЯЗАТЕЛЬНАЯ ПАУЗА (gate, между шагом 2 и 3)

После dry-run исполнитель **ОСТАНАВЛИВАЕТ ход**, показывает вывод владельцу и сверяет: список — **только** `tools/*.test.mjs` + `app/vitest.config.tools.mjs`, ничего лишнего. Деструктив (шаг 3) **не начинается** без явного «подтверждаю». Если в списке незапланированный файл — прун прекращается, план переписывается.

### Шаг 3 — реальный `git rm` (только после подтверждения)

`git rm tools/*.test.mjs app/vitest.config.tools.mjs` — стейджит удаление. Пол снова заблокирует по `rm` → владелец даёт второй floor_escape → повтор удаляет. Обратимо `git restore --staged` + `git checkout`.

### Шаг 4 — Edit `package.json` (последним)

Удалить последний скрипт `test:tools` и запятую после `brain:dashboard`. Было:

```json
    "brain:dashboard": "node tools/brain-dashboard-server.mjs",
    "test:tools": "cd app && npx vitest run --config vitest.config.tools.mjs"
```

Стало:

```json
    "brain:dashboard": "node tools/brain-dashboard-server.mjs"
```

## Крайние случаи

- НЕ трогать `tools/*.mjs` (рабочая копия рантайма), `docs/observer`, `docs/registry`, квинтет — {#D4} «не трогаются».
- brain specs/plans + brain-retro notes в этот прун НЕ входят (отдельный заход).
- Финальный `git commit` — отдельно (owner-терминал минует criterion-gate).

## Критерий

- Шаг 1 `ls` зелёный (копии в claude-brain); шаг 2 dry-run перечисляет только `tools/*.test.mjs` + `app/vitest.config.tools.mjs`; владелец подтвердил.
- После шага 3-4: `git status` — staged-удаление `tools/*.test.mjs` + `app/vitest.config.tools.mjs`; `package.json` без скрипта `test:tools`.
- Рабочие входы (`tools/*.mjs`, observer, registry, квинтет) и `app/` (кроме vitest-конфига) без изменений.

```verified-context-json
[
  {"id": "vc-tools-data", "kind": "EXTRACTED", "ref": "tools/cost-pricing.mjs", "anchor": "export const PRICING = Object.freeze("},
  {"id": "vc-test-tools", "kind": "EXTRACTED", "ref": "package.json", "anchor": "\"test:tools\": \"cd app && npx vitest run"},
  {"id": "vc-vitest-config", "kind": "EXTRACTED", "ref": "app/vitest.config.tools.mjs", "anchor": "include: ['../tools/*.test.mjs']"}
]
```
