@rt-tools/agent-kit 0.3.0 → 0.5.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 +194 -30
- package/assets/agents/business-analyst.md +74 -0
- package/assets/agents/project-manager.md +70 -0
- package/assets/agents/qa-engineer.md +72 -0
- package/assets/agents/skill-curator.md +110 -0
- package/assets/agents/spec-critic.md +44 -0
- package/assets/agents/spec-writer.md +50 -0
- package/assets/checks/board.github.mjs +329 -0
- package/assets/checks/check-board.github.mjs +181 -0
- package/assets/checks/check-doc-paths.mjs +163 -0
- package/assets/checks/check-dupes.mjs +277 -0
- package/assets/checks/check-lib-layers.mjs +573 -0
- package/assets/checks/check-reuse.mjs +208 -0
- package/assets/checks/check-schema-drift.mjs +186 -0
- package/assets/checks/check-specs.mjs +1086 -0
- package/assets/checks/check-styles.mjs +109 -0
- package/assets/checks/rt-kit-checks.config.mjs +134 -0
- package/assets/checks/task-new.github.mjs +198 -0
- package/assets/commands/skill-curator.md +70 -0
- package/assets/defaults/gate-map.sh +106 -0
- package/assets/defaults/project.sh +204 -0
- package/assets/hooks/browser-device-id.sh +0 -0
- package/assets/hooks/browser-guard-device-id.sh +2 -1
- package/assets/hooks/browser-guard-no-asking.sh +27 -0
- package/assets/hooks/browser-guard-no-listing.sh +2 -1
- package/assets/hooks/browser-guard-no-other-drivers.sh +2 -1
- package/assets/hooks/browser-guard-require-select.sh +2 -1
- package/assets/hooks/commit-msg.sh +1 -1
- package/assets/hooks/constitution-index.sh +5 -4
- package/assets/hooks/dev-server-guard.sh +8 -6
- package/assets/hooks/docs-guard.sh +223 -37
- package/assets/hooks/git-guard-delivery.sh +171 -31
- package/assets/hooks/git-guard-main.sh +1 -0
- package/assets/hooks/git-guard-push-tests.sh +34 -13
- package/assets/hooks/glossary-load.sh +23 -0
- package/assets/hooks/grill-gate.sh +96 -0
- package/assets/hooks/lint-after-edit.sh +155 -30
- package/assets/hooks/qa-dataid-guard.sh +72 -32
- package/assets/hooks/reuse-first-guard.sh +105 -34
- package/assets/hooks/skill-gate-rearm.sh +1 -0
- package/assets/hooks/skill-gate.sh +75 -15
- package/assets/hooks/skill-loaded.sh +1 -0
- package/assets/hooks/sql-guard.sh +606 -56
- package/assets/hooks/task-context-load.sh +100 -0
- package/assets/hooks/task-flow-guard.sh +118 -0
- package/assets/laws/{access.md → application/access.md} +1 -4
- package/assets/laws/{locales.md → application/locales.md} +1 -3
- package/assets/laws/application/money.md +41 -0
- package/assets/laws/application/ownership.md +32 -0
- package/assets/laws/{search-visibility.md → application/search-visibility.md} +1 -1
- package/assets/laws/code-structure.md +7 -6
- package/assets/laws/delivery.md +53 -3
- package/assets/laws/entity-editing.md +49 -55
- package/assets/laws/entity-models.md +4 -14
- package/assets/laws/frontend-application.md +5 -5
- package/assets/laws/lib-imports.md +14 -1
- package/assets/laws/lists.md +33 -0
- package/assets/laws/navigation.md +40 -0
- package/assets/laws/project-documentation.md +27 -8
- package/assets/laws/reuse-first.md +26 -21
- package/assets/laws/shared-code.md +13 -1
- package/assets/laws/verifiability.md +30 -1
- package/assets/laws/work-conduct.md +59 -0
- package/assets/patterns/admin-lists-screen.md +131 -0
- package/assets/patterns/admin-nav-item.md +71 -0
- package/assets/patterns/angular-patterns-state.md +29 -22
- package/assets/patterns/api-layer-pair.md +40 -30
- package/assets/patterns/browser-verification-measure.md +41 -38
- package/assets/patterns/browser-verification-stand.md +106 -42
- package/assets/patterns/component-structure-new.md +33 -32
- package/assets/patterns/dependencies-upgrade.md +65 -0
- package/assets/patterns/doc-style-sweep.md +65 -28
- package/assets/patterns/doc-style-write.md +36 -33
- package/assets/patterns/entity-aside.md +136 -0
- package/assets/patterns/entity-models-new.md +124 -0
- package/assets/patterns/entity-store.md +91 -0
- package/assets/patterns/git-workflow-commit.azure.md +259 -0
- package/assets/patterns/git-workflow-commit.github.md +337 -0
- package/assets/patterns/git-workflow-commit.gitlab.md +283 -0
- package/assets/patterns/git-workflow-merge.md +42 -25
- package/assets/patterns/git-workflow-migration.md +61 -31
- package/assets/patterns/git-workflow-restart.md +20 -20
- package/assets/patterns/lib-layers-move.md +50 -32
- package/assets/patterns/lib-layers-new.md +41 -29
- package/assets/patterns/ownership-scope-resolve.md +69 -0
- package/assets/patterns/permissions-procedure.md +35 -33
- package/assets/patterns/platform-access-di.md +39 -25
- package/assets/patterns/pricing-quote.md +71 -0
- package/assets/patterns/reuse-first-extend.md +22 -22
- package/assets/patterns/seo-page.md +52 -40
- package/assets/patterns/seo-verify.md +48 -29
- package/assets/patterns/shared-code-new.md +37 -31
- package/assets/patterns/spec-driven-domain.md +60 -37
- package/assets/patterns/spec-driven-rule.md +55 -40
- package/assets/patterns/styling-bem-component.md +43 -32
- package/assets/patterns/styling-bem-layout.md +30 -24
- package/assets/patterns/task-flow-close.md +154 -0
- package/assets/patterns/task-flow-resume.md +94 -0
- package/assets/patterns/task-flow-start.md +129 -0
- package/assets/patterns/testing-e2e.md +53 -51
- package/assets/patterns/testing-unit.md +70 -46
- package/assets/patterns/translations-key.md +32 -19
- package/assets/patterns/ts-procedure.md +24 -25
- package/assets/rules/angular-patterns.md +50 -27
- package/assets/rules/api-layer.md +46 -28
- package/assets/rules/browser-verification.md +67 -48
- package/assets/rules/component-structure.md +43 -27
- package/assets/rules/dependencies.md +66 -0
- package/assets/rules/doc-style.md +95 -39
- package/assets/rules/entity-conventions.md +78 -0
- package/assets/rules/entity-models.md +70 -0
- package/assets/rules/git-workflow.azure.md +116 -0
- package/assets/rules/git-workflow.github.md +123 -0
- package/assets/rules/git-workflow.gitlab.md +113 -0
- package/assets/rules/lib-layers.md +56 -30
- package/assets/rules/lists.md +73 -0
- package/assets/rules/navigation.md +78 -0
- package/assets/rules/ownership-scope.md +63 -0
- package/assets/rules/permissions.md +43 -25
- package/assets/rules/platform-access.md +57 -29
- package/assets/rules/pricing.md +64 -0
- package/assets/rules/reuse-first.md +57 -43
- package/assets/rules/seo.md +51 -30
- package/assets/rules/shared-code.md +51 -26
- package/assets/rules/spec-driven.md +107 -51
- package/assets/rules/styling-bem.md +54 -39
- package/assets/rules/task-flow.md +150 -0
- package/assets/rules/testing.md +78 -47
- package/assets/rules/translations.md +48 -31
- package/assets/rules/typescript-conventions.md +57 -27
- package/assets/skills/agent-kit.md +85 -0
- package/assets/skills/write-a-skill.md +108 -0
- package/assets/templates/gate-map.sh +23 -15
- package/assets/templates/implementation.md +14 -8
- package/assets/templates/pattern.md +1 -1
- package/assets/templates/project.sh +32 -19
- package/assets/templates/rule.md +2 -2
- package/assets/variants.json +20 -0
- package/assets/workflows/feature.js +134 -0
- package/assets/workflows/plan.js +150 -0
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +78 -5
- package/bin/agent-kit.js.map +1 -1
- package/bin/prompt.d.ts +5 -0
- package/bin/prompt.d.ts.map +1 -1
- package/bin/prompt.js +19 -7
- package/bin/prompt.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/lib/assets.d.ts +8 -3
- package/lib/assets.d.ts.map +1 -1
- package/lib/assets.js +13 -3
- package/lib/assets.js.map +1 -1
- package/lib/catalog.d.ts +52 -5
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +104 -16
- package/lib/catalog.js.map +1 -1
- package/lib/commands.d.ts +22 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +202 -14
- package/lib/commands.js.map +1 -1
- package/lib/companion.d.ts +5 -1
- package/lib/companion.d.ts.map +1 -1
- package/lib/companion.js +29 -2
- package/lib/companion.js.map +1 -1
- package/lib/config.d.ts +26 -9
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +41 -15
- package/lib/config.js.map +1 -1
- package/lib/freshness.d.ts +14 -0
- package/lib/freshness.d.ts.map +1 -0
- package/lib/freshness.js +116 -0
- package/lib/freshness.js.map +1 -0
- package/lib/hooks-map.d.ts +27 -0
- package/lib/hooks-map.d.ts.map +1 -0
- package/lib/hooks-map.js +77 -0
- package/lib/hooks-map.js.map +1 -0
- package/lib/integrity.d.ts +36 -0
- package/lib/integrity.d.ts.map +1 -0
- package/lib/integrity.js +44 -0
- package/lib/integrity.js.map +1 -0
- package/lib/picker.d.ts +11 -1
- package/lib/picker.d.ts.map +1 -1
- package/lib/picker.js +44 -6
- package/lib/picker.js.map +1 -1
- package/lib/sync.d.ts +26 -0
- package/lib/sync.d.ts.map +1 -1
- package/lib/sync.js +59 -4
- package/lib/sync.js.map +1 -1
- package/lib/variants.d.ts +44 -0
- package/lib/variants.d.ts.map +1 -0
- package/lib/variants.js +82 -0
- package/lib/variants.js.map +1 -0
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.5.0.tgz +0 -0
- package/assets/laws/admin-lists.md +0 -35
- package/assets/laws/admin-navigation.md +0 -38
- package/assets/patterns/git-workflow-commit.md +0 -175
- package/assets/rules/git-workflow.md +0 -106
- package/rt-tools-agent-kit-0.3.0.tgz +0 -0
|
@@ -2,76 +2,87 @@
|
|
|
2
2
|
name: styling-bem-component
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: styling-bem
|
|
5
|
-
description: Паттерн правила styling-bem. Брать при правке стилей компонента
|
|
5
|
+
description: Паттерн правила styling-bem. Брать при правке стилей компонента кита — готовый :host, модификаторы, токены оформления, язык оформления публичного сайта, обход умолчаний кита. Не брать для раскладки экрана — это паттерн styling-bem-layout.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Стили компонента
|
|
9
9
|
|
|
10
10
|
Паттерн правила `styling-bem`. Что при этом должно быть верно — закон
|
|
11
|
-
`
|
|
11
|
+
`docs/constitution/frontend-application.md`.
|
|
12
12
|
|
|
13
13
|
## Когда брать
|
|
14
14
|
|
|
15
|
-
- Правится компонент
|
|
16
|
-
- Правится оформление
|
|
17
|
-
- Нужно перебить умолчание
|
|
15
|
+
- Правится компонент кита — он живёт в пакете `@rt-tools/ui-kit-v2`, а не в этом дереве.
|
|
16
|
+
- Правится оформление публичного сайта.
|
|
17
|
+
- Нужно перебить умолчание кита в своём компоненте.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## `:host` — сам блок
|
|
20
20
|
|
|
21
|
-
Хост несёт класс блока, раскладка на
|
|
21
|
+
Хост несёт класс блока, раскладка на `:host`, элементы вложены внутрь:
|
|
22
22
|
|
|
23
23
|
```scss
|
|
24
24
|
:host {
|
|
25
25
|
display: inline-flex;
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
.<префикс > -tag {
|
|
28
28
|
display: inline-flex;
|
|
29
|
-
gap: var(
|
|
29
|
+
gap: var(--<префикс>-space-1);
|
|
30
30
|
align-items: center;
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
border-radius: var(
|
|
32
|
+
&--shape--pill {
|
|
33
|
+
border-radius: var(--<префикс>-radius-full);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
Модификатор —
|
|
40
|
-
|
|
39
|
+
Отступ — четыре пробела. Модификатор — `&--<имя>` или привязка класса на хосте
|
|
40
|
+
(`[class.<префикс>-component-name--active]="isActive()"`).
|
|
41
|
+
|
|
42
|
+
У экрана вне кита такого раздела нет: `display: flex` с `gap` и `padding` на `:host` — это
|
|
43
|
+
раскладка, и она в общем слое приложения.
|
|
41
44
|
|
|
42
45
|
## Значения — только токенами
|
|
43
46
|
|
|
44
47
|
```scss
|
|
45
48
|
✗ color: #fff;
|
|
46
49
|
✗ box-shadow: 0 1px 2px rgb(0 0 0 / 12%);
|
|
47
|
-
✓ color: var(
|
|
48
|
-
✓ box-shadow: var(
|
|
50
|
+
✓ color: var(--<префикс>-color-surface);
|
|
51
|
+
✓ box-shadow: var(--<префикс>-shadow-sm);
|
|
49
52
|
```
|
|
50
53
|
|
|
51
|
-
Составное значение берётся готовым токеном целиком, а не собирается из частей.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
Составное значение берётся готовым токеном целиком, а не собирается из частей. SCSS-переменные
|
|
55
|
+
(`$primaryColor`) для значений оформления не используются вовсе.
|
|
56
|
+
|
|
57
|
+
## Язык оформления публичного сайта
|
|
58
|
+
|
|
59
|
+
Тропический премиум, фото-first:
|
|
60
|
+
|
|
61
|
+
- светлая тёплая палитра — песок, терракота, пальмовая зелень, только через `--<префикс>-color-*`;
|
|
62
|
+
- акцентная антиква в заголовках (`--<префикс>-font-serif`), гуманистический гротеск в тексте
|
|
63
|
+
(`--<префикс>-font-sans`);
|
|
64
|
+
- большие полноэкранные фото, щедрые отступы, сдержанные анимации;
|
|
65
|
+
- тёмные оверлеи поверх фото — переменными с прозрачностью.
|
|
54
66
|
|
|
55
|
-
## Перебить умолчание
|
|
67
|
+
## Перебить умолчание кита
|
|
56
68
|
|
|
57
|
-
Стили компонента
|
|
58
|
-
|
|
59
|
-
|
|
69
|
+
Стили компонента с `ViewEncapsulation.None` весят столько же, сколько умолчания кита: у
|
|
70
|
+
`.<префикс>-block__item` и у `.<префикс>-kit-item` по одному классу, и исход решает порядок подключения.
|
|
71
|
+
Переопределение пишется потомком блока:
|
|
60
72
|
|
|
61
73
|
```scss
|
|
62
74
|
& &__item {
|
|
63
|
-
color: var(
|
|
75
|
+
color: var(--<префикс>-color-text-muted);
|
|
64
76
|
}
|
|
65
77
|
```
|
|
66
78
|
|
|
67
79
|
## Частые промахи
|
|
68
80
|
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
-
|
|
76
|
-
|
|
77
|
-
только расходится с ним.
|
|
81
|
+
- Комментарий-выключатель stylelint: селекторы объединяются вложенностью, а не отключением
|
|
82
|
+
правила.
|
|
83
|
+
- `!important`: запрещён, и инлайновый `width: 100%` на боксе панели перебить им нельзя.
|
|
84
|
+
- Новые объявления при переносе стилей: переносится существующее, новое появляется только
|
|
85
|
+
тогда, когда задача — фича.
|
|
86
|
+
- Замечание линтера, лежавшее в файле раньше, оставлено: правятся все, и новые, и старые.
|
|
87
|
+
- Свой `font-family: inherit` в компоненте: наследование включено глобально в `styles.scss`
|
|
88
|
+
обоих приложений.
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
name: styling-bem-layout
|
|
3
3
|
kind: pattern
|
|
4
4
|
rule: styling-bem
|
|
5
|
-
description: Паттерн правила styling-bem. Брать при сборке экрана раздела, формы, панели или окна — блоки общего слоя, разметка
|
|
5
|
+
description: Паттерн правила styling-bem. Брать при сборке экрана раздела, формы, панели или окна — готовые блоки общего слоя, разметка через rtBlock и rtElem, свой элемент в чужом поддереве, признак того, что правка идёт не туда. Не брать для стилей компонента кита — это паттерн styling-bem-component.
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Экран на общем слое раскладки
|
|
9
9
|
|
|
10
10
|
Паттерн правила `styling-bem`. Что при этом должно быть верно — закон
|
|
11
|
-
`
|
|
11
|
+
`docs/constitution/frontend-application.md`.
|
|
12
12
|
|
|
13
13
|
## Когда брать
|
|
14
14
|
|
|
@@ -17,51 +17,57 @@ description: Паттерн правила styling-bem. Брать при сбо
|
|
|
17
17
|
|
|
18
18
|
## Файл стилей экрана по умолчанию пустой
|
|
19
19
|
|
|
20
|
-
Раскладка объявлена один раз в общем слое
|
|
21
|
-
|
|
22
|
-
форма с разделами и строками полей, содержимое панели правки, содержимое модального окна.
|
|
20
|
+
Раскладка объявлена один раз в общем слое приложения (`apps/<app>/src/styles/`), а экран её
|
|
21
|
+
только применяет. Блоков в админке четыре, у сайта один:
|
|
23
22
|
|
|
24
|
-
Блок
|
|
23
|
+
| Блок | Что раскладывает |
|
|
24
|
+
| --------------------- | --------------------------------------------------------------- |
|
|
25
|
+
| `<префикс>-page` | экран раздела: заголовок, тулбар, прокрутка, таблица, пагинация |
|
|
26
|
+
| `<префикс>-form` | форма с разделами-карточками и строками полей |
|
|
27
|
+
| `<префикс>-panel` | содержимое панели правки |
|
|
28
|
+
| `<префикс>-window` | содержимое модального окна |
|
|
29
|
+
| `<префикс>-site-page` | колонка содержимого сайта: заголовок раздела и вводный абзац |
|
|
25
30
|
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
Блок вешается на хост, элементы получают классы от `rtBlock` в корне шаблона:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
host: { class: '<префикс>-page' },
|
|
28
35
|
```
|
|
29
36
|
|
|
30
37
|
```html
|
|
31
|
-
<ng-container rtBlock="
|
|
38
|
+
<ng-container rtBlock="<префикс>-page">
|
|
32
39
|
<header rtElem="header">
|
|
33
40
|
<div rtElem="header-main">
|
|
34
|
-
<h1 rtElem="title">{{ '
|
|
41
|
+
<h1 rtElem="title">{{ 'bookingsTitle' | transloco }}</h1>
|
|
42
|
+
<p rtElem="hint">{{ 'bookingsHint' | transloco }}</p>
|
|
35
43
|
</div>
|
|
36
44
|
</header>
|
|
37
45
|
</ng-container>
|
|
38
46
|
```
|
|
39
47
|
|
|
40
|
-
|
|
41
|
-
|
|
48
|
+
`rtBlock` на `<ng-container>` класса не ставит — узел это комментарий. Второго носителя класса
|
|
49
|
+
блока не нужно, и своей обёртки `<section>` тоже.
|
|
42
50
|
|
|
43
51
|
## Свой элемент в чужом поддереве
|
|
44
52
|
|
|
45
53
|
Пара директив на одном элементе; класс блока при этом не ставится, только класс элемента:
|
|
46
54
|
|
|
47
55
|
```html
|
|
48
|
-
<div rtBlock="
|
|
56
|
+
<div rtBlock="<префикс>-bookings-page" rtElem="confirm"></div>
|
|
49
57
|
```
|
|
50
58
|
|
|
51
|
-
Класс получается
|
|
59
|
+
Класс получается `<префикс>-bookings-page__confirm`, а потомки внутри считаются от того же блока.
|
|
52
60
|
|
|
53
61
|
## Своё в файле экрана
|
|
54
62
|
|
|
55
|
-
Остаётся только то, что принадлежит одному этому экрану и в общий слой не
|
|
56
|
-
календаря, карта на странице
|
|
63
|
+
Остаётся только то, что принадлежит одному этому экрану и в общий слой не просится — сетка
|
|
64
|
+
календаря, карта на странице объекта, лента переписки. Рядом пишется, почему это не общее.
|
|
57
65
|
|
|
58
66
|
## Частые промахи
|
|
59
67
|
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
- **Элемент чужого блока в чужом поддереве:** имя блока приходит от предка, и подмешать его
|
|
67
|
-
нечем.
|
|
68
|
+
- `display: flex` с `gap` и `padding` на `:host` в файле экрана — это раскладка. Одинаковые с
|
|
69
|
+
виду экраны от неё расходятся: заголовок страницы объявлялся в одиннадцати компонентах тремя
|
|
70
|
+
разными кеглями.
|
|
71
|
+
- `rtElem` без предка с `rtBlock`: отрисовка падает в рантайме, сборка и линт молчат.
|
|
72
|
+
- Класс, у которого правило сняли, а `rtElem` в шаблоне остался: ловит `npm run check:styles`.
|
|
73
|
+
- Элемент чужого блока в чужом поддереве: имя блока приходит инъекцией, и подмешать его нечем.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-flow-close
|
|
3
|
+
kind: pattern
|
|
4
|
+
rule: task-flow
|
|
5
|
+
description: Паттерн правила task-flow. Брать при закрытии работы — вливание договорённости в спек домена последним коммитом отчёта, разбор папки задачи, переезд в архив, сверка очереди работ. Не брать для хода работы — это паттерн task-flow-resume.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Закрытие работы
|
|
9
|
+
|
|
10
|
+
Паттерн правила `task-flow`. Что при этом должно быть верно — закон
|
|
11
|
+
`docs/constitution/work-conduct.md`.
|
|
12
|
+
|
|
13
|
+
## Когда брать
|
|
14
|
+
|
|
15
|
+
- Этапы замысла закрыты, проверки зелёные, отчёт готовится к публикации.
|
|
16
|
+
- `npm run check:specs` перечислил договорённость в разделе «Пора вливать».
|
|
17
|
+
|
|
18
|
+
## 1. Договорённость вливается в спек домена
|
|
19
|
+
|
|
20
|
+
Последним коммитом отчёта, до слияния. Код к этому моменту написан, поэтому привязки
|
|
21
|
+
`файл:символ` известны — правило въезжает в спек домена сразу проверяемым.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm run check:specs # раздел «Пора вливать» называет готовые директории
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Порядок переезда:
|
|
28
|
+
|
|
29
|
+
- правила из `proposed/<фича>/spec.md` дописываются в `spec.md` домена, в его разделы;
|
|
30
|
+
- сценарии переезжают в `scenarios.md` домена **с прежними номерами**: на них ссылаются
|
|
31
|
+
заголовки тестов, и пересчёт рвёт сверку;
|
|
32
|
+
- привязки из `proposed/<фича>/implementation.md` дописываются в `implementation.md` домена
|
|
33
|
+
и проставляются на код, который теперь есть;
|
|
34
|
+
- законы, объявленные фичей в шапке, дописываются в шапку спека домена;
|
|
35
|
+
- директория `proposed/<фича>/` удаляется, строка о фиче снимается из раздела «Что
|
|
36
|
+
предложено, но ещё не выкачено» в `docs/specs/README.md`;
|
|
37
|
+
- домена ещё не было — `proposed/` заменяется полноценным спеком, и домен получает строку в
|
|
38
|
+
таблице `docs/specs/README.md`.
|
|
39
|
+
|
|
40
|
+
Работа шла несколькими задачами — вливание идёт в последней из них. Какая последняя, видно в
|
|
41
|
+
`docs/plans/<линия>.md`; закрытая линия уезжает в `docs/archive/` или удаляется.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run check:specs # после вливания: привязки на месте, сценарии не потерялись
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 2. Тексты домена приводятся к сделанному
|
|
48
|
+
|
|
49
|
+
В спек уезжает только то, что записали до кода. Остальные тексты — правила, паттерны, законы
|
|
50
|
+
приложения — после правки никто не перечитывает, и они продолжают описывать старое дерево.
|
|
51
|
+
Следующий читатель принимает их за верные.
|
|
52
|
+
|
|
53
|
+
Что перечитывать, берётся из раздела замысла, где названо, что работа задевает: там стоят
|
|
54
|
+
спеки, законы и правила по её следу. К ним добавляется то, что всплыло по ходу. Всю
|
|
55
|
+
конституцию и все правила читать не надо.
|
|
56
|
+
|
|
57
|
+
| Род текста | Что с ним делается |
|
|
58
|
+
| --------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
59
|
+
| спек домена и его поддомены | у новой фичи появляется правило, сценарий и привязка; из «Что не входит» убирается то, что теперь входит |
|
|
60
|
+
| правило и его `implementation.md` | новое утверждение с привязкой `файл:символ`; снятое убирается вместе со строкой привязки |
|
|
61
|
+
| паттерн | код, разошедшийся с деревом, правится; новый приём дописывается разделом |
|
|
62
|
+
| закон приложения и общий закон | **файл не правится**: владельцу приносится текст статьи, работа идёт дальше без неё |
|
|
63
|
+
| обзорный документ продукта | новая фича дописывается строкой; строка о снятом правится |
|
|
64
|
+
|
|
65
|
+
Устаревшее чаще всего лежит в трёх местах, и все три читаются целиком:
|
|
66
|
+
|
|
67
|
+
- **«Чего из закона здесь нет» в правиле.** Сверка спеков этот раздел не читает, поэтому
|
|
68
|
+
неправда живёт в нём сколько угодно: правило три задачи подряд писало, что нужного механизма
|
|
69
|
+
в дереве нет, — а он был;
|
|
70
|
+
- **«Что не входит» в спеке домена.** Туда писали границу задачи, а задача давно закрыта;
|
|
71
|
+
- **«Где это лежит» в правиле.** Файлы переезжают, пути в таблице остаются.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# где правило и спеки говорят о том, что задевала работа
|
|
75
|
+
grep -rn -i "<слово работы>" <каталог правил>/*/SKILL.md docs/specs/*/spec.md
|
|
76
|
+
# раздел, который не сверяется ничем, — читается глазами целиком
|
|
77
|
+
grep -rn -A3 "Чего из закона здесь нет" <каталог правил>/<правило>/SKILL.md
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Закон в ветке не правится.** Статья закона — договорённость с владельцем, и меняет её он.
|
|
81
|
+
Работа с ней разошлась — пишется готовый текст статьи: в ход работы и в тело отчёта. Файл
|
|
82
|
+
закона правится после ответа. С законами приложения так же: деньги, локали и доступ — та же
|
|
83
|
+
договорённость, только про это приложение.
|
|
84
|
+
|
|
85
|
+
Что сделали на этом шаге, пишется в тело отчёта: что перечитали, что изменили, а если ничего
|
|
86
|
+
не изменили — почему. Форма раздела — паттерн `git-workflow-commit`.
|
|
87
|
+
|
|
88
|
+
## 3. Папка задачи разбирается
|
|
89
|
+
|
|
90
|
+
Целиком в архив не переносится: `docs/archive/` — место для записей о состоявшемся, которые
|
|
91
|
+
кто-то читает, а не свалка ходов работы.
|
|
92
|
+
|
|
93
|
+
| Файл | Куда |
|
|
94
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
95
|
+
| `grill.md` | в `docs/archive/` — ответы владельца невосстановимы, и это единственная запись о том, почему задача поставлена так |
|
|
96
|
+
| `progress.md` | в `docs/archive/`, если в нём есть решения по ходу с причинами; иначе удаляется |
|
|
97
|
+
| `plan.md` | удаляется — после выкатки на его вопрос отвечает код, а на «как работает» отвечает спек домена |
|
|
98
|
+
|
|
99
|
+
Уезжающее складывается одним файлом с говорящим именем, а не папкой из трёх:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
cat docs/tasks/<КЛЮЧ>-<номер>-<slug>/grill.md > docs/archive/<ЧТО_РЕШАЛИ>.md
|
|
103
|
+
rm -r docs/tasks/<КЛЮЧ>-<номер>-<slug>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Разбор идёт в том же отчёте, что и работа: папка, оставленная до мержа, попадает в главную
|
|
107
|
+
ветку и читается там как текущая.
|
|
108
|
+
|
|
109
|
+
## 4. Сверка
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npm run check:board # папка закрытой задачи среди текущих, брошенные черновики
|
|
113
|
+
npm run check:specs # договорённость влита, привязки на месте
|
|
114
|
+
npm run check:docs # пути, названные в текстах, существуют
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Ловушки
|
|
118
|
+
|
|
119
|
+
- **Папку разбирают до слияния — потом о ней уже никто не вспомнит.** Сверка очереди считает
|
|
120
|
+
задачу закрытой по слиянию: до него папка среди текущих законна, а после за неё никто не
|
|
121
|
+
отвечает — работа перешла к следующей задаче, и находка достанется чужому заходу. Три раза
|
|
122
|
+
подряд папка закрытой задачи так и уехала в главную ветку, в последний раз их набралось
|
|
123
|
+
пять. Теперь это держит гард поставки: слияние отбивается, пока папка лежит в ветке.
|
|
124
|
+
- **Разбирают последним коммитом, а не перед открытием отчёта.** Пока идёт ревью, замысел
|
|
125
|
+
нужен на диске: без него правку по замечаниям не пропустит гард хода работы. Порядок такой:
|
|
126
|
+
правки по ревью, потом разбор папки, потом слияние.
|
|
127
|
+
- **Разбор папки идёт последним, после того как гейт пуша прошёл целиком.** Гард хода работы
|
|
128
|
+
не пускает правку кода приложения без замысла на диске, а после разбора замысла нет: чужое
|
|
129
|
+
замечание линтера, приехавшее мержем из главной ветки, чинить уже нечем, и гейт пуша стоит.
|
|
130
|
+
Порядок один: мерж главной ветки, все линтеры и проверки зелёные, вливание договорённости,
|
|
131
|
+
приведение текстов домена, разбор папки. Понадобилась правка кода после разбора — замысел
|
|
132
|
+
восстанавливается на диске на время правки, и разбор повторяется тем же коммитом.
|
|
133
|
+
- **Тексты правятся до разбора папки.** Список того, что перечитывать, лежит в замысле, а
|
|
134
|
+
разбор папки его удаляет. После разбора остаётся только память о том, что задевали.
|
|
135
|
+
- **Утверждение правила снимается вместе со строкой привязки.** Связь идёт по тексту
|
|
136
|
+
утверждения. Убрали утверждение и оставили строку в `implementation.md` — сверка спеков
|
|
137
|
+
краснеет; убрали строку и оставили утверждение — тоже.
|
|
138
|
+
- **Раздел «Чего из закона здесь нет» читается глазами, греп тут не помогает.** Искать
|
|
139
|
+
приходится не то слово, которое ждёшь: правило ссылалось на статью закона, которой в законе
|
|
140
|
+
нет вовсе, и по слову из своей темы эта строка находилась — а неправда была в другом.
|
|
141
|
+
- **Сказать «сверено», не открыв файл, нельзя.** Правило читается целиком. Устаревшее
|
|
142
|
+
утверждение стоит в списке среди верных и ничем от них не отличается.
|
|
143
|
+
- **Если папку просто удалить, первым пропадёт `grill.md`.** Удалить проще, чем разобрать, а
|
|
144
|
+
слова владельца записаны только там, и восстановить их неоткуда. Поэтому гард требует, чтобы
|
|
145
|
+
ветка добавила запись в архив. Что именно перенесли, он не проверяет — это смотрит владелец
|
|
146
|
+
на ревью.
|
|
147
|
+
- **Вливание после мержа не делается.** В главной ветке тогда лежит раздел «предложено, но не
|
|
148
|
+
выкачено» с тем, что работает месяц, — беззвучная ложь, тем убедительнее, чем старше.
|
|
149
|
+
- **Номера сценариев при вливании не пересчитываются.** Идентификатор — ключ связи с тестами;
|
|
150
|
+
сдвиг рвёт сверку у соседей, которых правка не касалась.
|
|
151
|
+
- **Правило без привязки в спек домена не въезжает.** Кода, который его исполняет, нет —
|
|
152
|
+
значит это намерение, и место ему в открытых вопросах домена, а не в правилах.
|
|
153
|
+
- **Архив не обновляется после выкатки.** Уехавшее туда описывает день переезда, и правится
|
|
154
|
+
оно только вместе с признанием, что описывало неверно.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-flow-resume
|
|
3
|
+
kind: pattern
|
|
4
|
+
rule: task-flow
|
|
5
|
+
description: Паттерн правила task-flow. Брать при возвращении к незаконченной работе новым заходом — что уже пришло в контекст, чего не спрашивать у владельца, как править «Где стоим», как записывать решение по ходу и пересмотр этапа. Не брать для начала работы — это паттерн task-flow-start.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Возвращение к незаконченной работе
|
|
9
|
+
|
|
10
|
+
Паттерн правила `task-flow`. Что при этом должно быть верно — закон
|
|
11
|
+
`docs/constitution/work-conduct.md`.
|
|
12
|
+
|
|
13
|
+
## Когда брать
|
|
14
|
+
|
|
15
|
+
- Сессия начата на ветке `<КЛЮЧ>-*`, работа в ней уже шла.
|
|
16
|
+
- Работа прерывается — надо оставить её так, чтобы следующий заход поднял без владельца.
|
|
17
|
+
|
|
18
|
+
## Что уже пришло в контекст
|
|
19
|
+
|
|
20
|
+
Хук `task-context-load.sh` на запуске сессии отдал замысел и ход работы целиком, а разбор
|
|
21
|
+
просьбы — путём. Перечитывать их файлами не нужно; `grill.md` читается, когда в ходе работы
|
|
22
|
+
всплыло решение, причина которого неясна.
|
|
23
|
+
|
|
24
|
+
Пришло предупреждение «РАБОТА БЕЗ ПАПКИ ЗАДАЧИ» — работа шла мимо: папка собирается с
|
|
25
|
+
образца, а `progress.md` заполняется по тому, что видно в дереве и в истории ветки, а не по
|
|
26
|
+
расспросам владельца.
|
|
27
|
+
|
|
28
|
+
## Чего не делать
|
|
29
|
+
|
|
30
|
+
- **Не спрашивать владельца о том, что записано.** Ради этого всё и заведено.
|
|
31
|
+
- **Не начинать заново то, что отмечено сделанным.** Отметка стоит в ходе работы; сомнение в
|
|
32
|
+
ней проверяется деревом — сборкой, тестами, чтением файла, — а не вопросом.
|
|
33
|
+
- **Не править замысел.** С ним сверяют результат; пересмотр идёт записью в ходе работы.
|
|
34
|
+
|
|
35
|
+
## Первое действие захода
|
|
36
|
+
|
|
37
|
+
Сверить «Где стоим» с деревом. Запись описывает день, когда её сделали:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git status --short
|
|
41
|
+
git log --oneline origin/main..HEAD
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Разошлось — «Где стоим» правится сразу, до работы: следующий заход поверит записи, а не
|
|
45
|
+
дереву.
|
|
46
|
+
|
|
47
|
+
## Как ведётся ход работы
|
|
48
|
+
|
|
49
|
+
Раздел «Где стоим» **перезаписывается**, а не дописывается — это первое, что читает следующий
|
|
50
|
+
заход, и единственное, что переживает обрезку по объёму:
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
## Где стоим
|
|
54
|
+
|
|
55
|
+
- **Этап:** 3 из 6 — гард и хук запуска
|
|
56
|
+
- **Сделано:** закон заведён, папка задачи и образец написаны
|
|
57
|
+
- **Следующий шаг:** сценарии обоих хуков, затем подключение в настройках
|
|
58
|
+
- **Незакоммиченное:** всё, ветка пока без коммитов
|
|
59
|
+
- **Ждём владельца:** нет
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Решение, принятое по ходу, — вместе с причиной и с тем, что было альтернативой:
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
- **2026-08-07. Гард судит по путям правки, а не по замыслу задачи.** Оценку «меняет ли
|
|
66
|
+
поведение» назначал бы тот, кому она мешает. Альтернатива — строка в замысле — отвергнута.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Пересмотр этапа — туда же, а не правкой замысла:
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
- **2026-08-07. Этап 4 заменён: роли заводятся обе, а не одна.** Владелец решил при разборе;
|
|
73
|
+
прежний этап в замысле оставлен видимым.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Запись захода отмечает сделанное и то, чем это подтверждено:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
### 2026-08-07
|
|
80
|
+
|
|
81
|
+
- 28 сценариев в наборе, `bash .claude/hooks/tests/run.sh` — все наборы зелёные.
|
|
82
|
+
- Доэтапное, не этой работы: сверка очереди перечисляет шесть закрытых задач вне борды.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Ловушки
|
|
86
|
+
|
|
87
|
+
- **Заход, кончившийся ничем, тоже записывается.** Иначе следующий пойдёт той же дорогой:
|
|
88
|
+
«пробовали так — не вышло, потому что» стоит одной строки и экономит целый заход.
|
|
89
|
+
- **Незакоммиченное называется явно.** Работа живёт в дереве неделями; строка «что лежит
|
|
90
|
+
несохранённым и почему» — единственное, по чему это видно, пока отчёта нет.
|
|
91
|
+
- **Подтверждение — вывод команды или замер, а не пересказ.** «Проверил, работает» через
|
|
92
|
+
заход неотличимо от «казалось, что работает».
|
|
93
|
+
- **Доэтапное отделяется от своего.** Красное, найденное по дороге и не этой работой
|
|
94
|
+
сделанное, помечается таковым сразу: иначе следующий заход примет его за свою поломку.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-flow-start
|
|
3
|
+
kind: pattern
|
|
4
|
+
rule: task-flow
|
|
5
|
+
description: Паттерн правила task-flow. Брать в начале работы от владельца — готовый порядок: разведка до первого вопроса, шесть обязательных вопросов, договорённость о продукте, конвейер ролей, заведение задачи и ветки, сборка папки задачи. Не брать для возвращения к незаконченной работе — это паттерн task-flow-resume.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Начало работы
|
|
9
|
+
|
|
10
|
+
Паттерн правила `task-flow`. Что при этом должно быть верно — закон
|
|
11
|
+
`docs/constitution/work-conduct.md`.
|
|
12
|
+
|
|
13
|
+
## Когда брать
|
|
14
|
+
|
|
15
|
+
- Владелец просит что-то сделать, и работы больше, чем на одну реплику.
|
|
16
|
+
- Замеченный по ходу дефект становится задачей.
|
|
17
|
+
|
|
18
|
+
## Порядок
|
|
19
|
+
|
|
20
|
+
### 1. Разведка — до первого вопроса
|
|
21
|
+
|
|
22
|
+
Вопрос, ответ на который лежит в коде, владельцу не задаётся: он обесценивает и остальные.
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Agent(subagent_type: "Explore", prompt: "<тема просьбы>: что по ней уже есть в дереве —
|
|
26
|
+
какие спеки описывают, какие законы и правила задевает, какие либы затронуты,
|
|
27
|
+
есть ли готовый образец рядом. Верни находки, а не пересказ файлов.")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Находки складываются в раздел «Что уже есть в дереве» разбора.
|
|
31
|
+
|
|
32
|
+
### 2. Разбор с владельцем
|
|
33
|
+
|
|
34
|
+
Ведёт главный агент: субагент до владельца не достучится. Команда — `/grill-me`, один вопрос
|
|
35
|
+
за раз, к каждому — свой рекомендуемый ответ с доводом.
|
|
36
|
+
|
|
37
|
+
Шесть вопросов задаются всегда, даже когда задача кажется понятной:
|
|
38
|
+
|
|
39
|
+
| Вопрос | Зачем |
|
|
40
|
+
| -------------------------------------------- | -------------------------------------------------------- |
|
|
41
|
+
| Меняет ли задача поведение приложения | от этого зависит договорённость о продукте |
|
|
42
|
+
| Требует ли правки закона или правила | закон без ведома владельца не правится |
|
|
43
|
+
| Одна задача или несколько | делится то, что откатывается порознь, и делится ДО ветки |
|
|
44
|
+
| Что в задачу не входит | не названная вслух граница не существует |
|
|
45
|
+
| Чем будет видно, что задача закрыта | «работает» признаком не является |
|
|
46
|
+
| Есть ли образец, с которого снимается подход | разведка найдёт похожее, а не то |
|
|
47
|
+
|
|
48
|
+
Форму вопроса задают настройки владельца: где они требуют меню, спрашивается меню, и тогда к
|
|
49
|
+
каждому вопросу добавляется свободный вариант — у закрытого набора нет строки «вопрос не тот».
|
|
50
|
+
Выбор слова, имени и термина уточняется прозой в любом случае.
|
|
51
|
+
|
|
52
|
+
Ответы пишутся в `docs/tasks/_draft-<slug>/grill.md` — папка ещё черновик, номера нет.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
mkdir -p docs/tasks/_draft-<slug>
|
|
56
|
+
cp docs/tasks/_template/grill.md docs/tasks/_draft-<slug>/grill.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3. Конвейер после разбора
|
|
60
|
+
|
|
61
|
+
Вопросов больше не будет — дальше роли:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Workflow(name: "plan", args: "docs/tasks/_draft-<slug>")
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Нужность → договорённость о продукте (`spec-writer`) → её состязательный разбор
|
|
68
|
+
(`spec-critic`) → замысел и разбивка (`project-manager`). Пробелы, которые роли не смогли
|
|
69
|
+
закрыть, возвращаются владельцу — их относит главный агент.
|
|
70
|
+
|
|
71
|
+
Договорённость, вышедшая из конвейера, сверяется с `grill.md` построчно до того, как по ней
|
|
72
|
+
пойдёт работа. Роль пишет текст, не видя владельца, и способна развернуть его ответ в
|
|
73
|
+
противоположный: очередь этапов оказалась перевёрнута, а два пункта из входящих переехали в
|
|
74
|
+
«не входит». Находка критика, расходящаяся с ответом владельца, относится владельцу — она не
|
|
75
|
+
исполняется молча и не считается закрытой правкой текста.
|
|
76
|
+
|
|
77
|
+
### 4. Задача, ветка, папка
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm run task:new -- --title '<Что не так>' --slug <slug> --label documentation --label area:tooling < тело.md
|
|
81
|
+
git checkout -b <КЛЮЧ>-<номер>-<slug>
|
|
82
|
+
npm run task:move -- <номер> in-progress
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`task:new` переименовывает `_draft-<slug>` в `<КЛЮЧ>-<номер>-<slug>` и проставляет шапку замысла.
|
|
86
|
+
Ветка заводится вторым вызовом: составную «завести и сразу коммитить» гард главной ветки
|
|
87
|
+
отклоняет целиком.
|
|
88
|
+
|
|
89
|
+
Остальные два файла — с образца:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
cp docs/tasks/_template/plan.md docs/tasks/<КЛЮЧ>-<номер>-<slug>/plan.md
|
|
93
|
+
cp docs/tasks/_template/progress.md docs/tasks/<КЛЮЧ>-<номер>-<slug>/progress.md
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 5. Шапка замысла
|
|
97
|
+
|
|
98
|
+
Её читает гард:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
**Задача:** <КЛЮЧ>-282 · **Ветка:** <КЛЮЧ>-282-task-flow
|
|
102
|
+
**Драфт:** `docs/specs/bookings/proposed/aside-header/`
|
|
103
|
+
**Поведение:** меняется
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Работа, не задевающая `apps/**` и `libs/**`, договорённости не требует:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
**Поведение:** не меняется — переезд слоя, снаружи не видно. Подтверждено владельцем.
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Пустая причина не принимается.
|
|
113
|
+
|
|
114
|
+
## Ловушки
|
|
115
|
+
|
|
116
|
+
- **Номер не бывает первым.** До конца разбора неизвестно даже, сколько задач из него выйдет:
|
|
117
|
+
заведённая заранее задача после разбивки закрывается и остаётся мусором в очереди работ.
|
|
118
|
+
- **Разбор пишется на диск сразу, а не копится в переписке.** Сессия обрывается, и разбор,
|
|
119
|
+
прожитый в разговоре, восстанавливается только пересказом владельца.
|
|
120
|
+
- **Из одного разбора вышло несколько задач — общее уезжает в `docs/plans/<линия>.md`.**
|
|
121
|
+
Папка задачи умирает с мержем, а порядок задач и зависимости между ними должны его
|
|
122
|
+
пережить.
|
|
123
|
+
- **Задача заводится командой, а не четырьмя вызовами подряд.** Борда к репозиторию не
|
|
124
|
+
привязана, и задача попадает на неё только явным добавлением.
|
|
125
|
+
- **Slug ветки берётся из терминологии договорённости, а не из слов просьбы.** Договорённость
|
|
126
|
+
пишется раньше ветки и как раз там отказывается от слова владельца: спек завёл своё имя
|
|
127
|
+
предмету и прямо сказал, каким словом его не называть, — а ветка и папка задачи остались с
|
|
128
|
+
отвергнутым. Заголовок задачи и отчёта поправить можно, имя ветки после открытия отчёта —
|
|
129
|
+
уже нет.
|