@rt-tools/agent-kit 0.22.0 → 0.24.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 +8 -2
- package/assets/checks/board-long-work.github.mjs +101 -0
- package/assets/checks/board-runs.github.mjs +34 -0
- package/assets/checks/board.github.mjs +1 -1
- package/assets/checks/check-board.github.mjs +30 -2
- package/assets/checks/check-doc-paths.mjs +24 -5
- package/assets/checks/check-file-size.mjs +8 -2
- package/assets/checks/check-prose-style.mjs +10 -1
- package/assets/checks/check-reuse.mjs +4 -1
- package/assets/checks/check-schema-drift.mjs +65 -6
- package/assets/checks/rt-kit-checks.config.mjs +13 -0
- package/assets/checks/signals.mjs +41 -1
- package/assets/commands/next-session.md +16 -5
- package/assets/defaults/gate-map.sh +13 -0
- package/assets/defaults/project.sh +26 -0
- package/assets/defaults/shell.sh +18 -3
- package/assets/hooks/browser-guard-device-id.sh +42 -12
- package/assets/hooks/browser-guard-no-asking.sh +5 -1
- package/assets/hooks/dispatch.sh +40 -9
- package/assets/hooks/docs-guard.sh +10 -0
- package/assets/hooks/exam-guard.sh +66 -16
- package/assets/hooks/git-guard-delivery-draft.sh +78 -0
- package/assets/hooks/git-guard-delivery.sh +64 -122
- package/assets/hooks/git-guard-main.sh +39 -4
- package/assets/hooks/git-guard-push-tests.sh +71 -3
- package/assets/hooks/glossary-load.sh +23 -2
- package/assets/hooks/grill-gate.sh +62 -0
- package/assets/hooks/hook-input.sh +17 -6
- package/assets/hooks/rule-source-guard.sh +11 -0
- package/assets/hooks/stand-login-guard.sh +101 -0
- package/assets/hooks/write-targets.sh +37 -4
- package/assets/laws/autonomous-work.md +30 -0
- package/assets/laws/project-documentation.md +8 -0
- package/assets/laws/verifiability.md +12 -2
- package/assets/laws/work-conduct.md +59 -65
- package/assets/patterns/autonomous-work-run.md +105 -0
- package/assets/patterns/browser-verification-measure.md +41 -1
- package/assets/patterns/browser-verification-stand.md +57 -16
- package/assets/patterns/doc-style-human.md +75 -0
- package/assets/patterns/doc-style-write.md +16 -0
- package/assets/patterns/git-workflow-commit.azure.md +12 -0
- package/assets/patterns/git-workflow-commit.github.md +16 -3
- package/assets/patterns/git-workflow-commit.gitlab.md +12 -0
- package/assets/patterns/git-workflow-merge.md +8 -0
- package/assets/patterns/git-workflow-pr-ready.md +93 -0
- 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/task-flow-start.md +48 -48
- package/assets/patterns/testing-e2e.md +18 -8
- package/assets/patterns/ts-procedure.md +3 -2
- package/assets/pitfalls/task-flow.md +40 -40
- package/assets/rules/autonomous-work.md +92 -0
- package/assets/rules/browser-verification.md +35 -3
- package/assets/rules/deploy-flow.azure.md +7 -0
- package/assets/rules/deploy-flow.github.md +7 -0
- package/assets/rules/deploy-flow.gitlab.md +7 -0
- package/assets/rules/doc-style.md +54 -0
- package/assets/rules/git-workflow.azure.md +8 -0
- package/assets/rules/git-workflow.github.md +59 -63
- package/assets/rules/git-workflow.gitlab.md +8 -0
- package/assets/rules/reuse-first.md +25 -5
- package/assets/rules/styling-bem.md +8 -1
- package/assets/rules/task-flow.md +108 -109
- package/assets/rules/testing.md +21 -0
- package/assets/skills/agent-kit.md +72 -82
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +69 -2
- package/lib/commands.js.map +1 -1
- package/lib/enroll.d.ts.map +1 -1
- package/lib/enroll.js +1 -1
- package/lib/enroll.js.map +1 -1
- package/lib/observations.d.ts +10 -1
- package/lib/observations.d.ts.map +1 -1
- package/lib/observations.js +1 -0
- package/lib/observations.js.map +1 -1
- package/lib/override-marks.d.ts +24 -0
- package/lib/override-marks.d.ts.map +1 -0
- package/lib/override-marks.js +98 -0
- package/lib/override-marks.js.map +1 -0
- package/lib/push-gate.d.ts +14 -0
- package/lib/push-gate.d.ts.map +1 -0
- package/lib/push-gate.js +93 -0
- package/lib/push-gate.js.map +1 -0
- package/lib/shipment.d.ts.map +1 -1
- package/lib/shipment.js +1 -1
- package/lib/shipment.js.map +1 -1
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.24.0.tgz +0 -0
- package/assets/laws/application/access.md +0 -34
- package/assets/laws/application/locales.md +0 -33
- package/assets/laws/application/search-visibility.md +0 -24
- package/assets/patterns/permissions-procedure.md +0 -71
- package/assets/patterns/seo-page.md +0 -104
- package/assets/patterns/seo-verify.md +0 -83
- package/assets/patterns/translations-content.md +0 -107
- package/assets/patterns/translations-key.md +0 -64
- package/assets/rules/permissions.md +0 -116
- package/assets/rules/seo.md +0 -139
- package/assets/rules/translations.md +0 -96
- package/rt-tools-agent-kit-0.22.0.tgz +0 -0
|
@@ -53,6 +53,12 @@ flowchart TD
|
|
|
53
53
|
опирается, названо в именах дерева.
|
|
54
54
|
- **Работа начинается с чтения готового, а не с чистого файла.** Сначала находится опора —
|
|
55
55
|
компонент кита, базовый класс, образец в соседнем домене, — потом пишется своё поверх неё.
|
|
56
|
+
- **Ограничение, придуманное на месте, проверяется поиском по дереву прежде, чем стать доводом.**
|
|
57
|
+
«Так делать нельзя» — утверждение о дереве наравне с прочими, и дерево, где приём уже применён,
|
|
58
|
+
отвечает на него одной командой. Названное владельцу до поиска, оно закрывает путь, которым
|
|
59
|
+
дерево пользуется каждый день, и вызывает перебор ненужных вариантов: решение «править класс
|
|
60
|
+
чужого набора из приложения нельзя» не проверялось, пока образец такой правки лежал в том же
|
|
61
|
+
файле — с доводом в соседней строке.
|
|
56
62
|
- **Значение интеграции берётся тем же путём, что и соседнее значение той же интеграции.**
|
|
57
63
|
Половина интеграции, сделанная как положено, — готовый образец, и стоит он не в чужом домене,
|
|
58
64
|
а строкой выше: рядом с зашитым в код идентификатором карты жил её же ключ, приходящий
|
|
@@ -64,7 +70,16 @@ flowchart TD
|
|
|
64
70
|
- **Панель правки записи наследует общую основу, а не собирается своей разметкой.** Тогда она
|
|
65
71
|
открывается, закрывается и спрашивает про несохранённое одинаково во всех разделах.
|
|
66
72
|
- **Об удаче и об отказе сообщает общая шина, а не своя разметка на экране.** Своё сообщение
|
|
67
|
-
расходится с соседним видом, местом и временем показа.
|
|
73
|
+
расходится с соседним видом, местом и временем показа. Готовое сообщение набора, поставленное
|
|
74
|
+
на экран, — та же своя разметка: правило говорит про место показа, а не про тег, и замена
|
|
75
|
+
своего абзаца на готовый компонент нарушения не снимает — она снимает признак.
|
|
76
|
+
- **Инлайновое сообщение законно там, где панель правки записи остаётся открытой после отказа.**
|
|
77
|
+
Держит его основа панели; экран, список и публичная страница к этому месту не относятся.
|
|
78
|
+
- **Маркер отступления ставится после чтения инвентаря готового, и прочитанное называется рядом.**
|
|
79
|
+
Объяснение при маркере называет компонент кита и то, чего в нём не хватает. Маркер без этого —
|
|
80
|
+
не отступление, а глушитель: он снимает признак, ничего не доказав.
|
|
81
|
+
- **Проверка не снимается с гейта ради того, чтобы пуш прошёл.** Расхождение закрывается готовым
|
|
82
|
+
либо объявляется отступлением в самом коде; надстройка профиля для этого не средство.
|
|
68
83
|
- **Компонент объявляется тремя файлами: `.ts`, `.html`, `.scss`.** `template:` и `styles:` в
|
|
69
84
|
декораторе, атрибут `style=` и правка размеров через `[ngStyle]` — это стили, до которых не
|
|
70
85
|
дотянется ни кит, ни `stylelint`.
|
|
@@ -104,16 +119,21 @@ flowchart TD
|
|
|
104
119
|
|
|
105
120
|
## Признаки, по которым видно, что готовое обошли
|
|
106
121
|
|
|
107
|
-
Списком их здесь нет: признак — это
|
|
122
|
+
Списком их здесь нет: признак — это запись в файле, а не текст правила и не код проверки. Наборы лежат
|
|
108
123
|
при пакете, по файлу на пакет rt-tools, и в каждом только то, что везёт он сам. Дерево называет
|
|
109
124
|
нужные ему наборы ключом `reuse.bundles` в настройке проверок и дописывает свои признаки файлом,
|
|
110
|
-
названным ключом `reuse.signals`; совпавший ключ замещает пакетный, новый дописывается.
|
|
125
|
+
названным ключом `reuse.signals`; совпавший ключ замещает пакетный, новый дописывается. Там же
|
|
126
|
+
дерево называет директивы своей дизайн-системы — ключом `reuse.kitDirectives`: нативный тег,
|
|
127
|
+
несущий такую директиву, из признаков вырезается, потому что источник вида в дереве бывает не
|
|
128
|
+
один. Гард на
|
|
111
129
|
правке и сплошная проверка читают отсюда оба — разойтись им нечем.
|
|
112
130
|
|
|
113
131
|
Что бывает признаком:
|
|
114
132
|
|
|
115
133
|
- нативный контрол в шаблоне там, где кит везёт свой;
|
|
116
|
-
- отказ, предупреждение или ожидание, собранные руками вместо
|
|
134
|
+
- отказ, предупреждение или ожидание, собранные руками вместо готового, — признак называет тег,
|
|
135
|
+
а решение принимается по месту показа: готовое сообщение на экране закрывает признак, не
|
|
136
|
+
закрывая нарушения;
|
|
117
137
|
- наложение поверх страницы, объявленное своими стилями, — подложка, порядок слоёв, вращение;
|
|
118
138
|
- раскладка, объявленная в файле стилей экрана, а не применённая директивами из общего слоя;
|
|
119
139
|
- своя реализация того, что даёт основа кита, вместо наследования;
|
|
@@ -133,7 +153,7 @@ flowchart TD
|
|
|
133
153
|
- Перенос переизобретением не считается: строку, которая уже лежит в файле, гард из
|
|
134
154
|
проверяемого текста вычёркивает, а сверка идёт без отступов — при переезде блок меняет
|
|
135
155
|
отступ, оставаясь тем же кодом.
|
|
136
|
-
- Ответ,
|
|
156
|
+
- Ответ, сказанный до чтения образца, образец отменяет: согласованная форма выборки списка
|
|
137
157
|
переигрывалась вместе с контрактом через два вопроса после того, как была принята.
|
|
138
158
|
- **Набор объявляется по тому, что дерево потребляет, а не по тому, что пакет везёт.** Дерево, в
|
|
139
159
|
котором кит написан, а не позван, объявив его набор, получает советы звать кит на файлах самого
|
|
@@ -68,6 +68,13 @@ flowchart TD
|
|
|
68
68
|
вне кита файл стилей по умолчанию пустой.
|
|
69
69
|
<!-- rt-when: *.scss *.css -->
|
|
70
70
|
|
|
71
|
+
- **Одна вещь называется одним именем во всех местах, где она встречается.** Раскладка, у которой
|
|
72
|
+
для страницы, панели правки и окна заведены три словаря с общими именами в разных значениях,
|
|
73
|
+
общим слоем не считается: место объявления совпадает, а значение имени — нет. Выбирая имя,
|
|
74
|
+
исполнитель попадает в чужой словарь и приносит чужой отступ, а проверки этого не видят. Место,
|
|
75
|
+
где элемент стоит, задаётся видом блока, а не вторым набором имён.
|
|
76
|
+
<!-- rt-when: *.scss *.css *.html -->
|
|
77
|
+
|
|
71
78
|
- **Шторку и окно открывает служба кита, а не номер слоя.** Числа шкалы сравниваются только
|
|
72
79
|
между соседями по разметке; служба выносит разметку наружу, к `<body>`, и сравнивать её
|
|
73
80
|
становится не с чем.
|
|
@@ -81,7 +88,7 @@ flowchart TD
|
|
|
81
88
|
- **Предел ширины объявляется вместе с судьбой не влезшего.** Предел и место в строке сами по
|
|
82
89
|
себе ничего не прячут и не переносят: у узла, который может получить значение длиннее своего
|
|
83
90
|
места, стоит либо обрезка с многоточием, либо перенос. Без этого текст молча вылезает за
|
|
84
|
-
границы и ложится поверх соседа, а разрешение элементу сжаться
|
|
91
|
+
границы и ложится поверх соседа, а разрешение элементу сжаться обрезки не заменяет.
|
|
85
92
|
<!-- rt-when: *.scss *.css -->
|
|
86
93
|
|
|
87
94
|
- **Обрезка идёт в паре с подсказкой.** Обрезок без подсказки читается как целое значение:
|
|
@@ -41,8 +41,7 @@ description: Правило под «Закон о ведении работы»
|
|
|
41
41
|
## Состояния работы
|
|
42
42
|
|
|
43
43
|
Единица работы — состояние, а не шаг. У состояния есть вход, обязательное действие и выход, и
|
|
44
|
-
пока действие не сделано, работа стоит в том же состоянии.
|
|
45
|
-
кончался, а что делать дальше, выводилось из соседних строк.
|
|
44
|
+
пока действие не сделано, работа стоит в том же состоянии.
|
|
46
45
|
|
|
47
46
|
Состояние объявляется в разделе «Где стоим» хода работы машиночитаемой строкой
|
|
48
47
|
``- **Состояние:** `этап-идёт` `` и перезаписывается вместе с ним.
|
|
@@ -62,20 +61,23 @@ description: Правило под «Закон о ведении работы»
|
|
|
62
61
|
| `влито` | PR слит человеком | разбор работы правилами и сверка очереди | `task-flow-archive` |
|
|
63
62
|
|
|
64
63
|
Ни у одного состояния обязательное действие не звучит как «ждать»: ожидание чужого шага
|
|
65
|
-
состоянием работы не
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
подтверждается оно выводом, а не памятью о том, что заводил сам исполнитель. Заполнение окна
|
|
64
|
+
состоянием работы не считается, поэтому в `работа-отдана` обязательное действие — следующая
|
|
65
|
+
задача, а не открытый PR. Блокированная задача следующей не считается: это то же ожидание под
|
|
66
|
+
именем работы. Следующая берётся из очереди работ, а очередь спрашивается командой: «задач нет» —
|
|
67
|
+
утверждение о дереве, и подтверждается оно выводом, а не памятью исполнителя. Заполнение окна
|
|
70
68
|
захода состоянием тоже не бывает: заход кончается передачей, а работа остаётся там, где стояла.
|
|
69
|
+
**Открытая карточка о взятости работы не говорит.** Карточку закрывает слияние, и в заходе без
|
|
70
|
+
открытия заявок список открытых не убывает. Невзятой задачу делает отсутствие следа в дереве:
|
|
71
|
+
открытые номера сверяются с описанием прошлого — на закрытую работу там лежит запись с её номером.
|
|
72
|
+
Сверка стоит одной команды и отвечает про обе стороны, список открытых — ни про одну.
|
|
73
|
+
|
|
71
74
|
Чем ход кончается — правило `turn-conduct` под тем же законом.
|
|
72
75
|
|
|
73
76
|
Перечень показывается владельцу в начале работы, и на нём же отмечается, где стоим.
|
|
74
77
|
|
|
75
78
|
Последние два состояния объявить на диске уже нечем: ход работы уезжает вместе с папкой, а папка
|
|
76
|
-
разбирается раньше, чем открывается PR. Признак у них
|
|
77
|
-
|
|
78
|
-
работы виду не подлежит, и хвост из четырёх шагов держится паттерном, а не объявлением.
|
|
79
|
+
разбирается раньше, чем открывается PR. Признак у них в истории ветки — коммит разбора папки, — и
|
|
80
|
+
читает его гард, а не строка в файле.
|
|
79
81
|
|
|
80
82
|
## Ход
|
|
81
83
|
|
|
@@ -112,128 +114,127 @@ flowchart TD
|
|
|
112
114
|
|
|
113
115
|
## Как закон применяется здесь
|
|
114
116
|
- **Правка кода приложения отбивается, пока работа не дошла до состояния, в котором код
|
|
115
|
-
правится.** Гард
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
ветки: папка, разобранная её коммитом, означает отданную работу, и правка по замечаниям идёт
|
|
122
|
-
без замысла на диске.
|
|
117
|
+
правится.** Гард требует три вещи: папку задачи по имени ветки, замысел в ней и объявленное
|
|
118
|
+
состояние. У договорённости о продукте свой гард на те же события.
|
|
119
|
+
- **Гард судит объявленный переход, а не наличие файлов.** Пустой замысел лежит так же, как
|
|
120
|
+
написанный, поэтому отказ снимает объявленное состояние — `этап-идёт`, `этапы-кончились`,
|
|
121
|
+
`разбор-кончился`. Четвёртый путь — история ветки: папка, разобранная её коммитом, означает
|
|
122
|
+
отданную работу.
|
|
123
123
|
- **Строка состояния, переведённая вперёд, — то же объявление намерения, только машиночитаемое.**
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
Исполнитель, которому сказано только «не в том состоянии», перепишет строку состояния вместо
|
|
128
|
-
того, чтобы сделать шаг.
|
|
124
|
+
Состояние объявляется тем ходом, в котором его обязательное действие начато делом.
|
|
125
|
+
- **Отказ по состоянию называет обязательное действие объявленного состояния.** Услышав только
|
|
126
|
+
«не в том состоянии», исполнитель перепишет строку состояния вместо шага.
|
|
129
127
|
- **Именем состояния считается только слово из перечня.** Своё слово не говорит ни о входе, ни о
|
|
130
|
-
выходе, ни
|
|
131
|
-
- **Два требования — два гарда, и снять одно можно, не теряя второго.**
|
|
132
|
-
|
|
133
|
-
порознь: строка о неизменном поведении снимает договорённость, а не требование дойти до
|
|
134
|
-
правки кода.
|
|
128
|
+
выходе, ни о действии.
|
|
129
|
+
- **Два требования — два гарда, и снять одно можно, не теряя второго.** Судят порознь: строка о
|
|
130
|
+
неизменном поведении снимает договорённость, а не требование дойти до правки кода.
|
|
135
131
|
- **Влитая договорённость ветку не запирает.** После вливания директории «предложено» на диске
|
|
136
|
-
нет, а замысел на неё
|
|
137
|
-
истории ветки.
|
|
132
|
+
нет, а замысел ссылается на неё до конца работы: влитое от незаведённого гард отличает по
|
|
133
|
+
истории ветки.
|
|
138
134
|
- **Договорённость требуется по путям правки, а не по оценке задачи.** `apps/**` и `libs/**` —
|
|
139
135
|
признак; правила, тексты, обвязка и зависимости под него не подпадают. Обход — строка
|
|
140
136
|
`**Поведение:** не меняется — <причина владельца>` в замысле; пустая причина не принимается.
|
|
141
137
|
- **Что требует слова владельца, берётся списком, а не оценкой на месте.** Оценку «это безопасно»
|
|
142
|
-
назначает тот, кому она
|
|
143
|
-
|
|
138
|
+
назначает тот, кому она удобна.
|
|
139
|
+
- **На команду владельца ответ начинается с результата, а не с намерения и не с его обоснования.**
|
|
140
|
+
Обоснование при принятом чужом решении читается как его оценка. Исключение одно: исполнение
|
|
141
|
+
остановлено препятствием — тогда называется препятствие.
|
|
144
142
|
- **Заход работу не начинает сам.** Начало требует слова владельца в этом же заходе: передача,
|
|
145
|
-
состояние из хука запуска и назначенный эпик говорят, что делать,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
этапа, пуш и заявка предписаны им самим: спрашивают о том, чего в нём нет.
|
|
143
|
+
состояние из хука запуска и назначенный эпик говорят, что делать, а не работать ли.
|
|
144
|
+
Судится форма реплики: пустая реплика, одно слово или один путь работу не заказывают.
|
|
145
|
+
- **Указание работать по ходу работы покрывает все его шаги, включая меняющие историю.**
|
|
146
|
+
Спрашивают о том, чего в ходе работы нет.
|
|
150
147
|
- **Вопрос, записанный прошлым заходом, вопросом владельца не становится.** Он адресован автору
|
|
151
148
|
передачи, и часть таких вопросов закрыта шагом работы.
|
|
152
|
-
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
- **Указание владельца действует до его отмены, и новый факт против него — строка в ответе о
|
|
150
|
+
цене, а не новый вопрос.** Переспрашивают то, чего указание не покрывает. Меню, где два
|
|
151
|
+
варианта из трёх предлагают отменить решение владельца, и есть такая отмена.
|
|
152
|
+
- **Ответ, данный репликой владельца, записан наравне с ответом в документе.** Вопрос, на который
|
|
153
|
+
в разговоре уже отвечали, второй раз не задают.
|
|
154
|
+
- **Слово владельца об устройстве — постановка, а не решение.** Названное им обычно уже есть в
|
|
155
|
+
дереве под этим словом — имя на экране, раздел спека, поле модели — и сверяется с ними до
|
|
156
|
+
правки. Разошлось — спрашивается владелец.
|
|
156
157
|
- **Папка задачи заводится под любую работу, без исключений.** Исключение, у которого есть хоть
|
|
157
|
-
одна законная форма, исполняется как разрешение. Заводится она до первой
|
|
158
|
-
заходов уйдёт на работу, заранее не знает никто.
|
|
158
|
+
одна законная форма, исполняется как разрешение. Заводится она до первой правки.
|
|
159
159
|
- **Папка задачи едет в ветку коммитом, а не живёт в одном рабочем дереве.** Незакоммиченная,
|
|
160
|
-
она проходит
|
|
161
|
-
|
|
160
|
+
она проходит правки без отказа, и отказ приходит в конце, когда замысел уже снят. Вне истории
|
|
161
|
+
законен один черновик без номера.
|
|
162
162
|
- **Папка задачи разбирается последним коммитом до открытия PR, а не после одобрения.** Человек
|
|
163
|
-
вливает, как только видит зелёное, и закрывающему коммиту места не
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
о заблокированной у черновика кнопке слияния.
|
|
163
|
+
вливает, как только видит зелёное, и закрывающему коммиту места не остаётся.
|
|
164
|
+
- **Открыв PR, исполнитель называет владельцу номер, чего ждёт и что сделает следом.** Ждёт он
|
|
165
|
+
прогона, следом снимает черновик: зелёный прогон говорит, что не сломано, и молчит о
|
|
166
|
+
заблокированной кнопке слияния.
|
|
168
167
|
- **Просьба о слиянии — отдельный ход, и раньше зелёного прогона её не бывает.** Порядок один:
|
|
169
168
|
папка разобрана и запушена → PR открыт черновиком → прогон зелёный → черновик снят →
|
|
170
169
|
исполнитель просит влить, называя номер.
|
|
171
|
-
- **PR открывается черновиком, а не в конце работы.** До открытия владелец правки не
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
- **PR открывается черновиком, а не в конце работы.** До открытия владелец правки не видит, а
|
|
171
|
+
открытый PR читается как приглашение влить. Черновик снимается тем ходом, которым исполнитель
|
|
172
|
+
говорит, что решение готово.
|
|
174
173
|
- **Гард замысла — нижняя граница требования, а не его предел.** Он требует папку только под
|
|
175
|
-
правку кода приложения, а статья выше — под любую работу.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
-
|
|
185
|
-
|
|
186
|
-
|
|
174
|
+
правку кода приложения, а статья выше — под любую работу.
|
|
175
|
+
- **Указание работать по правилу — это указание делать его шаги, включая меняющие историю.**
|
|
176
|
+
Отметка этапа, коммит, пуш и открытие заявки правилом предписаны.
|
|
177
|
+
- **Взятая задача ходом не кончается.** Заведение задачи, ветки, колонки и папки — подготовка:
|
|
178
|
+
работа переходит в состояние записанного замысла, где действие другое. Гард завершения хода
|
|
179
|
+
называет в отказе первый этап.
|
|
180
|
+
- **Ожидание одной части этапа остановкой этапа не бывает.** Независимые от ожидаемого части
|
|
181
|
+
делаются тем же ходом, а владельцу называется, что сделано и что осталось на его шаг. Отбитая
|
|
182
|
+
команда читается так же: сперва делается всё остальное.
|
|
183
|
+
- **Находка, сделанная посреди этапа, сверяется с условиями выхода замысла до первой правки.**
|
|
184
|
+
Соседство по предмету принадлежности не доказывает: работа над слоем правил и работа над
|
|
185
|
+
командами, которые этот слой вызывает, откатываются порознь. Не названная ни одним условием
|
|
186
|
+
выхода, находка идёт в раздел о том, чего работа не делает, и заводится задачей.
|
|
187
187
|
- **Сделанное отмечается только в ходе работы.** «Где стоим» перезаписывается каждым заходом, а
|
|
188
188
|
не дописывается: это первое, что читает следующий заход.
|
|
189
189
|
- **Слово для нового понятия ищется в словаре дерева.** Общую часть везёт пакет, предметную
|
|
190
190
|
дописывает дерево надстройкой; словарь уезжает в контекст на запуске сессии целиком, поэтому
|
|
191
191
|
«не читал» основанием не бывает.
|
|
192
192
|
- **Папка задачи заводится черновиком и получает номер командой.** До конца разбора неизвестно,
|
|
193
|
-
сколько задач из него выйдет, поэтому номер не
|
|
194
|
-
|
|
195
|
-
шапку раскладки.
|
|
193
|
+
сколько задач из него выйдет, поэтому номер не бывает первым. Команда переименовывает черновик,
|
|
194
|
+
проставляет шапку замысла и снимает с копий шапку раскладки.
|
|
196
195
|
- **Брошенный разбор виден.** Черновик старше недели перечисляет сверка очереди.
|
|
196
|
+
- **Работа, заказанная словами, становится задачей в очереди тем же ходом.** Даже если делать её
|
|
197
|
+
будут не сейчас. Черновик папки очередью не считается: номера нет, знает о нём один заход.
|
|
198
|
+
Отложенная работа называет срок; отложенная молча читается как сделанная.
|
|
197
199
|
- **Следующая задача берётся из замысла эпика, а список очереди работ спрашивается только там, где
|
|
198
200
|
эпика нет.** По списку номеров первая задача чужого эпика неотличима от своей. Кончившийся эпик
|
|
199
201
|
называется владельцу тем же ходом, которым берётся работа вне его.
|
|
200
|
-
- **Эпик не закрывается по признаку, подтверждённому только чтением.**
|
|
201
|
-
|
|
202
|
+
- **Эпик не закрывается по признаку, подтверждённому только чтением.** Проверяемое глазами
|
|
203
|
+
называется проверенным лишь вместе с командой и её выводом.
|
|
202
204
|
- **Задачи эпика заводятся все разом, тем же ходом, что и сам эпик.** Заведение по одной прячет
|
|
203
|
-
объём. Номера возвращаются в раздел порядка той же
|
|
204
|
-
названием, а не карточкой.
|
|
205
|
+
объём. Номера возвращаются в раздел порядка той же правкой.
|
|
205
206
|
|
|
207
|
+
- **Замысел эпика называет, как стоят ветки его задач, наравне с их порядком.** Расстановок две:
|
|
208
|
+
каждая ветка от главной либо стопкой — каждая от предыдущей. Порядок задач об этом не говорит.
|
|
209
|
+
Стопка стоит дороже, её цена перечислена в холодной части; записанная в замысле расстановка
|
|
210
|
+
становится решением эпика, а не того, кто заводит ветку.
|
|
206
211
|
- **Замысел эпика лежит там, где его найдут без сети и после мержа.** Карточка порядка задач не
|
|
207
|
-
держит, а папка задачи держала бы его до слияния
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
целиком — обходом каталогов, а не одним файлом, за которым пришли.
|
|
212
|
+
держит, а папка задачи держала бы его до слияния первой; каталог называет компаньон правила.
|
|
213
|
+
Названное владельцем по ходу дописывается туда же тем ходом, каким принято.
|
|
214
|
+
- **Сборка по образцу начинается с чтения самого образца, а не пересказа о нём.** Пересказ в
|
|
215
|
+
разборе просьбы и в замысле эпика образцом не считается. Повторяемая часть открывается целиком,
|
|
216
|
+
обходом каталогов.
|
|
213
217
|
- **Что действует на дерево, а не на правку, лежит вне индекса.** Путь к образцу и разрешение
|
|
214
|
-
работать вне эпика ветке не
|
|
215
|
-
а следующая, отведённая от главной, их не несёт. Место записи — рядом с передачей захода.
|
|
218
|
+
работать вне эпика ветке не принадлежат и живут рядом с передачей захода.
|
|
216
219
|
- **Закрытая работа разбирается правилами, и это шаг закрытия, а не отдельная просьба.** Что
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
если дерево её разложило.
|
|
220
|
+
грузилось и чего не хватило, видно только заходу, который работу вёл. Разбор кончается правкой
|
|
221
|
+
слоя правил или предложением наружу.
|
|
220
222
|
- **Разбор закрытой работы уходит в фон, а исполнитель берёт следующую задачу.** Роль работает
|
|
221
|
-
своим
|
|
222
|
-
одним ходом.
|
|
223
|
+
своим ходом; сводку собирают до запуска, находки принимают одним ходом.
|
|
223
224
|
- **Находки разбора ждут владельца, а в пакет уезжает только сводка наблюдений.** Предложение —
|
|
224
|
-
заготовка правки чужого
|
|
225
|
-
заказывал. Сводка
|
|
226
|
-
- **Дешёвый шаг закрытия идёт раньше дорогого, а прогон — после вливания.** Вливание
|
|
227
|
-
и приведение текстов стоят минуты, прогон — окно
|
|
228
|
-
|
|
225
|
+
заготовка правки чужого дерева; отправленное без разбора, оно становится работой того, кто его
|
|
226
|
+
не заказывал. Сводка отправляется всегда: она говорит, чем пользовались, и мнением не бывает.
|
|
227
|
+
- **Дешёвый шаг закрытия идёт раньше дорогого, а прогон — после вливания.** Вливание
|
|
228
|
+
договорённости и приведение текстов стоят минуты, прогон — окно захода; прогон до вливания
|
|
229
|
+
проверяет то, что в главную не попадёт.
|
|
229
230
|
- **Договорённость вливается в спек домена одним из последних коммитов ветки, до открытия PR.**
|
|
230
231
|
К этому моменту код написан, привязки известны, и в главной ветке директория `proposed/` не
|
|
231
|
-
|
|
232
|
+
появляется. Готовые к вливанию перечисляет `npm run check:specs`.
|
|
232
233
|
- **Папка закрытой задачи разбирается, а не переносится целиком.** В `docs/archive/` уезжает то, что
|
|
233
234
|
объясняет решение; остальное удаляется. Неразобранную ловит сверка очереди.
|
|
234
235
|
- **Открытие PR и снятие черновика отбиваются, пока ветка везёт папку своей задачи.** Слияние
|
|
235
|
-
нажимает человек на хостинге, где гардов нет: снятый черновик он читает как
|
|
236
|
-
|
|
236
|
+
нажимает человек на хостинге, где гардов нет: снятый черновик он читает как приглашение.
|
|
237
|
+
Судится содержимое ветки, а не рабочее дерево.
|
|
237
238
|
- **Ветка, снёсшая папку, обязана прибавить запись в архив.** Снести дешевле, чем разобрать, а
|
|
238
239
|
первым уходит разбор просьбы — единственная запись слов владельца.
|
|
239
240
|
- **Обход — строка `Task-folder-skip: <причина>` в PR или в самой команде.** Пустая причина обходом
|
|
@@ -249,34 +250,32 @@ flowchart TD
|
|
|
249
250
|
признака рефакторингу не заводится: оценку «поведение не меняется» назначал бы тот, кому она
|
|
250
251
|
мешает.
|
|
251
252
|
|
|
252
|
-
Ничто из самого разбора не проверяется. Разговор с владельцем
|
|
253
|
+
Ничто из самого разбора не проверяется. Разговор с владельцем — не вызов инструмента: гард
|
|
253
254
|
видит правку файла и не знает ни о разведке до первого вопроса, ни о шести обязательных, ни об
|
|
254
|
-
ответах на
|
|
255
|
+
ответах на них. Пустая таблица проходит так же, как заполненная.
|
|
255
256
|
|
|
256
|
-
|
|
257
|
-
|
|
257
|
+
Понимания текста у гарда разговора нет: второй его признак судит общие слова темы вопроса и
|
|
258
|
+
последней реплики владельца, а не смысл. Отказ называет законный ход: назвать то, чего в прежнем
|
|
259
|
+
ответе владельца нет.
|
|
258
260
|
|
|
259
261
|
Неизменность замысла не стережёт ничто: правка по ходу отличима от первоначальной записи только
|
|
260
262
|
по истории.
|
|
261
263
|
|
|
262
264
|
Приведение текстов к сделанному не проверяет ничто: что устарело в правиле и в спеке, машине не
|
|
263
|
-
видно. Держится это шагом закрытия и следом задачи в
|
|
264
|
-
|
|
265
|
-
идёт дальше без неё.
|
|
265
|
+
видно. Держится это шагом закрытия и следом задачи в замысле. Правило и спек правятся в ветке,
|
|
266
|
+
закон — нет: его статья приносится владельцу текстом, а работа идёт дальше без неё.
|
|
266
267
|
|
|
267
268
|
Что именно перенесли в архив, не проверяется: гард видит, что папка уехала и что ветка что-то в
|
|
268
269
|
архив добавила, а то ли это — судит владелец на ревью.
|
|
269
270
|
|
|
270
271
|
Гард папки задачи судит вызов исполнителя, а не кнопку хостинга: человек, вливающий работу со
|
|
271
|
-
своей стороны, проходит мимо него
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
действующим. Держится это чтением обоих текстов подряд — пакетного и надстройки — при каждой
|
|
279
|
-
правке порядка отдачи.
|
|
272
|
+
своей стороны, проходит мимо него молча. На этой половине случаев требование держится оставшимся
|
|
273
|
+
шагом, который стоит разделом в теле заявки и произносится вслух.
|
|
274
|
+
|
|
275
|
+
Порядок отдачи работы дерево вправе перевернуть надстройкой, и тогда часть шагов пакета перестаёт
|
|
276
|
+
исполняться. Какие именно — не считает ничто: шаг, чья механика сломалась тем же решением, в
|
|
277
|
+
перечень отменяемого не попадает и продолжает читаться действующим. Держится это чтением обоих
|
|
278
|
+
текстов подряд при каждой правке порядка отдачи.
|
|
280
279
|
|
|
281
280
|
## Паттерны
|
|
282
281
|
|
package/assets/rules/testing.md
CHANGED
|
@@ -120,6 +120,14 @@ flowchart TD
|
|
|
120
120
|
каталог, любая своя ошибка — гард выходит нулём и пропускает: сломанная проверка не имеет права
|
|
121
121
|
заклинить работу. Объявляется это строкой `FAIL-OPEN` в шапке самого гарда, рядом с
|
|
122
122
|
перечислением случаев, и туда же дописывается новый случай, когда он находится.
|
|
123
|
+
- **Гард, не узнавший вызов, молчит так же, как исправный.** Нулевой выход бывает двух родов: гард
|
|
124
|
+
сломался и отпустил намеренно — это объявлено в его шапке, — либо он не признал в команде своего
|
|
125
|
+
дела и до проверки не дошёл вовсе. Снаружи они неотличимы, а второй не объявлен нигде и не
|
|
126
|
+
оставляет следа. Отсюда два следствия. Признак вызова обязан ошибаться в сторону лишнего
|
|
127
|
+
срабатывания: сработавший на лишнем виден сразу и правится, не узнавший — не виден никогда. И
|
|
128
|
+
принятый в дереве способ звать команду — полным путём, через обёртку, с подстановкой переменных —
|
|
129
|
+
входит в признак наравне с голым именем: обход, которым команду зовут каждый день, ровно там гард
|
|
130
|
+
и слепнет.
|
|
123
131
|
- **Список известного у проверки именной и объясняет себя сам.** Первым полем перечня стоит имя
|
|
124
132
|
проверки и слово о том, что перечисленное отказом не считается. Дальше либо два ключа — принятое
|
|
125
133
|
остаётся навсегда, долг накоплен к заведению проверки и только сокращается, — либо столько
|
|
@@ -186,6 +194,19 @@ flowchart TD
|
|
|
186
194
|
по-прежнему, и плывущее значение внутри него двигает соседей мимо маски. Там, где размер узла
|
|
187
195
|
считается по содержимому — ячейка таблицы, надпись, растягивающая кнопку, — плывущее лечится в
|
|
188
196
|
данных стенда постоянным значением, и тогда маска не нужна вовсе.
|
|
197
|
+
- **Постоянным делается не только время, но и всё, что приложение из него вывело.** Приложение
|
|
198
|
+
считает от своих часов и производное — ключ месяца, срок, признак свежести, — и считает его в
|
|
199
|
+
минуту записи. Правка времён, идущая после записи, производного не двигает: оно посчитано раньше
|
|
200
|
+
и лежит в соседней колонке. Расхождения при этом не наступает месяцами, а потом набор краснеет в
|
|
201
|
+
день, когда в дерево не внесли ни строки. Признак у промаха свой и виден сравнением двух колонок:
|
|
202
|
+
производное перестало сходиться с тем, из чего его обязаны были вывести.
|
|
203
|
+
- **Засев проверяет себя сам, а не полагается на кадр.** Кадр говорит «стало другим» и молчит о
|
|
204
|
+
том, почему; отказ засева называет причину словами и приходит до того, как снят хоть один кадр.
|
|
205
|
+
Признак берётся верный в любой день прогона: данные стенда — прошлое, поэтому значение времени,
|
|
206
|
+
попавшее на день прогона или позже, посчитано часами машины, а засевом не закреплено. Нарочно
|
|
207
|
+
будущее отделяется границей и называется отдельно. Судятся при этом временные колонки всех
|
|
208
|
+
таблиц, которые читают экраны, а не только показанные сегодня: столбец выводят на экран одной
|
|
209
|
+
строкой разметки, и вспомнить при этом про засев некому.
|
|
189
210
|
|
|
190
211
|
## Чего из закона здесь нет
|
|
191
212
|
|