agent-quality-kit 0.2.2 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,155 +1,167 @@
1
1
  # AQK — Agent Quality Kit
2
2
 
3
- **Стандарт готовности репозитория к тому, что код в нём пишет агент.** Обещание проекта
4
- становится командой с кодом возврата — и его держит машина, а не чья-то добрая воля.
3
+ **English** · [Русский](README.ru.md)
5
4
 
6
- Что вообще должно быть на проекте, чтобы это было возможно, — словами, без привязки к языку и
7
- инструменту: [«тёмная фабрика» и обязательный минимум](kit/docs/ai/project-baseline.md).
5
+ [![npm](https://img.shields.io/npm/v/agent-quality-kit)](https://www.npmjs.com/package/agent-quality-kit)
6
+ [![checks](https://github.com/arsen-ask-lx/Agent_Quality_Kit/actions/workflows/ci.yml/badge.svg)](https://github.com/arsen-ask-lx/Agent_Quality_Kit/actions/workflows/ci.yml)
7
+ [![MIT licence](https://img.shields.io/npm/l/agent-quality-kit)](LICENSE)
8
+
9
+ **A standard for whether a repository is ready to have its code written by agents.** Every
10
+ promise the project makes turns into a command with an exit code — held by a machine, not by
11
+ someone's good intentions.
12
+
13
+ What a project needs before that is even possible, in plain words, independent of language and
14
+ tooling: [the dark factory and the minimum that isn't optional](kit/docs/ai/project-baseline.md).
8
15
 
9
16
  ```bash
10
- npx github:arsen-ask-lx/Agent_Quality_Kit start # кода ещё нет: сторожа дня 0 сразу
11
- npx github:arsen-ask-lx/Agent_Quality_Kit doctor # код уже есть: уровень и что поставить
17
+ npx agent-quality-kit start # no code yet: day-zero guards, right away
18
+ npx agent-quality-kit doctor # code already exists: your level and what to install
12
19
  ```
13
20
 
14
- **Первый запуск молчит две-три минуты** — `npx` скачивает репозиторий целиком и до конца не
15
- печатает ничего. Это не зависание, подожди. Дальше команды работают мгновенно.
21
+ Nothing to install — `npx` fetches the package itself (230 KB). The bleeding edge straight from
22
+ the repository is `npx github:arsen-ask-lx/Agent_Quality_Kit doctor`, but the first run that way
23
+ stays silent for two or three minutes: it clones the whole repository.
16
24
 
17
- **Что нужно.** Node 18+ и оболочка `sh` — она есть в macOS, Linux и WSL; на Windows подойдёт
18
- Git Bash. Переносимые проверки написаны на `sh` намеренно: он есть везде, где собирают код.
25
+ **Requirements.** Node 18+ and an `sh` shell present on macOS, Linux and WSL; Git Bash works on
26
+ Windows. The portable checks are written in `sh` on purpose: it exists everywhere code is built.
19
27
 
20
- **Не зависит от инструмента:** Claude Code, Codex, Cursor — и без ИИ тоже.
28
+ **Tool-agnostic:** Claude Code, Codex, Cursor — and without AI at all.
21
29
 
22
- При первой установке на машине `init`/`start` один раз печатают ссылку на звезду и на «завести
23
- Issue» ничего не постится сама, только текст для человека, и больше не повторяется.
30
+ The first time you run `init`/`start` on a machine, it prints a link to star the repo and to open
31
+ an issue, once. Nothing is posted anywhere it is text for a human, and it never repeats.
24
32
 
25
- **Готовые правила ставятся отдельно и по желанию.** Переносимая проверка работает без них
26
- всегда; если в проекте стоит `ruff`, `eslint` или `vulture`, запись возьмёт готовое правило
27
- оно точнее. Одна запись, `dead-code`, без готового инструмента не работает вовсе и честно
28
- скрывается: граф вызовов поиском по тексту не построить.
33
+ **Off-the-shelf rules are optional and installed separately.** The portable check always works
34
+ without them; if the project already has `ruff`, `eslint` or `vulture`, the entry will use the
35
+ native rule instead it is more precise. One entry, `dead-code`, does not work at all without a
36
+ real tool and honestly hides itself: you cannot build a call graph with a text search.
29
37
 
30
- ## Как устроено
38
+ ## How it works
31
39
 
32
- Весь стандарт файл `.aqk.yml` в корне:
40
+ The whole standard is one `.aqk.yml` file in the repository root:
33
41
 
34
42
  ```yaml
35
43
  aqk: 1
36
- entry: [AGENTS.md] # что агент читает первым
37
- rules: .aqk/rules # где стандарты
38
- gates: # что обязано пройтикомандами, не словами
44
+ entry: [AGENTS.md] # what the agent reads first
45
+ rules: .aqk/rules # where the standards live
46
+ gates: # what must passas commands, not as prose
39
47
  lint: "npm run lint"
40
48
  secrets-not-in-code: "bash gates/secrets-not-in-code/check.sh ."
41
- samples: gates # красный и зелёный образец каждой записи
42
- ratchets: ratchets # реестры долга: список может только укорачиваться
43
- lessons: incidents # где копятся уроки
49
+ samples: gates # a red and a green sample for every entry
50
+ ratchets: ratchets # debt registries: the list may only get shorter
51
+ lessons: incidents # where lessons accumulate
44
52
  ```
45
53
 
46
- Пустое полене заглушка, а честный ответ «ступень не пройдена»: `init` кладёт их пустыми,
47
- а заполняются они по мере того, как появляется чем их заполнить.
54
+ An empty field is not a placeholder it is an honest "this level is not reached". `init` writes
55
+ them empty, and they fill in as there becomes something real to put in them.
48
56
 
49
- **Если утверждение нельзя проверить машиной его в стандарте нет.** Иначе значок означает
50
- доверие к автору, а не факт.
57
+ **If a claim cannot be checked by a machine, it is not in this standard.** Otherwise the badge
58
+ would mean trust in the author rather than a fact.
51
59
 
52
- ## Четыре ступени
60
+ ## Four levels
53
61
 
54
- | Уровень | Требуется | Что доказано |
62
+ | Level | Required | What it proves |
55
63
  |---|---|---|
56
- | **AQK-0** | манифест и точка входа | инструмент знает, что читать |
57
- | **AQK-1** | правила есть, гейты объявлены командами | проверки исполняются |
58
- | **AQK-2** | у гейтов красные и зелёные образцы, долг под храповиком | гейт ловит брак и молчит на исправном коде |
59
- | **AQK-3** | журнал уроков с выводами | шишка не набивается дважды |
64
+ | **AQK-0** | a manifest and an entry point | the tooling knows what to read |
65
+ | **AQK-1** | rules exist, gates declared as commands | the checks are executable |
66
+ | **AQK-2** | gates have red and green samples, debt under a ratchet | the gate catches defects and stays quiet on correct code |
67
+ | **AQK-3** | a lesson journal with conclusions | the same bruise is not collected twice |
60
68
 
61
69
  ```bash
62
- aqk doctor --run --min 1 # в конвейере: ошибка, если ниже AQK-1 ИЛИ упал хоть один гейт
70
+ aqk doctor --run --min 1 # in CI: fails below AQK-1 OR if any gate failed
63
71
  ```
64
72
 
65
- ## Поставить гейт
73
+ ## Installing a gate
66
74
 
67
75
  ```bash
68
- aqk find "печать в проде" # есть ли уже такой гейтсверка по намерению
69
- aqk doctor # что применимо к этому репозиторию и чего нет
70
- aqk add secrets-not-in-code # копирует проверку и образцы в проект, объявляет в манифесте
71
- aqk doctor --run # запускает объявленные гейты и показывает результат
72
- aqk ratchet no-print-in-prod # старое долг, новое не пускать
76
+ aqk find "print statements in production" # is there already such a gate matched by intent
77
+ aqk doctor # what applies to this repository and what is missing
78
+ aqk add secrets-not-in-code # copies the check and its samples in, declares it
79
+ aqk doctor --run # runs the declared gates and shows the result
80
+ aqk ratchet no-print-in-prod # existing violations become debt, new ones are blocked
73
81
  ```
74
82
 
75
- Каждый `doctor --run` перезаписывает `.aqk/last-run.md` — короткий отчёт, что из объявленного
76
- реально сработало и за сколько. Список гейтов в манифесте молчит о том, сколько из них живы
77
- именно сейчас; отчёт нет. Файл эфемерный, в `.gitignore` его стоит держать самому.
83
+ Every `doctor --run` rewrites `.aqk/last-run.md` — a short report of what actually ran and how
84
+ long it took. The list of gates in the manifest says nothing about how many of them are alive
85
+ right now; the report does. The file is ephemeral keep it in your own `.gitignore`.
78
86
 
79
- ## Поймал ошибку, которую не поймал сторож
87
+ ## When a bug slips past the guards
80
88
 
81
89
  ```bash
82
- aqk why "файл вырос до девяти тысяч строк"
90
+ aqk why "a file grew to nine thousand lines"
83
91
  ```
84
92
 
85
- Ответ один из трёх, и выбирает его прогон, а не память: **сторожа не было** · **сторож есть,
86
- но эту поломку не видит** · **сторож есть и ловит значит его обошли**. Разница решает, что
87
- чинить: саму проверку или её место в конвейере. Без прогона эти два случая неразличимы, и
88
- чинят обычно не тот. При неуверенном совпадении команда не выбирает за тебя, а спрашивает.
93
+ The answer is one of three, and it is chosen by an actual run rather than by memory: **there was
94
+ no guard** · **the guard exists but does not see this failure** · **the guard exists and catches
95
+ it so it was bypassed**. The difference decides what to fix: the check itself, or its place in
96
+ the pipeline. Without a run those two are indistinguishable, and people usually fix the wrong
97
+ one. On an uncertain match the command asks instead of choosing for you.
89
98
 
90
- **Храповик** нужен, когда правило вводят в проект, где старый код ему не соответствует.
91
- Список нарушений снимается в реестр, гейт разрешает его **укорачивать** и запрещает удлинять.
92
- Правило действует со дня установки, старый код трогать не надо.
99
+ **The ratchet** is for introducing a rule into a project whose existing code violates it. The
100
+ violations are captured into a registry; the gate lets that list get **shorter** and refuses to
101
+ let it grow. The rule applies from the day it is installed — the old code stays untouched.
93
102
 
94
- `add` **копирует проверку в репозиторий**, а не ссылается на пакет: при установке через `npx`
95
- пакет временный, и завтра команда в манифесте указывала бы в никуда.
103
+ `add` **copies the check into your repository** rather than referencing the package: installed
104
+ via `npx` the package is temporary, and tomorrow the command in your manifest would point at
105
+ nothing.
96
106
 
97
- ## Каталог обещаний
107
+ ## The catalogue of promises
98
108
 
99
- `doctor` смотрит на репозиторийязыки, наличие гейтови показывает **только применимое**:
100
- что уже держит машина, что применимо и не поставлено, что скрыто и почему. Каталог может
101
- вырасти до сотен записей, конкретный проект по-прежнему увидит десяток.
109
+ `doctor` inspects the repositorylanguages, existing gatesand shows **only what applies**:
110
+ what a machine already holds, what applies but is not installed, and what is hidden and why. The
111
+ catalogue may grow to hundreds of entries; a given project still sees about a dozen.
102
112
 
103
- Запись принимается, только если её арбитр краснеет на красном образце, молчит на зелёном и
104
- назван реальный отказ, который она поймала. Проверяет это машина: `bash tool/selfcheck/gates.sh`.
113
+ An entry is accepted only if its arbiter goes red on the red sample, stays quiet on the green
114
+ one, and names a real failure it caught. A machine checks this: `bash tool/selfcheck/gates.sh`.
105
115
 
106
- ## Методички одним файлом
116
+ ## The guides as a single file
107
117
 
108
118
  ```bash
109
- aqk blob # собирает GOD_AI.md из kit/docs — чтобы разом отдать методички в чат
119
+ aqk blob # assembles GOD_AI.md out of kit/docs — to hand the guides to a chat in one go
110
120
  ```
111
121
 
112
- Файл **собирается, а не хранится**: править надо оригиналы. Копия, которую правят руками, через
113
- неделю расходится с источником, и непонятно, какая настоящая.
122
+ The file is **assembled, not stored**: edit the originals. A hand-edited copy drifts from its
123
+ source within a week, and then nobody knows which one is real.
114
124
 
115
- ## Принести свой гейт
125
+ ## Contributing a gate
116
126
 
117
- Каталог живёт чужими шишками. Порядок и порог в [`CONTRIBUTING.md`](CONTRIBUTING.md):
118
- сверься `aqk find`, заведи заготовку `aqk new`, положи два образца, заполни четыре поля,
119
- прогони машиной. Отбор делает `tool/selfcheck/gates.sh`, а не рецензент.
127
+ The catalogue lives on other people's bruises. The procedure and the bar are in
128
+ [`CONTRIBUTING.md`](CONTRIBUTING.md): check for duplicates with `aqk find`, scaffold with
129
+ `aqk new`, add two samples, fill in four fields, run the machine. The filtering is done by
130
+ `tool/selfcheck/gates.sh`, not by a reviewer.
120
131
 
121
- ## Журнал шишек
132
+ ## The bruise journal
122
133
 
123
134
  ```bash
124
- aqk note "гейт краснел на правильном коде" # запись без раздела «Вывод» не принимается
135
+ aqk note "the gate went red on correct code" # an entry without a conclusion is rejected
125
136
  ```
126
137
 
127
- ## Честно о состоянии
128
-
129
- Задача целиком — в [`PROJECT.md`](PROJECT.md): что строим, четыре сценария, критерий успеха, что осталось.
138
+ ## Honestly, where this stands
130
139
 
140
+ The full brief is in [`PROJECT.md`](PROJECT.md) (in Russian): what is being built, the four
141
+ scenarios, the success criterion, and what is left.
131
142
 
132
- Версия 1, один автор. Сам комплект держит **AQK-3**: девятнадцать проверок объявлено и
133
- прогоняется конвейером, два реестра долга под храповиком. Пока комплектом пользуется один
134
- человек, AQK красивое слово в README. Он начнёт работать, когда появится чужой третий проект.
143
+ Version 1, one author. The kit holds **AQK-3** on itself: everything declared is executed by CI
144
+ on every push, two debt registries under a ratchet `node tool/program.mjs doctor --run --min 1`.
145
+ As long as one person uses it, AQK is a nice acronym in a README. It starts being real when a
146
+ third, foreign project appears.
135
147
 
136
- **Стандарт нельзя выпустить первым.** Спецификация раньше практики это тридцать первый
137
- заброшенный репозиторий с манифестом и нулём пользователей. Порядок обратный:
148
+ **A standard cannot be shipped first.** A specification ahead of practice is the thirty-first
149
+ abandoned repository with a manifest and zero users. The order is the other way round:
138
150
 
139
- | # | Шаг | Состояние |
151
+ | # | Step | State |
140
152
  |---|---|---|
141
- | 1 | живём по этому на своих проектах | ⬜ измерено: у трёх своих проектов манифеста нет, уровень не заведён |
142
- | 2 | `doctor` считает уровень | ✅ сделано |
143
- | 3 | сложившееся записано как короткая спецификация | ✅ [`SPEC.md`](SPEC.md) |
144
- | 4 | третий проект**чужой** | ❌ первый честный сигнал, его ещё нет |
145
- | 5 | значок, сайт, разговор с людьми | ❌ только после четвёртого шага |
153
+ | 1 | live by this on our own projects | ⬜ measured: three of our own projects have no manifest |
154
+ | 2 | `doctor` computes the level | ✅ done |
155
+ | 3 | what settled is written up as a short spec | ✅ [`SPEC.md`](SPEC.md) |
156
+ | 4 | a third project **someone else's** | ❌ the first honest signal, still missing |
157
+ | 5 | badge, site, talking to people | ❌ only after step four |
146
158
 
147
- ## Очередь работ
159
+ ## The work queue
148
160
 
149
- Живёт в одном месте — [`PROJECT.md` §9](PROJECT.md). Список здесь не повторяется: два списка через месяц
150
- расходятся, и непонятно, какой настоящий.
161
+ Lives in one place — [`PROJECT.md` §9](PROJECT.md). It is not repeated here: two lists drift
162
+ apart within a month, and then nobody knows which is real.
151
163
 
152
- Чего нет: второго пользователя; покрытия команд, которые пишут на диск (проверены прогоном на
153
- чистой папке, но не по отдельности); третьегочужогопроекта.
164
+ What is missing: a second user; per-command coverage of the commands that write to disk (they are
165
+ exercised by a clean-folder run, but not individually); a third foreignproject.
154
166
 
155
167
  MIT.
package/README.ru.md ADDED
@@ -0,0 +1,162 @@
1
+ # AQK — Agent Quality Kit
2
+
3
+ [English](README.md) · **Русский**
4
+
5
+ [![npm](https://img.shields.io/npm/v/agent-quality-kit)](https://www.npmjs.com/package/agent-quality-kit)
6
+ [![проверки](https://github.com/arsen-ask-lx/Agent_Quality_Kit/actions/workflows/ci.yml/badge.svg)](https://github.com/arsen-ask-lx/Agent_Quality_Kit/actions/workflows/ci.yml)
7
+ [![лицензия MIT](https://img.shields.io/npm/l/agent-quality-kit)](LICENSE)
8
+
9
+ **Стандарт готовности репозитория к тому, что код в нём пишет агент.** Обещание проекта
10
+ становится командой с кодом возврата — и его держит машина, а не чья-то добрая воля.
11
+
12
+ Что вообще должно быть на проекте, чтобы это было возможно, — словами, без привязки к языку и
13
+ инструменту: [«тёмная фабрика» и обязательный минимум](kit/docs/ai/project-baseline.md).
14
+
15
+ ```bash
16
+ npx agent-quality-kit start # кода ещё нет: сторожа дня 0 сразу
17
+ npx agent-quality-kit doctor # код уже есть: уровень и что поставить
18
+ ```
19
+
20
+ Ставить ничего не нужно, `npx` скачает пакет сам (230 КБ). Свежая версия прямо из репозитория —
21
+ `npx github:arsen-ask-lx/Agent_Quality_Kit doctor`, но первый запуск такого вида молчит две-три
22
+ минуты: он клонирует репозиторий целиком.
23
+
24
+ **Что нужно.** Node 18+ и оболочка `sh` — она есть в macOS, Linux и WSL; на Windows подойдёт
25
+ Git Bash. Переносимые проверки написаны на `sh` намеренно: он есть везде, где собирают код.
26
+
27
+ **Не зависит от инструмента:** Claude Code, Codex, Cursor — и без ИИ тоже.
28
+
29
+ При первой установке на машине `init`/`start` один раз печатают ссылку на звезду и на «завести
30
+ Issue» — ничего не постится сама, только текст для человека, и больше не повторяется.
31
+
32
+ **Готовые правила ставятся отдельно и по желанию.** Переносимая проверка работает без них
33
+ всегда; если в проекте стоит `ruff`, `eslint` или `vulture`, запись возьмёт готовое правило —
34
+ оно точнее. Одна запись, `dead-code`, без готового инструмента не работает вовсе и честно
35
+ скрывается: граф вызовов поиском по тексту не построить.
36
+
37
+ ## Как устроено
38
+
39
+ Весь стандарт — файл `.aqk.yml` в корне:
40
+
41
+ ```yaml
42
+ aqk: 1
43
+ entry: [AGENTS.md] # что агент читает первым
44
+ rules: .aqk/rules # где стандарты
45
+ gates: # что обязано пройти — командами, не словами
46
+ lint: "npm run lint"
47
+ secrets-not-in-code: "bash gates/secrets-not-in-code/check.sh ."
48
+ samples: gates # красный и зелёный образец каждой записи
49
+ ratchets: ratchets # реестры долга: список может только укорачиваться
50
+ lessons: incidents # где копятся уроки
51
+ ```
52
+
53
+ Пустое поле — не заглушка, а честный ответ «ступень не пройдена»: `init` кладёт их пустыми,
54
+ а заполняются они по мере того, как появляется чем их заполнить.
55
+
56
+ **Если утверждение нельзя проверить машиной — его в стандарте нет.** Иначе значок означает
57
+ доверие к автору, а не факт.
58
+
59
+ ## Четыре ступени
60
+
61
+ | Уровень | Требуется | Что доказано |
62
+ |---|---|---|
63
+ | **AQK-0** | манифест и точка входа | инструмент знает, что читать |
64
+ | **AQK-1** | правила есть, гейты объявлены командами | проверки исполняются |
65
+ | **AQK-2** | у гейтов красные и зелёные образцы, долг под храповиком | гейт ловит брак и молчит на исправном коде |
66
+ | **AQK-3** | журнал уроков с выводами | шишка не набивается дважды |
67
+
68
+ ```bash
69
+ aqk doctor --run --min 1 # в конвейере: ошибка, если ниже AQK-1 ИЛИ упал хоть один гейт
70
+ ```
71
+
72
+ ## Поставить гейт
73
+
74
+ ```bash
75
+ aqk find "печать в проде" # есть ли уже такой гейт — сверка по намерению
76
+ aqk doctor # что применимо к этому репозиторию и чего нет
77
+ aqk add secrets-not-in-code # копирует проверку и образцы в проект, объявляет в манифесте
78
+ aqk doctor --run # запускает объявленные гейты и показывает результат
79
+ aqk ratchet no-print-in-prod # старое — долг, новое не пускать
80
+ ```
81
+
82
+ Каждый `doctor --run` перезаписывает `.aqk/last-run.md` — короткий отчёт, что из объявленного
83
+ реально сработало и за сколько. Список гейтов в манифесте молчит о том, сколько из них живы
84
+ именно сейчас; отчёт — нет. Файл эфемерный, в `.gitignore` его стоит держать самому.
85
+
86
+ ## Поймал ошибку, которую не поймал сторож
87
+
88
+ ```bash
89
+ aqk why "файл вырос до девяти тысяч строк"
90
+ ```
91
+
92
+ Ответ один из трёх, и выбирает его прогон, а не память: **сторожа не было** · **сторож есть,
93
+ но эту поломку не видит** · **сторож есть и ловит — значит его обошли**. Разница решает, что
94
+ чинить: саму проверку или её место в конвейере. Без прогона эти два случая неразличимы, и
95
+ чинят обычно не тот. При неуверенном совпадении команда не выбирает за тебя, а спрашивает.
96
+
97
+ **Храповик** нужен, когда правило вводят в проект, где старый код ему не соответствует.
98
+ Список нарушений снимается в реестр, гейт разрешает его **укорачивать** и запрещает удлинять.
99
+ Правило действует со дня установки, старый код трогать не надо.
100
+
101
+ `add` **копирует проверку в репозиторий**, а не ссылается на пакет: при установке через `npx`
102
+ пакет временный, и завтра команда в манифесте указывала бы в никуда.
103
+
104
+ ## Каталог обещаний
105
+
106
+ `doctor` смотрит на репозиторий — языки, наличие гейтов — и показывает **только применимое**:
107
+ что уже держит машина, что применимо и не поставлено, что скрыто и почему. Каталог может
108
+ вырасти до сотен записей, конкретный проект по-прежнему увидит десяток.
109
+
110
+ Запись принимается, только если её арбитр краснеет на красном образце, молчит на зелёном и
111
+ назван реальный отказ, который она поймала. Проверяет это машина: `bash tool/selfcheck/gates.sh`.
112
+
113
+ ## Методички одним файлом
114
+
115
+ ```bash
116
+ aqk blob # собирает GOD_AI.md из kit/docs — чтобы разом отдать методички в чат
117
+ ```
118
+
119
+ Файл **собирается, а не хранится**: править надо оригиналы. Копия, которую правят руками, через
120
+ неделю расходится с источником, и непонятно, какая настоящая.
121
+
122
+ ## Принести свой гейт
123
+
124
+ Каталог живёт чужими шишками. Порядок и порог — в [`CONTRIBUTING.md`](CONTRIBUTING.md):
125
+ сверься `aqk find`, заведи заготовку `aqk new`, положи два образца, заполни четыре поля,
126
+ прогони машиной. Отбор делает `tool/selfcheck/gates.sh`, а не рецензент.
127
+
128
+ ## Журнал шишек
129
+
130
+ ```bash
131
+ aqk note "гейт краснел на правильном коде" # запись без вывода не принимается
132
+ ```
133
+
134
+ ## Честно о состоянии
135
+
136
+ Задача целиком — в [`PROJECT.md`](PROJECT.md): что строим, четыре сценария, критерий успеха, что осталось.
137
+
138
+ Версия 1, один автор. Сам комплект держит **AQK-3**: всё объявленное прогоняется конвейером при
139
+ каждом пуше, два реестра долга под храповиком — `node tool/program.mjs doctor --run --min 1`.
140
+ Пока комплектом пользуется один человек, AQK — красивое слово в README. Он начнёт работать,
141
+ когда появится чужой третий проект.
142
+
143
+ **Стандарт нельзя выпустить первым.** Спецификация раньше практики — это тридцать первый
144
+ заброшенный репозиторий с манифестом и нулём пользователей. Порядок обратный:
145
+
146
+ | # | Шаг | Состояние |
147
+ |---|---|---|
148
+ | 1 | живём по этому на своих проектах | ⬜ измерено: у трёх своих проектов манифеста нет, уровень не заведён |
149
+ | 2 | `doctor` считает уровень | ✅ сделано |
150
+ | 3 | сложившееся записано как короткая спецификация | ✅ [`SPEC.md`](SPEC.md) |
151
+ | 4 | третий проект — **чужой** | ❌ первый честный сигнал, его ещё нет |
152
+ | 5 | значок, сайт, разговор с людьми | ❌ только после четвёртого шага |
153
+
154
+ ## Очередь работ
155
+
156
+ Живёт в одном месте — [`PROJECT.md` §9](PROJECT.md). Список здесь не повторяется: два списка через месяц
157
+ расходятся, и непонятно, какой настоящий.
158
+
159
+ Чего нет: второго пользователя; покрытия команд, которые пишут на диск (проверены прогоном на
160
+ чистой папке, но не по отдельности); третьего — чужого — проекта.
161
+
162
+ MIT.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-quality-kit",
3
- "version": "0.2.2",
3
+ "version": "0.2.5",
4
4
  "description": "AQK — Agent Quality Kit: переносимый комплект, приводящий проект в состояние, пригодное для работы агентов. Правила, механические упоры, накопленные уроки. Одна команда, любой инструмент.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,6 +10,7 @@
10
10
  "tool",
11
11
  "kit",
12
12
  "README.md",
13
+ "README.ru.md",
13
14
  "LICENSE"
14
15
  ],
15
16
  "engines": {
@@ -19,16 +20,21 @@
19
20
  "author": "Arsen Askaryants",
20
21
  "repository": {
21
22
  "type": "git",
22
- "url": "https://github.com/arsen-ask-lx/Agent_Quality_Kit.git"
23
+ "url": "git+https://github.com/arsen-ask-lx/Agent_Quality_Kit.git"
23
24
  },
24
25
  "keywords": [
25
26
  "aqk",
26
27
  "agent-quality-kit",
27
28
  "ai-agents",
29
+ "agentic",
28
30
  "quality-gates",
31
+ "code-quality",
32
+ "ci",
29
33
  "claude-code",
30
34
  "codex",
31
- "harness"
35
+ "cursor",
36
+ "harness",
37
+ "repository-standard"
32
38
  ],
33
39
  "knip": {
34
40
  "entry": [
@@ -37,5 +43,9 @@
37
43
  "project": [
38
44
  "tool/**/*.mjs"
39
45
  ]
46
+ },
47
+ "homepage": "https://github.com/arsen-ask-lx/Agent_Quality_Kit#readme",
48
+ "bugs": {
49
+ "url": "https://github.com/arsen-ask-lx/Agent_Quality_Kit/issues"
40
50
  }
41
51
  }
package/tool/lib/core.mjs CHANGED
@@ -33,7 +33,9 @@ const exists = async (p) => access(p, constants.F_OK).then(() => true, () => fal
33
33
  // Как звать программу — зависит от того, как её запустили. Через npx команды `aqk` в системе
34
34
  // нет: подсказка «aqk doctor» отправляет человека в «команда не найдена» на первом же шаге.
35
35
  // Печатаем то, что можно скопировать и выполнить прямо сейчас.
36
- const REPO = "github:arsen-ask-lx/Agent_Quality_Kit";
36
+ // Имя в реестре, а не адрес репозитория: короче, скачивается 230 КБ вместо клона всего
37
+ // репозитория и не заставляет человека ждать три минуты в тишине на первой же команде.
38
+ const REPO = "agent-quality-kit";
37
39
 
38
40
  function selfCmd() {
39
41
  const p = process.argv[1] || "";
@@ -45,7 +45,7 @@ const AGENTS_MD = `# AGENTS.md
45
45
  | \`aqk note "…"\` | пишет урок в общий журнал | процесс или прибор подвели: проверка соврала, правило обошли |
46
46
 
47
47
  Если команды \`aqk\` нет в системе — комплект ставили разово, без установки. Тогда вместо
48
- \`aqk\` пиши \`npx github:arsen-ask-lx/Agent_Quality_Kit\`. Любая команда сама печатает тот
48
+ \`aqk\` пиши \`npx agent-quality-kit\`. Любая команда сама печатает тот
49
49
  вызов, который сработает у тебя.
50
50
 
51
51
  **Три вещи, которые надо понимать, а не запоминать:**
package/tool/program.mjs CHANGED
@@ -9,10 +9,10 @@
9
9
  // цепочке поставок. Инструмент, который ставят одной командой в чужой проект, обязан быть
10
10
  // проверяемым глазами за один присест.
11
11
  //
12
- // npx github:arsen-ask-lx/Agent_Quality_Kit init разложить комплект в текущий проект
13
- // npx github:arsen-ask-lx/Agent_Quality_Kit init --force перезаписать уже существующие файлы
14
- // npx github:arsen-ask-lx/Agent_Quality_Kit note "..." записать урок в общий журнал
15
- // npx github:arsen-ask-lx/Agent_Quality_Kit doctor проверить, что разложено и чего не хватает
12
+ // npx agent-quality-kit init разложить комплект в текущий проект
13
+ // npx agent-quality-kit init --force перезаписать уже существующие файлы
14
+ // npx agent-quality-kit note "..." записать урок в общий журнал
15
+ // npx agent-quality-kit doctor проверить, что разложено и чего не хватает
16
16
 
17
17
  import { realpathSync } from "node:fs";
18
18
  import { fileURLToPath } from "node:url";
@@ -74,7 +74,7 @@ if (IS_MAIN) {
74
74
  ${c.bold(`${SELF} note`)} "…" записать урок в общий журнал шишек
75
75
  ${c.bold(`${SELF} blob`)} собрать методички в один файл GOD_AI.md
76
76
 
77
- ${c.dim("Без установки: npx github:arsen-ask-lx/Agent_Quality_Kit init")}
77
+ ${c.dim("Без установки: npx agent-quality-kit init")}
78
78
  `);
79
79
  process.exit(cmd ? 1 : 0);
80
80
  }