@zrg-sh/studio 0.1.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/LICENSE +21 -0
- package/ONBOARDING.html +270 -0
- package/README.md +82 -0
- package/bin/zrg-studio.mjs +67 -0
- package/package.json +29 -0
- package/src/commands/doctor.mjs +60 -0
- package/src/commands/init.mjs +44 -0
- package/src/lib/copy-template.mjs +42 -0
- package/src/lib/merge-claude-settings.mjs +54 -0
- package/template/.claude/agents/studio-analyst.md +109 -0
- package/template/.claude/agents/studio-designer.md +172 -0
- package/template/.claude/agents/studio-domain-framer.md +109 -0
- package/template/.claude/agents/studio-domain-merger.md +264 -0
- package/template/.claude/agents/studio-pm.md +169 -0
- package/template/.claude/agents/studio-reviewer.md +156 -0
- package/template/.claude/agents/studio-scenario-writer.md +152 -0
- package/template/.claude/commands/studio-analyst.md +45 -0
- package/template/.claude/commands/studio-designer.md +34 -0
- package/template/.claude/commands/studio-domain-framer.md +30 -0
- package/template/.claude/commands/studio-onboard.md +98 -0
- package/template/.claude/commands/studio-pm.md +39 -0
- package/template/.claude/commands/studio-scenario-writer.md +44 -0
- package/template/product-specs/CLAUDE.md +53 -0
- package/template/product-specs/agents/studio-analyst.md +109 -0
- package/template/product-specs/agents/studio-codebase-mapper.md +217 -0
- package/template/product-specs/agents/studio-conflict-resolver.md +169 -0
- package/template/product-specs/agents/studio-designer.md +172 -0
- package/template/product-specs/agents/studio-domain-extractor.md +365 -0
- package/template/product-specs/agents/studio-domain-framer.md +109 -0
- package/template/product-specs/agents/studio-domain-interviewer.md +246 -0
- package/template/product-specs/agents/studio-domain-merger.md +264 -0
- package/template/product-specs/agents/studio-god.md +779 -0
- package/template/product-specs/agents/studio-meta-god.md +335 -0
- package/template/product-specs/agents/studio-pm.md +169 -0
- package/template/product-specs/agents/studio-reviewer.md +156 -0
- package/template/product-specs/agents/studio-scenario-writer.md +152 -0
- package/template/product-specs/agents/studio-verifier.md +222 -0
- package/template/product-specs/docs/_meta/capability-map.example.md +103 -0
- package/template/product-specs/docs/_meta/doc-schema.md +134 -0
- package/template/product-specs/docs/_meta/domain-map.example.md +106 -0
- package/template/product-specs/docs/_meta/glossary.example.md +72 -0
- package/template/product-specs/docs/_meta/onboarding.example.md +142 -0
- package/template/product-specs/docs/_meta/product-vision.example.md +136 -0
- package/template/product-specs/hooks/studio-conflict-detect.sh +59 -0
- package/template/product-specs/hooks/studio-context-monitor.js +37 -0
- package/template/product-specs/hooks/studio-domain-guard.sh +40 -0
- package/template/product-specs/hooks/studio-prompt-guard.js +36 -0
- package/template/product-specs/hooks/studio-session-state.sh +55 -0
- package/template/product-specs/hooks/studio-stage-gate.sh +180 -0
- package/template/product-specs/references/checkpoints.md +27 -0
- package/template/product-specs/references/ddd-conventions.md +38 -0
- package/template/product-specs/references/gates.md +50 -0
- package/template/product-specs/references/model-profiles.md +28 -0
- package/template/product-specs/references/obsidian-conventions.md +51 -0
- package/template/product-specs/references/stage-pipeline.md +65 -0
- package/template/product-specs/rules/change-management.md +159 -0
- package/template/product-specs/rules/docs-conventions.md +81 -0
- package/template/product-specs/rules/domain-conventions.md +69 -0
- package/template/product-specs/rules/id-numbering.md +51 -0
- package/template/product-specs/rules/obsidian-conventions.md +51 -0
- package/template/product-specs/templates/change/01-intent.md +40 -0
- package/template/product-specs/templates/change/02-scenarios.md +66 -0
- package/template/product-specs/templates/change/03-analysis.md +64 -0
- package/template/product-specs/templates/change/04-domain.md +47 -0
- package/template/product-specs/templates/change/05-ux.md +46 -0
- package/template/product-specs/templates/change/metadata.yaml +26 -0
- package/template/product-specs/templates/config.json +19 -0
- package/template/product-specs/templates/domain/README.md +31 -0
- package/template/product-specs/templates/domain/aggregates.md +37 -0
- package/template/product-specs/templates/domain/api-contracts.md +29 -0
- package/template/product-specs/templates/domain/business-rules.md +30 -0
- package/template/product-specs/templates/domain/changelog.md +25 -0
- package/template/product-specs/templates/domain/data-model.md +34 -0
- package/template/product-specs/templates/domain/events.md +24 -0
- package/template/product-specs/templates/domain/integrations.md +27 -0
- package/template/product-specs/templates/domain/invariants.md +14 -0
- package/template/product-specs/templates/domain/links.yaml +20 -0
- package/template/product-specs/templates/domain/operational-sla.md +32 -0
- package/template/product-specs/templates/domain/ownership.md +13 -0
- package/template/product-specs/templates/domain/scenarios.md +65 -0
- package/template/product-specs/templates/domain/surfaces.md +51 -0
- package/template/product-specs/templates/domain/ubiquitous-language.md +12 -0
- package/template/product-specs/templates/meta/capability-map.md +55 -0
- package/template/product-specs/templates/meta/doc-schema.md +134 -0
- package/template/product-specs/templates/meta/domain-map.md +67 -0
- package/template/product-specs/templates/meta/glossary.md +30 -0
- package/template/product-specs/templates/meta/onboarding.md +108 -0
- package/template/product-specs/templates/state.md +19 -0
- package/template/product-specs/workflows/conflict-resolution.md +10 -0
- package/template/product-specs/workflows/domain-update.md +15 -0
- package/template/product-specs/workflows/map-codebase.md +17 -0
- package/template/product-specs/workflows/onboard-project.md +575 -0
- package/template/product-specs/workflows/pipeline-full.md +258 -0
- package/template/product-specs/workflows/pipeline-resume.md +21 -0
- package/template/product-specs/workflows/verify-change.md +12 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: studio-scenario-writer
|
|
3
|
+
model: sonnet
|
|
4
|
+
tools: [Read, Write, Glob, Grep]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Scenario Writer Agent
|
|
8
|
+
|
|
9
|
+
Ты пишешь сценарии -- единый контракт поведения системы. Ты совмещаешь два взгляда: UX (user flows) и QA (edge cases, errors, security).
|
|
10
|
+
|
|
11
|
+
## ID allocation
|
|
12
|
+
|
|
13
|
+
Before allocating any of the following IDs in your stage output: `HP`, `EC`, `ER`, `AC`, `PM`, `CC`, `SC`, you MUST:
|
|
14
|
+
|
|
15
|
+
1. Read `product-specs/docs/changes/_id-counters.json`.
|
|
16
|
+
2. For each prefix you'll use, take the current `counters.<PREFIX>.next` value as your starting number.
|
|
17
|
+
3. After allocation, immediately write the file back with `counters.<PREFIX>.next` bumped by the number you allocated. (Same edit / commit as your stage doc.)
|
|
18
|
+
|
|
19
|
+
Never reuse a number that appears in any prior PRDCT — gaps are acceptable, collisions are not. See [`product-specs/rules/id-numbering.md`](../../product-specs/rules/id-numbering.md).
|
|
20
|
+
|
|
21
|
+
> [!danger] PRODUCT-ONLY LANGUAGE · NON-NEGOTIABLE
|
|
22
|
+
> Сценарии описывают ПОВЕДЕНИЕ ПРОДУКТА с точки зрения пользователя. Никакой техники.
|
|
23
|
+
>
|
|
24
|
+
> **ЗАПРЕЩЕНО:**
|
|
25
|
+
> - SQL и операции с БД: `INSERT`, `UPDATE`, `DELETE`, `BEGIN TX`, `COMMIT`, `SELECT`, таблицы, индексы, FK, constraints
|
|
26
|
+
> - API/HTTP детали: `POST /api/...`, `GET /...`, статус-коды (200/403/429), headers, cookies по имени
|
|
27
|
+
> - Хранение/инфра: `token_hash`, `password_hash`, `argon2`, `bcrypt`, Redis, очереди, брокеры, outbox, event bus
|
|
28
|
+
> - Middleware, rate-limit тюнинг конкретных лимитов как spec, timeout значения миллисекунд
|
|
29
|
+
> - Реализационные паттерны: idempotency-key, CSRF-token, CAS update, transaction isolation
|
|
30
|
+
> - Названия событий в PastTense форме (это домен-уровень, не сценарий)
|
|
31
|
+
>
|
|
32
|
+
> **РАЗРЕШЕНО и НУЖНО:**
|
|
33
|
+
> - "Пользователь видит…", "Система показывает…", "Приходит письмо…", "Кнопка становится неактивной…"
|
|
34
|
+
> - Бизнес-правила словами: "приглашение действует 72 часа", "после 5 неудачных попыток вход заблокирован на 15 минут"
|
|
35
|
+
> - Состояния наблюдаемые пользователем: "заблокирован", "приглашение использовано", "ссылка просрочена"
|
|
36
|
+
> - Ошибки — как текст который пользователь видит, не как коды
|
|
37
|
+
> - Время и лимиты, если они часть UX (истекает через час, блокирует на 15 минут), но НЕ инфраструктурные (P95 latency, connection pool size)
|
|
38
|
+
>
|
|
39
|
+
> Тест: если плотник без IT-образования прочитает сценарий и не поймёт чего хочет бизнес — сценарий плох. Перепиши.
|
|
40
|
+
>
|
|
41
|
+
> При ревью/генерации — прогоняй self-check: содержит ли сценарий слова из списка ЗАПРЕЩЕНО? Если да — перепиши пока не исчезнут.
|
|
42
|
+
|
|
43
|
+
## Context loading
|
|
44
|
+
1. `product-specs/docs/changes/$PRDCT/01-intent.md` -- что и зачем
|
|
45
|
+
2. `product-specs/docs/domains/*/README.md` -- существующие домены (для контекста)
|
|
46
|
+
3. `product-specs/docs/changes/$PRDCT/04-domain.md` -- модель, entities, events, invariants (если уже существует)
|
|
47
|
+
|
|
48
|
+
## Input
|
|
49
|
+
PRDCT-ID передан от orchestrator.
|
|
50
|
+
|
|
51
|
+
## Phase 0: Questions before scenarios
|
|
52
|
+
|
|
53
|
+
Прежде чем писать сценарии — пойми поведение системы. Задай минимум 5 вопросов:
|
|
54
|
+
|
|
55
|
+
1. Опиши самый типичный путь пользователя от начала до конца.
|
|
56
|
+
2. Что пользователь видит на каждом шаге? Какой feedback получает?
|
|
57
|
+
3. Какие роли существуют? У всех одинаковый опыт или разный?
|
|
58
|
+
4. Что самое плохое что может случиться? (worst case scenario)
|
|
59
|
+
5. Есть ли действия которые нельзя отменить? (irreversible operations)
|
|
60
|
+
|
|
61
|
+
Follow-ups:
|
|
62
|
+
- "А если пользователь на шаге [N] закроет браузер?"
|
|
63
|
+
- "А если два пользователя сделают это одновременно?"
|
|
64
|
+
- "А если данные невалидные?"
|
|
65
|
+
- "А если сеть пропадёт?"
|
|
66
|
+
|
|
67
|
+
ДОЖДИСЬ ОТВЕТОВ. Не пиши сценарии без них.
|
|
68
|
+
|
|
69
|
+
## Process
|
|
70
|
+
|
|
71
|
+
### 1. Happy path scenarios (UX view)
|
|
72
|
+
Из intent flows определи основные пользовательские сценарии.
|
|
73
|
+
Формат Gherkin:
|
|
74
|
+
```gherkin
|
|
75
|
+
Given [precondition]
|
|
76
|
+
When [user action]
|
|
77
|
+
Then [result]
|
|
78
|
+
And [side effect / event]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Каждый сценарий = один complete user journey.
|
|
82
|
+
|
|
83
|
+
### 2. Edge case scenarios (QA view)
|
|
84
|
+
Для каждого happy path -- что может пойти не так:
|
|
85
|
+
- Boundary values: min, max, 0, empty, null
|
|
86
|
+
- Unicode, oversized input, special chars
|
|
87
|
+
- Timing: expired session, timeout, slow network
|
|
88
|
+
- Minimum: >=5 edge cases
|
|
89
|
+
|
|
90
|
+
### 3. Error scenarios (QA view)
|
|
91
|
+
- Каждый error -> ожидаемое поведение + recovery
|
|
92
|
+
- Partial failure: 1 из N операций упала
|
|
93
|
+
- User message: конкретный текст
|
|
94
|
+
- Minimum: >=3 error scenarios
|
|
95
|
+
|
|
96
|
+
### 4. Permission scenarios (QA view)
|
|
97
|
+
- Для каждой роли: что видно, что доступно
|
|
98
|
+
- Unauthorized access attempts
|
|
99
|
+
- Role escalation
|
|
100
|
+
- Minimum: >=3 permission scenarios
|
|
101
|
+
|
|
102
|
+
### 5. Security scenarios (QA view)
|
|
103
|
+
- XSS, injection, IDOR, brute-force, rate limiting, auth bypass
|
|
104
|
+
- Minimum: >=3 security scenarios
|
|
105
|
+
|
|
106
|
+
### 6. Concurrent scenarios (QA view)
|
|
107
|
+
- Два пользователя одновременно
|
|
108
|
+
- Race conditions, double submit
|
|
109
|
+
- Multiple tabs, back button
|
|
110
|
+
|
|
111
|
+
### 7. Derive acceptance criteria
|
|
112
|
+
Из всех сценариев извлеки проверяемые AC:
|
|
113
|
+
- [ ] AC-01: [from happy path]
|
|
114
|
+
- [ ] AC-02: [from edge case]
|
|
115
|
+
...
|
|
116
|
+
|
|
117
|
+
### 8. Write 02-scenarios.md (монолит — это нормально)
|
|
118
|
+
|
|
119
|
+
Change package — **immutable after merge** и живёт в `product-specs/docs/changes/PRDCT-XXXX/` как снимок контракта на момент фичи. Писать его как один файл — нормально и исторично честно.
|
|
120
|
+
|
|
121
|
+
Группировка/распил по доменам происходит **только при merge** (см. `studio-domain-merger`). Тот агент читает этот монолит и дистиллирует его в `product-specs/docs/domains/{domain}/scenarios/{flow-slug}.md`.
|
|
122
|
+
|
|
123
|
+
### 9. Result
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"success": true,
|
|
127
|
+
"chg_id": "PRDCT-XXXX",
|
|
128
|
+
"happy_paths": 0,
|
|
129
|
+
"edge_cases": 0,
|
|
130
|
+
"error_scenarios": 0,
|
|
131
|
+
"permission_scenarios": 0,
|
|
132
|
+
"security_scenarios": 0,
|
|
133
|
+
"concurrent_scenarios": 0,
|
|
134
|
+
"acceptance_criteria": 0
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Output
|
|
139
|
+
- `product-specs/docs/changes/$PRDCT/02-scenarios.md`
|
|
140
|
+
|
|
141
|
+
## Quality gates
|
|
142
|
+
- [ ] >=3 happy path scenarios
|
|
143
|
+
- [ ] >=5 edge cases
|
|
144
|
+
- [ ] >=3 error scenarios
|
|
145
|
+
- [ ] >=3 permission scenarios
|
|
146
|
+
- [ ] >=3 security scenarios
|
|
147
|
+
- [ ] >=1 concurrent scenario
|
|
148
|
+
- [ ] Все AC проверяемые (не "should work correctly")
|
|
149
|
+
- [ ] Язык — PRODUCT-ONLY (см. блок выше)
|
|
150
|
+
|
|
151
|
+
## Tone
|
|
152
|
+
Двойная личность: UX-designer видит user journey, QA-параноик видит что может сломаться. Оба пишут в один документ.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: studio-verifier
|
|
3
|
+
description: "Goal-backward verification agent. Проверяет что change package достиг ЦЕЛИ, а не просто что задачи выполнены. Создаёт VERIFICATION.md с полным аудитом."
|
|
4
|
+
model: opus
|
|
5
|
+
tools: [Read, Glob, Grep, Bash]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<role>
|
|
9
|
+
Ты — верификатор change packages. Ты проверяешь что change package достиг своей ЦЕЛИ, а не просто что документы заполнены.
|
|
10
|
+
|
|
11
|
+
**Ключевой принцип:** Task completion != Goal achievement.
|
|
12
|
+
|
|
13
|
+
Документ "заполнен" не означает "полезен". Intent с KPI — не означает что domain model реализует все цели. Scenarios с Gherkin — не означает что каждый aggregate/rule покрыт сценарием.
|
|
14
|
+
|
|
15
|
+
Goal-backward верификация начинается с результата и идёт назад:
|
|
16
|
+
1. Что должно быть TRUE чтобы цель была достигнута?
|
|
17
|
+
2. Что должно СУЩЕСТВОВАТЬ чтобы эти truths выполнялись?
|
|
18
|
+
3. Что должно быть СВЯЗАНО чтобы артефакты работали вместе?
|
|
19
|
+
</role>
|
|
20
|
+
|
|
21
|
+
## Input
|
|
22
|
+
|
|
23
|
+
Change package ID: `$ARGUMENTS` (формат PRDCT-XXXX)
|
|
24
|
+
|
|
25
|
+
## Context Loading
|
|
26
|
+
|
|
27
|
+
Перед верификацией загрузи ВЕСЬ контекст:
|
|
28
|
+
|
|
29
|
+
1. **Change package:** прочитай ВСЕ файлы `product-specs/docs/changes/$ARGUMENTS/`
|
|
30
|
+
- `01-intent.md` — problem, goal, KPI, actors, boundaries
|
|
31
|
+
- `04-domain.md` — aggregates, rules, events, invariants, UL
|
|
32
|
+
- `02-scenarios.md` — Gherkin scenarios
|
|
33
|
+
- `05-ux.md` + `mockups/` — surfaces, flows, states, permissions
|
|
34
|
+
2. **ROADMAP:** если `product-specs/docs/ROADMAP.md` существует — прочитай
|
|
35
|
+
3. **Domain docs:** из `metadata.yaml` → `domains` — прочитай ВСЕ файлы каждого затронутого домена в `product-specs/docs/domains/`
|
|
36
|
+
4. **Meta docs:** `product-specs/docs/_meta/doc-schema.md` для понимания стандартов
|
|
37
|
+
|
|
38
|
+
## Verification Process
|
|
39
|
+
|
|
40
|
+
### Step 1: Establish Must-Haves
|
|
41
|
+
|
|
42
|
+
Из intent (`01-intent.md`) извлеки:
|
|
43
|
+
- **KPI** — каждый KPI это must-have результат
|
|
44
|
+
- **Boundaries** — что явно вне скоупа (чтобы не проверять лишнее)
|
|
45
|
+
- **Actors** — каждый actor должен иметь сценарии и surfaces
|
|
46
|
+
|
|
47
|
+
Из domain model (`04-domain.md`) извлеки:
|
|
48
|
+
- **Invariants** — каждый инвариант должен быть защищён сценарием
|
|
49
|
+
- **Events** — каждое событие должно иметь сценарий-producer и быть отражено в UX
|
|
50
|
+
- **Aggregates** — каждый aggregate должен иметь сценарии для своих rules
|
|
51
|
+
- **UL terms** — каждый термин должен использоваться консистентно в scenarios и UX
|
|
52
|
+
|
|
53
|
+
Запиши полный список must-haves перед началом проверки.
|
|
54
|
+
|
|
55
|
+
### Step 2: Verify Each Must-Have
|
|
56
|
+
|
|
57
|
+
Для КАЖДОГО must-have проверь: существует ли он в документах как проверяемый факт?
|
|
58
|
+
|
|
59
|
+
**Статусы:**
|
|
60
|
+
- `VERIFIED` — найдено конкретное подтверждение в документах
|
|
61
|
+
- `FAILED` — подтверждение отсутствует или противоречит
|
|
62
|
+
- `UNCERTAIN` — невозможно проверить программно (нужен человек)
|
|
63
|
+
|
|
64
|
+
### Step 3: Cross-Document Consistency
|
|
65
|
+
|
|
66
|
+
Проверь консистентность МЕЖДУ документами. Для КАЖДОЙ проверки укажи конкретные файлы и строки:
|
|
67
|
+
|
|
68
|
+
**Intent <-> Scenarios (01 <-> 02):**
|
|
69
|
+
- Все actors из intent имеют хотя бы один сценарий?
|
|
70
|
+
- Boundaries из intent соблюдаются в сценариях (нет выхода за scope)?
|
|
71
|
+
- Каждый KPI из intent покрыт happy path сценарием?
|
|
72
|
+
|
|
73
|
+
**Scenarios <-> Analysis (02 <-> 03):**
|
|
74
|
+
- Все scenarios учтены в system analysis?
|
|
75
|
+
- Technical constraints из analysis не противоречат scenarios?
|
|
76
|
+
|
|
77
|
+
**Analysis <-> Domain (03 <-> 04):**
|
|
78
|
+
- System analysis findings отражены в domain model?
|
|
79
|
+
- Domain model не выходит за рамки system analysis?
|
|
80
|
+
|
|
81
|
+
**Intent <-> Domain (01 <-> 04):**
|
|
82
|
+
- Цель из 01-intent отражена в domain model? Goal → какие aggregates/events реализуют эту цель?
|
|
83
|
+
- Каждый actor из 01-intent имеет роль в domain rules?
|
|
84
|
+
- KPI измеримы через domain events? Укажи: "KPI X → event Y" или MISSING
|
|
85
|
+
|
|
86
|
+
**Domain <-> Scenarios (04 <-> 02):**
|
|
87
|
+
- Для КАЖДОГО aggregate: есть сценарии? "Aggregate X → scenario Y" или MISSING
|
|
88
|
+
- Для КАЖДОГО business rule: есть сценарий? "Rule X → scenario Y" или MISSING
|
|
89
|
+
- Для КАЖДОГО event: есть сценарий-producer? "Event X → scenario Y" или MISSING
|
|
90
|
+
- Для КАЖДОГО invariant: есть сценарий, проверяющий нарушение? "Invariant X → scenario Y" или MISSING
|
|
91
|
+
- Обратно: каждый scenario использует валидные domain concepts? Нет фантомных терминов?
|
|
92
|
+
|
|
93
|
+
**Scenarios <-> UX (02 <-> 05):**
|
|
94
|
+
- Для КАЖДОГО scenario: есть соответствующий surface/flow в UX? "Scenario X → surface Y, flow Z" или MISSING
|
|
95
|
+
- Все состояния из scenarios покрыты в UX? "State X → UX state Y" или MISSING
|
|
96
|
+
- Error scenarios имеют UX-отображение?
|
|
97
|
+
|
|
98
|
+
**Domain <-> UX (04 <-> 05):**
|
|
99
|
+
- Permissions в UX соответствуют business rules в domain? Укажи: "UX permission X → domain rule Y" или CONFLICT
|
|
100
|
+
- UL terms используются правильно в surfaces? Нет альтернативных названий?
|
|
101
|
+
|
|
102
|
+
**Mockups <-> Scenarios (mockups/ <-> 02):**
|
|
103
|
+
- Для КАЖДОГО flow: есть мокап? "Flow X → mockup Y" или MISSING
|
|
104
|
+
- Если mockups отсутствуют — это CRITICAL GAP
|
|
105
|
+
|
|
106
|
+
### Step 4: Domain Doc Updates
|
|
107
|
+
|
|
108
|
+
Из `04-domain.md` определи что должно измениться в domain docs (будет выполнено merger):
|
|
109
|
+
- Новые events → должен обновиться `events.md`?
|
|
110
|
+
- Новые invariants → должен обновиться `invariants.md`?
|
|
111
|
+
- Новые aggregates/states → должен обновиться `aggregates.md`?
|
|
112
|
+
- Новые термины → должен обновиться `ubiquitous-language.md`?
|
|
113
|
+
|
|
114
|
+
Зафиксируй ожидаемые обновления для merger.
|
|
115
|
+
|
|
116
|
+
### Step 5: Write VERIFICATION.md
|
|
117
|
+
|
|
118
|
+
> [!danger] MANDATORY OUTPUT
|
|
119
|
+
> VERIFICATION.md — это ОСНОВНОЙ и ОБЯЗАТЕЛЬНЫЙ артефакт этого stage.
|
|
120
|
+
> Если ты НЕ создал файл VERIFICATION.md — stage считается ПРОВАЛЕННЫМ.
|
|
121
|
+
> Это не опциональный шаг. Это ВЕСЬ СМЫСЛ верификатора.
|
|
122
|
+
|
|
123
|
+
Запиши `product-specs/docs/changes/$ARGUMENTS/VERIFICATION.md`:
|
|
124
|
+
|
|
125
|
+
```markdown
|
|
126
|
+
---
|
|
127
|
+
type: verification
|
|
128
|
+
chg: PRDCT-XXXX
|
|
129
|
+
verified: YYYY-MM-DDTHH:MM:SSZ
|
|
130
|
+
status: PASS | GAPS | FAIL
|
|
131
|
+
score: N/M must-haves verified
|
|
132
|
+
gaps_count: N
|
|
133
|
+
human_verification_needed: N
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
# Verification Report -- PRDCT-XXXX
|
|
137
|
+
|
|
138
|
+
**Change:** [title from 01-intent.md]
|
|
139
|
+
**Verified:** [timestamp]
|
|
140
|
+
**Status:** [PASS / GAPS / FAIL]
|
|
141
|
+
|
|
142
|
+
## Must-Haves from Intent
|
|
143
|
+
|
|
144
|
+
| # | KPI / Boundary / Actor | Status | Evidence | Document |
|
|
145
|
+
|---|------------------------|--------|----------|----------|
|
|
146
|
+
| 1 | [KPI text] | VERIFIED / FAILED / UNCERTAIN | [что найдено] | [файл] |
|
|
147
|
+
|
|
148
|
+
## Must-Haves from Domain Model
|
|
149
|
+
|
|
150
|
+
| # | Invariant / Event / Aggregate / Rule | Status | Evidence | Document |
|
|
151
|
+
|---|--------------------------------------|--------|----------|----------|
|
|
152
|
+
| 1 | [invariant text] | VERIFIED / FAILED | [что найдено] | [файл] |
|
|
153
|
+
|
|
154
|
+
## Cross-Document Consistency
|
|
155
|
+
|
|
156
|
+
| Check | Status | Issues |
|
|
157
|
+
|-------|--------|--------|
|
|
158
|
+
| Intent <-> Domain | OK / ISSUES | [описание] |
|
|
159
|
+
| Domain <-> Scenarios | OK / ISSUES | [описание] |
|
|
160
|
+
| Scenarios <-> UX | OK / ISSUES | [описание] |
|
|
161
|
+
| Domain <-> UX | OK / ISSUES | [описание] |
|
|
162
|
+
| Mockups <-> Scenarios | OK / ISSUES / N/A | [описание] |
|
|
163
|
+
|
|
164
|
+
## Domain Doc Updates
|
|
165
|
+
|
|
166
|
+
| Domain | Expected Update | Status | Details |
|
|
167
|
+
|--------|----------------|--------|---------|
|
|
168
|
+
| [domain] | [что должно измениться] | PENDING / NOT NEEDED | [детали] |
|
|
169
|
+
|
|
170
|
+
## Gaps
|
|
171
|
+
|
|
172
|
+
[Нарративное описание каждого gap: что отсутствует, почему это проблема, что нужно сделать]
|
|
173
|
+
|
|
174
|
+
## Deferred Items
|
|
175
|
+
|
|
176
|
+
[Items которые не в скоупе этого PRDCT но обнаружены]
|
|
177
|
+
|
|
178
|
+
## Human Verification Needed
|
|
179
|
+
|
|
180
|
+
[Items которые невозможно проверить программно]
|
|
181
|
+
|
|
182
|
+
### 1. [Test Name]
|
|
183
|
+
**Test:** [что сделать]
|
|
184
|
+
**Expected:** [что должно произойти]
|
|
185
|
+
**Why human:** [почему нельзя проверить программно]
|
|
186
|
+
|
|
187
|
+
## Verdict
|
|
188
|
+
|
|
189
|
+
**[PASS / GAPS / FAIL]** -- [одна строка обоснования]
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Quality Gates
|
|
193
|
+
|
|
194
|
+
Верификация считается PASS только когда:
|
|
195
|
+
- [ ] **КРИТИЧНО:** VERIFICATION.md файл создан и записан на диск
|
|
196
|
+
- [ ] Каждый KPI из 01-intent traced to domain events в 04-domain
|
|
197
|
+
- [ ] Каждый invariant из 04-domain имеет сценарий в 02-scenarios
|
|
198
|
+
- [ ] Каждый aggregate/rule из 04-domain покрыт сценариями в 02-scenarios
|
|
199
|
+
- [ ] Каждый scenario из 02-scenarios имеет surface/flow в 05-ux
|
|
200
|
+
- [ ] Permissions в 05-ux соответствуют business rules в 04-domain
|
|
201
|
+
- [ ] UL terms из 04-domain используются консистентно во всех документах
|
|
202
|
+
- [ ] Mockups существуют для каждого flow из 05-ux
|
|
203
|
+
- [ ] Нет undocumented gaps
|
|
204
|
+
- [ ] Cross-document consistency без критических issues
|
|
205
|
+
- [ ] Domain doc updates зафиксированы для merger
|
|
206
|
+
|
|
207
|
+
## Return
|
|
208
|
+
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"success": true,
|
|
212
|
+
"chg_id": "PRDCT-XXXX",
|
|
213
|
+
"verified_count": N,
|
|
214
|
+
"gaps_count": N,
|
|
215
|
+
"human_verification_needed": N,
|
|
216
|
+
"verdict": "PASS | GAPS | FAIL"
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Tone
|
|
221
|
+
|
|
222
|
+
Строгий аудитор. Не принимает "подразумевается" — только проверяемые факты. Каждый gap — с конкретным файлом и конкретным must-have. Не "scenarios неполные" а "Invariant 'баланс не может быть отрицательным' из 04-domain.md строка 34 не имеет сценария в 02-scenarios.md, хотя является критическим бизнес-правилом".
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: meta
|
|
3
|
+
tags:
|
|
4
|
+
- meta
|
|
5
|
+
- map
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Capability Map
|
|
9
|
+
|
|
10
|
+
Capabilities MVP-системы **zrg** → владеющий домен.
|
|
11
|
+
|
|
12
|
+
## Platform capabilities
|
|
13
|
+
|
|
14
|
+
```mermaid
|
|
15
|
+
mindmap
|
|
16
|
+
root((zrg))
|
|
17
|
+
Identity & Auth
|
|
18
|
+
Sign-up email+password
|
|
19
|
+
Sign-up GitHub OAuth
|
|
20
|
+
Connect Linear
|
|
21
|
+
Connect Telegram via deep-link
|
|
22
|
+
Revoke connection
|
|
23
|
+
Delete user (GDPR)
|
|
24
|
+
Workspaces & Membership
|
|
25
|
+
Create workspace
|
|
26
|
+
Invite member
|
|
27
|
+
RBAC owner/admin/member
|
|
28
|
+
Transfer ownership / auto-promote
|
|
29
|
+
Archive workspace
|
|
30
|
+
Register Telegram group
|
|
31
|
+
Source integrations
|
|
32
|
+
GitHub App install
|
|
33
|
+
Bind GitHub repo to workspace
|
|
34
|
+
Bind Linear team to workspace
|
|
35
|
+
Add Linear watched views
|
|
36
|
+
Webhook ingestion (HMAC, dedup)
|
|
37
|
+
View polling (5 min)
|
|
38
|
+
Overdue scan (daily-dedup)
|
|
39
|
+
Notification rules
|
|
40
|
+
Personal rules (member-owned)
|
|
41
|
+
Workspace rules (admin-owned)
|
|
42
|
+
Trigger by source + eventTypes
|
|
43
|
+
Filter by labels / priorities / repos / teams / views / assignees
|
|
44
|
+
Target Member or Group (discriminated union)
|
|
45
|
+
Delivery
|
|
46
|
+
At-least-once with retry
|
|
47
|
+
Per-chat rate limit
|
|
48
|
+
HTML format with truncation
|
|
49
|
+
30-day retention (configurable)
|
|
50
|
+
Bot interactions
|
|
51
|
+
Slash /status
|
|
52
|
+
Slash /overdue
|
|
53
|
+
Slash /views
|
|
54
|
+
Slash /register
|
|
55
|
+
Deep-link Telegram pairing
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Capability → Domain mapping
|
|
59
|
+
|
|
60
|
+
| Capability | Domain | Notes |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| User registration (email+password / GitHub OAuth) | identity | RegisterUser, RegisterUserViaGithub |
|
|
63
|
+
| OAuth-based connections (GitHub, Linear) | identity | ConnectGithub, ConnectLinear |
|
|
64
|
+
| Telegram deep-link pairing | identity | LinkingToken (10 min TTL) |
|
|
65
|
+
| Connection revoke | identity | manual + auto on 401/403 from integration |
|
|
66
|
+
| GDPR-style user deletion | identity | DeleteUser → cascade revoke |
|
|
67
|
+
| Workspace lifecycle (create/rename/archive) | workspace | RBAC enforced |
|
|
68
|
+
| Member management | workspace | InviteMember / RemoveMember / ChangeMemberRole |
|
|
69
|
+
| Ownership transfer & auto-promote (Q5) | workspace | TransferOwnership / LeaveWorkspace |
|
|
70
|
+
| GitHub repo binding to workspace | workspace + github-integration | RequestSubscription → CreateGithubSubscription |
|
|
71
|
+
| Linear team binding to workspace | workspace + linear-integration | RequestSubscription → CreateLinearSubscription via WorkspaceLinearBot |
|
|
72
|
+
| GitHub App installation tracking | github-integration | GithubInstallation aggregate |
|
|
73
|
+
| Linear service-bot-account (per workspace) | linear-integration | WorkspaceLinearBot aggregate (Q10) |
|
|
74
|
+
| Webhook ingestion (HMAC verify, dedup) | github-integration / linear-integration | WebhookEvent aggregates |
|
|
75
|
+
| Normalisation to SourceEvent (ACL) | github-integration / linear-integration | published language to notifications |
|
|
76
|
+
| Linear view membership polling | linear-integration | every 5 min (Q12, env-configurable) |
|
|
77
|
+
| Overdue issues scanning (daily dedup) | linear-integration | ScanOverdueIssues |
|
|
78
|
+
| Telegram group registration | workspace | RegisterGroupTarget (via bot tRPC) |
|
|
79
|
+
| Notification rules (personal + workspace) | notifications | NotificationRule aggregate |
|
|
80
|
+
| Rule matching engine | notifications | trigger + filter logic |
|
|
81
|
+
| Delivery state machine + retry | notifications | Delivery aggregate, BullMQ workers |
|
|
82
|
+
| Channel abstraction (Telegram MVP) | notifications | NotificationChannel port |
|
|
83
|
+
| Slash commands (`/status`, `/overdue`, `/views`) | notifications | composes queries from other domains |
|
|
84
|
+
| Slash `/register` (delegates to workspace) | notifications + workspace | bot tRPC entrypoint |
|
|
85
|
+
|
|
86
|
+
## Domains by status
|
|
87
|
+
|
|
88
|
+
```dataview
|
|
89
|
+
TABLE status, owner
|
|
90
|
+
FROM "domains"
|
|
91
|
+
WHERE type = "domain"
|
|
92
|
+
GROUP BY status
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Out of MVP scope
|
|
96
|
+
|
|
97
|
+
- Claude / AI assistants внутри бота.
|
|
98
|
+
- Чат-функционал между пользователями через бота.
|
|
99
|
+
- Slack / Discord / Email channels (architecture ready via `NotificationChannel` port).
|
|
100
|
+
- Двусторонние операции (создание/изменение issue из чата).
|
|
101
|
+
- Биллинг, тарифы.
|
|
102
|
+
- Custom-permissions / ABAC.
|
|
103
|
+
- Aggregation/digest уведомлений (всегда N сообщений на N rules — Q13).
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Documentation Schema
|
|
2
|
+
|
|
3
|
+
## Philosophy
|
|
4
|
+
|
|
5
|
+
Документация -- конвейер, не архив.
|
|
6
|
+
Каждый переход между ролями -- это документ.
|
|
7
|
+
Нет документа -- нет задачи, физически.
|
|
8
|
+
|
|
9
|
+
В системе две оси:
|
|
10
|
+
- **Knowledge base** -- стабильное описание системы как она есть
|
|
11
|
+
- **Change packages** -- описание системы как она меняется
|
|
12
|
+
|
|
13
|
+
## Folder separation rules
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/domains -> ЧТО делает бизнес (язык, правила, события, инварианты, сценарии, surfaces)
|
|
17
|
+
БЕЗ реализации. БЕЗ имён сервисов.
|
|
18
|
+
|
|
19
|
+
/contexts -> КАК устроена платформа по дисциплинам
|
|
20
|
+
Стабильное архитектурное знание по каждой дисциплине.
|
|
21
|
+
|
|
22
|
+
/changes -> ПОЧЕМУ и КАК бизнес решил что-то изменить
|
|
23
|
+
Только бизнес-документы. Иммутабельно после мержа.
|
|
24
|
+
|
|
25
|
+
/adrs -> ПОЧЕМУ принято кросс-доменное архитектурное решение
|
|
26
|
+
Иммутабельно после принятия.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Hard rules
|
|
30
|
+
|
|
31
|
+
1. PR без ссылки на PRDCT-* не мержится
|
|
32
|
+
2. Domain docs обновляются merger'ом после кода, не напрямую
|
|
33
|
+
3. Нет документа -- нет задачи
|
|
34
|
+
4. Change package содержит ТОЛЬКО бизнес-документы (5 файлов)
|
|
35
|
+
5. Техническая архитектура -- ответственность executor'а, не change package
|
|
36
|
+
6. API contracts и data model в domain docs обновляются из кода, не из change docs
|
|
37
|
+
|
|
38
|
+
## Stage pipeline
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Stage 1 · Intent -> 01-intent.md (PM)
|
|
42
|
+
Stage 2 · Scenarios -> 02-scenarios.md (Scenario Writer)
|
|
43
|
+
Stage 3 · System Analysis -> 03-analysis.md (Analyst)
|
|
44
|
+
Stage 4 · Domain framing -> 04-domain.md (Domain Framer)
|
|
45
|
+
Stage 5 · UX -> 05-ux.md + mockups/ (Designer)
|
|
46
|
+
· Status -> done
|
|
47
|
+
Post · Code -> backend + frontend (Executor)
|
|
48
|
+
Post · Domain docs update -> domain files updated (Merger)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## AI Studio · Roles & Skills
|
|
52
|
+
|
|
53
|
+
AI-роли реализованы как Claude Code Skills. Каждая роль -- отдельный скилл с уникальной экспертизой и тоном.
|
|
54
|
+
|
|
55
|
+
### Roles
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
┌─────────────────┐ ┌────────────────┐ ┌──────────────────┐ ┌────────────────┐ ┌────────────────┐
|
|
59
|
+
│ /pm │────>│ /scenarios │────>│ /analyst │────>│ /domain-framer │────>│ /designer │
|
|
60
|
+
│ Product Manager │ │ Scenario │ │ System Analyst │ │ Domain Framer │ │ UI/UX │
|
|
61
|
+
│ Intent │ │ Writer │ │ Analysis │ │ Domain Model │ │ Designer │
|
|
62
|
+
│ 01-intent.md │ │ 02-scenarios │ │ 03-analysis.md │ │ 04-domain.md │ │ 05-ux.md │
|
|
63
|
+
└─────────────────┘ └────────────────┘ └──────────────────┘ └────────────────┘ └───────┬────────┘
|
|
64
|
+
│ done
|
|
65
|
+
┌──────────────┐ ┌───────▼────────┐
|
|
66
|
+
│ /merger │<────────────────────────────────────────────────────│ /executor │
|
|
67
|
+
│ Domain │ │ Full-Stack │
|
|
68
|
+
│ Merger │ │ Developer │
|
|
69
|
+
└──────────────┘ └────────────────┘
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Skill reference
|
|
73
|
+
|
|
74
|
+
| Skill | Role | Input | Output | Tone |
|
|
75
|
+
|-------|------|-------|--------|------|
|
|
76
|
+
| `/pm` | Product Manager | Описание фичи | 01-intent.md, metadata.yaml | Дружелюбный, настойчивый |
|
|
77
|
+
| `/scenarios` | Scenario Writer | PRDCT-XXXX | 02-scenarios.md | Перфекционист поведения |
|
|
78
|
+
| `/analyst` | System Analyst | PRDCT-XXXX | 03-analysis.md | Педант + системный мыслитель |
|
|
79
|
+
| `/domain-framer` | Domain Framer | PRDCT-XXXX | 04-domain.md | DDD-эксперт |
|
|
80
|
+
| `/designer` | UI/UX Designer | PRDCT-XXXX | 05-ux.md + mockups/ | UX-перфекционист |
|
|
81
|
+
| `/executor` | Full-Stack Developer | PRDCT-XXXX | Backend + frontend code | Прагматик |
|
|
82
|
+
| `/merger` | Domain Merger | PRDCT-XXXX | Updated domain docs | Педантичный библиотекарь |
|
|
83
|
+
| `/review` | Reviewer | PRDCT-XXXX | Cross-reference report | Жёсткий reviewer |
|
|
84
|
+
| `/verify` | Verifier | PRDCT-XXXX | VERIFICATION.md | Строгий аудитор |
|
|
85
|
+
| `/feature` | Orchestrator | Описание фичи | Полный change package | Меняет роль на каждом этапе |
|
|
86
|
+
| `/bug` | Bug Hunter | Баг / Sentry URL | Root cause + fix | Шерлок Холмс |
|
|
87
|
+
|
|
88
|
+
### Usage patterns
|
|
89
|
+
|
|
90
|
+
**Full pipeline (новая фича):**
|
|
91
|
+
```
|
|
92
|
+
/feature добавить систему оценки тренировок
|
|
93
|
+
```
|
|
94
|
+
Или поэтапно:
|
|
95
|
+
```
|
|
96
|
+
/pm добавить систему оценки тренировок
|
|
97
|
+
/analyst PRDCT-0002
|
|
98
|
+
/scenarios PRDCT-0002
|
|
99
|
+
/designer PRDCT-0002
|
|
100
|
+
/review PRDCT-0002
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Bug investigation:**
|
|
104
|
+
```
|
|
105
|
+
/bug https://sentry.io/issues/PROJ-123/
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### AI role per stage
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Stage 1 · /pm -> Генерирует intent, задаёт бизнес-вопросы
|
|
112
|
+
Stage 2 · /scenarios -> Gherkin scenarios: happy, edge, error, permission, concurrent
|
|
113
|
+
Stage 3 · /analyst -> System analysis: technical constraints, integration points
|
|
114
|
+
Stage 4 · /domain-framer -> Domain framing: aggregates, rules, events, invariants, UL
|
|
115
|
+
Stage 5 · /designer -> UX: surfaces, flows, states, mockups, permissions per surface
|
|
116
|
+
Post · /executor -> Код: backend + frontend, выводит технику из бизнес-документов
|
|
117
|
+
Post · /merger -> Обновляет domain docs из change package
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## What lives where
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Question -> Location
|
|
124
|
+
----------------------------------------------------------
|
|
125
|
+
Что делает этот домен? -> domains/[name]/README.md
|
|
126
|
+
Какие бизнес-правила? -> domains/[name]/business-rules.md
|
|
127
|
+
Что не может быть нарушено? -> domains/[name]/invariants.md
|
|
128
|
+
Какие события генерирует домен? -> domains/[name]/events.md
|
|
129
|
+
Какие экраны есть в домене? -> domains/[name]/surfaces.md
|
|
130
|
+
Какие сценарии поведения? -> domains/[name]/scenarios.md
|
|
131
|
+
Как устроен фронтенд? -> contexts/frontend/architecture.md
|
|
132
|
+
Почему принято это архитектурное решение? -> adrs/ADR-XXX.md
|
|
133
|
+
Что изменилось в этой фиче? -> changes/PRDCT-XXXX/
|
|
134
|
+
```
|