@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
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-flow-archive
|
|
3
|
+
kind: pattern
|
|
4
|
+
rule: task-flow
|
|
5
|
+
description: Паттерн правила task-flow. Брать, когда тексты приведены и папка задачи разбирается последним коммитом до открытия заявки: переезд в описание прошлого, сверка очереди работ, разбор закрытой работы правилами и то, что делать с его находками. Не брать для вливания договорённости, открытия заявки и снятия черновика — это паттерн task-flow-close.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Разбор папки задачи и разбор работы правилами
|
|
9
|
+
|
|
10
|
+
Паттерн правила `task-flow`. Что при этом должно быть верно — закон
|
|
11
|
+
`docs/constitution/work-conduct.md`. Что делается до этого — снятие черновика, вливание
|
|
12
|
+
договорённости и приведение текстов — паттерн `task-flow-close`.
|
|
13
|
+
|
|
14
|
+
## Когда брать
|
|
15
|
+
|
|
16
|
+
- Договорённость влита, тексты домена приведены, и папка задачи разбирается последним
|
|
17
|
+
коммитом ветки — до открытия заявки, а не после одобрения.
|
|
18
|
+
- Работа слита человеком, и её разбирают правилами.
|
|
19
|
+
- Разбор вернул находки, и их надо куда-то положить.
|
|
20
|
+
|
|
21
|
+
## Состояние `разбор-кончился`: папка задачи разбирается
|
|
22
|
+
|
|
23
|
+
Разбор идёт по трём исходам, а не по двум.
|
|
24
|
+
|
|
25
|
+
**Первым отбирается действующее требование.** Всё, что останется верным и завтра, становится
|
|
26
|
+
статьёй закона, пунктом правила или разделом паттерна — по тому, о чём оно говорит. Признак
|
|
27
|
+
отбора один и записан здесь заранее: перестанет ли текст быть верным, если завтра всё
|
|
28
|
+
переделать. Перестанет — это рассказ о состоявшемся; не перестанет — требование, и место ему в
|
|
29
|
+
слое правил. Закон при этом в ветке не правится — его статья приносится владельцу текстом.
|
|
30
|
+
|
|
31
|
+
**Вторым отбирается рассказ о состоявшемся переезде.** Он уезжает в описание прошлого и
|
|
32
|
+
называет для каждого перенесённого решения, куда оно ушло: иначе решение, ставшее правилом, и
|
|
33
|
+
решение, потерянное при переносе, выглядят одинаково — записью, на которую никто не ссылается.
|
|
34
|
+
|
|
35
|
+
**Третьим удаляется остальное.**
|
|
36
|
+
|
|
37
|
+
Порядок именно такой: начав с переезда, исполнитель увозит вместе с ним и действующее — под
|
|
38
|
+
конец работы это дешевле, чем разбирать.
|
|
39
|
+
|
|
40
|
+
Целиком в архив не переносится: `docs/archive/` — место для записей о состоявшемся, которые
|
|
41
|
+
кто-то читает, а не свалка ходов работы. Таблица ниже говорит о том, что осталось после
|
|
42
|
+
первого отбора.
|
|
43
|
+
|
|
44
|
+
| Файл | Куда |
|
|
45
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
46
|
+
| `grill.md` | в `docs/archive/` — ответы владельца невосстановимы, и это единственная запись о том, почему задача поставлена так |
|
|
47
|
+
| `progress.md` | в `docs/archive/`, если в нём есть решения по ходу с причинами; иначе удаляется |
|
|
48
|
+
| `plan.md` | удаляется — после выкатки на его вопрос отвечает код, а на «как работает» отвечает спек домена |
|
|
49
|
+
| находки разбора | переезжают к замыслу эпика — их читает владелец, когда эпик кончится; работа вне эпика показывает их сразу |
|
|
50
|
+
|
|
51
|
+
Уезжающее складывается одним файлом с говорящим именем, а не папкой из трёх:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cat docs/tasks/<КЛЮЧ>-<номер>-<slug>/grill.md > docs/archive/<ЧТО_РЕШАЛИ>.md
|
|
55
|
+
rm -r docs/tasks/<КЛЮЧ>-<номер>-<slug>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Разбор идёт последним коммитом ветки, до открытия заявки: открытие с лежащей папкой отбивает
|
|
59
|
+
гард поставки. Прежде уборка стояла после одобрения — считалось, что замысел нужен на диске всё
|
|
60
|
+
время разбора. Но кнопку слияния нажимает человек на хостинге, куда гард не достаёт, и вливает
|
|
61
|
+
он, как только видит зелёное: трижды подряд папка уехала в главную неразобранной. Замысла после
|
|
62
|
+
уборки на диске нет намеренно, и правку по замечаниям гард хода работы пропускает по признаку
|
|
63
|
+
из истории ветки.
|
|
64
|
+
|
|
65
|
+
### Работа, разбирающая чужую папку, разбирает две
|
|
66
|
+
|
|
67
|
+
Своя папка у такой работы есть — она заводится наравне со всеми, исключения из этого нет. Обе
|
|
68
|
+
снимаются последним коммитом, и порядок между ними один: сперва чужая, потом своя. Начав со
|
|
69
|
+
своей, исполнитель теряет замысел на диске, а он ещё нужен — гард отбивает правку без него, а
|
|
70
|
+
правка по замечаниям разбора идёт в ту же ветку.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
cat docs/tasks/<чужая>/grill.md > docs/archive/<ЧТО_РЕШАЛИ_ТАМ>.md
|
|
74
|
+
rm -r docs/tasks/<чужая>
|
|
75
|
+
cat docs/tasks/<своя>/grill.md > docs/archive/<ЧТО_РЕШАЛИ_ЗДЕСЬ>.md
|
|
76
|
+
rm -r docs/tasks/<своя>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Две записи в архиве, а не одна: работы разные, и решения в них разные. Сверка очереди работ
|
|
80
|
+
после этого не называет ни одной папки — этим и проверяется, что разобраны обе.
|
|
81
|
+
|
|
82
|
+
**Следующее движение:** разобранная папка уезжает в ветку тем же коммитом, следом сверяется
|
|
83
|
+
очередь работ, и тем же ходом открывается заявка — паттерн `task-flow-close`.
|
|
84
|
+
|
|
85
|
+
## Состояние `папка-разобрана`: сверка очереди работ
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm run check:board # папка закрытой задачи среди текущих, брошенные черновики
|
|
89
|
+
npm run check:specs # договорённость влита, привязки на месте
|
|
90
|
+
npm run check:docs # пути, названные в текстах, существуют
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Следующее движение:** расхождения, названные сверками, чинятся тем же ходом; чинить нечего —
|
|
94
|
+
тот же ход открывает заявку черновиком и называет владельцу номер, паттерн `task-flow-close`.
|
|
95
|
+
|
|
96
|
+
## Состояние `влито`: работа разбирается правилами — фоном, следом за PR
|
|
97
|
+
|
|
98
|
+
Шаг о слое правил, а не о продукте: что за эту работу грузилось, что помогло, чего не хватило и
|
|
99
|
+
где текст правила разошёлся с деревом. Знает это только тот заход, который работу вёл, — через
|
|
100
|
+
сутки не знает никто.
|
|
101
|
+
|
|
102
|
+
Ведёт разбор роль разбора закрытой задачи, если дерево её разложило; не разложившее ведёт его
|
|
103
|
+
само, теми же вопросами. Файлов роль не правит — приносит готовые формулировки, а вставлять их
|
|
104
|
+
решает владелец.
|
|
105
|
+
|
|
106
|
+
**Запускается разбор в фоне, сразу за открытием PR, и ход на нём не кончается.** Роль ничего не
|
|
107
|
+
спрашивает, пока работает, и быстрее от ожидания не идёт: следующая задача берётся тем же ходом,
|
|
108
|
+
которым запущен разбор.
|
|
109
|
+
|
|
110
|
+
Порядок один и переставлять его нельзя:
|
|
111
|
+
|
|
112
|
+
1. **Сводка собирается до запуска** — пока задача ещё в голове. Что делали, что пошло не так,
|
|
113
|
+
что грузилось и что каждое правило дало, на какие грабли окружения наткнулись. Собранная
|
|
114
|
+
через две задачи, она пересказывает историю ветки вместо того, что было на самом деле.
|
|
115
|
+
2. **Роль уходит в фон** — инструментом запуска роли, с путём к списку загруженного и сводкой
|
|
116
|
+
целиком. Ход продолжается следующей задачей.
|
|
117
|
+
3. **Вернувшиеся находки принимают одним ходом** — записать и вернуться к прежнему. Разбор,
|
|
118
|
+
отложенный «до удобного момента», не случается вовсе: заход кончается раньше.
|
|
119
|
+
|
|
120
|
+
**Следующее движение:** пока роль разбирает, тот же ход занят следующей задачей; вернувшиеся
|
|
121
|
+
находки принимаются одним ходом — записать и продолжить прежнее.
|
|
122
|
+
|
|
123
|
+
## Состояние `влито`: находки разбора ложатся в папку задачи и ждут владельца
|
|
124
|
+
|
|
125
|
+
Ответ роли живёт в переписке и умирает вместе с ней, поэтому он сразу ложится на диск — в папку
|
|
126
|
+
задачи, файлом рядом с ходом работы. Пишет его исполнитель: роль файлов не пишет.
|
|
127
|
+
|
|
128
|
+
Папка задачи умирает со слиянием, а находки должны пережить весь эпик — владелец читает их
|
|
129
|
+
разом, когда эпик кончился. Поэтому при разборе папки файл находок не удаляется вместе
|
|
130
|
+
с остальным, а **переезжает к замыслу эпика**: там его найдут и после того, как ветка въехала.
|
|
131
|
+
Работа вне эпика показывает находки владельцу сразу, тем же ходом.
|
|
132
|
+
|
|
133
|
+
**Наружу без слова владельца уезжает только сводка наблюдений.** Она говорит, чем пользовались
|
|
134
|
+
и чем не пользовались ни разу, — это факт, и мнением он не станет. Предложение — другое дело:
|
|
135
|
+
это заготовка правки чужого дерева, и часть заготовок отпадает при первом же чтении. Уехавшая
|
|
136
|
+
без разбора, она становится работой того, кто её не заказывал.
|
|
137
|
+
|
|
138
|
+
Порядок такой: находки копятся у замысла эпика → эпик кончился → владелец читает их разом и
|
|
139
|
+
говорит, что из них верно → названное им оформляется предложением и уезжает. Чем отправляют —
|
|
140
|
+
скил слоя правил, если дерево его разложило.
|
|
141
|
+
|
|
142
|
+
У каждой находки называется адрес, и адресов три:
|
|
143
|
+
|
|
144
|
+
| Куда | Что туда идёт |
|
|
145
|
+
| -------------------------- | ------------------------------------------------------------------------ |
|
|
146
|
+
| слой правил — предложением | то, что верно любому дереву этого класса: статья, пункт правила, паттерн |
|
|
147
|
+
| имена этого дерева | то, что верно здесь: компаньон правила, профиль, карта гейта |
|
|
148
|
+
| надстройка над разложенным | то, что здесь звучит иначе, чем в пакете |
|
|
149
|
+
|
|
150
|
+
Без адреса правка ложится туда, где её видит автор, — то есть в своё дерево, — и общее оседает
|
|
151
|
+
в одном месте, оставаясь неизвестным всем остальным.
|
|
152
|
+
|
|
153
|
+
**Разбор без правки закрытым не считается.** Из него выходит либо правка слоя правил, либо
|
|
154
|
+
предложение наружу; не вышло ни того ни другого — это жалоба, и она повторится. Предложение, о
|
|
155
|
+
котором владелец сказал вслух, уходит наружу в тот же ход: написанное и не отправленное лежит в
|
|
156
|
+
дереве неотличимо от отправленного.
|
|
157
|
+
|
|
158
|
+
**Следующее движение:** записанные находки работу не держат — следующая задача уже идёт, а
|
|
159
|
+
владельцу о них говорится, когда кончился эпик.
|
|
160
|
+
|
|
161
|
+
## Ловушки
|
|
162
|
+
|
|
163
|
+
- **Папку разбирают до открытия заявки — потом о ней уже никто не вспомнит.** Сверка очереди
|
|
164
|
+
считает задачу закрытой по слиянию: после него за папку никто не отвечает — работа перешла к
|
|
165
|
+
следующей задаче, и находка достанется чужому заходу. Три раза подряд папка закрытой задачи
|
|
166
|
+
так и уехала в главную ветку, в последний раз их набралось пять. Держит это гард поставки:
|
|
167
|
+
открытие заявки отбивается, пока папка лежит в ветке.
|
|
168
|
+
- **Разбор папки идёт последним коммитом, после того как гейт пуша прошёл целиком.** Порядок
|
|
169
|
+
один: мерж главной ветки, все линтеры и проверки зелёные, вливание договорённости, приведение
|
|
170
|
+
текстов домена, разбор папки — и только потом заявка.
|
|
171
|
+
- **После разбора замысла на диске нет, и собирать папку заново не надо.** Правку по замечаниям
|
|
172
|
+
разбора и починку красного прогона гард хода работы пропускает по признаку из истории ветки:
|
|
173
|
+
папка, снятая её коммитом, и есть признак отданной работы. Собранная заново папка вернула бы
|
|
174
|
+
отказ гарда поставки на следующем же вызове.
|
|
175
|
+
- **Если папку просто удалить, первым пропадёт `grill.md`.** Удалить проще, чем разобрать, а
|
|
176
|
+
слова владельца записаны только там, и восстановить их неоткуда. Поэтому гард требует, чтобы
|
|
177
|
+
ветка добавила запись в архив. Что именно перенесли, он не проверяет — это смотрит владелец
|
|
178
|
+
на ревью.
|
|
179
|
+
- **Шаги закрытия с владельцем не согласуются — они перечислены здесь.** Разбор работы
|
|
180
|
+
правилами входит в закрытие так же, как вливание договорённости и разбор папки; владелец
|
|
181
|
+
решает не то, запускать ли его, а что делать с находками. Ход, кончившийся таким вопросом,
|
|
182
|
+
отбивает гард разговора: за ход правила не читались, а ответ стоит в них. Спрашивается только
|
|
183
|
+
то, чего в правилах нет.
|
|
184
|
+
- **Блок готового кода в паттерне стареет от чужой правки.** Он не привязан ни к чему: сверка
|
|
185
|
+
спеков читает утверждения правила, а пример под ними не читает вовсе. Два поля, ставших
|
|
186
|
+
обязательными в чужой работе, сделали пример в соседнем паттерне несобираемым — сам он при
|
|
187
|
+
этом не изменился ни на знак и в след задачи не попал, потому что ни одного слова той работы
|
|
188
|
+
в нём нет. Паттерн находится по имени правленого символа, а не по теме работы.
|
|
189
|
+
- **Замысел эпика правят только там, где вписывают «чем кончился».** Границы эпика и
|
|
190
|
+
порядок задач в нём при этом остаются прежними, а работа их уже нарушила: задача, решившая
|
|
191
|
+
читать спеки, оставила над собой границу «спеки — вторая очередь», и следующий исполнитель
|
|
192
|
+
прочитает её как действующую. Границы эпика перечитываются целиком тем же заходом, что и
|
|
193
|
+
итог работы.
|
|
194
|
+
- **Архив не обновляется после выкатки.** Уехавшее туда описывает день переезда, и правится
|
|
195
|
+
оно только вместе с признанием, что описывало неверно.
|