@rt-tools/agent-kit 0.9.1 → 0.11.0
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 +5 -0
- package/assets/agents/conscience.md +58 -0
- package/assets/agents/prose-editor.md +44 -0
- package/assets/agents/strict-teacher.md +59 -0
- package/assets/checks/board.github.mjs +56 -1
- package/assets/checks/check-board.github.mjs +24 -0
- package/assets/checks/check-doc-paths.mjs +4 -15
- package/assets/checks/check-dupes.mjs +5 -6
- package/assets/checks/check-file-size.mjs +6 -20
- package/assets/checks/check-prose-style.mjs +137 -0
- package/assets/checks/check-reuse.mjs +5 -5
- package/assets/checks/check-state-next.mjs +194 -0
- package/assets/checks/check-states.mjs +142 -0
- package/assets/checks/check-styles.mjs +5 -5
- package/assets/checks/check-turn-map.mjs +146 -0
- package/assets/checks/lib-common.mjs +3 -3
- package/assets/checks/rt-kit-checks.config.mjs +85 -1
- package/assets/commands/agent-kit-digest.md +6 -5
- package/assets/defaults/project.sh +108 -6
- package/assets/defaults/turn-map.md +46 -0
- package/assets/docs/GLOSSARY.md +17 -15
- package/assets/hooks/browser-device-id.sh +2 -0
- package/assets/hooks/browser-guard-device-id.sh +11 -1
- package/assets/hooks/browser-guard-no-asking.sh +11 -1
- package/assets/hooks/browser-guard-no-listing.sh +11 -1
- package/assets/hooks/browser-guard-no-other-drivers.sh +9 -1
- package/assets/hooks/browser-guard-require-select.sh +13 -2
- package/assets/hooks/claim-guard.sh +115 -0
- package/assets/hooks/commit-msg.sh +2 -0
- package/assets/hooks/conscience-guard.sh +100 -0
- package/assets/hooks/constitution-index.sh +2 -0
- package/assets/hooks/deny-tail.sh +32 -0
- package/assets/hooks/dev-server-guard.sh +10 -2
- package/assets/hooks/docs-guard.sh +16 -2
- package/assets/hooks/exam-guard.sh +123 -0
- package/assets/hooks/git-guard-delivery-signature.sh +77 -0
- package/assets/hooks/git-guard-delivery.sh +156 -68
- package/assets/hooks/git-guard-main.sh +14 -0
- package/assets/hooks/git-guard-push-tests.sh +51 -2
- package/assets/hooks/glossary-load.sh +2 -0
- package/assets/hooks/grill-gate.sh +14 -0
- package/assets/hooks/handoff-entry-guard.sh +73 -0
- package/assets/hooks/handoff-write.sh +103 -0
- package/assets/hooks/lint-after-edit.sh +2 -0
- package/assets/hooks/observe.sh +2 -0
- package/assets/hooks/postmortem-guard.sh +14 -0
- package/assets/hooks/proposal-guard.sh +14 -0
- package/assets/hooks/prose-style-guard.sh +75 -0
- package/assets/hooks/qa-dataid-guard.sh +14 -1
- package/assets/hooks/rerun-guard.sh +88 -0
- package/assets/hooks/reuse-first-guard.sh +14 -1
- package/assets/hooks/roles.sh +34 -0
- package/assets/hooks/skill-gate-layers.sh +2 -0
- package/assets/hooks/skill-gate-rearm.sh +2 -0
- package/assets/hooks/skill-gate.sh +14 -0
- package/assets/hooks/skill-loaded.sh +2 -0
- package/assets/hooks/sql-guard-parse.sh +2 -0
- package/assets/hooks/sql-guard-request.sh +2 -0
- package/assets/hooks/sql-guard-target.sh +2 -0
- package/assets/hooks/sql-guard-write.sh +4 -1
- package/assets/hooks/sql-guard.sh +14 -1
- package/assets/hooks/task-context-load.sh +2 -0
- package/assets/hooks/task-flow-guard.sh +73 -7
- package/assets/hooks/turn-entry-load.sh +62 -0
- package/assets/hooks/turn-exit-guard.sh +191 -0
- package/assets/hooks/utf8.sh +35 -0
- package/assets/hooks/waiting-turn-guard.sh +14 -0
- package/assets/hooks/window-fill-guard.sh +43 -2
- package/assets/laws/work-conduct.md +29 -0
- package/assets/patterns/cargo-triage-mark.md +119 -0
- package/assets/patterns/task-flow-close.md +29 -8
- package/assets/patterns/task-flow-handoff.md +19 -1
- package/assets/patterns/task-flow-resume.md +36 -4
- package/assets/patterns/task-flow-start.md +56 -6
- package/assets/patterns/turn-entry-map.md +81 -0
- package/assets/rules/cargo-triage.md +126 -0
- package/assets/rules/git-workflow.azure.md +36 -9
- package/assets/rules/git-workflow.github.md +74 -9
- package/assets/rules/git-workflow.gitlab.md +40 -12
- package/assets/rules/task-flow.md +136 -71
- package/assets/rules/testing.md +15 -1
- package/assets/rules/turn-entry.md +93 -0
- package/assets/samples/tasks/_template/plan.md +4 -1
- package/assets/samples/tasks/_template/progress.md +1 -0
- package/assets/skills/agent-kit.md +33 -0
- package/assets/templates/project.sh +16 -0
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +42 -1
- package/bin/agent-kit.js.map +1 -1
- package/lib/cargo-state.d.ts +62 -0
- package/lib/cargo-state.d.ts.map +1 -0
- package/lib/cargo-state.js +118 -0
- package/lib/cargo-state.js.map +1 -0
- package/lib/cargo.d.ts +42 -0
- package/lib/cargo.d.ts.map +1 -1
- package/lib/cargo.js +2 -0
- package/lib/cargo.js.map +1 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +64 -4
- package/lib/commands.js.map +1 -1
- package/lib/config.d.ts +8 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +1 -0
- package/lib/config.js.map +1 -1
- package/lib/observations.d.ts +35 -1
- package/lib/observations.d.ts.map +1 -1
- package/lib/observations.js +14 -2
- package/lib/observations.js.map +1 -1
- package/lib/ship.d.ts +3 -0
- package/lib/ship.d.ts.map +1 -1
- package/lib/ship.js +56 -0
- package/lib/ship.js.map +1 -1
- package/lib/thresholds.d.ts +49 -0
- package/lib/thresholds.d.ts.map +1 -0
- package/lib/thresholds.js +151 -0
- package/lib/thresholds.js.map +1 -0
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.11.0.tgz +0 -0
- package/rt-tools-agent-kit-0.9.1.tgz +0 -0
|
@@ -11,7 +11,7 @@ description: Правило под «Закон о ведении работы»
|
|
|
11
11
|
про ход работы; здесь — чем это названо в этом дереве, где лежит и что из закона у нас не
|
|
12
12
|
проверяется.
|
|
13
13
|
|
|
14
|
-
**Требует:** `hooks/task-flow-guard.sh`, `hooks/task-context-load.sh`, `hooks/grill-gate.sh`, `hooks/window-fill-guard.sh`
|
|
14
|
+
**Требует:** `hooks/task-flow-guard.sh`, `hooks/task-context-load.sh`, `hooks/grill-gate.sh`, `hooks/window-fill-guard.sh`, `hooks/turn-exit-guard.sh`
|
|
15
15
|
|
|
16
16
|
## Как это называется здесь
|
|
17
17
|
|
|
@@ -34,50 +34,71 @@ description: Правило под «Закон о ведении работы»
|
|
|
34
34
|
переносится между репозиториями, раскладка — нет, и путь, названный в правиле, врёт в первом
|
|
35
35
|
же дереве, которое держит код иначе.
|
|
36
36
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
ускоряется от того, что его ждут, — поэтому шаг 11 случается раньше, чем кончатся 10 и 16, а
|
|
75
|
-
шаг 17 вклинивается в работу следующей задачи ровно на один ход. Порядок номеров говорит, что
|
|
76
|
-
за чем следует, а не что чего дожидается.
|
|
77
|
-
|
|
78
|
-
Список показывается владельцу в начале работы, и на нём же отмечается, где стоим: иначе после
|
|
37
|
+
## Состояния работы
|
|
38
|
+
|
|
39
|
+
Единица работы — состояние, а не шаг. У состояния есть вход, обязательное действие и выход, и
|
|
40
|
+
пока действие не сделано, работа стоит в том же состоянии. Список шагов этого не давал: шаг
|
|
41
|
+
кончался, а что делать дальше, выводилось из соседних строк.
|
|
42
|
+
|
|
43
|
+
Состояние объявляется машиночитаемой строкой в разделе «Где стоим» хода работы и
|
|
44
|
+
перезаписывается вместе с ним:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
- **Состояние:** `этап-идёт`
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
| Состояние | Вход в него | Обязательное действие | Ведёт паттерн |
|
|
51
|
+
| ------------------------- | ----------------------------------------------- | ------------------------------------------------------ | ------------------ |
|
|
52
|
+
| `просьба-не-разобрана` | реплика владельца о новой работе | разведка по дереву, затем вопросы | `task-flow-start` |
|
|
53
|
+
| `разбор-закрыт` | ответы владельца лежат на диске | договорённость о продукте либо причина её отсутствия | `task-flow-start` |
|
|
54
|
+
| `договорённость-записана` | драфт лежит или причина названа | завести задачу, ветку и папку | `task-flow-start` |
|
|
55
|
+
| `задача-взята` | задача в колонке работы, ветка по номеру, папка | написать замысел | `task-flow-start` |
|
|
56
|
+
| `замысел-записан` | замысел лежит и после записи не правится | делать первый этап | `task-flow-start` |
|
|
57
|
+
| `этап-идёт` | этап начат | доделать этап и отметить в ходе работы | `task-flow-resume` |
|
|
58
|
+
| `этапы-кончились` | все этапы отмечены | прогнать набор и открыть PR черновиком | `task-flow-close` |
|
|
59
|
+
| `работа-отдана` | PR открыт черновиком | взять следующую задачу | `task-flow-resume` |
|
|
60
|
+
| `разбор-кончился` | прогон зелёный, замечаний нет | влить договорённость, привести тексты, разобрать папку | `task-flow-close` |
|
|
61
|
+
| `папка-разобрана` | папки в ветке нет, запись в архиве есть | снять черновик и попросить влить | `task-flow-close` |
|
|
62
|
+
| `влито` | PR слит человеком | разбор работы правилами и сверка очереди | `task-flow-close` |
|
|
63
|
+
|
|
64
|
+
Ни у одного состояния обязательное действие не звучит как «ждать»: ожидание чужого шага
|
|
65
|
+
состоянием работы не является. Прогон, разбор владельцем и слияние идут без исполнителя, и от
|
|
66
|
+
взгляда быстрее не становятся — поэтому в `работа-отдана` обязательное действие смотрит на
|
|
67
|
+
следующую задачу, а не на открытый PR.
|
|
68
|
+
|
|
69
|
+
Заполнение окна захода состоянием работы тоже не бывает: заход кончается передачей, работа
|
|
70
|
+
остаётся в том состоянии, в каком стояла, а следующий заход читает строку и продолжает с неё.
|
|
71
|
+
Ведёт закрытие захода паттерн `task-flow-handoff`.
|
|
72
|
+
|
|
73
|
+
Перечень показывается владельцу в начале работы, и на нём же отмечается, где стоим: иначе после
|
|
79
74
|
шести вопросов не видно ни того, что будет дальше, ни сколько всего впереди.
|
|
80
75
|
|
|
76
|
+
## Выходы хода
|
|
77
|
+
|
|
78
|
+
Ход кончается четырьмя способами, и других нет:
|
|
79
|
+
|
|
80
|
+
| Выход | Чем подтверждается |
|
|
81
|
+
| -------------------------------------------------- | --------------------------------------------------------------- |
|
|
82
|
+
| вопрос владельцу, ответа на который в правилах нет | вопрос задан, и за тот же ход правила читались |
|
|
83
|
+
| отказ гарда | отказ назван владельцу, обход не искался |
|
|
84
|
+
| заполненное окно там, где сжатия нет | ход работы дописан, передача написана |
|
|
85
|
+
| работа отдана, и следующая начата | PR открыт, и по следующей задаче сделано действие, а не сказано |
|
|
86
|
+
|
|
87
|
+
Всё остальное — продолжение хода, а не его конец. Веха ходом не кончается: ни коммит, ни
|
|
88
|
+
прочитанная договорённость, ни граница «прочитал — сейчас правлю», ни зелёная проверка. Слова
|
|
89
|
+
«иду дальше» и «работаю дальше» владелец читает как совершающееся действие, и писать их вместо
|
|
90
|
+
результата нельзя.
|
|
91
|
+
|
|
92
|
+
Переход из состояния в состояние ходом не кончается тем более: обязательное
|
|
93
|
+
действие сделано, и следующее делается тем же ходом. Граница состояния выглядит законченным
|
|
94
|
+
куском лучше всякой другой вехи — сделанное названо, отчитаться есть чем, — и отчёт встаёт
|
|
95
|
+
ровно туда, где должно было стоять следующее действие. Что делается сразу за обязательным
|
|
96
|
+
действием, называет сам раздел состояния строкой следующего движения.
|
|
97
|
+
|
|
98
|
+
Три способа кончить ход выглядят работой и ею не являются: сводка о чужом шаге, меню при
|
|
99
|
+
назначенном порядке и объявление намерения. Что при этом должно быть верно — ниже, в статьях
|
|
100
|
+
о применении закона.
|
|
101
|
+
|
|
81
102
|
## Ход
|
|
82
103
|
|
|
83
104
|
Ход работы от просьбы владельца до закрытия: где стоит разбор, что требует гард и куда девается
|
|
@@ -113,8 +134,21 @@ flowchart TD
|
|
|
113
134
|
|
|
114
135
|
## Как закон применяется здесь
|
|
115
136
|
|
|
116
|
-
- **Правка кода приложения отбивается, пока
|
|
117
|
-
|
|
137
|
+
- **Правка кода приложения отбивается, пока работа не дошла до состояния, в котором код
|
|
138
|
+
правится.** Гард требует четыре вещи: папку задачи по имени ветки, замысел в ней, объявленное
|
|
139
|
+
в ходе работы состояние и названную в замысле договорённость о продукте.
|
|
140
|
+
- **Гард судит объявленный переход, а не наличие файлов.** Артефакт на диске не говорит, дошла
|
|
141
|
+
ли работа до правки кода: пустой замысел, положенный ради снятия отказа, лежит так же, как
|
|
142
|
+
написанный. Отказ снимает объявленное состояние, и снимают его четыре — `этап-идёт`,
|
|
143
|
+
`этапы-кончились`, `работа-отдана` и `разбор-кончился`: прогон бывает красным, а разбор — с
|
|
144
|
+
замечаниями, и починка идёт в ту же ветку.
|
|
145
|
+
- **Отказ по состоянию называет обязательное действие того состояния, которое объявлено.**
|
|
146
|
+
Исполнитель, которому сказано только «не в том состоянии», перепишет строку состояния вместо
|
|
147
|
+
того, чтобы сделать шаг.
|
|
148
|
+
- **Именем состояния считается только слово из перечня.** Своё слово не говорит ни о входе, ни
|
|
149
|
+
о выходе, ни об обязательном действии, а перечень называет все три.
|
|
150
|
+
- **Состояние судится раньше договорённости и её обхода.** Строка о неизменном поведении
|
|
151
|
+
снимает требование договорённости о продукте, а не требование дойти до правки кода.
|
|
118
152
|
- **Влитая договорённость ветку не запирает.** После вливания директории «предложено» на диске
|
|
119
153
|
нет, а замысел на неё ссылается до конца работы: гард отличает влитое от незаведённого по
|
|
120
154
|
истории ветки и пропускает первое. Иначе последний коммит PR закрывал бы дорогу правкам
|
|
@@ -143,29 +177,50 @@ flowchart TD
|
|
|
143
177
|
Открытый PR при этом читается как приглашение влить — поэтому незаконченная работа идёт
|
|
144
178
|
черновиком, и владельцу не приходится спрашивать, кончилась ли она. Черновик снимается тем
|
|
145
179
|
ходом, которым исполнитель говорит, что решение готово.
|
|
146
|
-
- **Открытый PR остановкой не является.** Отданное на разбор ждёт владельца, а не исполнителя:
|
|
147
|
-
следующая задача берётся тем же движением, которым предыдущая ушла на разбор. Заход,
|
|
148
|
-
закрытый на готовой задаче, стоил владельцу целого захода на то, чтобы вернуть работу в
|
|
149
|
-
движение, — при том что порядок был назначен и лежал записанным в замысле эпика.
|
|
150
|
-
- **Владельцу не предлагается выбор, чем заняться дальше, пока эпик не кончился.** Меню при
|
|
151
|
-
назначенном порядке — это просьба назначить его заново. Если работы в эпике не осталось, так
|
|
152
|
-
и говорится: эпик кончился, — а не «чем займёмся».
|
|
153
180
|
- **Гард замысла — нижняя граница требования, а не его предел.** Он требует папку только под
|
|
154
181
|
правку кода приложения, и работа, которая туда не доходит, проходит мимо него — но папку
|
|
155
182
|
заводит всё равно: статья правила говорит «под любую работу, без исключений». Прочитанный
|
|
156
183
|
как признак, гард становится разрешением работать без замысла везде, куда он не смотрит.
|
|
157
|
-
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
184
|
+
- **Сводка о чужом шаге.** Прогон, разбор владельцем и слияние идут без исполнителя и от взгляда
|
|
185
|
+
быстрее не становятся. Ход, кончившийся такой сводкой, владелец читает как работу: она полна,
|
|
186
|
+
в ней названы номера и состояния, и пустоты за ней не видно. О чужом шаге говорят вместе с
|
|
187
|
+
начатым своим, а не вместо него. За один заход это было нарушено четырежды, и готовая работа
|
|
188
|
+
простояла в невлитом PR почти три часа.
|
|
189
|
+
- **Меню при назначенном порядке.** Выбор, предложенный владельцу, пока эпик не кончился, — это
|
|
190
|
+
просьба назначить порядок заново. Работы в эпике не осталось — так и говорится: эпик
|
|
191
|
+
кончился, — а не «чем займёмся».
|
|
192
|
+
- **Объявление намерения.** «Беру следующую задачу» — не то же самое, что взять её: фраза живёт
|
|
193
|
+
до конца хода, а работа не двигается. Названо может быть только сделанное: номер заведённой
|
|
194
|
+
задачи, имя заведённой ветки, переведённая колонка.
|
|
195
|
+
|
|
196
|
+
- **Прерывание работы владельцем называется вслух.** Пришло задание, останавливающее начатое, —
|
|
197
|
+
исполнитель говорит, что стоит, на чём остановлено и что будет с прежней работой, и только
|
|
198
|
+
потом берётся за новое. Молчание об этом владелец читает как «прежнее кончилось».
|
|
199
|
+
- **Остановка называется отдельной репликой.** Не строкой в конце отчёта: там она тонет —
|
|
200
|
+
владелец читает отчёт как рассказ о сделанном. Называются три вещи: что стоит, чего оно ждёт
|
|
201
|
+
и что владелец может решить.
|
|
202
|
+
- **Выходы хода стережёт страж, а не память исполнителя.** Он читает объявленное состояние
|
|
203
|
+
работы и то, что за ход по ней сделано: правку файла или команду, меняющую дерево. Ход, в
|
|
204
|
+
котором не было ни того ни другого, возвращается исполнителю вместе со следующим шагом из
|
|
205
|
+
хода работы. Отданную и влитую работу страж не судит: она уже дождалась чужого шага.
|
|
206
|
+
- **Этап замысла объявляется закрытым только после того, как его команда проверки прошла.**
|
|
207
|
+
Строка «Чем проверяется» несёт команду обратными кавычками и то, что в её выводе означает
|
|
208
|
+
«сошлось». Страж читает прежний номер этапа из истории ветки и не выпускает ход, в котором
|
|
209
|
+
номер вырос, а команда не запускалась: через заход отмеченное по памяти неотличимо от
|
|
210
|
+
проверенного.
|
|
211
|
+
- **Слово об остановке страж читает у владельца, а не у исполнителя.** Иначе остановку
|
|
212
|
+
объявляет тот, кому она в эту минуту удобна, и запрет держится ровно до первого неудобства.
|
|
213
|
+
- **Утверждение о состоянии дерева стережёт гард утверждения, а не память исполнителя.** Всё,
|
|
214
|
+
что ответ владельцу говорит о дереве, несёт команду и её вывод: сказанное без команды
|
|
215
|
+
утверждением не считается — ни «проверено», ни «снято», ни «готово». Гард читает текст,
|
|
216
|
+
сказанный владельцу за ход, и ищет команду того же хода; у каждого слова назван свой род
|
|
217
|
+
команды, потому что общий признак «команда была» подтверждал бы одно другим. Прошлый ход не
|
|
218
|
+
годится: состояние дерева меняется, и вчерашний вывод о нынешнем молчит. Восемь разборов
|
|
219
|
+
подряд пришлись на этот промах, и каждый раз в правило дописывалась ещё одна статья —
|
|
220
|
+
держит его теперь машина.
|
|
221
|
+
- **Слово-утверждение гард ловит, неверный вывод — нет.** Об образце, судимом по одному его
|
|
222
|
+
файлу, и о пути, которым человек не пойдёт, судить нечем: там нет ни слова, ни команды, с
|
|
223
|
+
которой сверять. Это известная граница гарда, и держат её статьи ниже, а не он.
|
|
169
224
|
- **Ход о чужом шаге стережёт гард ожидания, а не память исполнителя.** Он отбивает завершение
|
|
170
225
|
хода, в котором о чужом шаге сказано, а по следующей задаче не сделано ни одного действия —
|
|
171
226
|
ни заведения задачи, ни ветки, ни папки, ни перевода колонки. Чужой шаг он узнаёт по двум
|
|
@@ -207,15 +262,26 @@ flowchart TD
|
|
|
207
262
|
случился, и ловить раньше нечего. Признание ловится набором образцов, а не пониманием смысла;
|
|
208
263
|
промах, признанный словами вне набора, гард пропускает, и это его известная граница, а не
|
|
209
264
|
обещание.
|
|
265
|
+
- **Заход, начатый с передачи, входит в работу тем же правилом, что и всякий другой.** Передача
|
|
266
|
+
лежит вне дерева, её не читает ни одна проверка, и написана она вчера: всё, что в ней стоит,
|
|
267
|
+
проверяется деревом. Порядок входа — четыре шага в паттерне возвращения; стережёт его гард, а
|
|
268
|
+
не память: порядок, записанный только словами, исполняется, пока о нём помнят.
|
|
210
269
|
- **Состояние незаконченной работы приходит в контекст на запуске сессии.** Замысел и ход
|
|
211
270
|
работы отдаются целиком, разбор просьбы — путём. Ветка вида `<КЛЮЧ>-*` без папки даёт
|
|
212
271
|
предупреждение с готовой командой, но сессию не рвёт.
|
|
213
272
|
- **Сделанное отмечается только в ходе работы.** «Где стоим» перезаписывается каждым заходом,
|
|
214
273
|
а не дописывается: это первое, что читает следующий заход.
|
|
274
|
+
- **Заполненное окно кончает ход только там, где сжатия нет.** Где оно объявлено, окно —
|
|
275
|
+
продолжение хода: заход сжимается и работает дальше, а порог остановки срабатывает лишь тогда,
|
|
276
|
+
когда сжатие не пришло.
|
|
215
277
|
- **Заполнение окна захода стережёт гард, а не память исполнителя.** На первом пороге он
|
|
216
278
|
напоминает выбирать точку остановки, на втором отбивает всё, кроме записи хода работы,
|
|
217
279
|
передачи и команд поставки. Размер окна и оба порога дерево задаёт само; не задавшее размера
|
|
218
280
|
стража не получает.
|
|
281
|
+
- **Порог сжатия контекста дерево задаёт само, и стоит он НИЖЕ порога остановки.** Совпавшие
|
|
282
|
+
пороги согласием не бывают: это гонка, и выигрывает её страж — он стоит на вызове, а сжатие
|
|
283
|
+
приходит между ходами. Расстояние объявляется числом, а не выводится разницей; сведены пороги
|
|
284
|
+
или нет, говорит разбор состояния раскладки.
|
|
219
285
|
- **Заход закрывается передачей, которая лежит вне дерева.** Состояние работы коммитится ходом
|
|
220
286
|
работы, а передача его пересказывает для вставки в новый заход: рабочее дерево, ветка,
|
|
221
287
|
сделанное, следующий шаг и особенности захода. В историю она не едет — иначе рядом с ходом
|
|
@@ -256,13 +322,6 @@ flowchart TD
|
|
|
256
322
|
это заготовка правки чужого дерева, и часть заготовок отпадает при первом же чтении; уехавшая
|
|
257
323
|
без разбора, она становится работой того, кто её не заказывал. Сводка наблюдений уезжает
|
|
258
324
|
всегда: она говорит, чем пользовались и чем нет, и мнением не является.
|
|
259
|
-
- **Ожидание прогона работой не занимают.** Прогон идёт на стороне и быстрее от взгляда на него
|
|
260
|
-
не становится. Пока он идёт, берётся следующая задача, а к прогону возвращаются тем ходом,
|
|
261
|
-
которым читают его конец. Это верно и для разбора владельцем: оба ожидания — не повод стоять.
|
|
262
|
-
- **Остановка, если она всё-таки случилась, называется владельцу отдельной репликой.** Не
|
|
263
|
-
строкой в конце отчёта: там она тонет — владелец читает отчёт как рассказ о сделанном.
|
|
264
|
-
Называются три вещи: что стоит, чего оно ждёт и что владелец может решить — разобрать работу
|
|
265
|
-
первой или сказать, что прогона можно не ждать. Всё остальное идёт после.
|
|
266
325
|
- **Договорённость вливается в спек домена последним коммитом PR.** К этому моменту код
|
|
267
326
|
написан, привязки известны, и в главной ветке директория `proposed/` не появляется вовсе.
|
|
268
327
|
Готовые к вливанию перечисляет `npm run check:specs`.
|
|
@@ -357,6 +416,12 @@ flowchart TD
|
|
|
357
416
|
задаче так ушли две правки подряд: сначала подняли общее число у соседнего узла, потом
|
|
358
417
|
перенесли узел в другое место разметки. Обе владелец отверг, а нужный способ назвал сам.
|
|
359
418
|
Спрашивают до правки, а не показывают замер после.
|
|
419
|
+
- **Путь, предложенный человеку, судится числом его шагов и тем, чем ему для этого надо
|
|
420
|
+
владеть.** Со стороны кода вариант выглядит дешёвым — «меньше путей», «строку запуска не
|
|
421
|
+
трогаем», — а человеку он стоит захода на сервер. Однажды рекомендуемым вариантом так стояла
|
|
422
|
+
выдача токена, за которой владельцу надо было идти по ssh в работающий контейнер; отбивал
|
|
423
|
+
этот вариант он сам. Цена называется со стороны того, кто пойдёт: сколько шагов и что ему для
|
|
424
|
+
них нужно. Пересказ действующего порядка без такой оценки владелец читает как одобрение.
|
|
360
425
|
- **Эпик по теме читается до того, как решается раскладка.** Замысел эпика держит решения,
|
|
361
426
|
которые пережили десяток задач, и разведка по коду их не находит: снятое решение следа в
|
|
362
427
|
дереве не оставляет. Домен, заведённый генератором и снесённый через полчаса, стоял в замысле
|
package/assets/rules/testing.md
CHANGED
|
@@ -113,6 +113,20 @@ flowchart TD
|
|
|
113
113
|
принятое остаётся навсегда, долг накоплен к заведению проверки и только сокращается, — либо
|
|
114
114
|
столько ключей, сколько у записей родов. Причина обязательна: снятая проверка без причины
|
|
115
115
|
через месяц неотличима от недосмотра.
|
|
116
|
+
- **Запись принятого отличается от долга тем, заведена ли на неё работа.** Принятое — то, что
|
|
117
|
+
дерево делить не собирается; долг — то, на что заведена задача, и он только сокращается. Один
|
|
118
|
+
список на оба означал бы, что разбирать нечего: запись без задачи через месяц читается как
|
|
119
|
+
вечная, а запись с задачей — как недосмотр.
|
|
120
|
+
- **У каждой записи стоят своя причина и номер задачи, которой она внесена.** Причина прозой на
|
|
121
|
+
весь список объясняет любую его строку и потому не объясняет ни одной, а запись без номера не
|
|
122
|
+
спросишь ни у кого: тот, кто её внёс, к этому дню не помнит ни повода, ни своего решения.
|
|
123
|
+
Запись без причины или без номера отбивает проверку — и заводится она словом владельца, а не
|
|
124
|
+
решением исполнителя, которому она в эту минуту мешает.
|
|
125
|
+
- **У красного есть назначенное действие, и второй перезапуск в него не входит.** Красное бывает
|
|
126
|
+
двух родов, и в списке прогонов они выглядят одинаково: отказ хостинга на шаге подготовки
|
|
127
|
+
лечится перезапуском, дефект ветки — не лечится им вовсе. Назначенное действие одно: сперва
|
|
128
|
+
журнал этого задания, потом решение. Перезапуск, повторённый до чтения журнала, чинит не
|
|
129
|
+
причину, а её проявление, и в истории выглядит работой.
|
|
116
130
|
- **Строка в список известного не заводится под красную проверку.** Список набран к дню
|
|
117
131
|
заведения проверки и с тех пор только сокращается: дописанная строка гасит сигнал, а не
|
|
118
132
|
причину, и в истории выглядит так же, как починка. Место, где проверка права по букве и не
|
|
@@ -187,7 +201,7 @@ flowchart TD
|
|
|
187
201
|
чего в спеке домена нет и быть не должно: `qa-dataid` элементов, состояния разметки, ловушки
|
|
188
202
|
стенда. Обещанное поведение остаётся сценарием в `scenarios.md`: если списать его во второе
|
|
189
203
|
место, копии разойдутся молча — `npm run check:specs` этого не увидит.
|
|
190
|
-
- `npx nx serve` проверкой не
|
|
204
|
+
- `npx nx serve` проверкой не считается: это шаг из правила `browser-verification`, а не тест.
|
|
191
205
|
- **Кадр, зависящий от загрузки машины, проверяет машину, а не вёрстку.** Ожидание отсчётом
|
|
192
206
|
времени этим и кончается: на свободной машине набор зелен целиком, на занятой падает, и какой
|
|
193
207
|
именно кадр не успел — дело случая. Лечится ожиданием события, а не удлинением отсчёта: шрифты
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: turn-entry
|
|
3
|
+
kind: rule
|
|
4
|
+
law: work-conduct
|
|
5
|
+
description: Правило под «Закон о ведении работы». Брать при правке хука входа в заход, текста карты хода и проверки над ней, а также когда решается, что заход получает в контекст до первой реплики. Называет передачу прошлого захода, карту хода, четыре запуска и отказ в пользу работы. Не брать для самого хода работы — это правило task-flow.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Вход в заход — как это устроено здесь
|
|
9
|
+
|
|
10
|
+
Правило под закон `docs/constitution/work-conduct.md`. Закон говорит, что переданное прошлым
|
|
11
|
+
заходом приходит в новый заход само и что порядок ведения работы приходит вместе с работой;
|
|
12
|
+
здесь — чем это сделано в этом дереве. Сам ход работы — правило `task-flow` под тем же законом:
|
|
13
|
+
там про состояния и их обязательные действия, здесь — про то, как они попадают в заход.
|
|
14
|
+
|
|
15
|
+
## Как это называется здесь
|
|
16
|
+
|
|
17
|
+
| В законе | Здесь |
|
|
18
|
+
| -------------------------- | ----------------------------------------------------------------------------- |
|
|
19
|
+
| вход в заход | то, что хук старта кладёт в контекст до первой реплики |
|
|
20
|
+
| переданное прошлым заходом | файл по имени ветки в каталоге передач; пишет его хук перед сжатием контекста |
|
|
21
|
+
| порядок ведения работы | карта хода — состояния с обязательными действиями и четыре выхода хода |
|
|
22
|
+
| запуск | первый запуск, возобновление, сжатие контекста, очистка |
|
|
23
|
+
|
|
24
|
+
## Где это лежит
|
|
25
|
+
|
|
26
|
+
В этом дереве — таблица в `implementation.md` рядом. Пути живут там, а не здесь: правило
|
|
27
|
+
переносится между репозиториями, раскладка — нет.
|
|
28
|
+
|
|
29
|
+
## Ход
|
|
30
|
+
|
|
31
|
+
Ход подачи: что кладётся в контекст, в каком порядке и что делается с недостающим.
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
flowchart TD
|
|
35
|
+
A[Запуск захода] --> B{Есть передача по имени текущей ветки}
|
|
36
|
+
B -->|Да| C[Передача кладётся в контекст целиком]
|
|
37
|
+
B -->|Нет| D[О передаче не говорится ничего]
|
|
38
|
+
C --> E{Разложен ресурс карты хода}
|
|
39
|
+
D --> E
|
|
40
|
+
E -->|Да| F[Карта кладётся следом: состояния, действия, четыре выхода]
|
|
41
|
+
E -->|Нет| G[О карте не говорится ничего]
|
|
42
|
+
F --> H[Хук выходит нулём: запуск не отбивается ни при каком исходе]
|
|
43
|
+
G --> H
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Как закон применяется здесь
|
|
47
|
+
|
|
48
|
+
- **Передача прошлого захода приходит в контекст тем же запуском, что и состояние работы.**
|
|
49
|
+
Написанная и не прочитанная, она равна ненаписанной: следующий заход о ней не знает и
|
|
50
|
+
начинает с пустого места — с того самого, ради чего её и писали.
|
|
51
|
+
- **Передача берётся по имени текущей ветки.** Передач в каталоге столько, сколько было веток;
|
|
52
|
+
чужая, поданная как своя, описывает работу, которой в этом дереве нет.
|
|
53
|
+
- **Передачи нет — вход об этом молчит.** Ветка, по которой заход ещё не закрывался, это
|
|
54
|
+
обычное начало работы, а не поломка: отказ на ней превращал бы каждый первый заход в разбор
|
|
55
|
+
хука.
|
|
56
|
+
- **Карта хода приходит тем же запуском и лежит своим файлом, а не вынимается из правила.**
|
|
57
|
+
Разобранная на месте из таблицы правила, она ломается молча при первой правке разметки;
|
|
58
|
+
зашитая в хук — расходится с правилом без единой правки.
|
|
59
|
+
- **Карта короче правила, и предел ей назначает проверка дерева.** Этим она и полезна:
|
|
60
|
+
выросшая до правила, она съедает то самое окно, ради которого её кладут в контекст, — и
|
|
61
|
+
заметить это нечем, потому что она продолжает приходить и продолжает быть верной.
|
|
62
|
+
- **Состояние, объявленное правилом и забытое в карте, — расхождение.** Заход получает карту,
|
|
63
|
+
не находит в ней своего состояния и идёт читать правило: карта работает ровно до первого
|
|
64
|
+
нового состояния.
|
|
65
|
+
- **Вход подаётся на всех четырёх запусках, а не только после сжатия.** Заход после обрыва и
|
|
66
|
+
заход после очистки начинают с того же пустого места, и разница между ними исполнителю не
|
|
67
|
+
видна вовсе.
|
|
68
|
+
- **Хук входа запуск не отбивает.** Отказ любой его части — нечитаемый файл, отсутствующий
|
|
69
|
+
ресурс, чужие права — оставляет заход без части входа, но не без захода.
|
|
70
|
+
|
|
71
|
+
## Чего из закона здесь нет
|
|
72
|
+
|
|
73
|
+
Полноту самой передачи не проверяет ничто: хук подаёт то, что лежит, и о том, дописал ли
|
|
74
|
+
исполнитель к черновику своё, судить машине нечем. Держится это паттерном закрытия захода.
|
|
75
|
+
|
|
76
|
+
Не проверяется и то, прочитал ли заход поданное. Вход кладётся в контекст, а что с ним делают
|
|
77
|
+
дальше — свойство хода, а не файла.
|
|
78
|
+
|
|
79
|
+
## Паттерны
|
|
80
|
+
|
|
81
|
+
- `turn-entry-map` — что входит в карту, порядок подачи и живая проба хука.
|
|
82
|
+
- `task-flow-handoff` — закрытие захода: точка остановки и форма передачи; паттерн соседнего
|
|
83
|
+
правила, но читается в паре с этим.
|
|
84
|
+
|
|
85
|
+
## Ловушки
|
|
86
|
+
|
|
87
|
+
- **Хук, подающий пустоту, неотличим от работающего.** Вход, у которого нет ни передачи, ни
|
|
88
|
+
карты, печатает ноль байт и возвращает ноль — ровно так же выглядит хук, который не запустился
|
|
89
|
+
вовсе. Проверяется это не глазами по контексту, а вызовом хука руками на дереве, где обе части
|
|
90
|
+
лежат.
|
|
91
|
+
- **Передача пишется для машины, а не для владельца.** Обращение в ней — «спроси у него, чем
|
|
92
|
+
кончилась проба» — уходит в пустоту: к минуте, когда передачу читают, владельца в разговоре
|
|
93
|
+
ещё нет.
|
|
@@ -32,7 +32,10 @@
|
|
|
32
32
|
|
|
33
33
|
- **Что делается:** <одной фразой>
|
|
34
34
|
- **Признак готовности:** <что должно стать верным>
|
|
35
|
-
- **Чем проверяется:**
|
|
35
|
+
- **Чем проверяется:** `<команда>` — <что в её выводе означает «сошлось»>
|
|
36
|
+
|
|
37
|
+
Команда пишется обратными кавычками: страж выходов хода читает её и не выпускает ход, в котором
|
|
38
|
+
этап объявлен закрытым, а команда не запускалась. Приём, записанный прозой, подтвердить нечем.
|
|
36
39
|
|
|
37
40
|
## Чего эта работа не делает
|
|
38
41
|
|
|
@@ -27,6 +27,7 @@ description: Переносимый слой правил агента — за
|
|
|
27
27
|
| какие признаки единообразия дерево берёт | `checks.json`, ключи `reuse.bundles` и `reuse.signals` |
|
|
28
28
|
| раздел разложенного текста | `.claude/rt-kit/overrides/<идентификатор ресурса>` |
|
|
29
29
|
| что брать, а от чего отказаться | `.claude/rt-kit.json`, ключи `only` и `skip` |
|
|
30
|
+
| какие роли зовутся не обязательно, а руками | `.claude/rt-kit.json`, ключ `rolesOff` |
|
|
30
31
|
| что у дерева есть: хранилище, админка, пакеты | `.claude/rt-kit.json`, ключ `has` |
|
|
31
32
|
| сам механизм — гард, проверка, текст правила | ресурс в пакете |
|
|
32
33
|
|
|
@@ -156,8 +157,40 @@ npx agent-kit propose # отправить груз в приём: сво
|
|
|
156
157
|
- **Свойство, которого пакет не объявлял, роняет раскладку** — что в `has` дерева, что в имени
|
|
157
158
|
ресурса. Объявлены свойства перечнем при пакете, рядом с осями различия.
|
|
158
159
|
|
|
160
|
+
## Выключенная роль
|
|
161
|
+
|
|
162
|
+
Роль, при которой стоит гард, зовётся не по усмотрению исполнителя: гард держит работу, пока
|
|
163
|
+
роль не сказала своё. Дерево, которому такая роль в эту минуту мешает, называет её ключом
|
|
164
|
+
`rolesOff` — именем файла роли без расширения.
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{ "rolesOff": ["strict-teacher"] }
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
- **Выключается обязательность вызова, а не роль.** Файл роли остаётся разложенным, и позвать её
|
|
171
|
+
руками можно в любую минуту. Список читают сами гарды — помощником, который лежит с ними
|
|
172
|
+
рядом; собственного объявления события у него нет, к действиям агента он не подключается.
|
|
173
|
+
- **От отказа ключом `skip` это отличается тем, что ничего не убирает.** Отказ не кладёт файл
|
|
174
|
+
роли вовсе: звать становится некого, а гард при ней остаётся лежать и продолжает отбивать.
|
|
175
|
+
Здесь наоборот — роль на месте, молчит гард.
|
|
176
|
+
- **Настройка, которую не прочитать, роль не выключает.** Не нашлось `jq`, нет настройки, в
|
|
177
|
+
настройке сломан разбор — гард судит, как судил. Обратный выбор гасил бы слой правил молча, и
|
|
178
|
+
заметить это было бы нечем.
|
|
179
|
+
- **Ключ, написанный не списком, ловит раскладка, а не гард.** Гарду виден только список имён:
|
|
180
|
+
строка вместо списка читается им как «роль включена», и роль работает, хотя дерево считает её
|
|
181
|
+
выключенной. Отказывает на этом разбор настройки — первой же раскладкой, называя ключ.
|
|
182
|
+
- **Выключение живёт в настройке дерева, а не в настройке агента.** Строка, вырезанная из
|
|
183
|
+
настроек агента руками, теряется на первой же правке того файла, и вернуть роль будет нечем.
|
|
184
|
+
Здесь оно объявлено в одном месте и видно всякому, кто читает настройку дерева.
|
|
185
|
+
|
|
159
186
|
## Ловушки
|
|
160
187
|
|
|
188
|
+
- **Набор, проверяющий гард, читает настройку того дерева, из которого его запустили.** Помощник
|
|
189
|
+
берёт настройку по каталогу проекта, а его агент выставляет своим — и `cd` в прогонщике этого
|
|
190
|
+
не перебивает. Набор, не заведший своего одноразового дерева, зеленеет от строки в чужой
|
|
191
|
+
настройке: шесть сценариев гарда экзамена прошли ровно так, потому что роль была выключена в
|
|
192
|
+
дереве, где их гоняли. Своё дерево объявляется на каждый сценарий, а не один раз на файл.
|
|
193
|
+
|
|
161
194
|
- **Надстройка замещает раздел целиком, и пакетные пункты в нём приходится держать копией.**
|
|
162
195
|
Дописать в раздел одну статью нечем: слияние идёт по заголовку `## `. Дерево, которому нужен
|
|
163
196
|
один свой пункт, копирует к нему все пакетные — и с этого дня правка любого из них,
|
|
@@ -19,10 +19,26 @@ RT_PROD_DSN='<хост боевого хранилища>'
|
|
|
19
19
|
# Пути, у которых якорь для сквозных тестов не требуется.
|
|
20
20
|
RT_QA_SKIP_RE='<выражение путей>'
|
|
21
21
|
|
|
22
|
+
# Имя клиента хостинга в строке запуска: по нему гард перезапуска узнаёт вызов перезапуска
|
|
23
|
+
# задания. Умолчание пакета — под самый распространённый вид хостинга.
|
|
24
|
+
RT_HOST_CLI='<имя клиента хостинга>'
|
|
25
|
+
|
|
22
26
|
# Команды, которые обязаны пройти перед пушем. По одной на строку; первая упавшая отбивает пуш.
|
|
27
|
+
#
|
|
28
|
+
# Тяжёлый шаг — стенд, снимки витрин, сборка образов — печатается только тогда, когда ветка
|
|
29
|
+
# тронула не только тексты: иначе пуш коммита с одной правленой строкой markdown занимает
|
|
30
|
+
# минуты, и владелец читает его как зависший. Признак даёт `rt_push_docs_only <база>`; при
|
|
31
|
+
# пустой базе он молчит, и гоняется весь набор — той же пустой базой зовёт эту функцию сверка
|
|
32
|
+
# полноты набора, и список она обязана видеть целиком.
|
|
23
33
|
rt_push_checks() {
|
|
24
34
|
rt_push_checks_default
|
|
25
35
|
# printf '%s\n' '<своя проверка>'
|
|
36
|
+
|
|
37
|
+
# Тяжёлые шаги — по составу правки, а не подряд.
|
|
38
|
+
# if [ -n "$1" ] && rt_push_docs_only "$1"; then
|
|
39
|
+
# return 0
|
|
40
|
+
# fi
|
|
41
|
+
# printf '%s\n' '<шаг, поднимающий стенд или собирающий образ>'
|
|
26
42
|
}
|
|
27
43
|
|
|
28
44
|
# Какой документ обязан ехать тем же коммитом, что и этот файл. Печатает образец пути или молчит.
|
package/bin/agent-kit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-kit.d.ts","sourceRoot":"","sources":["../../../projects/agent-kit/src/bin/agent-kit.ts"],"names":[],"mappings":";AAeA,OAAO,EAAqC,iBAAiB,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-kit.d.ts","sourceRoot":"","sources":["../../../projects/agent-kit/src/bin/agent-kit.ts"],"names":[],"mappings":";AAeA,OAAO,EAAqC,iBAAiB,EAAqB,MAAM,oBAAoB,CAAC;AA4V7G,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAU9E"}
|