agentleFS
Igor-lxIgor-lx/claudeHarness/.claude/skills/bar-probe/SKILL.md

bar-probe

Skill2 starsChanged 35 days agoMITView on GitHub

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

The file

Files
SKILL.md

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

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

Устройство режима — посадки, прикрытия, суд, след — описано в .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 в книге, а без него опора критерия.

Шаги

  1. Площадка. Меряют свод на коде проекта — площадка сам проект. Меряют планку саму — стенд проб, одной командой из корня проекта или мастерской: node .claude/tools/graph.mjs bar-probe --stand-build <пустая папка вне репозитория>. Она сажает текущую обвязку, ставит пакеты, кладёт стенд и кончается сверкой базы; код не ноль — она печатает причину и команду разбора, и проба до неё не начинается. Дальше все шаги — из этой папки.
  2. Посадить. 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 внутри.

  3. Сделать свод в песочнице сессией, не видевшей посаженного. Это новая сессия 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), чтобы шапка политики на неё срабатывала. Цена такого свода несравнима с этим: правила приходят дважды.

  4. Судить — командой, которую напечатал шаг 1: node .claude/tools/graph.mjs bar-probe <номер>, из папки проекта. Исходы: поймано; критерий назван, адрес другой; названо другим критерием; мимо. Пачку суд судит по посадке. Ненулевой код возврата — на всём, кроме поймано у каждой. Счёт ложится в след; пачка — отдельной долей. Промах в пачке перепроверяют одиночной пробой того же критерия.
  5. Отчёт и уборка. В отчёт — исход, доля «поймано» по роду посадки и медиана критериев, названных по адресу посадки, — всё из печати суда, — и расход сессии свода из 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 — первый вывод был длиннее предела, который среда отдаёт сессии, и ключи из его середины вырезались (девятый прогон). Цену с прогонами до этой правки сравнивают по причинам.

Ты — ревьюер кода. Работаешь в папке проекта `<песочница>` — 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. Каждая посадка-суждение обязана пройти ворота стенда: компилятор, линт, формат и тесты. Посадка, уронившая их, показывает своду поломку, к её критерию не относящуюся, и проба мерит не то. Режим называет каждую такую посадку; правится посадка, а не ворота стенда. Работа закрыта, когда режим вернул код ноль.

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

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

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.