@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,575 @@
|
|
|
1
|
+
# Workflow: Onboard Project — Deep Codebase Analysis
|
|
2
|
+
|
|
3
|
+
Архитектор-консультант переводит существующий проект на documentation-first фреймворк. Работает с кодовыми базами ЛЮБОГО размера через стратегию "scan → chunk → analyze → synthesize".
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
Путь к проекту и режим работы: $ARGUMENTS
|
|
7
|
+
|
|
8
|
+
### Режимы работы
|
|
9
|
+
Определи режим из аргументов:
|
|
10
|
+
- **Interactive (по умолчанию):** $ARGUMENTS = путь к проекту. Между фазами делай СТОП и жди подтверждения.
|
|
11
|
+
- **Autonomous (ночной):** $ARGUMENTS содержит `--auto` или `--autonomous`. Между фазами НЕ останавливайся, принимай решения самостоятельно используя best practices. Логируй все решения в `product-specs/docs/_onboard/synthesis/decisions-log.md`.
|
|
12
|
+
|
|
13
|
+
В автономном режиме:
|
|
14
|
+
1. НЕ задавай вопросов пользователю — решай сам
|
|
15
|
+
2. Все решения записывай в decisions-log.md с обоснованием
|
|
16
|
+
3. Зоны разбивай по принципу "лучше больше мелких чем мало крупных"
|
|
17
|
+
4. Домены создавай все найденные с confidence >= Medium
|
|
18
|
+
5. Если что-то непонятно — записывай в Notes & uncertainties, не блокируй процесс
|
|
19
|
+
6. Обновляй progress.md после КАЖДОГО шага
|
|
20
|
+
|
|
21
|
+
## Agents used
|
|
22
|
+
- **studio-codebase-mapper** — анализирует отдельные зоны кодовой базы (Phase 2)
|
|
23
|
+
- **studio-domain-extractor** — создаёт domain docs из промежуточных данных (Phase 4)
|
|
24
|
+
|
|
25
|
+
## Ключевой принцип: промежуточное хранилище
|
|
26
|
+
|
|
27
|
+
Контекстное окно ограничено. Поэтому:
|
|
28
|
+
1. **Никогда** не пытайся прочитать весь проект за раз
|
|
29
|
+
2. Все находки записываются в `product-specs/docs/_onboard/` — это рабочая директория онбординга
|
|
30
|
+
3. Каждая зона анализируется отдельным sub-agent (studio-codebase-mapper)
|
|
31
|
+
4. Синтез происходит из файлов в `_onboard/`, а не из кода напрямую
|
|
32
|
+
5. После завершения `_onboard/` остаётся как артефакт (можно удалить позже)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
docs/_onboard/
|
|
36
|
+
├── 00-codebase-map.md → структура + стек + статистика
|
|
37
|
+
├── 01-zones.md → карта зон для анализа
|
|
38
|
+
├── zones/ → промежуточные находки по зонам
|
|
39
|
+
│ ├── zone-auth.md
|
|
40
|
+
│ ├── zone-api.md
|
|
41
|
+
│ ├── zone-models.md
|
|
42
|
+
│ └── ...
|
|
43
|
+
├── 02-domain-hypotheses.md → гипотезы доменов (синтез из зон)
|
|
44
|
+
├── 03-entity-registry.md → все найденные сущности
|
|
45
|
+
├── 04-event-registry.md → все найденные события
|
|
46
|
+
├── 05-api-surface.md → все найденные API endpoints
|
|
47
|
+
├── 06-integration-map.md → внешние зависимости и интеграции
|
|
48
|
+
├── 07-context-stack.md → стек и архитектурные паттерны
|
|
49
|
+
└── synthesis/ → финальный синтез
|
|
50
|
+
├── domain-plan.md → план доменов (утверждённый пользователем)
|
|
51
|
+
├── decisions-log.md → решения (автономный режим)
|
|
52
|
+
└── progress.md → прогресс онбординга
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Phase 0: Bootstrap
|
|
58
|
+
|
|
59
|
+
### Step 0.1: Создай рабочую директорию
|
|
60
|
+
```bash
|
|
61
|
+
mkdir -p product-specs/docs/_onboard/zones product-specs/docs/_onboard/synthesis
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Step 0.2: Создай decisions log (для автономного режима)
|
|
65
|
+
Если режим autonomous — создай `product-specs/docs/_onboard/synthesis/decisions-log.md`:
|
|
66
|
+
```markdown
|
|
67
|
+
# Autonomous Decisions Log
|
|
68
|
+
|
|
69
|
+
Все решения, принятые автоматически в ночном режиме.
|
|
70
|
+
|
|
71
|
+
| # | Phase | Decision | Rationale | Confidence |
|
|
72
|
+
|---|-------|----------|-----------|------------|
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Step 0.3: Создай progress tracker
|
|
76
|
+
Запиши в `product-specs/docs/_onboard/synthesis/progress.md`:
|
|
77
|
+
```markdown
|
|
78
|
+
# Onboarding Progress
|
|
79
|
+
|
|
80
|
+
## Status: Phase 0 — Bootstrap
|
|
81
|
+
## Project: $ARGUMENTS
|
|
82
|
+
## Started: [date]
|
|
83
|
+
|
|
84
|
+
### Phases
|
|
85
|
+
- [x] Phase 0: Bootstrap
|
|
86
|
+
- [ ] Phase 1: Codebase Map
|
|
87
|
+
- [ ] Phase 2: Zone Analysis
|
|
88
|
+
- [ ] Phase 3: Synthesis
|
|
89
|
+
- [ ] Phase 4: Domain Creation
|
|
90
|
+
- [ ] Phase 5: Contexts & PRDCTs
|
|
91
|
+
- [ ] Phase 6: Validation
|
|
92
|
+
|
|
93
|
+
### Zone Analysis Progress
|
|
94
|
+
| Zone | Status | Findings file |
|
|
95
|
+
|------|--------|---------------|
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Этот файл обновляется после каждого шага. Если сессия прервётся — следующая сессия читает progress.md и продолжает с места остановки.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Phase 1: Codebase Map (высокоуровневый обзор)
|
|
103
|
+
|
|
104
|
+
Цель: понять размер, стек, и определить зоны для глубокого анализа. НЕ читай содержимое файлов — только структуру.
|
|
105
|
+
|
|
106
|
+
### Step 1.1: Статистика проекта
|
|
107
|
+
```bash
|
|
108
|
+
# Размер проекта
|
|
109
|
+
find $ARGUMENTS -type f -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" -o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.java" | grep -v node_modules | grep -v .git | grep -v dist | grep -v build | wc -l
|
|
110
|
+
|
|
111
|
+
# Строки кода по типам файлов
|
|
112
|
+
find $ARGUMENTS -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.py" -o -name "*.go" \) | grep -v node_modules | grep -v .git | xargs wc -l 2>/dev/null | tail -1
|
|
113
|
+
|
|
114
|
+
# Структура верхнего уровня
|
|
115
|
+
find $ARGUMENTS -maxdepth 2 -type d | grep -v node_modules | grep -v .git | grep -v dist | sort
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Step 1.2: Определи стек
|
|
119
|
+
Прочитай ТОЛЬКО конфиг-файлы (они маленькие):
|
|
120
|
+
- `package.json` (только dependencies секцию)
|
|
121
|
+
- `docker-compose.yml`
|
|
122
|
+
- `.env.example`
|
|
123
|
+
- `tsconfig.json` / `go.mod` / `requirements.txt`
|
|
124
|
+
- CI config (`.github/workflows/`, `.gitlab-ci.yml`)
|
|
125
|
+
|
|
126
|
+
### Step 1.3: Определи зоны
|
|
127
|
+
Раздели кодовую базу на **зоны** — логически изолированные части для анализа. Каждая зона должна помещаться в контекст одного sub-agent (~500 файлов max).
|
|
128
|
+
|
|
129
|
+
Стратегия разбиения (в порядке приоритета):
|
|
130
|
+
1. **По сервисам** (если monorepo/microservices): каждый сервис = зона
|
|
131
|
+
2. **По модулям/features** (если modular monolith): каждый модуль = зона
|
|
132
|
+
3. **По слоям** (если layered): models, controllers, services, utils = отдельные зоны
|
|
133
|
+
4. **По размеру** (fallback): группы по ~200-300 файлов
|
|
134
|
+
|
|
135
|
+
Для КАЖДОЙ зоны определи:
|
|
136
|
+
- Имя (kebab-case)
|
|
137
|
+
- Путь(и) в проекте
|
|
138
|
+
- Примерное количество файлов
|
|
139
|
+
- Что искать (модели? API? события? UI?)
|
|
140
|
+
|
|
141
|
+
### Step 1.4: Запиши Codebase Map
|
|
142
|
+
Запиши в `product-specs/docs/_onboard/00-codebase-map.md`:
|
|
143
|
+
```markdown
|
|
144
|
+
# Codebase Map
|
|
145
|
+
|
|
146
|
+
## Project: [name]
|
|
147
|
+
## Date: [date]
|
|
148
|
+
|
|
149
|
+
## Stats
|
|
150
|
+
- Total source files: [N]
|
|
151
|
+
- Total LOC: [N]
|
|
152
|
+
- Languages: [list]
|
|
153
|
+
|
|
154
|
+
## Stack
|
|
155
|
+
- Language: [X]
|
|
156
|
+
- Backend framework: [X]
|
|
157
|
+
- Frontend framework: [X]
|
|
158
|
+
- Database: [X]
|
|
159
|
+
- ORM: [X]
|
|
160
|
+
- Message broker: [X]
|
|
161
|
+
- Cache: [X]
|
|
162
|
+
- CI/CD: [X]
|
|
163
|
+
|
|
164
|
+
## Directory Structure
|
|
165
|
+
[tree вывод]
|
|
166
|
+
|
|
167
|
+
## Infrastructure
|
|
168
|
+
[из docker-compose, env, CI]
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Step 1.5: Запиши карту зон
|
|
172
|
+
Запиши в `product-specs/docs/_onboard/01-zones.md`:
|
|
173
|
+
```markdown
|
|
174
|
+
# Zone Map
|
|
175
|
+
|
|
176
|
+
## Zones for analysis
|
|
177
|
+
|
|
178
|
+
| # | Zone | Path(s) | Files (~) | Focus |
|
|
179
|
+
|---|------|---------|-----------|-------|
|
|
180
|
+
| 1 | zone-models | src/models/, src/entities/ | ~50 | Entities, schemas, types |
|
|
181
|
+
| 2 | zone-api | src/controllers/, src/routes/ | ~80 | API endpoints, validation |
|
|
182
|
+
| ... | ... | ... | ... | ... |
|
|
183
|
+
|
|
184
|
+
## Analysis order
|
|
185
|
+
1. zone-models (фундамент: сущности)
|
|
186
|
+
2. zone-api (API surface)
|
|
187
|
+
3. zone-services (бизнес-логика)
|
|
188
|
+
4. zone-events (события, async)
|
|
189
|
+
5. zone-frontend (UI, если есть)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Interactive:** СТОП. Покажи пользователю codebase map и карту зон. Спроси:
|
|
193
|
+
1. "Правильно ли я разбил проект? Нужно ли добавить/убрать/объединить зоны?"
|
|
194
|
+
2. "Есть ли зоны которые можно пропустить?"
|
|
195
|
+
|
|
196
|
+
**Autonomous:** Не останавливайся. Запиши в decisions-log: "Определил N зон, разбивка по [стратегия]. Confidence: [X]." Продолжай.
|
|
197
|
+
|
|
198
|
+
Обнови progress.md: Phase 1 done.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Phase 2: Zone Analysis (глубокое чтение кода по частям)
|
|
203
|
+
|
|
204
|
+
Цель: прочитать ВСЮ кодовую базу по зонам, извлечь знания, записать в промежуточные файлы.
|
|
205
|
+
|
|
206
|
+
### Для КАЖДОЙ зоны выполни:
|
|
207
|
+
|
|
208
|
+
#### Step 2.1: Запусти studio-codebase-mapper agent для зоны
|
|
209
|
+
Для каждой зоны запускай отдельный studio-codebase-mapper agent. Передай агенту:
|
|
210
|
+
- Имя зоны
|
|
211
|
+
- Путь(и) зоны
|
|
212
|
+
- Фокус анализа
|
|
213
|
+
- Релевантный контекст из product-specs/docs/_onboard/00-codebase-map.md
|
|
214
|
+
|
|
215
|
+
Agent должен:
|
|
216
|
+
1. Прочитать ВСЕ файлы в указанных путях (используя Glob + Read)
|
|
217
|
+
2. Найти и записать:
|
|
218
|
+
|
|
219
|
+
**Entities/Models:**
|
|
220
|
+
- Имя, поля, типы
|
|
221
|
+
- Relations (FK, references)
|
|
222
|
+
- Enums/статусы (кандидаты в state machines)
|
|
223
|
+
- Constraints/validation
|
|
224
|
+
|
|
225
|
+
**Business Rules:**
|
|
226
|
+
- Валидации (что проверяется, когда)
|
|
227
|
+
- Guards/middleware (кто имеет доступ)
|
|
228
|
+
- Условная логика (if/switch по бизнес-состояниям)
|
|
229
|
+
|
|
230
|
+
**Events:**
|
|
231
|
+
- Event names, producers, consumers
|
|
232
|
+
- Payload structure
|
|
233
|
+
- Async vs sync
|
|
234
|
+
|
|
235
|
+
**API Endpoints:**
|
|
236
|
+
- Method, path, handler
|
|
237
|
+
- Request/response types
|
|
238
|
+
- Auth requirements
|
|
239
|
+
- Error codes
|
|
240
|
+
|
|
241
|
+
**Dependencies:**
|
|
242
|
+
- Imports из ДРУГИХ зон (потенциальные интеграции между доменами)
|
|
243
|
+
- Внешние API calls
|
|
244
|
+
- Database queries (какие таблицы читает/пишет)
|
|
245
|
+
|
|
246
|
+
**Patterns:**
|
|
247
|
+
- Repository/Service/Controller
|
|
248
|
+
- Event sourcing / CQRS
|
|
249
|
+
- State machines
|
|
250
|
+
- Saga/orchestration patterns
|
|
251
|
+
|
|
252
|
+
Результат записывается в `product-specs/docs/_onboard/zones/[zone-name].md`.
|
|
253
|
+
|
|
254
|
+
#### Step 2.2: Проверь результат
|
|
255
|
+
После завершения studio-codebase-mapper:
|
|
256
|
+
1. Прочитай `product-specs/docs/_onboard/zones/[zone-name].md`
|
|
257
|
+
2. Проверь что файл не пустой и содержит конкретные находки
|
|
258
|
+
3. Если зона оказалась слишком большой (agent не прочитал всё):
|
|
259
|
+
- Раздели зону на подзоны
|
|
260
|
+
- Добавь подзоны в `01-zones.md`
|
|
261
|
+
- Запусти studio-codebase-mapper для каждой подзоны
|
|
262
|
+
|
|
263
|
+
#### Step 2.3: Обнови прогресс
|
|
264
|
+
После каждой зоны обнови `product-specs/docs/_onboard/synthesis/progress.md` — отметь зону как done.
|
|
265
|
+
|
|
266
|
+
### Параллельный запуск
|
|
267
|
+
Если зоны независимы — запускай до 3 studio-codebase-mapper agents параллельно для ускорения. Зависимые зоны (zone-services зависит от zone-models) — последовательно.
|
|
268
|
+
|
|
269
|
+
### Шаблон zone файла
|
|
270
|
+
|
|
271
|
+
Каждый `product-specs/docs/_onboard/zones/zone-*.md` должен следовать структуре:
|
|
272
|
+
|
|
273
|
+
```markdown
|
|
274
|
+
# Zone: [name]
|
|
275
|
+
## Path(s): [paths]
|
|
276
|
+
## Analyzed: [date]
|
|
277
|
+
## Files read: [count]
|
|
278
|
+
|
|
279
|
+
## Entities found
|
|
280
|
+
| Entity | File | Fields | Relations | Status enum |
|
|
281
|
+
|--------|------|--------|-----------|-------------|
|
|
282
|
+
|
|
283
|
+
## Business rules found
|
|
284
|
+
| Rule | File:Line | Description | Validation type |
|
|
285
|
+
|------|-----------|-------------|-----------------|
|
|
286
|
+
|
|
287
|
+
## Events found
|
|
288
|
+
| Event | Producer file | Consumer file(s) | Payload | Sync/Async |
|
|
289
|
+
|-------|--------------|-------------------|---------|------------|
|
|
290
|
+
|
|
291
|
+
## API endpoints found
|
|
292
|
+
| Method | Path | Handler file | Auth | Request type | Response type |
|
|
293
|
+
|--------|------|-------------|------|-------------|---------------|
|
|
294
|
+
|
|
295
|
+
## Cross-zone dependencies
|
|
296
|
+
| This zone imports | From zone | Type (model/service/util) |
|
|
297
|
+
|-------------------|-----------|--------------------------|
|
|
298
|
+
|
|
299
|
+
## Patterns observed
|
|
300
|
+
- [pattern]: [where and how used]
|
|
301
|
+
|
|
302
|
+
## Domain hypotheses
|
|
303
|
+
Из анализа этой зоны, эти файлы могут принадлежать доменам:
|
|
304
|
+
| File/Entity | Hypothesized domain | Confidence | Evidence |
|
|
305
|
+
|-------------|-------------------|------------|----------|
|
|
306
|
+
|
|
307
|
+
## Notes & uncertainties
|
|
308
|
+
- [что не удалось понять, что требует уточнения у человека]
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Interactive:** СТОП после всех зон. Покажи сводку: сколько зон проанализировано, сколько entities/events/endpoints найдено суммарно. Спроси есть ли пропущенные зоны.
|
|
312
|
+
|
|
313
|
+
**Autonomous:** Запиши сводку в progress.md и продолжай к Phase 3.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Phase 3: Synthesis (агрегация из зон в единую картину)
|
|
318
|
+
|
|
319
|
+
Цель: прочитать ВСЕ zone-файлы (НЕ код!) и собрать единую картину.
|
|
320
|
+
|
|
321
|
+
### Step 3.1: Собери реестр сущностей
|
|
322
|
+
Прочитай ВСЕ `product-specs/docs/_onboard/zones/zone-*.md`. Извлеки все entities. Запиши в `product-specs/docs/_onboard/03-entity-registry.md`:
|
|
323
|
+
```markdown
|
|
324
|
+
# Entity Registry
|
|
325
|
+
| Entity | Source zone | File | Fields count | Relations | Status enum | Hypothesized domain |
|
|
326
|
+
```
|
|
327
|
+
Дедупликация: если одна сущность встречается в нескольких зонах — объединяй, отмечай "shared".
|
|
328
|
+
|
|
329
|
+
### Step 3.2: Собери реестр событий
|
|
330
|
+
Из всех zone-файлов. Запиши в `product-specs/docs/_onboard/04-event-registry.md`:
|
|
331
|
+
```markdown
|
|
332
|
+
# Event Registry
|
|
333
|
+
| Event | Producer zone | Consumer zone(s) | Payload | Domain boundary? |
|
|
334
|
+
```
|
|
335
|
+
Пометь события между зонами как "domain boundary candidates" — они указывают на границы доменов.
|
|
336
|
+
|
|
337
|
+
### Step 3.3: Собери API surface
|
|
338
|
+
Из всех zone-файлов. Запиши в `product-specs/docs/_onboard/05-api-surface.md`:
|
|
339
|
+
```markdown
|
|
340
|
+
# API Surface
|
|
341
|
+
| Method | Path | Zone | Auth | Domain? |
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Step 3.4: Собери карту интеграций
|
|
345
|
+
Из cross-zone dependencies всех зон. Запиши в `product-specs/docs/_onboard/06-integration-map.md`:
|
|
346
|
+
```markdown
|
|
347
|
+
# Integration Map
|
|
348
|
+
|
|
349
|
+
## Internal dependencies (between zones)
|
|
350
|
+
| From | To | Type | Indicates |
|
|
351
|
+
```
|
|
352
|
+
Нарисуй Mermaid graph зависимостей между зонами.
|
|
353
|
+
|
|
354
|
+
### Step 3.5: Определи стек и паттерны
|
|
355
|
+
Из patterns всех зон. Запиши в `product-specs/docs/_onboard/07-context-stack.md`:
|
|
356
|
+
```markdown
|
|
357
|
+
# Stack & Architecture Patterns
|
|
358
|
+
## Observed patterns
|
|
359
|
+
## Frameworks & libraries used
|
|
360
|
+
## Testing infrastructure
|
|
361
|
+
## CI/CD pipeline
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Step 3.6: Сформулируй гипотезы доменов
|
|
365
|
+
Это ключевой шаг. На основе:
|
|
366
|
+
- Entity registry (группировка сущностей)
|
|
367
|
+
- Event registry (boundaries = events между зонами)
|
|
368
|
+
- Integration map (слабо связанные кластеры)
|
|
369
|
+
- Domain hypotheses из каждой зоны
|
|
370
|
+
|
|
371
|
+
Запиши в `product-specs/docs/_onboard/02-domain-hypotheses.md`:
|
|
372
|
+
```markdown
|
|
373
|
+
# Domain Hypotheses
|
|
374
|
+
|
|
375
|
+
## Methodology
|
|
376
|
+
Домены определены на основе:
|
|
377
|
+
1. Кластеризации сущностей по связям
|
|
378
|
+
2. Границ событий (events между зонами)
|
|
379
|
+
3. API namespace groups
|
|
380
|
+
4. Cross-zone dependency analysis
|
|
381
|
+
|
|
382
|
+
## Hypothesized domains
|
|
383
|
+
|
|
384
|
+
### Domain: [name]
|
|
385
|
+
- **Responsibility:** что делает этот домен
|
|
386
|
+
- **Core entities:** [list] (из entity registry)
|
|
387
|
+
- **Events produced:** [list] (из event registry)
|
|
388
|
+
- **Events consumed:** [list]
|
|
389
|
+
- **API endpoints:** [list] (из API surface)
|
|
390
|
+
- **Source zones:** [list] — из каких зон собран
|
|
391
|
+
- **Source files:** [key files]
|
|
392
|
+
- **Confidence:** High / Medium / Low
|
|
393
|
+
- **Evidence:** [почему считаем это отдельным доменом]
|
|
394
|
+
- **Open questions:** [что непонятно]
|
|
395
|
+
|
|
396
|
+
### Domain: [name]
|
|
397
|
+
...
|
|
398
|
+
|
|
399
|
+
## Domain relationship diagram
|
|
400
|
+
[Mermaid graph: домены, стрелки = events/dependencies]
|
|
401
|
+
|
|
402
|
+
## Entities not assigned to any domain
|
|
403
|
+
| Entity | Source | Reason |
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**Interactive:** СТОП. Покажи пользователю гипотезы доменов с evidence, diagram, не-распределённые entities. Спроси:
|
|
407
|
+
- "Правильно ли определены домены?"
|
|
408
|
+
- "Какие 3-5 создать первыми?"
|
|
409
|
+
- "Есть ли implicit домены которых нет в коде?"
|
|
410
|
+
|
|
411
|
+
**Autonomous:** Создай все домены с confidence >= Medium. Запиши в decisions-log: какие домены создаёшь и почему, какие пропустил (Low confidence). Приоритет: домены с наибольшим количеством entities.
|
|
412
|
+
|
|
413
|
+
Запиши подтверждённый/автоматический план в `product-specs/docs/_onboard/synthesis/domain-plan.md`.
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Phase 4: Domain Creation (из промежуточных файлов, не из кода)
|
|
418
|
+
|
|
419
|
+
Цель: создать domain docs из entity/event/api registries + zone files.
|
|
420
|
+
|
|
421
|
+
### Для КАЖДОГО подтверждённого домена:
|
|
422
|
+
|
|
423
|
+
#### Step 4.1: Собери контекст
|
|
424
|
+
Прочитай ТОЛЬКО:
|
|
425
|
+
- `product-specs/docs/_onboard/synthesis/domain-plan.md` (какие entities/events в этом домене)
|
|
426
|
+
- Конкретные zone-файлы указанные в "Source zones"
|
|
427
|
+
- Entity registry (строки для этого домена)
|
|
428
|
+
- Event registry (строки для этого домена)
|
|
429
|
+
|
|
430
|
+
НЕ читай код напрямую — все знания уже в zone-файлах.
|
|
431
|
+
|
|
432
|
+
#### Step 4.2: Создай домен через studio-domain-extractor
|
|
433
|
+
Запусти studio-domain-extractor agent для каждого домена. Agent получает:
|
|
434
|
+
- Имя домена и responsibility из domain-plan.md
|
|
435
|
+
- Релевантные zone-файлы
|
|
436
|
+
- Entity registry (строки для этого домена)
|
|
437
|
+
- Event registry (строки для этого домена)
|
|
438
|
+
|
|
439
|
+
Agent создаёт полную структуру домена в `product-specs/docs/domains/[name]/`:
|
|
440
|
+
1. Копирует шаблоны: `cp product-specs/docs/domains/_template/* product-specs/docs/domains/[name]/`
|
|
441
|
+
2. Заполняет каждый файл из промежуточных данных:
|
|
442
|
+
- README.md — из domain hypothesis description
|
|
443
|
+
- ubiquitous-language.md — из entity names, field names, event names
|
|
444
|
+
- aggregates.md — из entities + relations + status enums → state machine
|
|
445
|
+
- business-rules.md — из business rules в zone-файлах
|
|
446
|
+
- events.md — из event registry
|
|
447
|
+
- invariants.md — из validation rules + DB constraints в zone-файлах
|
|
448
|
+
- integrations.md — из cross-zone dependencies + API endpoints
|
|
449
|
+
- ownership.md — оставь TBD, спросить пользователя
|
|
450
|
+
|
|
451
|
+
Правила:
|
|
452
|
+
- Заголовки на English, содержимое на Russian
|
|
453
|
+
- YAML frontmatter обязателен
|
|
454
|
+
- Используй Mermaid для state machines и ER diagrams
|
|
455
|
+
- НЕ копируй код — описывай бизнес-логику своими словами
|
|
456
|
+
- Domain docs содержат ТОЛЬКО бизнес-знание, НЕ реализацию
|
|
457
|
+
|
|
458
|
+
#### Step 4.3: Обнови meta-документы
|
|
459
|
+
После создания всех доменов:
|
|
460
|
+
1. Обнови `product-specs/docs/_meta/domain-map.md` — добавь все новые домены и связи
|
|
461
|
+
2. Обнови `product-specs/docs/_meta/capability-map.md`
|
|
462
|
+
3. Обнови `product-specs/docs/_meta/glossary.md`
|
|
463
|
+
|
|
464
|
+
**Interactive:** СТОП. Покажи созданные домены, количество файлов, completeness. Спроси подтверждение.
|
|
465
|
+
|
|
466
|
+
**Autonomous:** Запиши в decisions-log: "[N] доменов создано, completeness [X]%". Продолжай.
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## Phase 5: Contexts & Baseline PRDCTs
|
|
471
|
+
|
|
472
|
+
### Step 5.1: Заполни контексты
|
|
473
|
+
Прочитай `product-specs/docs/_onboard/07-context-stack.md` и заполни `product-specs/docs/contexts/`:
|
|
474
|
+
|
|
475
|
+
**Backend:** architecture.md, service-map.md, data-ownership.md, async-flows.md, integration-patterns.md
|
|
476
|
+
**Frontend:** architecture.md, routing.md, state-management.md, permissions-model.md
|
|
477
|
+
**QA:** test-strategy.md, quality-gates.md
|
|
478
|
+
**Analytics:** event-taxonomy.md
|
|
479
|
+
|
|
480
|
+
Заполняй ТОЛЬКО из промежуточных файлов `_onboard/`. НЕ заполняй файл если данных нет.
|
|
481
|
+
|
|
482
|
+
### Step 5.2: Создай ретроспективные PRDCT
|
|
483
|
+
Для топ 3-5 ключевых фич (определяются из крупнейших entity clusters):
|
|
484
|
+
|
|
485
|
+
1. Определи PRDCT-ID
|
|
486
|
+
2. Создай облегчённый change package:
|
|
487
|
+
- `metadata.yaml` — status: done, retroactive: true
|
|
488
|
+
- `change-draft.md` — что и зачем
|
|
489
|
+
- `01-discovery.md` — актёры, основной сценарий
|
|
490
|
+
- `02-product-spec.md` — AC (фактическое поведение)
|
|
491
|
+
- `03-domain-impact.md` — затронутые домены
|
|
492
|
+
- `index.md`, `release-notes.md`
|
|
493
|
+
3. 04-08 НЕ заполняй — избыточно для ретроспективных PRDCT
|
|
494
|
+
|
|
495
|
+
> [!warning] Лимит: максимум 5 ретроспективных PRDCT
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## Phase 6: Validation
|
|
500
|
+
|
|
501
|
+
### Step 6.1: Проверь домены
|
|
502
|
+
Для каждого домена:
|
|
503
|
+
- [ ] Все 8 файлов существуют и не placeholder
|
|
504
|
+
- [ ] ubiquitous-language не конфликтует между доменами
|
|
505
|
+
- [ ] invariants корректны
|
|
506
|
+
- [ ] events имеют producer И consumers
|
|
507
|
+
|
|
508
|
+
### Step 6.2: Проверь целостность
|
|
509
|
+
- [ ] Все entities из registry распределены по доменам
|
|
510
|
+
- [ ] Все events из registry описаны в domain events
|
|
511
|
+
- [ ] API surface покрыт доменами
|
|
512
|
+
|
|
513
|
+
### Step 6.3: Итоговый отчёт
|
|
514
|
+
|
|
515
|
+
```markdown
|
|
516
|
+
## Onboarding Report
|
|
517
|
+
|
|
518
|
+
### Project: [name]
|
|
519
|
+
### Duration: [phases completed]
|
|
520
|
+
|
|
521
|
+
### Codebase analyzed
|
|
522
|
+
- Files scanned: [N]
|
|
523
|
+
- Zones analyzed: [N]
|
|
524
|
+
- LOC processed: [N]
|
|
525
|
+
|
|
526
|
+
### Domains created
|
|
527
|
+
| Domain | Entities | Events | Invariants | Completeness |
|
|
528
|
+
|--------|----------|--------|------------|-------------|
|
|
529
|
+
|
|
530
|
+
### Contexts filled
|
|
531
|
+
| Context | Files filled | Files skipped |
|
|
532
|
+
|
|
533
|
+
### Retrospective PRDCTs
|
|
534
|
+
| PRDCT | Title | Domains |
|
|
535
|
+
|
|
536
|
+
### Knowledge captured
|
|
537
|
+
- Entities documented: [N]
|
|
538
|
+
- Events documented: [N]
|
|
539
|
+
- Business rules extracted: [N]
|
|
540
|
+
- API endpoints mapped: [N]
|
|
541
|
+
|
|
542
|
+
### Known gaps
|
|
543
|
+
- [что НЕ удалось извлечь из кода]
|
|
544
|
+
- [что требует уточнения с людьми]
|
|
545
|
+
|
|
546
|
+
### Recommended next steps
|
|
547
|
+
1. Проверить ubiquitous language с domain experts
|
|
548
|
+
2. Дополнить business rules которые в головах (не в коде)
|
|
549
|
+
3. Создать ADR для ключевых архитектурных решений
|
|
550
|
+
4. `/review PRDCT-XXXX` для каждого ретроспективного PRDCT
|
|
551
|
+
5. Удалить `product-specs/docs/_onboard/` когда больше не нужен
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## Resume protocol
|
|
557
|
+
|
|
558
|
+
Если сессия прервалась:
|
|
559
|
+
|
|
560
|
+
1. Прочитай `product-specs/docs/_onboard/synthesis/progress.md`
|
|
561
|
+
2. Определи текущую фазу и шаг
|
|
562
|
+
3. Прочитай готовые промежуточные файлы
|
|
563
|
+
4. Продолжи с точки остановки
|
|
564
|
+
|
|
565
|
+
Для пользователя: "Я вижу что онбординг начат ранее. Фаза [X] завершена, зоны [list] проанализированы. Продолжаю с [следующий шаг]."
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
## Tone
|
|
570
|
+
Методичный архитектор-консультант:
|
|
571
|
+
- Никогда не торопится
|
|
572
|
+
- Предпочитает записать находку в файл, чем держать в голове
|
|
573
|
+
- Показывает промежуточные результаты и ждёт подтверждения
|
|
574
|
+
- Честно говорит "этой зоны не хватило, нужна ещё одна итерация"
|
|
575
|
+
- Рекурсивно дробит то что не помещается в контекст
|