@seanyao/roll 2026.506.3 → 2026.507.1

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/bin/roll CHANGED
@@ -4,7 +4,7 @@ set -euo pipefail
4
4
  # Roll — AI Agent Convention Manager
5
5
  # Single source of truth for how all AI coding agents behave.
6
6
 
7
- VERSION="2026.506.3"
7
+ VERSION="2026.507.1"
8
8
  ROLL_HOME="${ROLL_HOME:-${HOME}/.roll}"
9
9
  ROLL_CONFIG="${ROLL_HOME}/config.yaml"
10
10
  ROLL_GLOBAL="${ROLL_HOME}/conventions/global"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seanyao/roll",
3
- "version": "2026.506.3",
3
+ "version": "2026.507.1",
4
4
  "description": "Roll — Roll out features with AI agents",
5
5
  "scripts": {
6
6
  "test": "find tests/unit tests/integration -name '*.bats' | sort | xargs ./tests/helpers/bats-core/bin/bats"
@@ -3,14 +3,14 @@ name: roll-design
3
3
  license: MIT
4
4
  model: sonnet
5
5
  allowed-tools: "Read, Edit, Write, Glob, Grep, Bash(git:*), WebSearch, WebFetch, Skill"
6
- description: Unified entry for discussion, design and planning. Explores options when uncertain, designs solutions, splits into INVEST-compliant user stories, and writes to BACKLOG.md. Use when user wants to discuss approaches, design solutions, plan features, or create stories.
6
+ description: Unified entry for discussion, design and planning. Explores options when uncertain, designs solutions with DDD modeling, splits into INVEST-compliant user stories, and writes to BACKLOG.md. Use when user wants to discuss approaches, design solutions, plan features, or create stories.
7
7
  ---
8
8
 
9
9
  # Design
10
10
 
11
11
  > Follows the Architecture Constraints, Development Discipline, and Engineering Common Sense defined in the project AGENTS.md.
12
12
 
13
- Discuss approaches, design architecture, plan requirements, and write to `BACKLOG.md`.
13
+ Discuss approaches, design architecture, plan requirements, and write to `BACKLOG.md`. DDD modeling depth scales automatically with input scope.
14
14
 
15
15
  ## When to Use
16
16
 
@@ -22,7 +22,8 @@ Discuss approaches, design architecture, plan requirements, and write to `BACKLO
22
22
  ## Use This Skill For
23
23
 
24
24
  - Approach exploration and comparison (discuss phase)
25
- - New requirement planning
25
+ - New project domain modeling (Event Storming → Context Map → Tactical Model)
26
+ - New requirement planning with domain context
26
27
  - Solution design
27
28
  - Splitting into Stories
28
29
  - Creating US / FIX entries
@@ -36,10 +37,13 @@ Discuss approaches, design architecture, plan requirements, and write to `BACKLO
36
37
  ## Quick Start
37
38
 
38
39
  ```bash
40
+ # New project from scratch → full DDD modeling
41
+ $roll-design "design an e-commerce order system from scratch"
42
+
39
43
  # Approach is uncertain → discuss first, then plan
40
44
  $roll-design "What approach should we use for search? Postgres FTS or Meilisearch?"
41
45
 
42
- # Plan new requirement → design solution split into Stories → write to BACKLOG
46
+ # Plan new requirement → domain slice + Stories → write to BACKLOG
43
47
  $roll-design "user system design"
44
48
 
45
49
  # Split Stories from an existing Plan
@@ -49,22 +53,65 @@ $roll-design --from-plan docs/features/auth-plan.md
49
53
  $roll-design --story "user login feature"
50
54
  ```
51
55
 
56
+ ## DDD Depth Scale
57
+
58
+ DDD modeling depth is determined automatically. It is not a switch — it is a dial.
59
+
60
+ ```
61
+ 输入范围 DDD 深度 产出物
62
+ ─────────────────────────────────────────────────────────────
63
+ 新项目 / greenfield Full Event Storming (对话引导)
64
+ Context Map + UL 词汇表
65
+ 每个 Context 的 Tactical Model
66
+ → docs/domain/
67
+
68
+ User Story / 新特性 Slice 定位所属 Bounded Context
69
+ 关键 Aggregate + 触碰的 Entity/VO
70
+ 触发的 Domain Event + 跨域影响
71
+ → 写入 US 的 Domain Model 段
72
+
73
+ Bug Fix Tag Context > Aggregate > Entity 定位
74
+ → 写入 FIX 描述行
75
+ ```
76
+
77
+ **深度自动判断逻辑**(在 Step 2 Analyze 阶段评估):
78
+
79
+ ```
80
+ Greenfield 信号(满足任意一条):
81
+ - 无 BACKLOG.md / docs/domain/ 目录
82
+ - 输入含 "从零" / "新项目" / "建模" / "设计整个系统" 关键词
83
+ - complexity = large AND 无已有 Bounded Context 文档
84
+
85
+ User Story 信号:
86
+ - 输入是功能需求 / US-XXX 引用
87
+ - complexity = medium or small AND 业务逻辑可见
88
+
89
+ Bug Fix 信号:
90
+ - 输入是 FIX-XXX / 错误描述 / 明确的问题定位
91
+ - 无需建模,只需定位上下文
92
+ ```
93
+
52
94
  ## Workspace Configuration
53
95
 
54
96
  Document structure (two-layer separation):
55
97
 
56
98
  ```
57
- BACKLOG.md # US index page (status + one-liner + link)
99
+ BACKLOG.md # US index page (status + one-liner + link)
58
100
  docs/features/
59
- <feature>.md # US details (AC / Files / Dependencies)
60
- <feature>-plan.md # Design document (why / how)
101
+ <feature>.md # US details (AC / Files / Dependencies)
102
+ <feature>-plan.md # Design document (why / how)
103
+ docs/domain/ # DDD domain model (greenfield / cross-feature)
104
+ context-map.md # Bounded Contexts + 关系图
105
+ ubiquitous-language.md # 统一语言词汇表
106
+ <context>-model.md # 每个 Context 的 Tactical Model
61
107
  ```
62
108
 
63
109
  **Important rules:**
64
110
  1. Plan files go in `docs/features/<feature>-plan.md` (**no longer using** `docs/plans/`)
65
111
  2. US details go in the corresponding `docs/features/<feature>.md`
66
112
  3. BACKLOG.md only contains index rows (one row per US), **do not write** AC / Files / Notes
67
- 4. **Do not** write to `~/.kimi/` or any global config directory
113
+ 4. Domain model files go in `docs/domain/` create on first greenfield design, update incrementally
114
+ 5. **Do not** write to `~/.kimi/` or any global config directory
68
115
 
69
116
  **File path resolution order:**
70
117
  1. Determine Feature ownership (based on the requirement domain: compiler / ingest / qa / ...)
@@ -75,7 +122,7 @@ docs/features/
75
122
  ## Workflow
76
123
 
77
124
  ```
78
- User: "Help me design the user system" / "What approach should we use for search?"
125
+ User Input
79
126
 
80
127
 
81
128
  ┌─────────────────────────────┐
@@ -98,53 +145,268 @@ User: "Help me design the user system" / "What approach should we use for search
98
145
  │ Approach confirmed
99
146
 
100
147
  ┌─────────────────────────────┐
101
- │ 2. Understand & Analyze
148
+ │ 2. Analyze + DDD Depth ← Detect scope: Greenfield / Story / Fix
102
149
  │ - Requirement analysis │
103
150
  │ - Feasibility assessment │
104
- │ - Technical solution design
105
- └─────────────┬───────────────┘
106
-
107
-
108
- ┌─────────────────────────────┐
109
- 3. Solution Design
110
- │ - Architecture design
111
- │ - Module decomposition
112
- │ - Dependency analysis
113
- - Write to docs/features/
114
- │ <feature>-plan.md
115
- └─────────────┬───────────────┘
116
-
117
-
118
- ┌─────────────────────────────┐
119
- │ 4. Split into Stories
120
- │ - INVEST principles
121
- - DDD domain splitting │
122
- - Priority ordering
123
- └─────────────┬───────────────┘
124
-
125
-
126
- ┌─────────────────────────────┐
127
- 5. Write to BACKLOG.md
128
- - Create US-XXX
129
- - Define AC │
130
- - Link design documents
131
- └─────────────┬───────────────┘
132
-
133
-
134
- "Confirm and execute?"
135
-
136
- ├── Yes ──→ $roll-build US-XXX
137
-
138
- └── No ──→ Wait for user confirmation
151
+ │ - DDD depth determination
152
+ └──────┬──────────────────────┘
153
+
154
+ ├── Greenfield ──→ ┌─────────────────────────────┐
155
+ │ │ 2a. Event Storming (对话引导) │
156
+ │ Big Picture:
157
+ - 发现 Domain Events
158
+ - 识别 Actors / Commands
159
+ - 标记 Hot Spots
160
+ │ Process Level:
161
+ │ - Command→Event→Policy 链 │
162
+ │ │ - 识别 Bounded Context 边界│
163
+ │ Design Level: │
164
+ │ │ - Aggregate 候选 │
165
+ │ │ - Entity vs Value Object │
166
+ └──────────────┬──────────────┘
167
+
168
+ ┌──────────────▼──────────────┐
169
+ 2b. Strategic Design
170
+ │ │ - Bounded Contexts 定义 │
171
+ │ - Context Map (关系类型) │
172
+ │ │ - Ubiquitous Language 词汇表│
173
+ │ │ → docs/domain/context-map.md│
174
+ │ → docs/domain/ubiquitous-
175
+ language.md │
176
+ └──────────────┬──────────────┘
177
+
178
+ ├── User Story ──→ ┌──────────────▼──────────────┐
179
+ │ 2c. Domain Slice │
180
+ │ │ - 定位所属 Bounded Context │
181
+ │ │ - 识别关键 Aggregate │
182
+ │ - 触碰的 Entity / VO │
183
+ │ │ - 触发的 Domain Events │
184
+ │ - 跨域影响(如有) │
185
+ │ └──────────────┬──────────────┘
186
+ │ │
187
+ └── Bug Fix ─────→ ┌──────────────▼──────────────┐
188
+ │ 2d. Domain Tag │
189
+ │ - Context > Aggregate > │
190
+ │ Entity 定位 │
191
+ └──────────────┬──────────────┘
192
+
193
+
194
+ ┌─────────────────────────────────────────┐
195
+ │ 3. Solution Design │
196
+ │ - Architecture design │
197
+ │ - Module decomposition │
198
+ │ - Dependency analysis │
199
+ │ [Greenfield] Tactical Model per Context:
200
+ │ - Aggregate Root + Entities + VOs │
201
+ │ - Invariants (业务不变式) │
202
+ │ - Domain Events (触发条件 + 消费方) │
203
+ │ - Repository interfaces │
204
+ │ - Domain Services (跨 Aggregate) │
205
+ │ → docs/features/<feature>-plan.md │
206
+ │ [Greenfield] → docs/domain/<ctx>- │
207
+ │ model.md │
208
+ └──────────────────┬──────────────────────┘
209
+
210
+
211
+ ┌─────────────────────────────────────────┐
212
+ │ 4. Split into Stories │
213
+ │ - INVEST principles │
214
+ │ - Bounded Context → US domain prefix │
215
+ │ - Priority ordering │
216
+ └──────────────────┬──────────────────────┘
217
+
218
+
219
+ ┌─────────────────────────────────────────┐
220
+ │ 5. Write to BACKLOG.md │
221
+ │ - Create US-XXX │
222
+ │ - Define AC │
223
+ │ - Link design documents │
224
+ └──────────────────┬──────────────────────┘
225
+
226
+
227
+ "Confirm and execute?"
228
+
229
+ ├── Yes ──→ $roll-build US-XXX
230
+
231
+ └── No ──→ Wait for user confirmation
232
+ ```
233
+
234
+ ---
235
+
236
+ ## DDD Output Formats
237
+
238
+ ### Event Storming — Big Picture (对话引导)
239
+
240
+ AI 扮演引导人,按顺序提问,不跳步骤:
241
+
242
+ ```
243
+ Step 1 - 发现 Domain Events:
244
+ "请描述这个系统里会发生的重要事情,用过去式动词短语
245
+ (例如:订单已创建、支付已完成、库存已扣减)"
246
+
247
+ Step 2 - 识别触发者:
248
+ "每个事件是谁/什么触发的?
249
+ (用户操作 / 系统自动 / 定时任务 / 外部系统)"
250
+
251
+ Step 3 - 标记 Hot Spots:
252
+ "哪些地方你还不确定?有哪些业务规则有争议?
253
+ (标记为 ⚠️ Hot Spot,后续重点讨论)"
254
+ ```
255
+
256
+ 输出格式(Big Picture 阶段结果):
257
+
258
+ ```
259
+ Domain Events discovered:
260
+ [OrderPlaced] ← Customer (user action)
261
+ [PaymentCompleted] ← Payment Gateway (external)
262
+ [InventoryReserved] ← System (automatic, after OrderPlaced)
263
+ [OrderShipped] ← Warehouse Staff (user action)
264
+
265
+ Hot Spots ⚠️:
266
+ - 支付失败后如何回滚库存预留?
267
+ - 同一商品多仓库时库存扣减策略?
268
+ ```
269
+
270
+ ### Event Storming — Process Level
271
+
272
+ ```
273
+ Step 4 - Command→Event 链:
274
+ "把事件串成流程:什么命令触发了它?
275
+ 触发后系统自动做什么(Policy)?"
276
+
277
+ Step 5 - 识别 Bounded Context 边界:
278
+ "哪些事件自然聚集在一起?
279
+ 哪些事件之间有明显的组织边界或团队边界?"
280
+ ```
281
+
282
+ 输出格式(Process Level 阶段结果):
283
+
284
+ ```
285
+ Flow: Order Lifecycle
286
+ [PlaceOrder] ──→ (Order) ──→ [OrderPlaced]
287
+ │ Policy: reserve inventory
288
+
289
+ (Inventory) ──→ [InventoryReserved]
290
+ │ Policy: request payment
291
+
292
+ (Payment) ──→ [PaymentCompleted]
293
+
294
+ Candidate Bounded Contexts:
295
+ - Order Context (OrderPlaced, OrderShipped, OrderCancelled)
296
+ - Inventory Context (InventoryReserved, InventoryReleased)
297
+ - Payment Context (PaymentCompleted, PaymentFailed)
298
+ ```
299
+
300
+ ### Strategic Design Output
301
+
302
+ 写入 `docs/domain/context-map.md`:
303
+
304
+ ```markdown
305
+ ## Bounded Contexts
306
+
307
+ | Context | 职责边界 | 核心概念 |
308
+ |---------|---------|---------|
309
+ | Order | 订单生命周期管理 | Order, OrderItem, Customer |
310
+ | Inventory | 库存预留与释放 | Stock, Reservation, Warehouse |
311
+ | Payment | 支付处理与退款 | Payment, Refund, Transaction |
312
+
313
+ ## Context Map
314
+
315
+ Order ═══U/D═══→ Inventory (Customer-Supplier: Order 下游消费库存事件)
316
+ Order ═══U/D═══→ Payment (Customer-Supplier: Order 发起支付请求)
317
+ Payment ──ACL──→ Alipay (Anti-Corruption Layer: 防腐层隔离第三方)
318
+ ```
319
+
320
+ 写入 `docs/domain/ubiquitous-language.md`:
321
+
322
+ ```markdown
323
+ | 术语 | 定义 | 所属 Context | 注意事项 |
324
+ |-----|------|-------------|---------|
325
+ | Order | 买家提交的购买意向,包含商品列表和配送信息 | Order | 不等于"交易",交易在 Payment Context |
326
+ | Reservation | 为订单锁定的库存数量,有时效 | Inventory | 区别于 Allocation(正式分配) |
327
+ ```
328
+
329
+ Context Map 关系类型说明:
330
+
331
+ ```
332
+ ═══U/D═══→ Customer-Supplier (上下游依赖)
333
+ ───ACL───→ Anti-Corruption Layer (防腐层)
334
+ ═══PL════ Partnership (平等协作)
335
+ ───SK─── Shared Kernel (共享内核)
336
+ ───CF───→ Conformist (顺从者)
337
+ ───OHS──→ Open Host Service (开放主机)
338
+ ```
339
+
340
+ ### Tactical Model Output
341
+
342
+ 写入 `docs/domain/<context>-model.md`:
343
+
344
+ ```markdown
345
+ ## Tactical Model: Order Context
346
+
347
+ ### Aggregates
348
+
349
+ **Order** (Aggregate Root)
350
+ Entities: OrderItem
351
+ Value Objects: Address, Money, OrderStatus
352
+ Invariants:
353
+ - 订单金额 = sum(OrderItem.price × quantity)
354
+ - 已支付订单不可修改商品列表
355
+ - OrderItem 数量必须 > 0
356
+
357
+ ### Domain Events
358
+
359
+ | Event | 触发条件 | 消费方 | Payload |
360
+ |-------|---------|-------|---------|
361
+ | OrderPlaced | Order.place() 成功 | Inventory Context | orderId, items, customerId |
362
+ | OrderCancelled | Order.cancel() | Inventory Context, Payment Context | orderId, reason |
363
+
364
+ ### Repository Interfaces
365
+
366
+ IOrderRepository:
367
+ - findById(orderId): Order
368
+ - save(order): void
369
+ - findByCustomer(customerId, page): Order[]
370
+
371
+ ### Domain Services
372
+
373
+ OrderPricingService:
374
+ - 职责: 跨 PriceRule Aggregate 计算最终价格(含优惠券、会员折扣)
375
+ - 原因: 定价逻辑跨越多个 Aggregate,不归属任何单一 Root
376
+ ```
377
+
378
+ ### Domain Slice Output(User Story 级别)
379
+
380
+ 插入 US 的 Domain Model 段(见 Story Format):
381
+
382
+ ```markdown
383
+ **Domain Model:**
384
+ - Context: Order
385
+ - Aggregate: Order (Root) owns [OrderItem, Address]
386
+ - Entities touched: OrderItem (新增/修改)
387
+ - Events raised: [OrderItemUpdated] → Inventory Context
388
+ - Cross-context: Inventory Context 需同步更新预留数量
389
+ ```
390
+
391
+ ### Domain Tag Output(Bug Fix 级别)
392
+
393
+ 写入 FIX 描述的第一行:
394
+
395
+ ```
396
+ Domain: Order Context > Order Aggregate > OrderItem Entity
139
397
  ```
140
398
 
141
- **Clarify phase trigger conditions** — automatically enters if any of these are met:
399
+ ---
400
+
401
+ ## Clarify Phase
402
+
403
+ **Trigger conditions** — automatically enters if any of these are met:
142
404
  - Input is a single vague sentence without clear scope
143
405
  - Missing clear boundaries (what / who / when / where)
144
406
  - Contains ambiguous terms like "优化一下", "改一下", "加个东西", "做个设计"
145
407
  - Could be interpreted in multiple ways
146
408
 
147
- **Clarify phase output format:**
409
+ **Output format:**
148
410
 
149
411
  ```
150
412
  🎯 Clarified Intent: {1-2 sentences}
@@ -160,19 +422,25 @@ User: "Help me design the user system" / "What approach should we use for search
160
422
  ➡️ Please answer the questions above and I'll proceed to design.
161
423
  ```
162
424
 
163
- **Clarify phase rules:**
425
+ **Rules:**
164
426
  - Do **not** start designing until the user replies.
165
427
  - Never announce "I'm using clarify." Just do it naturally.
166
428
  - If the input is already clear enough, skip silently and proceed to Discuss or Analyze.
167
429
 
168
- **Discuss phase trigger conditions** — automatically enters if any of these are met:
430
+ ---
431
+
432
+ ## Discuss Phase
433
+
434
+ **Trigger conditions** — automatically enters if any of these are met:
169
435
  - User is explicitly asking "how to choose" or "what approach to use"
170
436
  - More than 2 viable technical paths exist
171
437
  - Requirement involves an unfamiliar tech stack or new domain
172
438
 
173
- **Discuss phase can stop at any time** — if after discussion the user says "let's not do it" or "let me think about it", there's no need to continue to the planning phase.
439
+ **Can stop at any time** — if after discussion the user says "let's not do it" or "let me think about it", there's no need to continue to the planning phase.
440
+
441
+ ---
174
442
 
175
- **Operation sequence for creating a new Story:**
443
+ ## Operation Sequence for Creating a New Story
176
444
 
177
445
  ```bash
178
446
  # 1. Determine Feature ownership (e.g., compiler / ingest / qa)
@@ -186,8 +454,16 @@ FEATURE_FILE="docs/features/${FEATURE}.md"
186
454
 
187
455
  # 4. Append index row under the corresponding Epic > Feature group in BACKLOG.md
188
456
  # | [US-XXX](docs/features/compiler.md#us-xxx) | One-line description | 📋 Todo |
457
+
458
+ # 5. [Greenfield only] Write domain model files
459
+ DOMAIN_DIR="docs/domain/"
460
+ # docs/domain/context-map.md
461
+ # docs/domain/ubiquitous-language.md
462
+ # docs/domain/<context>-model.md
189
463
  ```
190
464
 
465
+ ---
466
+
191
467
  ## Story Format
192
468
 
193
469
  **BACKLOG.md index row (only write this one line):**
@@ -196,6 +472,8 @@ FEATURE_FILE="docs/features/${FEATURE}.md"
196
472
  | [US-{DOMAIN}-{N}](docs/features/<feature>.md#us-{domain}-{n}) | {one-line description} | 📋 Todo |
197
473
  ```
198
474
 
475
+ Note: `{DOMAIN}` maps to the Bounded Context name identified in DDD analysis.
476
+
199
477
  **US section in docs/features/\<feature\>.md (full details):**
200
478
 
201
479
  ```markdown
@@ -209,6 +487,12 @@ FEATURE_FILE="docs/features/${FEATURE}.md"
209
487
  - I want {action}
210
488
  - So that {benefit}
211
489
 
490
+ **Domain Model:**
491
+ - Context: {Bounded Context name}
492
+ - Aggregate: {Root} owns [{entities}]
493
+ - Events raised: [{EventName}] → {consumer context}
494
+ - Cross-context: {if touches another context, otherwise omit}
495
+
212
496
  **AC:**
213
497
  - [ ] {measurable criteria 1}
214
498
  - [ ] {measurable criteria 2}
@@ -228,35 +512,6 @@ FEATURE_FILE="docs/features/${FEATURE}.md"
228
512
  - Integration test: `tests/integration/{flow}.test.ts`
229
513
  ```
230
514
 
231
- ## Integration
232
-
233
- ### With roll-build
234
-
235
- ```
236
- $roll-design "login feature" → Create US-AUTH-001
237
- User: "Execute US-AUTH-001"
238
-
239
- $roll-build US-AUTH-001 → TCR → CI/CD → Deploy
240
- ```
241
-
242
- ### With roll-fix
243
-
244
- ```
245
- $roll-debug discovers issue → Suggest creating FIX
246
- $roll-design --fix "fix login API 404" → Create FIX-AUTH-001
247
- $roll-fix FIX-AUTH-001 → Quick fix
248
- ```
249
-
250
- ## Project Context Rule
251
-
252
- Before creating any file or directory:
253
-
254
- 1. **Read existing project structure** — check for `package.json`, `go.mod`, `Cargo.toml`, `pyproject.toml`, existing `src/`, `api/`, `cmd/` directories
255
- 2. **Infer conventions from evidence** — don't assume a project type; observe what already exists
256
- 3. **Follow what already exists** — introduce new patterns only when the current structure has no precedent
257
-
258
- > `roll init` no longer asks for project type. Skills are responsible for reading context and acting accordingly.
259
-
260
515
  ---
261
516
 
262
517
  ## INVEST Principles
@@ -283,3 +538,37 @@ Each story must be:
283
538
  ```
284
539
 
285
540
  **Note**: BACKLOG.md only contains index rows; full AC / Files / Dependencies go in `docs/features/<feature>.md`.
541
+
542
+ ---
543
+
544
+ ## Integration
545
+
546
+ ### With roll-build
547
+
548
+ ```
549
+ $roll-design "login feature" → Create US-AUTH-001
550
+ User: "Execute US-AUTH-001"
551
+
552
+ $roll-build US-AUTH-001 → TCR → CI/CD → Deploy
553
+ ```
554
+
555
+ ### With roll-fix
556
+
557
+ ```
558
+ $roll-debug discovers issue → Suggest creating FIX
559
+ $roll-design --fix "fix login API 404" → Create FIX-AUTH-001
560
+ $roll-fix FIX-AUTH-001 → Quick fix
561
+ ```
562
+
563
+ ---
564
+
565
+ ## Project Context Rule
566
+
567
+ Before creating any file or directory:
568
+
569
+ 1. **Read existing project structure** — check for `package.json`, `go.mod`, `Cargo.toml`, `pyproject.toml`, existing `src/`, `api/`, `cmd/` directories
570
+ 2. **Check existing domain model** — if `docs/domain/` exists, read `context-map.md` before adding new Bounded Contexts
571
+ 3. **Infer conventions from evidence** — don't assume a project type; observe what already exists
572
+ 4. **Follow what already exists** — introduce new patterns only when the current structure has no precedent
573
+
574
+ > `roll init` no longer asks for project type. Skills are responsible for reading context and acting accordingly.