Конфигурация
Кому это? Тому, у кого инструмент уже стоит и кто пишет или правит
harnessimo.config.json.
Когда читать? Когда нужен ключ, которым вы ещё не пользовались. Чтобы выбрать, какую
проверку включить, есть таблица в гайде: симптом → секция.
Каждая секция необязательна, а отсутствие секции — это проверка, которая не работает.
harnessimo doctor печатает этот список, и он и есть честный ответ на вопрос, что
репозиторий гарантирует.
Страница генерируется из schema/harnessimo.config.schema.json. Править её руками
бессмысленно: npm run docs:sync перезапишет, а тест упадёт на расхождении.
docs
Включает: proof
Proof-маркеры: каждое утверждение в тексте называет доказательство, которое делает его правдой.
| Ключ | Тип | Что делает |
|---|---|---|
roots |
array of string | Каталоги, где искать Markdown. "." — корень репозитория, без рекурсии. |
skip |
array of string | Имена каталогов, внутрь которых не заходить. |
maxDepth |
integer | Насколько глубоко спускаться от каждого корня. Не даёт обходу уйти в вендоренное дерево. |
mustCarryProof |
array of string | Документы, которые в строгом режиме обязаны нести хотя бы один маркер. Сюда — те, что дают обещания. |
commands |
object | Префикс маркера → файл, объявляющий эти команды: { "make": "Makefile", "task": "Taskfile.yml", "pnpm run": "package.json" }. |
migrations |
string or null | Каталог, на который опираются маркеры migration:<prefix>. |
tracks
Включает: tracks
Handoff-driven development: индекс живых треков работы и хендоффы, на которые он ссылается.
| Ключ | Тип | Что делает |
|---|---|---|
file |
string | Индекс живых треков — по строке на трек, со статусом и следующим шагом. |
log |
string | Куда складывается итог закрытого трека. |
specsDir |
string | Где лежат спека, задачи и хендофф лана — по каталогу на лан. |
taskFile |
string | Файл со списком задач внутри лана; его отмеченные галочки читает task-гейт. |
gateTasks |
boolean | Требовать, чтобы отмеченная задача в живом лане несла proof-маркер. |
staleAfterDays |
integer | Через сколько дней живая строка трека, которую никто не обновлял, считается находкой. Полоса, брошенная на середине, сохраняет статус, следующий шаг и заявленные пути — само по себе это не протухает. 0 (по умолчанию) выключает правило. |
queue
Включает: queue
Очередь работы. Состояние меняется только через прошедшую верификацию, а CI перепроверяет каждое утверждение.
| Ключ | Тип | Что делает |
|---|---|---|
file |
string | Сама очередь: каждый пункт, его состояние и команда, которая его проверяет. |
timeoutMinutes |
number | Верификация, идущая дольше этого, — падение с названной причиной, а не зависание. |
terminalByKind |
object | Куда попадает пункт, когда его верификация прошла, — по видам. |
locked
Включает: locked
Файлы, которые определяют или обеспечивают сигнал приёмки; коммит агента не имеет права их трогать.
| Ключ | Тип | Что делает |
|---|---|---|
paths |
array of string | Префиксы путей. Пусто — проверка выключена. |
baseline |
string | Файл, называющий коммит, с которого действует правило. |
agentTrailer |
string | Трейлер в сообщении коммита, помечающий авторство агента. |
coldStart
Включает: cold-start
Может ли свежий клон установиться и проверить себя, имея только репозиторий?
| Ключ | Тип | Что делает |
|---|---|---|
requiredFiles |
array of string | Файлы, которые обязаны быть в свежем клоне до запуска чего-либо, — те, на которые рассчитывает первая команда. |
entryDocs |
array of string | Документы, проверяемые на пути, которые разрешаются только на одной машине. |
commands |
array of string | Задокументированные команды, запускаемые внутри свежего клона. |
cleanExit
Включает: clean-exit
Чистое состояние на выходе из сессии (лекция 12): мусора не осталось, прогресс записан.
| Ключ | Тип | Что делает |
|---|---|---|
scan |
array of string | Префиксы путей, чьи изменённые файлы читаются. Пусто — проверка выключена. |
markers |
array or null | Строки, которые проходят сборку и означают незаконченную работу. Null — значения по умолчанию. |
allow |
array of string | Фрагменты путей-исключений — обычно те файлы, где эти маркеры и перечислены. |
progressFile |
string | Файл, который сессия обязана обновить, если меняла код. |
codePrefixes |
array of string | Что считается кодом для правила о прогрессе. Пусто — всё, что не Markdown. |
progressThreshold |
number | Число изменённых строк, ниже которого правило о прогрессе молчит, чтобы правку в одну строку не заставляли описывать. По умолчанию 50. |
requireCleanTree |
boolean | Падать также, когда в рабочем дереве есть незакоммиченные изменения. |
instructions
Включает: instructions
Файл инструкций остаётся маршрутизатором, а не мануалом (лекция 04).
| Ключ | Тип | Что делает |
|---|---|---|
limits |
object | Путь → максимальное число строк. |
boundaries
Линии, которые коду пересекать нельзя: шаблон, который не должен появляться в определённой части дерева, и причина, по которой не должен. Оба репозитория, из которых выросла эта библиотека, написали это правило руками и по-разному — потому что объявить его было негде.
| Ключ | Тип | Что делает |
|---|---|---|
scan |
array of string | Каталоги, которые читать. Всё под ними проверяется правилами, чьи пути его покрывают. |
rules |
array of object | Сами границы. Пустой список — проверка, которая ничего не найдёт. |
thresholds
У измеренной метрики есть объявленный пол, и прогон ниже него не закончен. Проверка не считает метрики: команда самого проекта пишет файл результатов, а она читает и сравнивает. Только полы — метрика, где меньше значит лучше, это то же правило зеркально, а придумывать направление на нуле реальных случаев было бы гаданием.
| Ключ | Тип | Что делает |
|---|---|---|
results |
string | Файл, который пишет команда подсчёта: JSON вида { метрика: число }. |
floors |
string | Файл с минимально допустимым значением каждой метрики. Положите его в locked.paths: агент, который может опустить себе проходной балл, оценивает сам себя. |
command |
string | Команда, которая создаёт файл результатов. Называется в сообщении, когда файла нет, и отсюда никогда не запускается — команды принадлежат проекту. |
release
Включает: release
Версия — утверждение, сделанное на нескольких поверхностях: они обязаны совпадать.
| Ключ | Тип | Что делает |
|---|---|---|
manifest |
string | Где объявлена отгружаемая версия. Обычно package.json. |
changelog |
string | Файл, описывающий каждую выпущенную версию. |
tagPrefix |
string | Как выглядит тег для x.y.z: "v" даёт v1.2.3. |
tokens
Guard на чтение: повторное чтение файла, который не менялся, отклоняется, а стоимость сессии печатается. Принуждение в момент работы, а не проверка того, закончена ли она.
| Ключ | Тип | Что делает |
|---|---|---|
windowMinutes |
integer | Сколько помнить прочитанное. После этого тот же файл можно читать снова — сессия, шедшая дольше, это уже не один кусок работы. По умолчанию 20. |
statePath |
string | Где лежит состояние сессии. Оно описывает один прогон, поэтому ему место вне git. |
autonomy
Насколько работа в этом репозитории идёт под присмотром. Это нижняя граница, а не настройка: harnessimo check работает на этом уровне или выше, а --autonomy может её только поднять. Каждый уровень добавляет проверки, которые надзор на уровне ниже уже не ловит.
| Ключ | Тип | Что делает |
|---|---|---|
level |
"watched" | "reviewed" | "unattended" |
watched — человек читает каждый шаг; быстрые проверки. reviewed — за шагами никто не смотрел, но диф прочитают; добавляет переперепроверку и проверку закрытых поверхностей. unattended — не смотрел никто; добавляет чистый выход и холодный старт. |