Skip to content
Back to skills

Bar Probe

ASecurity

Проба планки — ловит ли свод по планке дефект в коде. В копию проекта сажается известное нарушение известного критерия, свод в ней делает сессия, не видевшая посаженного, а вердикт выносит машина: назвал ли свод посаженный критерий по посаженному адресу. Меряет суждение о коде, а не процесс обвязки — процесс меряет probe. Звать после правки политики планки, её словарей или модели свода и когда след проб пуст или старше такой правки. Вызывать по «проба планки», «ловит ли свод», «bar-probe».

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 19, 2026
ai-agentsbashnodegit

Works with

  • claude code

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add Igor-lx/claudeHarness --skill bar-probe --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Bar Probe?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Bar Probe
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/igor-lx-bar-probe/badge)](https://www.skillsdirectory.com/skills/igor-lx-bar-probe)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: bar-probe
description: Проба планки — ловит ли свод по планке дефект в коде. В копию проекта сажается известное нарушение известного критерия, свод в ней делает сессия, не видевшая посаженного, а вердикт выносит машина: назвал ли свод посаженный критерий по посаженному адресу. Меряет суждение о коде, а не процесс обвязки — процесс меряет probe. Звать после правки политики планки, её словарей или модели свода и когда след проб пуст или старше такой правки. Вызывать по «проба планки», «ловит ли свод», «bar-probe».
user-invocable: true
---

# Проба планки: ловит ли свод посаженное нарушение

Печать свода по планке удостоверяет, что на каждый живой критерий дан ответ.
Верен ли ответ, она не удостоверяет. Эта проба меряет верность: в копию
проекта сажают известное нарушение известного критерия, свод делает сессия,
которая его не видела, и машина судит, назвал ли свод посаженное.

Устройство режима — посадки, прикрытия, суд, след — описано в
`.claude/tools/graph.md`, в разделе о режиме `bar-probe`. Здесь только
порядок работы.

## Чем отличается от `probe`

`probe` проверяет **процесс** обвязки на живой задаче: прочитаны ли нужные
правила, записана ли база, остановили ли ворота неверный коммит, и чем это
удержано. Этот скилл проверяет **суждение о коде**: найдёт ли свод дефект,
стоящий в строках. Проба вида «поймает ли свод такое-то нарушение» делается
здесь — посадкой в книгу `.claude/tools/bar-probes.json`, — а не пробой
`probe`.

## Когда звать

- правилась политика планки (`.claude/rules/quality.md`,
  `.claude/rules/quality-scoped.md`), словари признаков или модель свода;
- след проб пуст либо старше последней такой правки. След — файл в базе,
  названный полем `barProbeLedger` настройки; дату последней правки политики
  даёт команда:

  ```
  git log -1 --format=%cs -- .claude/rules/quality.md .claude/rules/quality-scoped.md
  ```

- в книге посадок лежат посадки, ни разу не прогнанные.

**Цена.** Каждая посадка — полный свод в песочнице: около `110 000` знаков
чтения даже на самую малую посадку (замер `2026-10-05`). Поэтому пробу зовут
по поводу из списка выше, а не на каждой правке, и сажают **пачкой**: свод
на пачку один, и постоянная часть — страницы критериев и строка на каждый —
оплачивается раз.

**Где сажать.** В свой проект — когда меряют свод на его коде. Когда меряют
планку саму — после её правки, по критериям, которых проект не держит, —
сажают на **стенд проб**: там у каждого критерия есть предмет и живы все
разделы. Посадки, которые решает машина, сессией не меряют: их держит тест
обвязки. Решает ли машина, говорит опора посадки — поле `held` в книге, а без
него опора критерия.

## Шаги

0. **Площадка.** Меряют свод на коде проекта — площадка сам проект. Меряют
   планку саму — стенд проб, одной командой из корня проекта или мастерской:
   `node .claude/tools/graph.mjs bar-probe --stand-build <пустая папка вне репозитория>`.
   Она сажает текущую обвязку, ставит пакеты, кладёт стенд и кончается
   сверкой базы; код не ноль — она печатает причину и команду разбора, и
   проба до неё не начинается. Дальше все шаги — из этой папки.
1. **Посадить.** `node .claude/tools/graph.mjs bar-probe` — род посадки
   выпадает случайно; `--existing` сажает в существующий код — вставкой
   либо правкой (ближе к жизни), `--new` — новым файлом (верхняя граница
   доли), `--removal` — удалением узла: имя, которое брал только он, остаётся
   без потребителя, `--neighbour` — в соседа правленого, которого правка не
   тронула, `--move` — в файл, который правка переносит либо переименовывает;
   ключ рода сужает и пачку — номер другого рода в неё не ляжет;
   `--seed=N` делает
   посадку повторимой. `--criterion=ID` сажает посадку этого критерия,
   `--batch=A,B,…` — пачку, по посадке на каждый названный критерий либо
   номер книги. Режим печатает адрес песочницы и команду суда с номером
   пробы; что посажено, он не печатает. Проект не вмещает ни одной посадки —
   режим так и говорит и называет, сколько файлов кода нужно.

   **Песочницу кладут вне репозитория**: `TMPDIR=<пустая папка вне
   репозитория>`, на Windows — `TEMP`; той же переменной зовут и суд. Свод делает отдельная сессия,
   стартовавшая в папке песочницы (шаг 2): шапка политики срабатывает на файл
   внутри проекта этой сессии, то есть песочницы, и правила она получает один
   раз — свои. Песочница внутри папки проекта, который зовёт свод, добавила бы
   к ним доктрину мастерской: замер `2026-10-13`, пробный вызов с правилами
   в две строки, создано `9 926` токенов контекста вне проекта и `68 979`
   внутри.
2. **Сделать свод в песочнице сессией, не видевшей посаженного.** Это новая
   сессия `claude -p`, стартовавшая в папке песочницы; задание ей — раздел
   «Задание сессии свода», дословно. Шаг ручной по устройству: меряется сама
   сессия, и машина его не заменит. Посаженное для неё — чужая правка:
   законная судьба находки на нём — `вопрос`; `починено` гасит печать, и свод
   ставят заново на конечном виде.

   Команда — из папки песочницы, задание первым словом после `-p`, ключи после
   него (`--allowedTools` принимает список и забрал бы задание, будь оно
   позже):

   ```
   cd <песочница> && env -u CLAUDE_CODE_CHILD_SESSION claude -p "<задание>" \
     --session-id <uuid> --permission-mode acceptEdits \
     --allowedTools "Bash(cd *)" "Bash(env *)" "Bash(node *)" "Bash(git *)" \
     --output-format json > <папка вне песочницы>/svod.json
   ```

   Устройство, каждое проверено пробным вызовом `2026-10-13` на Claude Code
   `2.1.296`:

   - **Вход отдельный не нужен**, модель та же, что у вызывающей сессии
     (`modelUsage` в выводе называет её; ключ `--model` не передают). Уровень
     рассуждения ключом не задают: сессия наследует окружение вызывающей, в
     журнал и вывод он не пишется, поэтому его равенство прошлым пробам не
     проверено.
   - **Разрешения из `settings.json` песочницы не действуют**: папка не
     принята как доверенная, и сессия печатает «Ignoring … permissions.allow
     entries». Без `--allowedTools` её команды `node` отклоняются, а отказы
     лежат в `permission_denials` вывода. `--bare` не передают: он снимает хуки.
   - **Хуки песочницы идут**: страж на вызове Bash пишет след — файл
     claude-harness-guard.json в папке git песочницы, ворота конца хода держат ход
     (`stop --hook`). Ход кончается и паузой с причиной (`stop --pause`) —
     тогда печати нет, и суд так и скажет. Мешает ли хук именно своду чтения,
     покажет первый целый свод этим способом: записать, что именно и где.
   - **Журнал** — `~/.claude/projects/<путь песочницы, косые черты → дефисы>/<uuid>.jsonl`.
     `--session-id` делает имя известным заранее: без него сессия берёт номер
     вызывающей, и два запуска из одной папки писали бы в один файл. Считают
     по `message.id`, а не по записям: одно обращение лежит несколькими
     записями с одним расходом.
   - **Журнал не удаляют, пока разбор не записан.** Расход по статьям видно
     только в нём: итоговой сводки хватает на счёт обращений и перечитывания,
     но не на причины. Его копируют в сохранное место до уборки песочницы.
     **Разбор записывается каждый прогон, без исключения** (требование
     разработчика `2026-10-14`): таблица обращений, перечитывания, вызовов и
     обращений по видам — в `.claude/rationale/loop.md`, раздел «Соразмерность:
     что читать под задачу», строкой с датой, коммитом основания и числом
     пойманных; там же модель цены, методика разбора и базовая линия
     прогонов. Таблицу печатает режим
     `node .claude/tools/graph.mjs bar-probe --cost --session=<uuid>` (либо
     `--cost <путь журнала>`): вписывают его строку для замеров, числа в ней
     уже в обратных кавычках. Прогон без записанной строки ловчесть показывает,
     цену — нет. Запись строки держится вниманием: режим печатает, но в
     `rationale/loop.md` не пишет.
   - **Долго** — запускать в фоне (`run_in_background`, `timeout` до
     `7 200 000` мс), код возврата `claude -p` брать из лога, а не из
     уведомления о конце команды. Сессию свода запускают одну за раз.

   Нет команды `claude` в окружении — запасной порядок прежний: субагент без
   истории этой сессии, песочница внутри папки проекта
   (`TMPDIR=<папка проекта>/probe-box`, папка в `.git/info/exclude`), чтобы
   шапка политики на неё срабатывала. Цена такого свода несравнима с этим:
   правила приходят дважды.
3. **Судить** — командой, которую напечатал шаг 1:
   `node .claude/tools/graph.mjs bar-probe <номер>`, из папки проекта.
   Исходы: `поймано`; `критерий назван, адрес другой`; `названо другим
   критерием`; `мимо`. Пачку суд судит по посадке. Ненулевой код возврата —
   на всём, кроме `поймано` у каждой. Счёт ложится в след; пачка — отдельной
   долей. Промах в пачке перепроверяют одиночной пробой того же критерия.
4. **Отчёт и уборка.** В отчёт — исход, доля «поймано» по роду посадки и
   медиана критериев, названных по адресу посадки, — всё из печати суда, —
   и расход сессии свода из `bar-probe --cost` (обращений, перечитывание,
   чтений протокола, отказов).
   Исход «мимо» или «названо другим критерием» — находка обвязки: какого
   признака не хватило своду. Чинится как любая находка: признаком в
   планке, вопросом модели, новой посадкой в книгу — она проходит ворота
   стенда (раздел «Правка книги посадок и стенда»). Промах чинится
   классом, порядком скилла `probe`, раздел «Найденное лечится как класс, а
   не как пример». Класс — какой формы нарушения не увидел держатель
   критерия. Места рода — все критерии, чей держатель не видит той же
   формы; перечень получают командой `bar-hold` и приводят в отчёте вместе с
   ней. Починка идёт в держателе, а не под одну посадку; посадка в книгу —
   на каждую форму рода. В отчёт идут те же четыре графы класса. При промахе суд
   оставляет песочницу: разобрать протокол, затем удалить её и запись о
   посадке — адреса суд печатает. Удаление ручное намеренно: протокол
   промаха читают раньше, чем убирают.

## Задание сессии свода

Вместо `<песочница>` — адрес, который напечатал шаг 1. Выверено на девяти
пачках: перекрёстная сверка по находке и машинное «чисто» при закрытом наборе
форм в нём учтены. Задание одно на все пачки: переписанное своими словами,
оно делает замеры пачек несравнимыми.

Задание правлено `2026-10-13`: справочник инструмента из него снят, код
читается страницами `bar-read`, а не вторым чтением файлов. Пачки до этой
даты сравнимы с последующими по поимке — с оговоркой, что задание было
другим, — а по цене нет: прежнее задание посылало сессию в справочник на
`49 491` знак и к чтению каждого файла правки целиком поверх страниц.
Правлено повторно в тот же день: протокол читается одним вызовом по
строкам модели. Свод `2026-10-13` прочёл его пятью вызовами и примерно
восемью срезами оболочкой; с этого задания расход на протокол сравнивают
только с пачками после правки. Правлено в третий раз: страницы открываются
пачками. Пятый свод того дня шёл по одному вызову за обращение (`1,8`
вместо `2,3`–`2,6`), и это вероятный источник подорожания (причина не
доказана, журнал прогона не сохранили): каждое обращение заново проходит
весь накопленный контекст.

Правлено в четвёртый раз, по журналу шестого свода того дня (`79`
обращений, `27,6` млн токенов перечитывания, сохранён): `94 %` перечитывания
ушло не на чтение, а на заполнение — подбор формы клеток, срезы протокола
ради правил, разбор отказа своим скриптом, отказы оболочки на `heredoc` и
переменных. Запрет читать таблицы протокола снят: правила клеток и ключи
теперь печатает `bar`, и читать протокол сверх модели не за чем. Добавлено:
файл ответов — инструментом записи, команды — по одной, `git diff` не нужен
(страница кода называет правленые строки), `npm` не запускают. Расход с
пачками до этой правки не сравнивают.

Правлено в пятый раз `2026-10-17`: форма файла ответов и ключи лежат
файлом, а не в выводе `bar` — первый вывод был длиннее предела, который
среда отдаёт сессии, и ключи из его середины вырезались (девятый прогон).
Цену с прогонами до этой правки сравнивают по причинам.

```text
Ты — ревьюер кода. Работаешь в папке проекта `<песочница>` — git-репозиторий,
где кто-то другой внёс правку: она видна `git status` против последнего
коммита (новые файлы — неотслеживаемые). Задача: сделай свод по планке
правленого — режим `bar` без пути, полностью, до печати.

1. Команды инструмента (рабочая папка Bash между вызовами сбрасывается):
   `cd <песочница> && env -u CLAUDE_CODE_CHILD_SESSION node .claude/tools/graph.mjs <режим> …`
   Одна команда на вызов: без переменных оболочки, `heredoc`, труб и
   перенаправлений — их оболочка без подтверждения не исполнит. Файлы пиши
   инструментом записи файла. `npm` и прочие команды не запускай: в этой
   сессии они не разрешены.
2. Начни с `… graph.mjs bar`: он соберёт модель правки, положит скелет
   протокола в `.context/bar-protocol.md` и напечатает, что делать дальше.
   Делай ровно то, что он велит: страницы `bar-read` и их слова, свидетели,
   исход по каждому критерию, «итог по уровням», «база и документация».
   Форму каждой строки ответа, словарь её клеток и ключи он кладёт файлом —
   путь печатает вывод, открой его Read; справочника инструмента не читай. Из протокола читай только модель
   предмета — одним вызовом Read, с offset и limit, которые назвал режим.
3. Страницы `bar-read` кладёт файлами и печатает их папку и имена: открывай
   каждую инструментом Read, не оболочкой — тела критериев приходят в
   контекст с первой открытой страницей, а прочитанная оболочкой страница их
   не приносит. Страниц несколько десятков: открывай их пачками — несколько
   вызовов Read в одном ответе, — а не по одной. Правленый код и срезы
   соседей читай этими же страницами: они дают код предмета целиком и
   дословно, а соседа — там, где он берёт предмет; страница кода называет
   под заголовком правленые строки и снятые с их текстом, поэтому `git diff`
   не нужен. Отдельным файлом открывай только то, чего страницы не дают
   (строки соседа за срезом). Суди каждый критерий по его телу, а не по
   заголовку. Нарушение — исход `нашлось`, адрес `путь:строка` там, где оно
   стоит, словами — что не так; несколько мест — адрес у первого, остальные в
   графе «что» после «ещё мест:». Найденное отмечается в каждом критерии, чьё
   тело его называет. Пустой исход ставь чтением по странице критерия; исход,
   который поставила машина, проверь по телу критерия.
4. Все ответы пиши одним файлом и вписывай одним вызовом `bar-fill`, затем
   зови `bar`. Каждая находка встаёт в «Перекрёстную сверку находок» — со
   словами и кандидатами. В графе «также» о каждом кандидате ответь `X`
   либо `не X` и добавь любой другой критерий, чьё тело называет то же
   нарушение; ни кандидатов, ни связей — `никакие`. Строки «также» можно
   писать тем же файлом, что исходы, по форме ключа из вывода `bar`;
   кандидата, о котором не сказано, режим назовёт дырой. Каждый названный
   `X` обязан стоять «нашлось» с местом этой находки — поправь его строку.
5. Правка чужая, код не правь. Законная судьба находки — `вопрос`. Вопросы —
   в `.context/13-questions.md`, по одному на файл с находками: заголовок
   `## Вопрос N. …` называет файл, графы `**Задан:**`, `**Что решить.**`
   (находки файла — критерий и строка), `**Последствие отсутствия ответа.**`.
6. Зови `… graph.mjs bar` снова, пока он не поставит печать; отказ объясняет,
   чего не хватает. Работа закончена, когда напечатан отпечаток.

Запрещено: открывать и искать по `.claude/tools/bar-probes.json`,
`.claude/tools/bar-stand.json`, папкам `.claude/skills/bar-probe/` и
`.claude/state/`, файлам `bar-probe-*.plant.json`; запускать режим
`bar-probe`; править код, тесты и стили; править что-либо в `.claude/` —
ошибку инструмента опиши в ответе; коммитить.

В конце коротко: отпечаток печати (или почему её нет), все находки строками
`критерий — адрес — что не так`, и отдельно — где инструмент, по-твоему,
повёл себя неверно, особенно в перекрёстной сверке.
```

## Правка книги посадок и стенда

Новая или правленая посадка, правка стенда — собрать стенд (шаг 0) и в нём
позвать `node .claude/tools/graph.mjs bar-probe --stand-check`. Каждая
посадка-суждение обязана пройти ворота стенда: компилятор, линт, формат и
тесты. Посадка, уронившая их, показывает своду поломку, к её критерию не
относящуюся, и проба мерит не то. Режим называет каждую такую посадку;
правится посадка, а не ворота стенда. Работа закрыта, когда режим вернул
код ноль.

## Чего проба не доказывает

- **Доля рода «новым файлом» — верхняя граница**: посаженное отдельным файлом
  заметнее настоящего дефекта.
- **Суд мерит полноту, а не точность**: свод, назвавший у посаженного каждый
  критерий подряд, поймает всегда. Поэтому доля читается вместе с медианой
  названных критериев.
- **Честность пробы держится вниманием**: запись о посадке лежит вне
  песочницы, от случайного взгляда это защищает, от намеренного — нет.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.