@rt-tools/agent-kit 0.13.0 → 0.15.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 +17 -0
- package/assets/checks/board-runs.github.mjs +45 -0
- package/assets/checks/board.github.mjs +43 -1
- package/assets/checks/check-board.github.mjs +51 -1
- package/assets/checks/check-descriptions.mjs +123 -0
- package/assets/checks/check-dupes.mjs +31 -3
- package/assets/checks/check-file-size.mjs +47 -2
- package/assets/checks/check-turn-map.mjs +20 -3
- package/assets/checks/lib-common.mjs +12 -1
- package/assets/checks/lib-domains.mjs +1 -1
- package/assets/checks/rt-kit-checks.config.mjs +17 -1
- package/assets/checks/spec-anchors.mjs +18 -3
- package/assets/checks/spec-common.mjs +5 -1
- package/assets/checks/task-new.github.mjs +15 -3
- package/assets/defaults/project.sh +21 -16
- package/assets/defaults/turn-map.md +15 -19
- package/assets/docs/GLOSSARY.md +52 -58
- package/assets/hooks/claim-guard.sh +34 -0
- package/assets/hooks/dispatch.sh +48 -15
- package/assets/hooks/hook-input.sh +39 -0
- package/assets/hooks/rule-article.sh +12 -0
- package/assets/hooks/skill-gate.sh +5 -4
- package/assets/hooks/task-flow-guard.sh +20 -0
- package/assets/hooks/turn-exit-guard.sh +248 -8
- package/assets/hooks/waiting-turn-guard.sh +39 -3
- package/assets/laws/delivery.md +92 -104
- package/assets/laws/frontend-application.md +4 -0
- package/assets/laws/project-documentation.md +64 -68
- package/assets/laws/verifiability.md +32 -33
- package/assets/laws/work-conduct.md +167 -157
- package/assets/patterns/doc-style-sweep.md +1 -1
- package/assets/patterns/doc-style-trace.md +1 -1
- package/assets/patterns/git-workflow-commit.azure.md +1 -1
- package/assets/patterns/git-workflow-commit.github.md +7 -1
- package/assets/patterns/git-workflow-commit.gitlab.md +1 -1
- package/assets/patterns/git-workflow-docker.md +1 -1
- package/assets/patterns/git-workflow-merge.md +14 -3
- package/assets/patterns/git-workflow-pr.azure.md +1 -1
- package/assets/patterns/git-workflow-pr.github.md +1 -1
- package/assets/patterns/git-workflow-pr.gitlab.md +1 -1
- package/assets/patterns/git-workflow-restart.md +1 -1
- package/assets/patterns/git-workflow-secrets.md +1 -1
- package/assets/patterns/git-workflow-stack.md +93 -0
- package/assets/patterns/seo-page.md +1 -1
- package/assets/patterns/spec-driven-rule.md +55 -0
- package/assets/patterns/status-report-table.github.md +88 -0
- package/assets/patterns/task-flow-archive.md +3 -4
- package/assets/patterns/task-flow-close.md +6 -1
- package/assets/patterns/task-flow-start.md +17 -5
- package/assets/patterns/ts-procedure.md +1 -1
- package/assets/pitfalls/doc-style.md +5 -0
- package/assets/pitfalls/git-workflow.github.md +55 -0
- package/assets/pitfalls/task-flow.md +28 -0
- package/assets/pitfalls/testing.md +14 -0
- package/assets/pitfalls/turn-conduct.md +33 -0
- package/assets/rules/angular-patterns.md +1 -1
- package/assets/rules/api-layer.md +3 -3
- package/assets/rules/browser-verification.md +15 -1
- package/assets/rules/dependencies.md +1 -1
- package/assets/rules/deploy-flow.azure.md +1 -1
- package/assets/rules/deploy-flow.github.md +1 -1
- package/assets/rules/deploy-flow.gitlab.md +1 -1
- package/assets/rules/doc-style.md +7 -0
- package/assets/rules/entity-conventions.needs-admin.md +1 -1
- package/assets/rules/entity-models.md +1 -1
- package/assets/rules/git-workflow.azure.md +1 -1
- package/assets/rules/git-workflow.github.md +154 -181
- package/assets/rules/git-workflow.gitlab.md +1 -1
- package/assets/rules/lib-layers.md +1 -1
- package/assets/rules/observability.needs-app.md +1 -1
- package/assets/rules/platform-access.md +1 -1
- package/assets/rules/reuse-first.md +1 -1
- package/assets/rules/seo.md +4 -3
- package/assets/rules/shared-code.md +1 -1
- package/assets/rules/spec-driven.md +68 -1
- package/assets/rules/status-report.md +97 -0
- package/assets/rules/styling-bem.md +12 -0
- package/assets/rules/task-flow.md +102 -98
- package/assets/rules/testing.md +67 -66
- package/assets/rules/turn-conduct.md +155 -85
- package/assets/rules/turn-entry.md +7 -1
- package/assets/rules/typescript-conventions.md +1 -1
- package/assets/skills/agent-kit-extend.md +1 -1
- package/assets/skills/agent-kit.md +18 -1
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +25 -0
- package/bin/agent-kit.js.map +1 -1
- package/lib/cost.d.ts +44 -0
- package/lib/cost.d.ts.map +1 -0
- package/lib/cost.js +181 -0
- package/lib/cost.js.map +1 -0
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.15.0.tgz +0 -0
- package/rt-tools-agent-kit-0.13.0.tgz +0 -0
|
@@ -4,204 +4,215 @@
|
|
|
4
4
|
длится дольше одной сессии и должна сохранять весь контекст и состояние при переходах из одной сессии в другую.
|
|
5
5
|
|
|
6
6
|
## Статьи
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Пробел закрывается вопросом владельцу, а не догадкой.** Догадка неотличима от знания:
|
|
12
|
-
она попадает в работу молча и обнаруживается только при приёмке, когда переделывать дороже
|
|
13
|
-
всего.
|
|
7
|
+
- **Работа не начинается раньше, чем исполнитель понял, о чём его просят.** Пробел в понимании сам
|
|
8
|
+
не закрывается: он всплывает в готовой правке и стоит переделки там, где стоил бы вопроса.
|
|
9
|
+
- **Пробел закрывается вопросом владельцу, а не догадкой.** Догадка неотличима от знания: она
|
|
10
|
+
попадает в работу молча и обнаруживается только при приёмке, когда переделывать дороже всего.
|
|
14
11
|
- **Работа, которая требует изменений по образцу, начинается с чтения самого образца.** Пересказ
|
|
15
|
-
образца образцом не является: по нему собирается понимание того, кто пересказывал, и
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Ссылка на образец нужно указывать непосредственно в файле с описанием прогресса работы.
|
|
12
|
+
образца образцом не является: по нему собирается понимание того, кто пересказывал, и расхождение
|
|
13
|
+
всплывает на приёмке целой работой, а не строкой. Читается та часть образца, которую работа
|
|
14
|
+
повторяет, и читается целиком — об устройстве чужого дерева по одному его файлу не судят.
|
|
15
|
+
- **Образец, указанный в ходе работы должен быть доступен каждой сессии во время работы.** Ссылка
|
|
16
|
+
на образец нужно указывать непосредственно в файле с описанием прогресса работы.
|
|
21
17
|
- **Вопрос, у которого есть очевидный ответ, работу не останавливает.** Исполнитель называет
|
|
22
18
|
допущение, идёт дальше и записывает его туда же, где идёт работа. Останавливает только тот
|
|
23
|
-
пробел, при котором любая догадка делает работу опасной или бесполезной. Вопрос, заданный
|
|
24
|
-
|
|
19
|
+
пробел, при котором любая догадка делает работу опасной или бесполезной. Вопрос, заданный вместо
|
|
20
|
+
работы, выглядит добросовестно, а стоит владельцу захода.
|
|
25
21
|
- **Остановка называется первой строкой.** Сообщение, которым исполнитель останавливается,
|
|
26
|
-
начинается с того, чего он ждёт и что будет, если ответа не будет. Замеры, находки и разбор
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- **Владельцу не задаётся вопрос, ответ на который уже записан.** Записанное читают до
|
|
30
|
-
|
|
22
|
+
начинается с того, чего он ждёт и что будет, если ответа не будет. Замеры, находки и разбор к
|
|
23
|
+
этому моменту уже записаны в ход работы — в сообщении владельцу они лишние. Чем подробнее PR,
|
|
24
|
+
тем надёжнее вопрос в нём тонет, и владелец переспрашивает, почему работа стоит.
|
|
25
|
+
- **Владельцу не задаётся вопрос, ответ на который уже записан.** Записанное читают до разговора,
|
|
26
|
+
а не вместо ответа: вопрос о том, что уже решено, обесценивает и остальные.
|
|
31
27
|
- **Вопрос владельцу задаётся после того, как ответ искали в дереве.** Что лежит в дереве,
|
|
32
|
-
исполнитель узнаёт сам: имя, путь, наличие файла и устройство репозитория он берёт командой,
|
|
33
|
-
|
|
28
|
+
исполнитель узнаёт сам: имя, путь, наличие файла и устройство репозитория он берёт командой, а
|
|
29
|
+
не у владельца. Вопрос, ответ на который дала бы одна команда, стоит владельцу захода и
|
|
34
30
|
обесценивает заданные рядом.
|
|
35
31
|
- **Утверждение о дереве стоит ровно столько, сколько команда, его показавшая.** Отрицание —
|
|
36
32
|
«здесь нет», «этого не заводили», «такого файла не бывает» — произносится только как вывод
|
|
37
33
|
команды. Не проверенное отрицание опаснее вопроса: вопрос владелец поправит, а факт от
|
|
38
34
|
исполнителя примет на веру, потому что тот в дерево смотрит.
|
|
39
|
-
- **Отрицание, полученное одним источником, отрицанием не является.** Ответ «не найдено», отказ
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
- **Отрицание, полученное одним источником, отрицанием не является.** Ответ «не найдено», отказ в
|
|
36
|
+
доступе и пустой список говорят о правах спрашивающего, а не о предмете: тот же вопрос, заданный
|
|
37
|
+
оттуда, где предмет виден, отвечает обратным. Сказать «этого нет» можно только после второго
|
|
38
|
+
источника — иначе исполнитель называет владельцу собственные права, приняв их за устройство
|
|
39
|
+
мира.
|
|
44
40
|
- **Решение, однажды записанное, действует, пока его не отменили, и читается до того, как
|
|
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
|
-
картины.
|
|
41
|
+
принимается заново.** Отменённое решение следа в работе не оставляет — по результату не видно ни
|
|
42
|
+
того, что его принимали, ни того, что от него отказались. Принятое заново оно расходится с
|
|
43
|
+
прежним молча и стоит той же работы второй раз.
|
|
44
|
+
- **Понимание записано там, где идёт работа.** Оставленное в переписке живёт у одного участника и
|
|
45
|
+
до следующего дня; работу продолжает тот, у кого этой переписки нет.
|
|
46
|
+
- **Сказанное владельцем записывается его словами и задним числом не переписывается.** Пересказ
|
|
47
|
+
незаметно подгоняется под уже сделанное, и сверять результат становится не с чем.
|
|
48
|
+
- **Договорённость о том, как продукт себя ведёт, записана раньше кода, который её исполняет.**
|
|
49
|
+
Записанная после, она пишется по коду и повторяет его ошибки: разойтись ей уже не с чем, а
|
|
50
|
+
значит она ничего не проверяет.
|
|
51
|
+
- **Описание приведено к сделанному прежде, чем работа закрыта.** Договорённость пишется до кода и
|
|
52
|
+
описывает замысел, а к концу работы приложение отличается и от замысла тоже. Расхождение,
|
|
53
|
+
отложенное на потом, не находится: назавтра оно уже незаметно, а описание продолжают читать как
|
|
54
|
+
верное.
|
|
55
|
+
- **Состояние незаконченной работы восстанавливается без участия владельца.** Иначе каждый перерыв
|
|
56
|
+
стоит ему пересказа, а очередь работ показывает начатое и не говорит, что внутри него сделано.
|
|
57
|
+
- **Заход исполнителя конечен, и его конец не совпадает с концом работы.** Место, где исполнитель
|
|
58
|
+
помнит ход работы, ограничено; заполнив его, он теряет не последнее, а всё сразу. Заход,
|
|
59
|
+
доведённый до логической точки заранее, стоит одной записи; оборванный на середине — целого
|
|
60
|
+
захода на восстановление.
|
|
61
|
+
- **Прерванная работа передаётся следующему заходу готовым текстом, а не пересказом владельца.**
|
|
62
|
+
Владелец знает, что работа не кончена, но не знает, где именно она стоит; пересказ он даёт по
|
|
63
|
+
своей памяти, а не по ходу работы, и следующий заход начинает с чужой картины.
|
|
70
64
|
- **Переданное прошлым заходом приходит в новый заход само, а не кладётся рукой.** Передача,
|
|
71
65
|
написанная и не прочитанная, равна ненаписанной: следующий заход о ней не знает и начинает с
|
|
72
66
|
пустого места — то есть с того же, ради чего её и писали. Кладёт её человек ровно до тех пор,
|
|
73
67
|
пока это не поручено машине; поручённое машине не забывается ночью.
|
|
74
68
|
- **Порядок ведения работы приходит в заход вместе с работой, а не разыскивается им.** Заход,
|
|
75
|
-
знающий задачу и не знающий, что с ней делают дальше, первым движением
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- **Замысел и ход работы — разные записи.** Замысел — то, с чем сверяют результат при
|
|
80
|
-
|
|
81
|
-
- **Сделанное отмечается в одном месте.** Две записи об одном разъезжаются молча, и после
|
|
82
|
-
|
|
83
|
-
- **Решение, принятое по ходу работы, записывается вместе с причиной.** Без причины оно
|
|
84
|
-
|
|
69
|
+
знающий задачу и не знающий, что с ней делают дальше, первым движением читает правило целиком —
|
|
70
|
+
и тратит место, ради которого его и начали заново. Приходит короткая выжимка: состояния,
|
|
71
|
+
обязательное действие каждого и чем ход кончается. Правило она не заменяет: отвечает на «что
|
|
72
|
+
делать», а не «почему».
|
|
73
|
+
- **Замысел и ход работы — разные записи.** Замысел — то, с чем сверяют результат при приёмке;
|
|
74
|
+
правленный по ходу, он перестаёт отличаться от PR, и приёмке сверять нечего.
|
|
75
|
+
- **Сделанное отмечается в одном месте.** Две записи об одном разъезжаются молча, и после этого ни
|
|
76
|
+
по одной не видно, что осталось.
|
|
77
|
+
- **Решение, принятое по ходу работы, записывается вместе с причиной.** Без причины оно читается
|
|
78
|
+
как случайное и отменяется следующим заходом, а отменённое возвращается третьим.
|
|
85
79
|
- **Граница работы названа до её начала.** Не названная вслух граница не существует: правка
|
|
86
80
|
расползается на соседнее, и снимать её приходится вручную.
|
|
87
|
-
- **Действия, которые исполнитель не делает сам, названы списком.** Всё, что уходит за
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- **Признак закрытия работы назван до её начала и проверяем.** «Работает» признаком не
|
|
93
|
-
|
|
94
|
-
- **Начатая и брошенная работа видна.** Брошенное на середине выглядит так же, как
|
|
95
|
-
|
|
96
|
-
- **Записи о законченной работе не лежат среди записей о текущей.** Закрытое, лежащее рядом
|
|
97
|
-
|
|
98
|
-
- **Законченная работа убирает за собой до того, как войдёт в общее дерево.** Потом за
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
- **Достаточность понимания судит тот, кто просил.** Машине видно наличие записи, но не то,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
- **Незаданный вопрос замечает только тот, кто знает, чего хотел.** Вопрос, которого не
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- **Происшествие названо признаком, а не оценкой заднего числа.** Происшествие — заход, в
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
81
|
+
- **Действия, которые исполнитель не делает сам, названы списком.** Всё, что уходит за пределы
|
|
82
|
+
рабочего дерева или не откатывается — запись в общий репозиторий, публикация, PR, правка общего
|
|
83
|
+
документа, — делается по слову владельца, и слово это даётся на действие, а не на работу
|
|
84
|
+
целиком. Не названная списком граница выводится из общих слов: «делай, что нужно по плану»
|
|
85
|
+
прочитывается как разрешение на всё, что в плане подразумевалось.
|
|
86
|
+
- **Признак закрытия работы назван до её начала и проверяем.** «Работает» признаком не является:
|
|
87
|
+
под ним каждый заход понимает своё, и работа закрывается тогда, когда надоела.
|
|
88
|
+
- **Начатая и брошенная работа видна.** Брошенное на середине выглядит так же, как нетронутое, и
|
|
89
|
+
второй заход начинает его заново.
|
|
90
|
+
- **Записи о законченной работе не лежат среди записей о текущей.** Закрытое, лежащее рядом с
|
|
91
|
+
действующим, читается как действующее — тем убедительнее, чем оно старше.
|
|
92
|
+
- **Законченная работа убирает за собой до того, как войдёт в общее дерево.** Потом за оставленным
|
|
93
|
+
уже никто не следит: работа перешла к следующей задаче, а правки, которой это убрали бы заодно,
|
|
94
|
+
больше нет.
|
|
95
|
+
- **Достаточность понимания судит тот, кто просил.** Машине видно наличие записи, но не то, что в
|
|
96
|
+
ней закрыты все пробелы: запись из одной строки проходит так же, как разбор на сто. Признак
|
|
97
|
+
достаточности, выведенный из объёма или числа вопросов, сам становится целью — исполнитель
|
|
98
|
+
добирает его, не приближаясь к пониманию.
|
|
99
|
+
- **Незаданный вопрос замечает только тот, кто знает, чего хотел.** Вопрос, которого не задали,
|
|
100
|
+
следа не оставляет: работа выглядит понятой ровно до приёмки, и вывести отсутствие вопроса не из
|
|
101
|
+
чего.
|
|
102
|
+
- **Происшествие названо признаком, а не оценкой заднего числа.** Происшествие — заход, в котором
|
|
103
|
+
исполнитель сделал не то, а слой правил этого не отбил. Дефект в коде происшествием не является:
|
|
104
|
+
его объясняет договорённость о продукте. Признак записан один раз, а не выводится каждым заходом
|
|
105
|
+
заново — иначе его назначает тот, кому он мешает.
|
|
112
106
|
- **Происшествие кончается записью, и запись делается в тот же заход.** Через день механизм
|
|
113
107
|
промаха пересказывается уже приглаженно: остаются выводы, а из выводов правило не выводится.
|
|
114
108
|
Запись называет механизм промаха по шагам, что было доступно до него, чем ловилось и что из
|
|
115
109
|
этого ушло в слой правил.
|
|
116
110
|
- **Запись без правки слоя правил закрытой не считается.** Разбор, из которого не вышло ни
|
|
117
|
-
предложения, ни правки закона, правила или паттерна, — жалоба: он объясняет случившееся и
|
|
118
|
-
|
|
111
|
+
предложения, ни правки закона, правила или паттерна, — жалоба: он объясняет случившееся и ничего
|
|
112
|
+
не меняет, а значит повторится.
|
|
119
113
|
- **Закрытая работа оставляет то, что узнала о правилах, там, откуда это возьмёт машина.**
|
|
120
114
|
Понимание, добытое одной работой, всего дороже соседней — и живёт оно ровно до конца захода,
|
|
121
115
|
если осталось в разговоре. Записанное свободным пересказом лежит не хуже, но переносить его
|
|
122
116
|
приходится руками, и переносится оно ровно до первой занятой недели.
|
|
123
117
|
- **У предложенной правки правил назван адрес: сам слой правил, имена этого дерева или его
|
|
124
|
-
надстройка.** Без адреса правку кладут туда, где она видна автору, — то есть в своё дерево, —
|
|
125
|
-
|
|
118
|
+
надстройка.** Без адреса правку кладут туда, где она видна автору, — то есть в своё дерево, — и
|
|
119
|
+
общее оседает в одном месте, оставаясь неизвестным всем остальным.
|
|
126
120
|
- **Предложение, о котором владелец сказал вслух, уходит наружу в тот же ход.** Написанное и не
|
|
127
|
-
отправленное лежит в дереве неотличимо от отправленного: своей записи в слое правил у него
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- **Неудобство отправки — повод сказать о нём, а не повод не отправить.** Довод исполнителя
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
121
|
+
отправленное лежит в дереве неотличимо от отправленного: своей записи в слое правил у него нет,
|
|
122
|
+
и владелец читает работу сделанной, пока не спросит прямо. Слово владельца о предложении —
|
|
123
|
+
«отправь», «заведи», «напиши» — распоряжение, а не тема разговора; показ того, что уехало бы,
|
|
124
|
+
отправкой не является и следа наружу не оставляет.
|
|
125
|
+
- **Неудобство отправки — повод сказать о нём, а не повод не отправить.** Довод исполнителя против
|
|
126
|
+
уже принятого решения владельца остаётся доводом: он называется вслух, работа при этом идёт.
|
|
127
|
+
Отложить исполненное решение может только владелец; отложенное собственным доводом выглядит для
|
|
128
|
+
него сделанным, и цену этого он узнаёт последним.
|
|
135
129
|
- **Работа, из которой видно серию задач, объявляется эпиком до первой из них.** Объявляется
|
|
136
|
-
дважды: карточкой в очереди работ и замыслом рядом с ней. Не объявленная серия существует
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
дважды: карточкой в очереди работ и замыслом рядом с ней. Не объявленная серия существует только
|
|
131
|
+
в голове того, кто её задумал: следующий заход видит разрозненные задачи, порядка между ними не
|
|
132
|
+
находит и берёт ту, что ближе лежит.
|
|
139
133
|
- **Замысел эпика называет разрабатываемую возможность, состав задач и их порядок.** Состав без
|
|
140
134
|
порядка порядком не является: две задачи, у которых порядок держался пониманием, ушли в работу
|
|
141
135
|
наоборот, и вторая переделывалась под первую. Возможность, названная одним словом, через неделю
|
|
142
136
|
читается каждым по-своему.
|
|
143
|
-
- **Порядок задач эпика назначается на планировании и держится до его конца.** Пересмотр по ходу
|
|
144
|
-
|
|
145
|
-
|
|
137
|
+
- **Порядок задач эпика назначается на планировании и держится до его конца.** Пересмотр по ходу —
|
|
138
|
+
решение владельца, записанное там же, где идёт работа. Порядок, назначаемый заново перед каждой
|
|
139
|
+
задачей, назначает тот, кому ближе, и эпик кончается там, где надоел.
|
|
140
|
+
- **Каждая задача объявленного эпика получает свою карточку в очереди работ сразу, а не в день,
|
|
141
|
+
когда за неё берутся.** Замысел эпика держит порядок для того, кто работу ведёт; очередь работ —
|
|
142
|
+
для того, кто на неё смотрит, и эпик, у которого заведена одна карточка из десяти, выглядит там
|
|
143
|
+
работой на один шаг. Незаведённый объём не виден ни владельцу, ни соседней работе, которая берёт
|
|
144
|
+
уже назначенную задачу. Номер карточки встаёт в замысел той же правкой: замысел, называющий
|
|
145
|
+
задачу словами, на «взять следующую» отвечает названием, и карточку заводят заново — с другим
|
|
146
|
+
номером.
|
|
146
147
|
- **Заход исполнителя не кончается вместе с задачей.** Конец задачи — не признак остановки:
|
|
147
148
|
остановиться позволяет только предел заполнения окна. Заход, закрытый на готовой задаче,
|
|
148
|
-
оставляет владельцу пустое место и стоит целого захода на возвращение к тому, что и так было
|
|
149
|
-
|
|
149
|
+
оставляет владельцу пустое место и стоит целого захода на возвращение к тому, что и так было под
|
|
150
|
+
рукой.
|
|
150
151
|
- **Предел заполнения окна останавливает заход только там, где инструмент не сжимает контекст
|
|
151
152
|
сам.** Где сжатие объявлено и приходит раньше предела, окно — не конец захода, а его
|
|
152
|
-
продолжение: контекст сжимается, записанное состояние работы возвращается в него, и работа
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
- **Порог, на котором заход останавливают, стоит позже порога, на котором его продолжают.**
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
- **Переход из состояния в состояние исполнителя не останавливает.** Обязательное
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
153
|
+
продолжение: контекст сжимается, записанное состояние работы возвращается в него, и работа идёт
|
|
154
|
+
дальше тем же заходом. Останавливаться там незачем, а остановка стоит того же, что и всякая
|
|
155
|
+
другая: владелец возвращает исполнителя в работу руками.
|
|
156
|
+
- **Порог, на котором заход останавливают, стоит позже порога, на котором его продолжают.** Два
|
|
157
|
+
порога на одном числе — это не согласие, а гонка, и выигрывает её тот, кто ближе к действию:
|
|
158
|
+
остановка приходит на вызове, а сжатие — между ходами. Расстояние между ними объявляется, а не
|
|
159
|
+
выводится разницей: сжатие идёт не мгновенно, и порог, отстоящий на волос, требование «раньше»
|
|
160
|
+
удовлетворяет, а работу не спасает.
|
|
161
|
+
- **Переход из состояния в состояние исполнителя не останавливает.** Обязательное действие сделано
|
|
162
|
+
— следующее начинается тем же движением, без отчёта владельцу и без его слова. Граница между
|
|
163
|
+
состояниями выглядит законченным куском лучше всякой другой вехи: сделанное названо, отчитаться
|
|
164
|
+
есть чем, — и отчёт встаёт ровно на то место, где должно было стоять следующее действие.
|
|
165
|
+
Владелец читает такой отчёт как сделанную работу, а работа стоит.
|
|
165
166
|
- **Текст, ведущий состояние работы, называет, что делается сразу за ним.** Дочитанный до
|
|
166
|
-
последнего приёма, он кончается ничем: следующего движения в нём нет, и исполнитель выводит
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
понадобится.
|
|
167
|
+
последнего приёма, он кончается ничем: следующего движения в нём нет, и исполнитель выводит его
|
|
168
|
+
из пустоты — то есть останавливается. Названное движение стоит там же, где приёмы, и своими
|
|
169
|
+
словами: одинаковая на все состояния строка перестаёт замечаться раньше, чем понадобится.
|
|
170
170
|
- **Работа, отданная на разбор, освобождает исполнителя, а не останавливает его.** Отданное на
|
|
171
171
|
разбор ждёт владельца, а не машину: следующая задача эпика берётся тем же движением, которым
|
|
172
172
|
предыдущая ушла на разбор.
|
|
173
|
-
- **Ожидание машины работой не занимают.** Проверка, идущая на стороне, не спрашивает
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
- **Ожидание, которое всё-таки останавливает работу, называется владельцу отдельно и прямо.**
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
проверок, потом уберу за собой» от «готово, забирай». Не названное, оно не существует, и
|
|
193
|
-
владелец действует по тому, что видит.
|
|
173
|
+
- **Ожидание машины работой не занимают.** Проверка, идущая на стороне, не спрашивает исполнителя
|
|
174
|
+
ни о чём и не идёт быстрее оттого, что он на неё смотрит. Пока она идёт, работа продолжается:
|
|
175
|
+
берётся следующая задача, а к проверке возвращаются тем ходом, которым читают её конец. Заход,
|
|
176
|
+
проведённый в ожидании, стоит ровно столько же, сколько заход, в котором сделана задача, — и не
|
|
177
|
+
даёт ничего.
|
|
178
|
+
- **Ожидание, которое всё-таки останавливает работу, называется владельцу отдельно и прямо.** Есть
|
|
179
|
+
случаи, где дальше и вправду не пройти: следующая задача стоит на неразобранной, или правка ждёт
|
|
180
|
+
решения, которого нет ни у кого, кроме владельца. Тогда исполнитель говорит три вещи — что
|
|
181
|
+
стоит, чего ждёт и что владелец может с этим сделать. Сказанное вперемешку с отчётом не
|
|
182
|
+
читается: остановка называется отдельно.
|
|
183
|
+
- **Разбор закрытой работы идёт своим ходом и работу не задерживает.** Он видит то, что видно
|
|
184
|
+
только заходу, который работу вёл, — пропустить его нельзя; держать ради него следующую задачу
|
|
185
|
+
незачем. Находки записываются туда, где их найдут после слияния, и показываются владельцу
|
|
186
|
+
целиком: что станет правкой, решает он.
|
|
187
|
+
- **Отдав работу на разбор, исполнитель называет, чего ждёт и что сделает следом.** Владелец видит
|
|
188
|
+
не голову исполнителя, а страницу работы: зелёная проверка и доступное действие читаются как
|
|
189
|
+
«всё кончено». Названное вслух ожидание — единственное, что отличает «жду проверок, потом уберу
|
|
190
|
+
за собой» от «готово, забирай». Не названное, оно не существует, и владелец действует по тому,
|
|
191
|
+
что видит.
|
|
194
192
|
- **Работа не считается готовой, пока исполнитель не сказал этого прямо.** Готовность объявляет
|
|
195
193
|
тот, кто работу вёл, — отдельной просьбой и про эту работу. Зелёные проверки готовностью не
|
|
196
194
|
являются: они говорят, что не сломано, и молчат о том, осталось ли что-то сделать. Молчание
|
|
197
|
-
исполнителя владелец читает как готовность, и между двумя прочтениями теряется всё, что
|
|
198
|
-
|
|
199
|
-
- **Уборка за работой идёт до того, как о готовности сказано.** Всё, что работа обязана убрать
|
|
200
|
-
|
|
201
|
-
|
|
195
|
+
исполнителя владелец читает как готовность, и между двумя прочтениями теряется всё, что стояло
|
|
196
|
+
после разбора.
|
|
197
|
+
- **Уборка за работой идёт до того, как о готовности сказано.** Всё, что работа обязана убрать за
|
|
198
|
+
собой, убирается раньше просьбы включить её в общее дерево, а не после согласия. После включения
|
|
199
|
+
убирать уже некому: работа перешла к следующей задаче.
|
|
202
200
|
- **Пока эпик не кончился, следующая работа не выбирается, а берётся.** Выбор, предложенный
|
|
203
201
|
владельцу при назначенном порядке, — это просьба назначить его заново: он уже назначен, и
|
|
204
202
|
предлагать его повторно значит отменять собственное планирование.
|
|
203
|
+
- **Берётся следующая задача из замысла эпика, а не из списка очереди работ.** Список отсортирован
|
|
204
|
+
номером и показывает свежие задачи сверху; порядок эпика он не держит и держать не может — там
|
|
205
|
+
лежат задачи всех эпиков сразу. Замысел эпика открывается перед взятием и отвечает за один
|
|
206
|
+
вызов: какая задача следующая и не ушла ли она в соседний эпик.
|
|
207
|
+
- **Кончившийся эпик называется владельцу тем же ходом, которым берётся работа вне его.** Пока
|
|
208
|
+
эпик идёт, следующая работа берётся молча; кончился — и следующий шаг перестал быть очевидным
|
|
209
|
+
для обоих. Исполнитель, взявший работу вне кончившегося эпика и промолчавший, оставляет
|
|
210
|
+
владельца в уверенности, что эпик продолжается.
|
|
211
|
+
- **Эпик не закрывается, пока хоть один признак его конца подтверждён только чтением.** Признак,
|
|
212
|
+
проверяемый глазами, закрывает работу лишь после того, как его назвали проверенным вслух —
|
|
213
|
+
командой или замером с их выводом. Пометка «подтверждается живым замером» проверкой не является:
|
|
214
|
+
это обещание её сделать, и висит оно ровно до того, как кто-нибудь спросит. Закрытый по двум
|
|
215
|
+
признакам из трёх, эпик уносит третий в описание прошлого, где его уже никто не ищет.
|
|
205
216
|
- **Замеченное по ходу и к эпику не относящееся становится задачей в очереди работ, а не работой
|
|
206
217
|
сейчас.** Отвлечение выглядит дешёвым ровно до того, как окажется, что вместе с ним уехала
|
|
207
218
|
правка соседнего домена: эпик при этом стоит, а откатывать приходится обе работы.
|
|
@@ -209,12 +220,11 @@
|
|
|
209
220
|
Непонятно бывает от того, что замысел не открыли: он лежит и держит решения, которых в коде не
|
|
210
221
|
видно.
|
|
211
222
|
- **Положение эпика показывается владельцу таблицей — в передаче и при остановке за его
|
|
212
|
-
решением.** Это два момента, когда владелец смотрит на работу снаружи: в первый он забирает её
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
223
|
+
решением.** Это два момента, когда владелец смотрит на работу снаружи: в первый он забирает её в
|
|
224
|
+
новый заход, во второй решает, куда её вести. Порядок задач при этом лежит в замысле, а замысел
|
|
225
|
+
ни там, ни там не открывают — передача пересказывает один заход, вопрос называет одну развилку,
|
|
226
|
+
и по обоим не видно ни сделанного, ни оставшегося.
|
|
216
227
|
- **Таблица показывает все задачи эпика разом — закрытые, текущую и назначенные.** Строка на
|
|
217
228
|
задачу: место по порядку, задача, состояние; текущая отличается от остальных на вид. Порядок у
|
|
218
|
-
закрытых фактический, у будущих назначенный, и расхождение между ними тоже
|
|
219
|
-
|
|
220
|
-
стоила; перечень одних закрытых не показывает, сколько ещё впереди.
|
|
229
|
+
закрытых фактический, у будущих назначенный, и расхождение между ними тоже утверждение. Перечень
|
|
230
|
+
одних оставшихся не показывает, чего работа стоила; одних закрытых — сколько ещё впереди.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: doc-style-sweep
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: doc-style
|
|
5
|
-
description: Паттерн правила doc-style. Брать, когда документ накопил список работ и его надо разобрать на действующее и
|
|
5
|
+
description: Паттерн правила doc-style. Брать, когда документ накопил список работ и его надо разобрать на действующее и закрытое: признак отбора, обход по утверждениям, сверка с очередью работ, судьба самого файла. Новый текст — паттерн doc-style-write.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Разбор документа, накопившего список работ
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: doc-style-trace
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: doc-style
|
|
5
|
-
description: Паттерн правила doc-style. Брать, когда полнота текстов проверяется со стороны
|
|
5
|
+
description: Паттерн правила doc-style. Брать, когда полнота текстов проверяется со стороны работы: обратный проход по закрытым задачам, признак отбора машиной, чего он не видит, три исхода по каждой задаче. Разбор одного документа — паттерн doc-style-sweep.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Обратный проход: закрытые задачи против текстов
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать на заведение рабочего элемента, ветки, коммит и
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на заведение рабочего элемента, ветки, коммит и пуш: элемент с областью и итерацией, перевод состояния, слияние двух задач в одну, работа от машинной записи, обход требования документа. Открытие PR — паттерн git-workflow-pr.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Задача, ветка и коммит
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит и
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит и пуш: команда заведения со всеми четырьмя шагами, перевод колонки, слияние двух задач в одну, работа от машинной записи, обход требования документа. Открытие PR — паттерн git-workflow-pr.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Задача, ветка и коммит
|
|
@@ -54,6 +54,12 @@ gh project item-add <номер борды> --owner <владелец> --url <а
|
|
|
54
54
|
общий, и по одной задаче он не виден. Шестнадцать задач подряд напечатали номер, и ни одна не
|
|
55
55
|
попала в очередь так, чтобы её увидел владелец.
|
|
56
56
|
|
|
57
|
+
Задача, заведённая по тексту документа, называет в теле проверку в дереве. Цитата основанием не
|
|
58
|
+
бывает: документ говорит о замысле, стареет молча и остаётся верным на вид, а задача заводится
|
|
59
|
+
под то, что в дереве сейчас. В теле стоит файл и символ, где промах виден, либо вывод команды,
|
|
60
|
+
который его показывает. Не нашлось ни того ни другого — задача не заводится, а строка документа
|
|
61
|
+
правится тем ходом, которым её прочитали.
|
|
62
|
+
|
|
57
63
|
Название тикета говорит, что не так, а не что сделать: PR потом переводит его в сделанное.
|
|
58
64
|
Номер в заголовок руками не пишется — он известен только после создания, и команда дописывает
|
|
59
65
|
его сама.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-commit
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит и
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на заведение задачи, ветки, коммит и пуш: заведение задачи с меткой списка, перевод по спискам доски, слияние двух задач в одну, работа от машинной записи, обход требования документа. Открытие MR — паттерн git-workflow-pr.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Ветка, коммит и MR
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-docker
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: deploy-flow
|
|
5
|
-
description: Паттерн правила deploy-flow. Брать при работе с образами на своей
|
|
5
|
+
description: Паттерн правила deploy-flow. Брать при работе с образами на своей машине: подъём и перезапуск демона, диагностика «висящей» команды, сборка под платформу прод-сервера, вход в реестр из службы. Команды прод-сервера — паттерн git-workflow-restart.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Образы на своей машине
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-merge
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать, когда главная ветка вливается в ветку задачи и разрешается
|
|
5
|
+
description: Паттерн правила git-workflow. Брать, когда главная ветка вливается в ветку задачи и разрешается конфликт: порядок мержа, разбор по роду файла, сверка дописанного с очередью работ, перечитывание тела открытой заявки. Заведение ветки и коммит — паттерн git-workflow-commit.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Мерж главной ветки в ветку задачи
|
|
@@ -20,17 +20,24 @@ description: Паттерн правила git-workflow. Брать, когда
|
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
22
|
git fetch origin
|
|
23
|
-
|
|
23
|
+
GIT_AUTHOR_NAME="<бот>" GIT_AUTHOR_EMAIL="<номер>+<бот>@users.noreply.github.com" \
|
|
24
|
+
GIT_COMMITTER_NAME="<бот>" GIT_COMMITTER_EMAIL="<номер>+<бот>@users.noreply.github.com" \
|
|
25
|
+
git merge origin/main --no-edit
|
|
24
26
|
git diff --name-only --diff-filter=U # что встало конфликтом
|
|
25
27
|
```
|
|
26
28
|
|
|
29
|
+
Подпись стоит в самой команде: коммит слияния заводит она, а не отдельный `git commit`, и
|
|
30
|
+
переставить его подпись потом нечем — ушедший за подписью человека мерж отбивается на отправке
|
|
31
|
+
и чинится перебазированием на главную ветку.
|
|
32
|
+
|
|
27
33
|
Список конфликтов читается целиком до первого разрешения: род файла решает приём, и разные
|
|
28
34
|
файлы одного мержа разрешаются по-разному.
|
|
29
35
|
|
|
30
36
|
| Что встало конфликтом | Как разрешается |
|
|
31
37
|
| -------------------------------- | ---------------------------------------------------------------------------------- |
|
|
32
38
|
| код | ловушка правила `git-workflow` про сторону-удаление; после — `npm run check:dupes` |
|
|
33
|
-
| спек в `docs/specs/` | сохранением обеих
|
|
39
|
+
| спек в `docs/specs/` | сохранением обеих сторон, если обе дописывали; снятый одной стороной раздел остаётся снятым — правило `spec-driven`; после — `npm run check:specs` |
|
|
40
|
+
| компаньон правила рядом со скилом | сохранением обеих сторон — те же две дописи в одну таблицу; после — `npm run check:specs` |
|
|
34
41
|
| список работ (`docs/BACKLOG.md`) | признаком отбора — паттерн `doc-style-sweep` |
|
|
35
42
|
|
|
36
43
|
## Что дописала ветка, видно только от точки расхождения
|
|
@@ -98,3 +105,7 @@ PR описывал дерево на день, когда его написал
|
|
|
98
105
|
- Сторона ветки перенесена без сверки с очередью работ: одна работа стала двумя записями.
|
|
99
106
|
- После разрешения прогнана сборка, а проверки текстов — нет: конфликта в них сборке не видно.
|
|
100
107
|
- Тело PR оставлено прежним: ревьювер читает утверждение о дереве, которого больше нет.
|
|
108
|
+
- Раздел, снятый главной веткой, вернулся «сохранением обеих сторон»: в спеке два экземпляра
|
|
109
|
+
одного абзаца, и снятый читается как действующий.
|
|
110
|
+
- Мерж ушёл за подписью человека: переменных в команде слияния не было, а строка о подписи
|
|
111
|
+
лежит ниже команды и читается уже после коммита.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: git-workflow-pr
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: git-workflow
|
|
5
|
-
description: Паттерн правила git-workflow. Брать на открытие PR и всё, что с ним
|
|
5
|
+
description: Паттерн правила git-workflow. Брать на открытие PR и всё, что с ним связано: формат заголовка, черновик и его снятие, привязка к рабочему элементу, ревьювер, образец тела, чтение состояния PR, чеклист проверок. Заведение элемента и коммит — паттерн git-workflow-commit.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Заявка на слияние
|