@rt-tools/agent-kit 0.11.0 → 0.13.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/assets/checks/board-runs.github.mjs +87 -0
- package/assets/checks/board.github.mjs +0 -40
- package/assets/checks/check-board.github.mjs +39 -8
- package/assets/checks/check-file-size.mjs +19 -4
- package/assets/checks/check-schema-drift.mjs +28 -5
- package/assets/checks/check-state-next.mjs +10 -2
- package/assets/checks/rt-kit-checks.config.mjs +28 -2
- package/assets/commands/feedback.md +8 -0
- package/assets/defaults/project.sh +59 -6
- package/assets/defaults/turn-map.md +8 -6
- package/assets/hooks/browser-guard-device-id.sh +3 -1
- package/assets/hooks/browser-guard-no-asking.sh +3 -1
- package/assets/hooks/browser-guard-no-other-drivers.sh +6 -4
- package/assets/hooks/browser-guard-require-select.sh +4 -2
- package/assets/hooks/claim-guard.sh +3 -1
- package/assets/hooks/conscience-guard.sh +3 -1
- package/assets/hooks/dev-server-guard.sh +6 -4
- package/assets/hooks/dispatch.sh +69 -0
- package/assets/hooks/docs-guard.sh +6 -4
- package/assets/hooks/exam-guard.sh +5 -3
- package/assets/hooks/git-guard-delivery-folder.sh +99 -0
- package/assets/hooks/git-guard-delivery-signature.sh +10 -4
- package/assets/hooks/git-guard-delivery.sh +58 -74
- package/assets/hooks/git-guard-main.sh +6 -4
- package/assets/hooks/git-guard-push-tests.sh +8 -6
- package/assets/hooks/grill-gate.sh +4 -2
- package/assets/hooks/handoff-entry-guard.sh +4 -2
- package/assets/hooks/handoff-write.sh +27 -6
- package/assets/hooks/hook-input.sh +77 -0
- package/assets/hooks/lint-after-edit.sh +5 -3
- package/assets/hooks/override-write-guard.sh +107 -0
- package/assets/hooks/postmortem-guard.sh +3 -1
- package/assets/hooks/proposal-guard.sh +3 -1
- package/assets/hooks/prose-style-guard.sh +5 -3
- package/assets/hooks/qa-dataid-guard.sh +4 -2
- package/assets/hooks/rerun-guard.sh +6 -4
- package/assets/hooks/reuse-first-guard.sh +5 -3
- package/assets/hooks/rule-article.sh +99 -0
- package/assets/hooks/rule-source-guard.sh +126 -0
- package/assets/hooks/skill-gate-rearm.sh +3 -1
- package/assets/hooks/skill-gate.sh +23 -2
- package/assets/hooks/skill-loaded.sh +3 -1
- package/assets/hooks/sql-guard-request.sh +2 -1
- package/assets/hooks/sql-guard.sh +4 -2
- package/assets/hooks/task-flow-guard.sh +24 -4
- package/assets/hooks/turn-exit-guard.sh +59 -17
- package/assets/hooks/waiting-turn-guard.sh +3 -1
- package/assets/hooks/window-fill-guard.sh +6 -4
- package/assets/laws/work-conduct.md +5 -9
- package/assets/patterns/dependencies-upgrade.md +1 -1
- package/assets/patterns/doc-style-write.md +3 -3
- package/assets/patterns/git-workflow-commit.azure.md +2 -202
- package/assets/patterns/git-workflow-commit.github.md +2 -258
- package/assets/patterns/git-workflow-commit.gitlab.md +1 -217
- package/assets/patterns/git-workflow-docker.md +3 -3
- package/assets/patterns/git-workflow-merge.md +3 -2
- package/assets/patterns/git-workflow-migration.md +3 -3
- package/assets/patterns/git-workflow-pr.azure.md +224 -0
- package/assets/patterns/git-workflow-pr.github.md +280 -0
- package/assets/patterns/git-workflow-pr.gitlab.md +240 -0
- package/assets/patterns/git-workflow-restart.md +3 -3
- package/assets/patterns/git-workflow-secrets.md +3 -3
- package/assets/patterns/task-flow-archive.md +195 -0
- package/assets/patterns/task-flow-close.md +72 -240
- package/assets/patterns/task-flow-handoff.md +4 -4
- package/assets/patterns/task-flow-resume.md +5 -3
- package/assets/pitfalls/agent-kit.md +80 -0
- package/assets/pitfalls/doc-style.md +80 -0
- package/assets/pitfalls/git-workflow.azure.md +50 -0
- package/assets/pitfalls/git-workflow.github.md +78 -0
- package/assets/pitfalls/git-workflow.gitlab.md +49 -0
- package/assets/pitfalls/spec-driven.md +36 -0
- package/assets/pitfalls/styling-bem.md +45 -0
- package/assets/pitfalls/task-flow.md +62 -0
- package/assets/pitfalls/testing.md +70 -0
- package/assets/rules/deploy-flow.azure.md +114 -0
- package/assets/rules/deploy-flow.github.md +122 -0
- package/assets/rules/deploy-flow.gitlab.md +116 -0
- package/assets/rules/doc-style.md +25 -76
- package/assets/rules/git-workflow.azure.md +6 -92
- package/assets/rules/git-workflow.github.md +20 -128
- package/assets/rules/git-workflow.gitlab.md +6 -93
- package/assets/rules/spec-driven.md +39 -30
- package/assets/rules/styling-bem.md +20 -39
- package/assets/rules/task-flow.md +56 -222
- package/assets/rules/testing.md +3 -64
- package/assets/rules/turn-conduct.md +210 -0
- package/assets/rules/typescript-conventions.md +15 -0
- package/assets/skills/agent-kit.md +67 -89
- package/assets/templates/pitfalls.md +10 -0
- package/assets/templates/proposal.md +16 -1
- package/assets/templates/rule.md +5 -3
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +1 -42
- package/bin/agent-kit.js.map +1 -1
- package/lib/assets.d.ts.map +1 -1
- package/lib/assets.js +6 -1
- package/lib/assets.js.map +1 -1
- package/lib/cascade.d.ts.map +1 -1
- package/lib/cascade.js +19 -1
- package/lib/cascade.js.map +1 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +1 -0
- package/lib/commands.js.map +1 -1
- package/lib/config.d.ts +16 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +8 -0
- package/lib/config.js.map +1 -1
- package/lib/hooks-map.d.ts +13 -0
- package/lib/hooks-map.d.ts.map +1 -1
- package/lib/hooks-map.js +33 -1
- package/lib/hooks-map.js.map +1 -1
- package/lib/proposals.d.ts +5 -1
- package/lib/proposals.d.ts.map +1 -1
- package/lib/proposals.js +74 -5
- package/lib/proposals.js.map +1 -1
- package/lib/ship.d.ts +1 -2
- package/lib/ship.d.ts.map +1 -1
- package/lib/ship.js +0 -54
- package/lib/ship.js.map +1 -1
- package/lib/shipment.d.ts.map +1 -1
- package/lib/shipment.fixture.d.ts +39 -0
- package/lib/shipment.fixture.d.ts.map +1 -0
- package/lib/shipment.fixture.js +99 -0
- package/lib/shipment.fixture.js.map +1 -0
- package/lib/shipment.js +59 -7
- package/lib/shipment.js.map +1 -1
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.13.0.tgz +0 -0
- package/assets/commands/agent-kit-digest.md +0 -89
- package/assets/commands/rules-review.md +0 -98
- package/assets/patterns/cargo-triage-mark.md +0 -119
- package/assets/rules/cargo-triage.md +0 -126
- package/lib/cargo-state.d.ts +0 -62
- package/lib/cargo-state.d.ts.map +0 -1
- package/lib/cargo-state.js +0 -118
- package/lib/cargo-state.js.map +0 -1
- package/rt-tools-agent-kit-0.11.0.tgz +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: task-flow-close
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: task-flow
|
|
5
|
-
description: Паттерн правила task-flow. Брать при
|
|
5
|
+
description: Паттерн правила task-flow. Брать при доведении работы до готовности — вливание договорённости в спек домена, приведение текстов домена к сделанному, открытие заявки черновиком и снятие черновика. Не брать для разбора папки задачи и разбора работы правилами — это паттерн task-flow-archive; не брать для хода работы — это паттерн task-flow-resume.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Закрытие работы
|
|
@@ -12,103 +12,19 @@ description: Паттерн правила task-flow. Брать при закр
|
|
|
12
12
|
|
|
13
13
|
## Когда брать
|
|
14
14
|
|
|
15
|
-
- Этапы замысла закрыты,
|
|
15
|
+
- Этапы замысла закрыты, набор гейта прогнан целиком.
|
|
16
16
|
- `npm run check:specs` перечислил договорённость в разделе «Пора вливать».
|
|
17
|
+
- Тексты домена приводятся к тому, что работа сделала.
|
|
18
|
+
- Папка задачи разобрана, и заявка открывается черновиком.
|
|
19
|
+
- Прогон на вершине зелёный, и с заявки снимается черновик.
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
работа доводится до готовности и черновик снимается.
|
|
21
|
+
Разбор самой папки сюда не относится — это паттерн `task-flow-archive`. Он стоит между
|
|
22
|
+
приведением текстов и открытием заявки: заявка открывается уже за убранной работой.
|
|
21
23
|
|
|
22
|
-
## Состояние `этапы-кончились`:
|
|
24
|
+
## Состояние `этапы-кончились`: договорённость вливается в спек домена
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
**Заход, открывший PR, называет оставшийся шаг в двух местах — разделом в теле PR и словами
|
|
28
|
-
владельцу:** после одобрения ветка получает ещё один коммит — разбор папки, — и только потом
|
|
29
|
-
вливается. Порядок этот записан здесь, а читает его исполнитель; вливает же владелец, и
|
|
30
|
-
молчание он читает как «работа кончена» — видит зелёный PR и мержит его тем же ходом. Промах
|
|
31
|
-
случается ровно в шов между двумя ходами, и стоит он отдельной задачи: после слияния папку
|
|
32
|
-
разбирать уже некому.
|
|
33
|
-
|
|
34
|
-
### Два сообщения владельцу, и между ними — прогон
|
|
35
|
-
|
|
36
|
-
Оба обязательны, и порядок между ними один. Ни одно не заменяется другим: первое говорит, что
|
|
37
|
-
работа отдана и чего она ждёт, второе — что она готова.
|
|
38
|
-
|
|
39
|
-
Сразу после открытия PR:
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
PR #<номер> открыт черновиком. Жду прогона: пока он идёт, о работе известно только то, что
|
|
43
|
-
она запушена. Как закончится — разберу папку задачи последним коммитом, сниму черновик и
|
|
44
|
-
попрошу тебя влить. Следующая задача уже взята: #<номер>, ветка <имя ветки>.
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Последняя строка называет взятое, а не намерение взять, и это не оборот речи. Образец, который
|
|
48
|
-
кончается обещанием, исполняется как обещание: заход произносит последнюю строку и на этом
|
|
49
|
-
кончает ход — сообщение при этом выглядит полным, и пустоты за ним не видно ни владельцу, ни
|
|
50
|
-
самому заходу. Образец, который кончается номером заведённой ветки, так исполнить нельзя: пока
|
|
51
|
-
ветки нет, строку писать нечем. Разбор — `2026-08-16-next-task-said-not-taken.md`.
|
|
52
|
-
|
|
53
|
-
Прогон зелёный, папка разобрана и запушена, черновик снят:
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
PR #<номер> готов к слиянию: прогон зелёный, папка задачи разобрана, за работой убрано,
|
|
57
|
-
черновик снят. Влей его, пожалуйста.
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Черновик снимается перед вторым сообщением, а не после него: владелец, прочитав просьбу
|
|
61
|
-
влить, идёт нажимать кнопку — у черновика она заблокирована, и ход возвращается к исполнителю
|
|
62
|
-
ни за чем.
|
|
63
|
-
|
|
64
|
-
Прогон красный — сообщение то же по форме, но говорит о красном и о том, что с ним делается;
|
|
65
|
-
просьбы влить в нём нет. Просьба звучит один раз и только тогда, когда работа готова целиком:
|
|
66
|
-
сказанная заранее, она перестаёт что-либо значить, и владелец возвращается к прежнему —
|
|
67
|
-
вливать по зелёной странице.
|
|
68
|
-
|
|
69
|
-
Между двумя сообщениями исполнитель не ждёт: работа отдана на разбор, и тем же движением
|
|
70
|
-
берётся следующая задача. Возвращается он к PR тем ходом, которым читает конец прогона.
|
|
71
|
-
|
|
72
|
-
### Оставшийся шаг стоит разделом в теле PR
|
|
73
|
-
|
|
74
|
-
Сказанного вслух мало, и одним этим требование не держится. Реплика живёт до следующей реплики,
|
|
75
|
-
а решение о слиянии принимается на странице PR — там переписки нет вовсе. Поэтому оставшийся
|
|
76
|
-
шаг пишется дважды: разделом в теле PR и словами владельцу. Одно другого не заменяет — тело
|
|
77
|
-
пишется один раз и лежит у самой кнопки, разговор идёт дальше и уносит сказанное с собой.
|
|
78
|
-
|
|
79
|
-
Раздел стоит последним и говорит ровно одно — что случится с веткой после одобрения:
|
|
80
|
-
|
|
81
|
-
```markdown
|
|
82
|
-
## Оставшийся шаг
|
|
83
|
-
|
|
84
|
-
После одобрения ветка получает ещё один коммит — разбор папки задачи, — и только потом
|
|
85
|
-
вливается. До этого коммита вливать рано: папка уедет в главную ветку неразобранной.
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Разобрана папка — раздел переписывается тем же вызовом, которым правится тело:
|
|
89
|
-
|
|
90
|
-
```markdown
|
|
91
|
-
## Оставшийся шаг
|
|
92
|
-
|
|
93
|
-
Не осталось: папка задачи разобрана коммитом `<sha>`, черновик снят. Можно вливать.
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Пустым раздел не оставляется и не удаляется вовсе: отсутствие раздела и «шагов не осталось»
|
|
97
|
-
читаются одинаково, а значат разное. Образец тела PR целиком — в паттерне заведения коммита
|
|
98
|
-
и PR, если дерево его разложило.
|
|
99
|
-
|
|
100
|
-
Проверить это машиной нечем, и проверки не будет: тело PR не читает ни одна сверка, а хостинг
|
|
101
|
-
не спрашивает ни о чём, кроме заголовка. Требование держится тем же, чем и слова вслух, — тем,
|
|
102
|
-
кто пишет тело. Разница между ними одна, и она вся: реплику владелец прочитает, только если
|
|
103
|
-
вернётся в переписку, а раздел он видит там, куда смотрит, нажимая кнопку.
|
|
104
|
-
|
|
105
|
-
**Следующее движение:** тем же ходом берётся следующая задача эпика, а разбор закрытой работы
|
|
106
|
-
уходит в фон. Прогон и владелец идут без исполнителя, и ждать их состоянием работы не бывает.
|
|
107
|
-
|
|
108
|
-
## Состояние `разбор-кончился`: договорённость вливается в спек домена
|
|
109
|
-
|
|
110
|
-
Последним коммитом PR, до слияния. Код к этому моменту написан, поэтому привязки
|
|
111
|
-
`файл:символ` известны — правило въезжает в спек домена сразу проверяемым.
|
|
26
|
+
Одним из последних коммитов ветки, до открытия заявки. Код к этому моменту написан, поэтому
|
|
27
|
+
привязки `файл:символ` известны — правило въезжает в спек домена сразу проверяемым.
|
|
112
28
|
|
|
113
29
|
```bash
|
|
114
30
|
npm run check:specs # раздел «Пора вливать» называет готовые директории
|
|
@@ -137,7 +53,7 @@ npm run check:specs # после вливания: привязки на ме
|
|
|
137
53
|
**Следующее движение:** за влитой договорённостью тем же ходом идут тексты домена — правила,
|
|
138
54
|
паттерны и разделы, которые работа задела.
|
|
139
55
|
|
|
140
|
-
## Состояние
|
|
56
|
+
## Состояние `этапы-кончились`: тексты домена приводятся к сделанному
|
|
141
57
|
|
|
142
58
|
В спек уезжает только то, что записали до кода. Остальные тексты — правила, паттерны, законы
|
|
143
59
|
приложения — после правки никто не перечитывает, и они продолжают описывать старое дерево.
|
|
@@ -176,163 +92,100 @@ grep -rn -A3 "Чего из закона здесь нет" <каталог пр
|
|
|
176
92
|
договорённость, только про это приложение.
|
|
177
93
|
|
|
178
94
|
Что сделали на этом шаге, пишется в тело PR: что перечитали, что изменили, а если ничего
|
|
179
|
-
не изменили — почему. Форма раздела — паттерн `git-workflow-
|
|
95
|
+
не изменили — почему. Форма раздела — паттерн `git-workflow-pr`.
|
|
180
96
|
|
|
181
97
|
**Следующее движение:** приведённые тексты коммитятся, и тем же ходом разбирается папка
|
|
182
|
-
задачи — последним коммитом
|
|
98
|
+
задачи — последним коммитом ветки, паттерн `task-flow-archive`.
|
|
183
99
|
|
|
184
|
-
## Состояние
|
|
100
|
+
## Состояние `папка-разобрана`: работа отдаётся заявкой
|
|
185
101
|
|
|
186
|
-
|
|
102
|
+
Папка разобрана и запушена, за работой убрано — заявка открывается черновиком. С этой минуты
|
|
103
|
+
работа ждёт владельца, а не машину, и заход на этом не кончается: следующая задача берётся тем
|
|
104
|
+
же движением, паттерн `task-flow-resume`.
|
|
187
105
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
слое правил. Закон при этом в ветке не правится — его статья приносится владельцу текстом.
|
|
106
|
+
Состояния на диске уже нет — ход работы уехал вместе с папкой. Это цена того, что уборка стоит
|
|
107
|
+
до заявки: хвост из четырёх шагов — открыть заявку, дождаться прогона, снять черновик, попросить
|
|
108
|
+
влить — держится этим паттерном, а не строкой в файле. Гард признаёт работу отданной по истории
|
|
109
|
+
ветки: папка, снятая её коммитом, и есть признак.
|
|
193
110
|
|
|
194
|
-
|
|
195
|
-
называет для каждого перенесённого решения, куда оно ушло: иначе решение, ставшее правилом, и
|
|
196
|
-
решение, потерянное при переносе, выглядят одинаково — записью, на которую никто не ссылается.
|
|
197
|
-
|
|
198
|
-
**Третьим удаляется остальное.**
|
|
199
|
-
|
|
200
|
-
Порядок именно такой: начав с переезда, исполнитель увозит вместе с ним и действующее — под
|
|
201
|
-
конец работы это дешевле, чем разбирать.
|
|
202
|
-
|
|
203
|
-
Целиком в архив не переносится: `docs/archive/` — место для записей о состоявшемся, которые
|
|
204
|
-
кто-то читает, а не свалка ходов работы. Таблица ниже говорит о том, что осталось после
|
|
205
|
-
первого отбора.
|
|
111
|
+
### Два сообщения владельцу, и между ними — прогон
|
|
206
112
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
| `grill.md` | в `docs/archive/` — ответы владельца невосстановимы, и это единственная запись о том, почему задача поставлена так |
|
|
210
|
-
| `progress.md` | в `docs/archive/`, если в нём есть решения по ходу с причинами; иначе удаляется |
|
|
211
|
-
| `plan.md` | удаляется — после выкатки на его вопрос отвечает код, а на «как работает» отвечает спек домена |
|
|
212
|
-
| находки разбора | переезжают к замыслу эпика — их читает владелец, когда эпик кончится; работа вне эпика показывает их сразу |
|
|
113
|
+
Оба обязательны, и порядок между ними один. Ни одно не заменяется другим: первое говорит, что
|
|
114
|
+
работа отдана и чего она ждёт, второе — что она готова.
|
|
213
115
|
|
|
214
|
-
|
|
116
|
+
Сразу после открытия заявки:
|
|
215
117
|
|
|
216
|
-
```bash
|
|
217
|
-
cat docs/tasks/<КЛЮЧ>-<номер>-<slug>/grill.md > docs/archive/<ЧТО_РЕШАЛИ>.md
|
|
218
|
-
rm -r docs/tasks/<КЛЮЧ>-<номер>-<slug>
|
|
219
118
|
```
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
### Работа, разбирающая чужую папку, разбирает две
|
|
225
|
-
|
|
226
|
-
Своя папка у такой работы есть — она заводится наравне со всеми, исключения из этого нет. Обе
|
|
227
|
-
снимаются последним коммитом, и порядок между ними один: сперва чужая, потом своя. Начав со
|
|
228
|
-
своей, исполнитель теряет замысел на диске, а он ещё нужен — гард отбивает правку без него, а
|
|
229
|
-
правка по замечаниям разбора идёт в ту же ветку.
|
|
230
|
-
|
|
231
|
-
```bash
|
|
232
|
-
cat docs/tasks/<чужая>/grill.md > docs/archive/<ЧТО_РЕШАЛИ_ТАМ>.md
|
|
233
|
-
rm -r docs/tasks/<чужая>
|
|
234
|
-
cat docs/tasks/<своя>/grill.md > docs/archive/<ЧТО_РЕШАЛИ_ЗДЕСЬ>.md
|
|
235
|
-
rm -r docs/tasks/<своя>
|
|
119
|
+
PR #<номер> открыт черновиком, папка задачи уже разобрана — за работой убрано. Жду прогона:
|
|
120
|
+
пока он идёт, о работе известно только то, что она запушена. Как закончится — сниму черновик и
|
|
121
|
+
попрошу тебя влить. Следующая задача уже взята: #<номер>, ветка <имя ветки>.
|
|
236
122
|
```
|
|
237
123
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
124
|
+
Последняя строка называет взятое, а не намерение взять, и это не оборот речи. Образец, который
|
|
125
|
+
кончается обещанием, исполняется как обещание: заход произносит последнюю строку и на этом
|
|
126
|
+
кончает ход — сообщение при этом выглядит полным, и пустоты за ним не видно ни владельцу, ни
|
|
127
|
+
самому заходу. Образец, который кончается номером заведённой ветки, так исполнить нельзя: пока
|
|
128
|
+
ветки нет, строку писать нечем. Разбор — `2026-08-16-next-task-said-not-taken.md`.
|
|
243
129
|
|
|
244
|
-
|
|
130
|
+
Прогон зелёный, черновик снят:
|
|
245
131
|
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
npm run check:specs # договорённость влита, привязки на месте
|
|
249
|
-
npm run check:docs # пути, названные в текстах, существуют
|
|
132
|
+
```
|
|
133
|
+
PR #<номер> готов к слиянию: прогон зелёный, черновик снят. Влей его, пожалуйста.
|
|
250
134
|
```
|
|
251
135
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
## Состояние `влито`: работа разбирается правилами — фоном, следом за PR
|
|
256
|
-
|
|
257
|
-
Шаг о слое правил, а не о продукте: что за эту работу грузилось, что помогло, чего не хватило и
|
|
258
|
-
где текст правила разошёлся с деревом. Знает это только тот заход, который работу вёл, — через
|
|
259
|
-
сутки не знает никто.
|
|
260
|
-
|
|
261
|
-
Ведёт разбор роль разбора закрытой задачи, если дерево её разложило; не разложившее ведёт его
|
|
262
|
-
само, теми же вопросами. Файлов роль не правит — приносит готовые формулировки, а вставлять их
|
|
263
|
-
решает владелец.
|
|
136
|
+
Черновик снимается перед вторым сообщением, а не после него: владелец, прочитав просьбу
|
|
137
|
+
влить, идёт нажимать кнопку — у черновика она заблокирована, и ход возвращается к исполнителю
|
|
138
|
+
ни за чем.
|
|
264
139
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
140
|
+
Прогон красный — сообщение то же по форме, но говорит о красном и о том, что с ним делается;
|
|
141
|
+
просьбы влить в нём нет. Просьба звучит один раз и только тогда, когда работа готова целиком:
|
|
142
|
+
сказанная заранее, она перестаёт что-либо значить, и владелец возвращается к прежнему —
|
|
143
|
+
вливать по зелёной странице.
|
|
268
144
|
|
|
269
|
-
|
|
145
|
+
Между двумя сообщениями исполнитель не ждёт: работа отдана на разбор, и тем же движением
|
|
146
|
+
берётся следующая задача. Возвращается он к заявке тем ходом, которым читает конец прогона.
|
|
270
147
|
|
|
271
|
-
|
|
272
|
-
что грузилось и что каждое правило дало, на какие грабли окружения наткнулись. Собранная
|
|
273
|
-
через две задачи, она пересказывает историю ветки вместо того, что было на самом деле.
|
|
274
|
-
2. **Роль уходит в фон** — инструментом запуска роли, с путём к списку загруженного и сводкой
|
|
275
|
-
целиком. Ход продолжается следующей задачей.
|
|
276
|
-
3. **Вернувшиеся находки принимают одним ходом** — записать и вернуться к прежнему. Разбор,
|
|
277
|
-
отложенный «до удобного момента», не случается вовсе: заход кончается раньше.
|
|
148
|
+
### Состояние работы стоит разделом в теле заявки
|
|
278
149
|
|
|
279
|
-
|
|
280
|
-
|
|
150
|
+
Сказанного вслух мало, и одним этим требование не держится. Реплика живёт до следующей реплики,
|
|
151
|
+
а решение о слиянии принимается на странице заявки — там переписки нет вовсе. Раздел стоит
|
|
152
|
+
последним и говорит ровно одно: осталось ли что-то до слияния.
|
|
281
153
|
|
|
282
|
-
|
|
154
|
+
```markdown
|
|
155
|
+
## Оставшийся шаг
|
|
283
156
|
|
|
284
|
-
|
|
285
|
-
|
|
157
|
+
Папка задачи разобрана коммитом `<sha>` — за работой убрано. Осталось дождаться прогона и снять
|
|
158
|
+
черновик; до этого кнопка слияния заблокирована хостингом.
|
|
159
|
+
```
|
|
286
160
|
|
|
287
|
-
|
|
288
|
-
разом, когда эпик кончился. Поэтому при разборе папки файл находок не удаляется вместе
|
|
289
|
-
с остальным, а **переезжает к замыслу эпика**: там его найдут и после того, как ветка въехала.
|
|
290
|
-
Работа вне эпика показывает находки владельцу сразу, тем же ходом.
|
|
161
|
+
Черновик снят — раздел переписывается тем же вызовом, которым правится тело:
|
|
291
162
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
это заготовка правки чужого дерева, и часть заготовок отпадает при первом же чтении. Уехавшая
|
|
295
|
-
без разбора, она становится работой того, кто её не заказывал.
|
|
163
|
+
```markdown
|
|
164
|
+
## Оставшийся шаг
|
|
296
165
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
скил слоя правил, если дерево его разложило.
|
|
166
|
+
Не осталось: прогон зелёный, черновик снят. Можно вливать.
|
|
167
|
+
```
|
|
300
168
|
|
|
301
|
-
|
|
169
|
+
Пустым раздел не оставляется и не удаляется вовсе: отсутствие раздела и «шагов не осталось»
|
|
170
|
+
читаются одинаково, а значат разное. Образец тела заявки целиком — в паттерне заведения коммита
|
|
171
|
+
и заявки, если дерево его разложило.
|
|
302
172
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
| надстройка над разложенным | то, что здесь звучит иначе, чем в пакете |
|
|
173
|
+
Проверить это машиной нечем, и проверки не будет: тело заявки не читает ни одна сверка, а
|
|
174
|
+
хостинг не спрашивает ни о чём, кроме заголовка. Требование держится тем же, чем и слова
|
|
175
|
+
вслух, — тем, кто пишет тело. Разница между ними одна, и она вся: реплику владелец прочитает,
|
|
176
|
+
только если вернётся в переписку, а раздел он видит там, куда смотрит, нажимая кнопку.
|
|
308
177
|
|
|
309
|
-
|
|
310
|
-
в одном месте, оставаясь неизвестным всем остальным.
|
|
178
|
+
### Правка по замечаниям идёт без замысла на диске
|
|
311
179
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
дереве неотличимо от отправленного.
|
|
180
|
+
Разбор вернул замечания или прогон покраснел — чинится это в той же ветке. Замысла там больше
|
|
181
|
+
нет, и собирать папку заново не надо: гард хода работы пропускает правку по признаку из истории
|
|
182
|
+
ветки. Что именно чинится, берётся из замечания, а не из замысла.
|
|
316
183
|
|
|
317
|
-
**Следующее движение:**
|
|
318
|
-
|
|
184
|
+
**Следующее движение:** прогон зелёный и замечаний нет — черновик снимается, и владельцу
|
|
185
|
+
говорится, что работа готова.
|
|
319
186
|
|
|
320
187
|
## Ловушки
|
|
321
188
|
|
|
322
|
-
- **Папку разбирают до слияния — потом о ней уже никто не вспомнит.** Сверка очереди считает
|
|
323
|
-
задачу закрытой по слиянию: до него папка среди текущих законна, а после за неё никто не
|
|
324
|
-
отвечает — работа перешла к следующей задаче, и находка достанется чужому заходу. Три раза
|
|
325
|
-
подряд папка закрытой задачи так и уехала в главную ветку, в последний раз их набралось
|
|
326
|
-
пять. Теперь это держит гард поставки: слияние отбивается, пока папка лежит в ветке.
|
|
327
|
-
- **Разбирают последним коммитом, а не перед открытием PR.** Пока идёт ревью, замысел
|
|
328
|
-
нужен на диске: без него правку по замечаниям не пропустит гард хода работы. Порядок такой:
|
|
329
|
-
правки по ревью, потом разбор папки, потом слияние.
|
|
330
|
-
- **Разбор папки идёт последним, после того как гейт пуша прошёл целиком.** Гард хода работы
|
|
331
|
-
не пускает правку кода приложения без замысла на диске, а после разбора замысла нет: чужое
|
|
332
|
-
замечание линтера, приехавшее мержем из главной ветки, чинить уже нечем, и гейт пуша стоит.
|
|
333
|
-
Порядок один: мерж главной ветки, все линтеры и проверки зелёные, вливание договорённости,
|
|
334
|
-
приведение текстов домена, разбор папки. Понадобилась правка кода после разбора — замысел
|
|
335
|
-
восстанавливается на диске на время правки, и разбор повторяется тем же коммитом.
|
|
336
189
|
- **Тексты правятся до разбора папки.** Список того, что перечитывать, лежит в замысле, а
|
|
337
190
|
разбор папки его удаляет. После разбора остаётся только память о том, что задевали.
|
|
338
191
|
- **Утверждение правила снимается вместе со строкой привязки.** Связь идёт по тексту
|
|
@@ -343,10 +196,6 @@ npm run check:docs # пути, названные в текстах, суще
|
|
|
343
196
|
нет вовсе, и по слову из своей темы эта строка находилась — а неправда была в другом.
|
|
344
197
|
- **Сказать «сверено», не открыв файл, нельзя.** Правило читается целиком. Устаревшее
|
|
345
198
|
утверждение стоит в списке среди верных и ничем от них не отличается.
|
|
346
|
-
- **Если папку просто удалить, первым пропадёт `grill.md`.** Удалить проще, чем разобрать, а
|
|
347
|
-
слова владельца записаны только там, и восстановить их неоткуда. Поэтому гард требует, чтобы
|
|
348
|
-
ветка добавила запись в архив. Что именно перенесли, он не проверяет — это смотрит владелец
|
|
349
|
-
на ревью.
|
|
350
199
|
- **Вливание после мержа не делается.** В главной ветке тогда лежит раздел «предложено, но не
|
|
351
200
|
выкачено» с тем, что работает месяц, — беззвучная ложь, тем убедительнее, чем старше.
|
|
352
201
|
- **Номера сценариев при вливании не пересчитываются.** Идентификатор — ключ связи с тестами;
|
|
@@ -356,22 +205,5 @@ npm run check:docs # пути, названные в текстах, суще
|
|
|
356
205
|
стоявшее другими словами, а строка «этого раздела ещё нет» становится ложью ровно той
|
|
357
206
|
работой, которая её вливает. Сверка спеков в этот раздел не смотрит вовсе. Снимается
|
|
358
207
|
дословный повтор и то, что работа сделала входящим.
|
|
359
|
-
- **Шаги закрытия с владельцем не согласуются — они перечислены здесь.** Разбор работы
|
|
360
|
-
правилами входит в закрытие так же, как вливание договорённости и разбор папки; владелец
|
|
361
|
-
решает не то, запускать ли его, а что делать с находками. Ход, кончившийся таким вопросом,
|
|
362
|
-
отбивает гард разговора: за ход правила не читались, а ответ стоит в них. Спрашивается только
|
|
363
|
-
то, чего в правилах нет.
|
|
364
|
-
- **Блок готового кода в паттерне стареет от чужой правки.** Он не привязан ни к чему: сверка
|
|
365
|
-
спеков читает утверждения правила, а пример под ними не читает вовсе. Два поля, ставших
|
|
366
|
-
обязательными в чужой работе, сделали пример в соседнем паттерне несобираемым — сам он при
|
|
367
|
-
этом не изменился ни на знак и в след задачи не попал, потому что ни одного слова той работы
|
|
368
|
-
в нём нет. Паттерн находится по имени правленого символа, а не по теме работы.
|
|
369
208
|
- **Правило без привязки в спек домена не въезжает.** Кода, который его исполняет, нет —
|
|
370
209
|
значит это намерение, и место ему в открытых вопросах домена, а не в правилах.
|
|
371
|
-
- **Замысел эпика правят только там, где вписывают «чем кончился».** Границы эпика и
|
|
372
|
-
порядок задач в нём при этом остаются прежними, а работа их уже нарушила: задача, решившая
|
|
373
|
-
читать спеки, оставила над собой границу «спеки — вторая очередь», и следующий исполнитель
|
|
374
|
-
прочитает её как действующую. Границы эпика перечитываются целиком тем же заходом, что и
|
|
375
|
-
итог работы.
|
|
376
|
-
- **Архив не обновляется после выкатки.** Уехавшее туда описывает день переезда, и правится
|
|
377
|
-
оно только вместе с признанием, что описывало неверно.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-flow-handoff
|
|
3
3
|
kind: pattern
|
|
4
|
-
rule:
|
|
5
|
-
description: Паттерн правила
|
|
4
|
+
rule: turn-conduct
|
|
5
|
+
description: Паттерн правила turn-conduct. Брать, когда заход упирается в заполнение окна — выбор точки остановки, запись хода работы, форма передачи и что владелец с ней делает. Не брать для возвращения к работе новым заходом — это паттерн task-flow-resume.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Закрытие захода по заполнению окна
|
|
9
9
|
|
|
10
|
-
Паттерн правила `
|
|
10
|
+
Паттерн правила `turn-conduct`. Что при этом должно быть верно — закон
|
|
11
11
|
`docs/constitution/work-conduct.md`.
|
|
12
12
|
|
|
13
13
|
## Когда брать
|
|
@@ -55,7 +55,7 @@ description: Паттерн правила task-flow. Брать, когда з
|
|
|
55
55
|
### Коммит
|
|
56
56
|
|
|
57
57
|
Проверенное коммитится сразу, а не копится до конца задачи. Работа кончена — открывается PR:
|
|
58
|
-
паттерн `git-workflow-
|
|
58
|
+
паттерн `git-workflow-pr`.
|
|
59
59
|
|
|
60
60
|
### Передача
|
|
61
61
|
|
|
@@ -91,11 +91,12 @@ git log --oneline origin/main..HEAD
|
|
|
91
91
|
владельца — то есть ровно тем пересказом, ради отмены которого всё и заведено:
|
|
92
92
|
|
|
93
93
|
```markdown
|
|
94
|
-
- **PR:** #1396, ждёт разбора · отвечено 3 замечания из 5 · не сделано:
|
|
94
|
+
- **PR:** #1396, ждёт разбора · отвечено 3 замечания из 5 · не сделано: снятие черновика
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
С открытием PR состояние становится `работа-отдана`, и обязательное действие у него другое —
|
|
98
|
-
следующая задача, а не ожидание разбора.
|
|
98
|
+
следующая задача, а не ожидание разбора. Объявить его на диске к этой минуте уже нечем: ход
|
|
99
|
+
работы уехал вместе с папкой, и хвост работы ведёт паттерн `task-flow-close`.
|
|
99
100
|
|
|
100
101
|
Решение, принятое по ходу, — вместе с причиной и с тем, что было альтернативой:
|
|
101
102
|
|
|
@@ -121,7 +122,8 @@ git log --oneline origin/main..HEAD
|
|
|
121
122
|
```
|
|
122
123
|
|
|
123
124
|
**Следующее движение:** отмеченный этап тем же ходом сменяется следующим. Этапы кончились —
|
|
124
|
-
тот же ход гонит
|
|
125
|
+
тот же ход гонит набор, вливает договорённость, приводит тексты и разбирает папку задачи; PR
|
|
126
|
+
открывается за убранной работой.
|
|
125
127
|
|
|
126
128
|
## Состояние `работа-отдана`: следующая задача берётся тем же движением
|
|
127
129
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Переносимый слой правил — холодная часть
|
|
2
|
+
|
|
3
|
+
Ловушки и грабли, на которые уже наступали. Грузится не вместе со скилом, а по требованию: при
|
|
4
|
+
обычной раскладке она не нужна — она нужна тому, кто разбирает отказ сверки или спорит с
|
|
5
|
+
раскладкой.
|
|
6
|
+
|
|
7
|
+
Скил — `agent-kit`; порядок правки, команды и устройство слоёв стоят там.
|
|
8
|
+
|
|
9
|
+
## Ловушки
|
|
10
|
+
|
|
11
|
+
- **Набор, проверяющий гард, читает настройку того дерева, из которого его запустили.** Помощник
|
|
12
|
+
берёт настройку по каталогу проекта, а его агент выставляет своим — и `cd` в прогонщике этого
|
|
13
|
+
не перебивает. Набор, не заведший своего одноразового дерева, зеленеет от строки в чужой
|
|
14
|
+
настройке: шесть сценариев гарда экзамена прошли ровно так, потому что роль была выключена в
|
|
15
|
+
дереве, где их гоняли. Своё дерево объявляется на каждый сценарий, а не один раз на файл.
|
|
16
|
+
|
|
17
|
+
- **Надстройка замещает раздел целиком, и пакетные пункты в нём приходится держать копией.**
|
|
18
|
+
Дописать в раздел одну статью нечем: слияние идёт по заголовку `## `. Дерево, которому нужен
|
|
19
|
+
один свой пункт, копирует к нему все пакетные — и с этого дня правка любого из них,
|
|
20
|
+
приехавшая с новой версией, до этого дерева не доходит. Сверка разложенного молчит: она
|
|
21
|
+
считает расхождением правку на месте, а не замещённый раздел. Признак виден по самим
|
|
22
|
+
надстройкам — три из трёх прочитанных кончались абзацем о том, что перенос придётся делать
|
|
23
|
+
руками. Поэтому надстройкой берут раздел, у которого пакетных пунктов немного, а разросшийся
|
|
24
|
+
замещённый раздел — повод внести своё в пакет, а не держать его копией. Предложение, которым
|
|
25
|
+
своё вносят, называет эту надстройку строкой «чем закрывается»: иначе приехавшая редакция и
|
|
26
|
+
надстройка, которую она закрыла, не сопоставляются ничем, и надстройка остаётся замещать уже
|
|
27
|
+
исправленный раздел.
|
|
28
|
+
|
|
29
|
+
- **Готовый код пакета не называет имён одного дерева.** Префикс директив кита, ключи подписей
|
|
30
|
+
и имена сущностей принадлежат тому дереву, где паттерн писали; разложенные в соседнем, они
|
|
31
|
+
учат звать то, чего там нет вовсе. Имя директивы при этом отличается от имени в примере: по
|
|
32
|
+
примеру видно, что он пример, а `<префикс>TableRow` из чужого дерева выглядит рабочим кодом
|
|
33
|
+
и правится только после того, как продовая сборка упадёт. Тринадцать таких имён простояли в
|
|
34
|
+
четырёх ресурсах пакета, пока их не нашёл потребитель — и не своей сборкой, а надстройкой,
|
|
35
|
+
которой перекрыл раздел.
|
|
36
|
+
|
|
37
|
+
- **Правила и паттерны при отвергнутом законе в отказе не перечисляются.** Их снимает каскад, а
|
|
38
|
+
строка на них становится выводимой: раскладка называет её лишней вместе с законом, из-за
|
|
39
|
+
которого она перестала снимать. Отказ мерит слой законов, а не число файлов в пакете.
|
|
40
|
+
|
|
41
|
+
- **Линтер по следам правки судит файл целиком, а не внесённую правку.** Импорт, добавленный
|
|
42
|
+
отдельным шагом, отбивается как неиспользуемый ещё до того, как появится строка, которая его
|
|
43
|
+
зовёт, и работа встаёт на половине. Правка делается одним вызовом либо в порядке «сначала
|
|
44
|
+
использование, потом импорт».
|
|
45
|
+
- **Прогонять сценарии гардов можно, ничего не раскладывая.** Обвязка набора принимает каталог
|
|
46
|
+
гардов переменной, и пакетную редакцию гоняют по сценариям дерева до установки. Заход,
|
|
47
|
+
потраченный на диагноз по последствиям, стоил ровно этой строки.
|
|
48
|
+
- **Отбитая правка не всегда про текст гарда.** Гард зовут по пути, и файл без права на
|
|
49
|
+
запуск отвечает отказом доступа — ненулевым кодом, который читается как «правка отбита».
|
|
50
|
+
Набор при этом отбивает подряд всё, включая сборку и тесты, и причины не называет.
|
|
51
|
+
- **Правка shell-скрипта заменой по шаблону сверяется `bash -n` сразу.** Замена границ
|
|
52
|
+
конструкции не видит: `case` теряет свою `esac`, файл остаётся синтаксически неверным, а
|
|
53
|
+
гард с ошибкой синтаксиса отвечает ненулевым кодом — то есть «правка отбита». Два раза за
|
|
54
|
+
заход, и оба раза это выглядело дефектом самого гарда.
|
|
55
|
+
- **Гард, подписанный не на то, что объявляет, выглядит работающим.** Событие и образец вызова
|
|
56
|
+
гард несёт сам, строкой `# rt-hook:`, а зовёт его образец в настройке агента — и эти двое
|
|
57
|
+
расходятся молча: путь гарда в настройке назван, файл разложен, набор сценариев зелёный.
|
|
58
|
+
Набор тут ничего не ловит намеренно — он зовёт гард напрямую с подставленным вводом и
|
|
59
|
+
объявления не читает вовсе. Так гейт правил и разбирал вызовы браузера веткой, которая не
|
|
60
|
+
исполнялась ни разу. Расхождение находит сверка раскладки: она сравнивает объявленный образец
|
|
61
|
+
с тем, под которым гард стоит, называет обе стороны и идёт в счёт расхождений. Правится
|
|
62
|
+
настройка, а верное значение лежит в гарде — тело его разбирает то, что объявлено.
|
|
63
|
+
- **Разложенный файл узнаётся по шапке, а не по каталогу.** Раскладка ложится в те же
|
|
64
|
+
`tools/`, `.claude/hooks/` и `.claude/skills/`, где лежит своё, поэтому карта гейта,
|
|
65
|
+
написанная по путям, требует под него доменное правило — а оно уводит править файл на месте.
|
|
66
|
+
Правка на месте теряется на следующей раскладке, и до тех пор выглядит применённой. Ветка по
|
|
67
|
+
шапке ставится в карте первой и решает раньше путей.
|
|
68
|
+
- **Настройки проверок сливаются по ключам, а списки — замещаются.** Объект `checks.json`
|
|
69
|
+
ложится поверх умолчания ключ за ключом на любой глубине: назвав один ключ борды, дерево не
|
|
70
|
+
теряет соседних. Список приходит целиком — назвав корни исходников, дерево получает ровно
|
|
71
|
+
названное, а не умолчание вместе со своим: «дописать в список» и «убрать из списка» в этой
|
|
72
|
+
записи неразличимы.
|
|
73
|
+
- **Утверждение правила переезжает вместе с кодом.** Вынесенное в надстройку перестаёт
|
|
74
|
+
находиться по прежнему символу, и привязка в спутнике правила врёт молча — сверка спеков
|
|
75
|
+
ловит это, но только если её позвать.
|
|
76
|
+
- **Признак по подстроке пути судит и то, что лежит вне дерева.** Гарды отдают в профиль
|
|
77
|
+
абсолютный путь целиком, и образец вида `*/projects/*` совпадает с домашним каталогом агента
|
|
78
|
+
ровно так же, как с кодом дерева: запись в файл вне репозитория была отбита гардом хода
|
|
79
|
+
работы с требованием замысла, к ней не относящегося. Путь в профиле сначала приводится к
|
|
80
|
+
корню дерева, и всё, что вне корня, признака не получает.
|