@rt-tools/agent-kit 0.16.1 → 0.18.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-epics.github.mjs +123 -0
- package/assets/checks/board-gh.github.mjs +121 -0
- package/assets/checks/board-paths.github.mjs +88 -0
- package/assets/checks/board-runs.github.mjs +8 -0
- package/assets/checks/board-titles.github.mjs +66 -0
- package/assets/checks/board.github.mjs +77 -73
- package/assets/checks/check-board.github.mjs +56 -7
- package/assets/checks/check-file-size.mjs +10 -2
- package/assets/checks/check-glossary.mjs +170 -0
- package/assets/checks/check-hook-scope.mjs +126 -0
- package/assets/checks/check-profile-drift.mjs +195 -0
- package/assets/checks/check-push-gate.mjs +59 -1
- package/assets/checks/check-schema-drift.mjs +12 -5
- package/assets/checks/check-specs.mjs +1 -1
- package/assets/checks/rt-kit-checks.config.mjs +13 -0
- package/assets/checks/spec-anchors.mjs +2 -2
- package/assets/checks/spec-contract.mjs +9 -0
- package/assets/defaults/gate-map.sh +13 -4
- package/assets/defaults/project.sh +31 -108
- package/assets/defaults/shell.sh +139 -0
- package/assets/docs/GLOSSARY.md +1 -1
- package/assets/hooks/browser-device-id.sh +20 -4
- package/assets/hooks/browser-guard-device-id.sh +5 -2
- package/assets/hooks/browser-guard-no-other-drivers.sh +41 -2
- package/assets/hooks/claim-guard.sh +22 -1
- package/assets/hooks/docs-guard.sh +1 -1
- package/assets/hooks/exam-guard.sh +85 -12
- package/assets/hooks/git-guard-delivery-conflict.sh +85 -0
- package/assets/hooks/git-guard-delivery-folder.sh +19 -0
- package/assets/hooks/git-guard-delivery-signature.sh +14 -5
- package/assets/hooks/git-guard-delivery.sh +54 -2
- package/assets/hooks/git-guard-push-tests.sh +21 -1
- package/assets/hooks/grill-gate-ask.sh +25 -0
- package/assets/hooks/grill-gate.sh +75 -11
- package/assets/hooks/lint-after-edit.sh +44 -16
- package/assets/hooks/proposal-guard.sh +11 -4
- package/assets/hooks/rule-source-guard.sh +8 -13
- package/assets/hooks/skill-gate-layers.sh +7 -0
- package/assets/hooks/skill-gate.sh +29 -0
- package/assets/hooks/task-context-load.sh +32 -0
- package/assets/hooks/task-flow-context.sh +194 -0
- package/assets/hooks/task-flow-draft-guard.sh +109 -0
- package/assets/hooks/task-flow-guard.sh +27 -159
- package/assets/hooks/turn-exit-guard.sh +53 -88
- package/assets/hooks/waiting-turn-guard.sh +65 -2
- package/assets/hooks/window-fill-guard.sh +5 -1
- package/assets/hooks/work-start-guard.sh +166 -0
- package/assets/hooks/write-targets.sh +24 -0
- package/assets/laws/delivery.md +19 -0
- package/assets/laws/frontend-application.md +4 -0
- package/assets/laws/verifiability.md +44 -0
- package/assets/laws/work-conduct.md +15 -0
- package/assets/patterns/browser-verification-measure.md +3 -1
- package/assets/patterns/browser-verification-stand.md +17 -4
- package/assets/patterns/doc-style-write.md +62 -2
- package/assets/patterns/git-workflow-commit.github.md +33 -5
- package/assets/patterns/git-workflow-docker.md +22 -0
- package/assets/patterns/git-workflow-freshness.md +87 -0
- package/assets/patterns/git-workflow-merge.md +41 -0
- package/assets/patterns/git-workflow-migration.md +11 -0
- package/assets/patterns/git-workflow-pr.github.md +12 -1
- package/assets/patterns/git-workflow-restart.md +18 -0
- package/assets/patterns/git-workflow-secrets.md +14 -0
- package/assets/patterns/git-workflow-stack.md +93 -1
- package/assets/patterns/lib-layers-move.md +4 -0
- package/assets/patterns/spec-driven-domain.md +47 -2
- package/assets/patterns/spec-driven-rule.md +16 -4
- package/assets/patterns/spec-driven-sweep.md +57 -0
- package/assets/patterns/status-report-table.github.md +1 -1
- package/assets/patterns/task-flow-archive.md +58 -16
- package/assets/patterns/task-flow-close.md +106 -23
- package/assets/patterns/task-flow-handoff.md +14 -2
- package/assets/patterns/task-flow-resume.md +35 -8
- package/assets/patterns/task-flow-start.md +60 -22
- package/assets/patterns/testing-e2e.md +23 -0
- package/assets/patterns/turn-entry-map.md +1 -1
- package/assets/pitfalls/agent-kit.md +71 -3
- package/assets/pitfalls/doc-style.md +15 -0
- package/assets/pitfalls/git-workflow.github.md +88 -0
- package/assets/pitfalls/spec-driven.md +22 -0
- package/assets/pitfalls/task-flow.md +113 -0
- package/assets/pitfalls/testing.md +6 -0
- package/assets/pitfalls/turn-conduct.md +49 -0
- package/assets/rules/browser-verification.md +58 -0
- package/assets/rules/deploy-flow.azure.md +8 -0
- package/assets/rules/deploy-flow.github.md +27 -0
- package/assets/rules/deploy-flow.gitlab.md +8 -0
- package/assets/rules/doc-style.md +20 -0
- package/assets/rules/git-workflow.azure.md +22 -2
- package/assets/rules/git-workflow.github.md +127 -118
- package/assets/rules/git-workflow.gitlab.md +17 -4
- package/assets/rules/lists.md +5 -0
- package/assets/rules/observability.needs-app.md +4 -0
- package/assets/rules/reuse-first.md +14 -0
- package/assets/rules/shared-code.md +5 -0
- package/assets/rules/spec-driven.md +33 -15
- package/assets/rules/task-flow.md +132 -126
- package/assets/rules/testing.md +41 -2
- package/assets/rules/turn-conduct.md +73 -57
- package/assets/rules/turn-entry.md +6 -0
- package/assets/samples/tasks/_template/grill.md +5 -0
- package/assets/samples/tasks/_template/plan.md +3 -0
- package/assets/skills/agent-kit.md +108 -76
- package/assets/templates/postmortem.md +5 -1
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +30 -6
- package/bin/agent-kit.js.map +1 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +2 -1
- package/lib/catalog.js.map +1 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +96 -7
- package/lib/commands.js.map +1 -1
- package/lib/hooks-map.d.ts +26 -0
- package/lib/hooks-map.d.ts.map +1 -1
- package/lib/hooks-map.js +58 -2
- package/lib/hooks-map.js.map +1 -1
- package/lib/sections.d.ts +6 -0
- package/lib/sections.d.ts.map +1 -1
- package/lib/sections.js +19 -0
- package/lib/sections.js.map +1 -1
- package/lib/shipment.d.ts +2 -0
- package/lib/shipment.d.ts.map +1 -1
- package/lib/shipment.fixture.d.ts +5 -0
- package/lib/shipment.fixture.d.ts.map +1 -1
- package/lib/shipment.fixture.js +7 -0
- package/lib/shipment.fixture.js.map +1 -1
- package/lib/shipment.js +13 -1
- package/lib/shipment.js.map +1 -1
- package/lib/sync.d.ts +35 -3
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +59 -8
- package/lib/sync.js.map +1 -1
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.18.0.tgz +0 -0
- package/rt-tools-agent-kit-0.16.1.tgz +0 -0
|
@@ -20,7 +20,8 @@ description: Правило под «Закон о поставке» для д
|
|
|
20
20
|
| В законе | Здесь |
|
|
21
21
|
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
22
|
| главная ветка | `main` |
|
|
23
|
-
| отдельная ветка | `<КЛЮЧ>-<номер задачи>-<короткий-slug
|
|
23
|
+
| отдельная ветка | `<КЛЮЧ>-<номер задачи>-<короткий-slug>`. Имя без номера (`feat/…`, `fix/…`) законно, пока ветка живёт локально: MR с неё не откроется |
|
|
24
|
+
| ключ задач | короткое слово, которым дерево зовёт свои задачи; задаётся ключом `board.taskKey` в `.claude/rt-kit/checks.json`, а в `implementation.md` называется для читателя |
|
|
24
25
|
| задача | issue проекта, заголовок `[<КЛЮЧ>-<номер>] <Что не так>`, исполнитель — учётная запись машинной работы; MR прикрепляется к нему строкой `Closes #<номер>` в описании |
|
|
25
26
|
| очередь работ | доска задач проекта — Issue Board. Задача попадает на неё меткой списка, а не самим фактом заведения: доска показывает те issue, чью метку знает |
|
|
26
27
|
| состояние задачи в очереди работ | список доски, за которым стоит метка: заведённая, взятая в работу, ждущая разбора. Имена меток — в `implementation.md`; закрытая задача уходит из очереди слиянием, а не переносом в последний список |
|
|
@@ -133,9 +134,16 @@ flowchart TD
|
|
|
133
134
|
- **Отставший список находится сверкой очереди, а не глазами.** Сверка судит список по PR
|
|
134
135
|
в обе стороны: открытый MR при задаче не в разборе и разбор без открытого MR — оба
|
|
135
136
|
расхождения. Момента, когда задачу берут в работу, ей не видно: ветки на доске нет.
|
|
136
|
-
-
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
- **Ветка с открытой заявкой отстаёт от главной молча.** Гард судит основание один раз — в
|
|
138
|
+
минуту открытия; всё, что влилось в главную, пока шёл прогон, зелёный прогон не видит вовсе, и
|
|
139
|
+
влитая оттуда заявка приносит в главную ветку сочетание, которое не проверял никто. Отставание
|
|
140
|
+
находит сверка очереди работ: она спрашивает у хранилища, на сколько коммитов ветка каждой
|
|
141
|
+
открытой заявки позади главной, и называет число.
|
|
142
|
+
- **Задачи, чинящиеся одной правкой, сливаются до слияния ветки.** Вторая закрывается как
|
|
143
|
+
дубликат со ссылкой на поглотившую, а недостающее из неё дописывается в первую. Закон велит
|
|
144
|
+
вторую стереть — здесь это объявленное отступление: стереть задачу хостинг не даёт вовсе, а её
|
|
145
|
+
номер остаётся в истории, и ссылка из чужого коммита ведёт в закрытую задачу, а не в пустоту.
|
|
146
|
+
После слияния слить уже нельзя: ветка въехала, и откатывается она целиком.
|
|
139
147
|
- **Работа, которую одним заходом не закрыть, помечена в двух местах, и они сверяются.** Метка
|
|
140
148
|
на доске и строка о заходах с передачей в замысле эпика говорят одно и то же двум читателям:
|
|
141
149
|
исполнитель открывает карточку раньше, чем замысел эпика, а планирует по замыслу. Одна пометка без
|
|
@@ -157,6 +165,11 @@ flowchart TD
|
|
|
157
165
|
отбивает пуш, а не печатается рядом с ним: напечатанное предупреждение исполнитель читает как
|
|
158
166
|
разрешение. Дважды подряд правка, прошедшая гейт целиком, была отбита конвейером — и оба раза
|
|
159
167
|
зелёный гейт был прочитан как «локально всё зелено».
|
|
168
|
+
- **Причина исключения, называющая задачу, судится на живость этой задачи.** Отсрочка со сроком
|
|
169
|
+
и отсрочка без срока выглядят одинаково, пока номер никто не спросил; мёртвый номер в причине
|
|
170
|
+
делает исключение бессрочным, не сказав об этом ни строкой. Спрашивается тем же ярусом, что
|
|
171
|
+
состояние задачи у гарда поставки: есть чем спросить — спрашивает, нет сети или доступа —
|
|
172
|
+
пропускает молча.
|
|
160
173
|
- **Сверка раскладки стоит в наборе гейта пуша наравне с линтом и сборкой.** Правка, положенная
|
|
161
174
|
в разложенную копию мимо источника, в день, когда её делают, не ломает ничего: дерево
|
|
162
175
|
работает, проверки зелёные, а расхождение видно только тому, кто позовёт сверку сам. Копится
|
package/assets/rules/lists.md
CHANGED
|
@@ -83,6 +83,11 @@ flowchart TD
|
|
|
83
83
|
- **Недоступное сейчас действие в меню строки не рисуется вовсе.** Пункт заводится под `@if` по
|
|
84
84
|
полю строки, а не выключенным: выключенный пункт перечисляет владельцу запреты вместо того,
|
|
85
85
|
что он может сделать, и набор их меняется от строки к строке.
|
|
86
|
+
- **Необратимое действие спрашивает подтверждение готовым приёмом, а не своим окном.** Пункт
|
|
87
|
+
меню несёт признак опасного и пару полей подтверждения — заголовок и текст с последствием, — а
|
|
88
|
+
окно берёт набор. Правило, молчавшее об этом, стоило владельцу выбора из трёх вариантов, среди
|
|
89
|
+
которых был свой компонент окна в новой либе: ответ лежал в паттерне, и туда исполнитель не
|
|
90
|
+
дошёл. Поля названы в паттерне `admin-lists-screen`.
|
|
86
91
|
- **Кнопка меню не показывается, если у строки не осталось доступных действий.** За это
|
|
87
92
|
отвечает вход `[rowHasActions]` — предикат по строке; считать по содержимому меню нельзя,
|
|
88
93
|
спроецированный шаблон известен только после отрисовки.
|
|
@@ -168,3 +168,7 @@ flowchart TD
|
|
|
168
168
|
Она работает по имени ключа, и голое значение мимо неё проходит вовсе, — но ключ, который сам
|
|
169
169
|
числится свободным текстом, увозит тело в хранилище отметкой о вычистке целиком. Новая
|
|
170
170
|
обёртка сверяется со списками ключей до того, как её так назвали.
|
|
171
|
+
- **Предохранитель повтора, чей ключ собран из того, чем меряют время, не срабатывает никогда.**
|
|
172
|
+
При равенстве такта разбора и ширины ведёрка каждый разбор видит пустой замок и шлёт заново.
|
|
173
|
+
Со стороны это выглядит работающим: предохранитель объявлен, привязка сходится, письма уходят
|
|
174
|
+
каждый час. Ключ берётся от предмета оповещения, а не от отрезка времени, которым его считают.
|
|
@@ -53,6 +53,12 @@ flowchart TD
|
|
|
53
53
|
опирается, названо в именах дерева.
|
|
54
54
|
- **Работа начинается с чтения готового, а не с чистого файла.** Сначала находится опора —
|
|
55
55
|
компонент кита, базовый класс, образец в соседнем домене, — потом пишется своё поверх неё.
|
|
56
|
+
- **Значение интеграции берётся тем же путём, что и соседнее значение той же интеграции.**
|
|
57
|
+
Половина интеграции, сделанная как положено, — готовый образец, и стоит он не в чужом домене,
|
|
58
|
+
а строкой выше: рядом с зашитым в код идентификатором карты жил её же ключ, приходящий
|
|
59
|
+
внедрением. Расхождение соседей — это вопрос «почему один параметр сделан, а второй нет», а не
|
|
60
|
+
выбор между тремя способами починить второй. Не ловится оно ничем: значение синтаксически
|
|
61
|
+
исправно, линт и сборка зелены, а сверка повторов пару констант под свои признаки не берёт.
|
|
56
62
|
- **Свой примитив и своя основа заводятся только с явного одобрения владельца.** Спрашивается
|
|
57
63
|
это до того, как написан первый файл.
|
|
58
64
|
- **Панель правки записи наследует общую основу, а не собирается своей разметкой.** Тогда она
|
|
@@ -72,6 +78,14 @@ flowchart TD
|
|
|
72
78
|
- **Признаки объявляются деревом, а не зашиты в проверку.** Дерево берёт из rt-tools не всё, и
|
|
73
79
|
признак о готовом из пакета, которого здесь нет, отвечает ложно ровно так же, как имя чужого
|
|
74
80
|
приложения.
|
|
81
|
+
- **Второе значение той же интеграции повторяет свой род, а не соседа по файлу.** У внешней
|
|
82
|
+
службы редко один параметр: рядом с ключом стоит идентификатор, рядом с адресом — область, и
|
|
83
|
+
первый обычно сделан как положено, а второй остаётся зашитым. Спрашивается при этом не сосед,
|
|
84
|
+
а род: где значения этого рода заводят, кто их правит, каким путём они доезжают до сборки.
|
|
85
|
+
Сосед бывает сам не переехавшим, и повторение разносит устаревший способ дальше; ближайший
|
|
86
|
+
сосед берётся образцом, только когда такого рода в дереве нет вовсе. Зашитое значение не
|
|
87
|
+
отбивают ни линтер, ни сборка, ни тест: оно синтаксически исправно и просто не принадлежит
|
|
88
|
+
этому дереву — так демонстрационное значение из документации поставщика уезжает в прод-сборку.
|
|
75
89
|
|
|
76
90
|
## Чего из закона здесь нет
|
|
77
91
|
|
|
@@ -69,6 +69,11 @@ flowchart TD
|
|
|
69
69
|
- **Строковая настройка и таблица соответствий сверяются по значению, а не по имени.** Имя
|
|
70
70
|
здесь не ключ: `BEM_BLOCK` и `LOG_CONTEXT` объявлены десятками, и значения у них свои, а
|
|
71
71
|
один и тот же перевод статуса живёт под тремя разными именами.
|
|
72
|
+
- **Копии, у которых общего места нет по границам импортов, сводятся в тот слой, который видят
|
|
73
|
+
обе стороны, а не в общий.** Общая либа приложения не видит значений хранилища, и ребро оттуда
|
|
74
|
+
развернуло бы зависимость: сведение «как положено» тут ломает границы, а не чинит копии. Место
|
|
75
|
+
такой копии — слой выхода того домена, чьё значение она переводит; заводить под это новую либу
|
|
76
|
+
не надо, нужный слой у домена обычно уже объявлен и пуст.
|
|
72
77
|
|
|
73
78
|
## Чего из закона здесь нет
|
|
74
79
|
|
|
@@ -51,7 +51,7 @@ description: Правило под «Закон о документации пр
|
|
|
51
51
|
| утверждение документа | пункт `## Правила` в спеке, `## Статьи` в законе, `## Как закон применяется здесь` в правиле |
|
|
52
52
|
| место, где оно исполняется | строка в `implementation.md` рядом: `` `файл:символ` `` |
|
|
53
53
|
| обещанное поведение | сценарий `SC-<ПРЕФИКС>-<НОМЕР>` в `docs/specs/<домен>/scenarios.md` |
|
|
54
|
-
| открытый вопрос | `Q
|
|
54
|
+
| открытый вопрос | `Q-<буква закона>-<номер>` в разделе «Открытые вопросы» закона; на него ссылаются из задачи и коммитов, номер после закрытия не переиспользуется |
|
|
55
55
|
| законы, которые применяет домен | строка `**Законы:**` в шапке спека, именами в кавычках |
|
|
56
56
|
|
|
57
57
|
## Где это лежит
|
|
@@ -92,10 +92,14 @@ flowchart TD
|
|
|
92
92
|
именно тогда, когда для них не заведено места.
|
|
93
93
|
- **Каждое утверждение привязано к месту в коде, и связь сверяется в обе стороны.** Ключ
|
|
94
94
|
связи — сам текст утверждения, поэтому переформулировать его, забыв про привязку, нельзя.
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
- **Первая колонка компаньона — текст статьи, скопированный, а не пересказанный.** Ключ связи —
|
|
96
|
+
сам текст, поэтому строка, написанная по смыслу статьи, разрывает связь, оставаясь на вид
|
|
97
|
+
заполненной. Проверка считает статьи без адреса и о статье, адрес которой описывает не её, не
|
|
98
|
+
знает ничего: совпадает род, а не перечень, и строка стоит до перечитывания диффа.
|
|
99
|
+
- **Привязка не ведёт в код, который никто не зовёт:** нигде не зовущийся символ — не место.
|
|
100
|
+
- **Таблица процедур сверяется с декораторами в обе стороны, право — вместе с именем.** Иначе
|
|
101
|
+
процедура, которую домен обслуживает, но забыл описать, видна только в
|
|
102
|
+
декораторе, а право, разошедшееся со спеком, — нигде.
|
|
99
103
|
- **Код отказа принимается, только если он в домене бросается.** Коды выписывались по
|
|
100
104
|
замыслу, и на одном пути обещанный отказ не бросал никто.
|
|
101
105
|
- **Префикс сценариев в спеке один, и по всему дереву он занят им одним.** Второй префикс
|
|
@@ -175,14 +179,12 @@ flowchart TD
|
|
|
175
179
|
|
|
176
180
|
Образцы разделены пробелом и сверяются с путём правки как образцы оболочки, а не поиском по
|
|
177
181
|
словам: поиск называет не ту статью и молчит об этом. Образец без каталога сверяется и с
|
|
178
|
-
именем
|
|
179
|
-
как прежде.
|
|
182
|
+
именем файла, а комментарий в собранной разметке не виден.
|
|
180
183
|
|
|
181
184
|
- **Статья без признака законна, и правило без единого признака — тоже.** Признак ставится тем
|
|
182
185
|
статьям, чьё правило отбивает на правке файла; остальные размечаются по мере того, как их
|
|
183
186
|
отбития попадут в сводку. Отсутствие признака означает «эту статью по пути правки не
|
|
184
|
-
выбирают», а не промах: требовать его у всех значило бы размечать
|
|
185
|
-
ни разу никого не отбили.
|
|
187
|
+
выбирают», а не промах: требовать его у всех значило бы размечать наугад.
|
|
186
188
|
|
|
187
189
|
- **Паттерн находится по полю `rule:`, а не по приставке имени.** Приставку имени несут не все
|
|
188
190
|
паттерны, и поиск по имени правила таких не видит: сверка ищет их полем, человек — разделом
|
|
@@ -202,6 +204,11 @@ flowchart TD
|
|
|
202
204
|
сторон: якорем утверждения оказывается слово из комментария, тогда как объявление рядом
|
|
203
205
|
называется иначе.
|
|
204
206
|
|
|
207
|
+
- **Проверка, прибитая к имени ресурса, ломается на его делении, и знать об этом надо до правки.**
|
|
208
|
+
Имя правила и имя паттерна стоят не только в текстах, но и в проверках дерева, в пробах их наборов
|
|
209
|
+
и в таблицах состояний. Деление поэтому начинается с поиска имени по всему дереву: иначе красное
|
|
210
|
+
приходит по одной проверке за прогон — так деление одного правила уронило три.
|
|
211
|
+
|
|
205
212
|
## Форма сжатой статьи
|
|
206
213
|
|
|
207
214
|
Правило грузится в заход целиком и платит за это каждый заход, чем бы он ни занимался. Замер
|
|
@@ -242,14 +249,17 @@ flowchart TD
|
|
|
242
249
|
|
|
243
250
|
Закон, которого не применяет ни один спек, отказом не считается: законы про устройство кода,
|
|
244
251
|
поставку и проверяемость доменов не касаются вовсе. Порядок «сначала описание, потом код»
|
|
245
|
-
держится
|
|
252
|
+
держится договорённостью: закон о документации проекта такого требования не несёт, и открытого
|
|
253
|
+
вопроса под него в нём не заведено.
|
|
246
254
|
|
|
247
255
|
Таблицы состояний экрана не сверяются ничем. `check:specs` знает сценарии против заголовков
|
|
248
|
-
тестов, правила против якорей, процедуры против декораторов и коды отказа против бросков —
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
256
|
+
тестов, правила против якорей, процедуры против декораторов и коды отказа против бросков — строка
|
|
257
|
+
таблицы состояний не привязана ни к чему и проходит зелёной, даже когда код в названное состояние
|
|
258
|
+
не попадает. Состояние «проверка не загрузилась» стояло в таблицах двух доменов раньше, чем код
|
|
259
|
+
научился в него приходить, и всё это время читалось описанием работающего.
|
|
260
|
+
|
|
261
|
+
Смысл сценария с соседним не сверяется ничем: проверка судит номер. Два сценария, обещающих одно
|
|
262
|
+
и то же разными словами, для неё разные, и второй числится непроверяемым, сколько проживёт.
|
|
253
263
|
|
|
254
264
|
Полноту разметки статей признаком применимости не считает ничто. Правило, у которого признака
|
|
255
265
|
нет ни у одной статьи, отбивает прежним текстом — и от размеченного отличается только тем, что
|
|
@@ -278,3 +288,11 @@ flowchart TD
|
|
|
278
288
|
|
|
279
289
|
- `spec-driven-domain` — заведение и правка спека домена, сценарии, привязка.
|
|
280
290
|
- `spec-driven-rule` — заведение закона, правила и паттерна.
|
|
291
|
+
- `spec-driven-sweep` — сплошной разбор привязки домена, проходы и их разбор.
|
|
292
|
+
|
|
293
|
+
## Ловушки
|
|
294
|
+
|
|
295
|
+
- **Строка требования к соседнему ресурсу не проверяется ничем, и промах в ней виден только
|
|
296
|
+
счётом.** Правило без неё выглядит целым: разделы на месте, привязки сходятся, набор полноты
|
|
297
|
+
зелёный. Считается она одной командой по каталогу правил, и расхождение читается сразу — сколько
|
|
298
|
+
правил объявило требования и сколько ссылается на соседний ресурс прозой.
|