Repository navigation
v0.6.0
Добавлено
-
doctor --run --since <ссылка>— только то, что внёс диф. Первый прогон в живом проекте
показывал долг за все годы: стену красного не разбирают, проверку выключают. Теперь находки
сужаются до файлов, которых касался диф. Три исхода названы вслух: находка внутри дифа —
красный; находки только снаружи — зелёный с числом спрятанного; гейт, печатающий вердикт
без путей, сузить нечем — он остаётся красным, и причина названа. Молчаливого «всё хорошо»
здесь нет ни в одном из трёх случаев -
Запись каталога
gate-not-weakened— первая, ловящая приём, а не стиль: не «код плохой»,
а «сигнал о плохом коде выключен». Красным делается безадресное подавление —# noqaбез кода,
eslint-disableбез имени правила,@ts-ignore,@SuppressWarnings("all"),--no-verifyв
конвейере. Проверено замером по пятнадцати чужим репозиториям: 20 774 файла, 22 находки,
19 настоящих. Замер же нашёл два дефекта в самой проверке — оба до внесения записи в каталог -
Запись каталога
ci-actually-fails— закрывает дыру, найденную в собственной оснастке:
gates-run-in-ciпроверял, что гейт упомянут в конфиге конвейера, и пропускал
run: pytest || trueзелёным. Новая запись красит шаг, который и выносит вердикт, и не может
провалиться. Замер по пятнадцати чужим репозиториям: 2 находки, обе настоящие (уreviewdog
два шага собственных линтеров подcontinue-on-error: true), 0 ложных — после трёх
переписываний, каждое из которых потребовал замер -
Запись каталога
test-has-assertion— три случая, в которых тест зелёный при любых
данных: пустое тело, утверждение-тавтология, пропуск без названной причины. Граница найдена
замером: первая формулировка «тест без утверждения» дала 1843 находки, из них 1843 ложных —
186 оказались законным стилем «вызвали и проверили, что не упало». После шести переписываний:
8 находок на ~25 000 файлов в девятнадцати репозиториях, включая шесть выключенных без причины
тестов вswr -
Запись каталога
promise-has-gate— центральный вопрос комплекта: у каждого правила в
точке входа виден сторож. Правило несёт пометку<!-- aqk: имя-гейта -->или
<!-- aqk: человек -->; пометка, ведущая в несуществующий гейт, — тоже красное. Первый прогон
по собственномуAGENTS.md: тринадцать железных правил, ни у одного сторож не назван. После
разметки одиннадцать из тринадцати оказались исполняемыми человеком — и это стало видно -
Шаблон
AGENTS.md, который кладётinit, размечен на обоих языках: у каждого правила
в чужом проекте сразу виден сторож -
Раздел «обвес самого агента» в карте готовых правил —
agnix(455 правил, активен) и
agents-lint. Записьdocs-commands-runотменена, не начата:agents-lintделает это
лучше. Поиск перед работой снял с плана целую запись -
Скорость проверок каталога. Список файлов больше не накапливается строкой в цикле
оболочки — это квадрат по длине: на 6407 файлах проверка шла 44 секунды, не прочитав ни одного
файла. Отбор делаетfind, признак «сгенерирован» — сам awk. Стало 1,1 с и 2,3 с -
Раздел «заглушка вместо реализации» в карте готовых правил. Запись
no-stub-in-done
написана, измерена и не внесена: из 120 находок 91 оказалась законным приёмом
(null-объекты, безопасные заглушки), 29 покрывает pylint W0223, своей доли на 25 000 файлах не
осталось. Готовые правила —no-empty-function,W0223,F901,PIE790— внесены в карту -
Правило «сомнение — повод посмотреть наружу» — железным правилом в
AGENTS.md, разделом
вkit/rules/general.md(переносится в проекты) и навыком.claude/skills/search-first -
Зрелость записи каталога считается машиной. Три состояния:
stable— доказательство
ссылается на журнал шишек,experimental— не ссылается,deprecated— объявлено вместе с
преемником. Объявить себя зрелым нельзя:lifecycle: stableв записи отклоняется приёмкой.
У всех трёх соседей, чей каталог мы разбирали, это поле заполняет автор — значение, написанное
автором, означает доверие к автору, а не факт.PROJECT.md§9 п.4 закрыт -
aqk addотказывает в выведенной записи и называет ту, что её заменяет. Запись, которую
всё ещё можно поставить одной командой, не выведена, а просто помечена.aqk startтакую
запись пропускает, называя преемника в общем списке пропущенного -
tool/selfcheck/lifecycle.mjs— таблица зрелости всего каталога одной командой. Правило
живёт в одной функции (entryLifecycle) и оттуда же читается приёмкой: повтор на sh дал бы
второй источник истины, расходящийся с первым молча
npx agent-quality-kit doctor