speccrew 0.7.8 → 0.7.10

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.
Files changed (17) hide show
  1. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-FASTAPI.md +23 -23
  2. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-JAVA.md +23 -23
  3. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-NET.md +23 -23
  4. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md +23 -23
  5. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/workflow.agentflow.xml +9 -5
  6. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/SKILL.md +8 -1
  7. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/workflow.agentflow.xml +8 -1
  8. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/SKILL.md +2 -2
  9. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/workflow.agentflow.xml +1 -1
  10. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md +46 -46
  11. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md +51 -51
  12. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md +48 -48
  13. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md +42 -42
  14. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md +47 -47
  15. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/workflow.agentflow.xml +10 -1
  16. package/.speccrew/skills/speccrew-pm-knowledge-detector/workflow.agentflow.xml +1 -1
  17. package/package.json +1 -1
@@ -11,10 +11,10 @@
11
11
 
12
12
  | # | File | Source |
13
13
  |---|------|--------|
14
- | 1 | {router} | [View](../../{routerSourcePath}) |
15
- | 2 | {service} | [View](../../{serviceSourcePath}) |
16
- | 3 | {model} | [View](../../{modelSourcePath}) |
17
- | 4 | {schema} | [View](../../{schemaSourcePath}) |
14
+ | 1 | {router} | [View](../../../../../../{routerSourcePath}) |
15
+ | 2 | {service} | [View](../../../../../../{serviceSourcePath}) |
16
+ | 3 | {model} | [View](../../../../../../{modelSourcePath}) |
17
+ | 4 | {schema} | [View](../../../../../../{schemaSourcePath}) |
18
18
 
19
19
  ---
20
20
 
@@ -152,11 +152,11 @@ graph TB
152
152
 
153
153
  | # | Layer | File | Function/Class | Responsibility | Source |
154
154
  |---|-------|------|----------------|----------------|--------|
155
- | 1 | Router | {users.py} | {create_user} | Receive request, validate params, call service | [Source](../../{routerSourcePath}) |
156
- | 2 | Service | {user_service.py} | {create_user} | Business validation, data processing, call CRUD | [Source](../../{serviceSourcePath}) |
157
- | 3 | Service | {user_service.py} | {validate_user_email} | Check email uniqueness | [Source](../../{serviceSourcePath}) |
158
- | 4 | CRUD | {user_crud.py} | {create} | Execute INSERT via SQLAlchemy | [Source](../../{crudSourcePath}) |
159
- | 5 | Model | {user.py} | {User model} | SQLAlchemy ORM model definition | [Source](../../{modelSourcePath}) |
155
+ | 1 | Router | {users.py} | {create_user} | Receive request, validate params, call service | [Source](../../../../../../{routerSourcePath}) |
156
+ | 2 | Service | {user_service.py} | {create_user} | Business validation, data processing, call CRUD | [Source](../../../../../../{serviceSourcePath}) |
157
+ | 3 | Service | {user_service.py} | {validate_user_email} | Check email uniqueness | [Source](../../../../../../{serviceSourcePath}) |
158
+ | 4 | CRUD | {user_crud.py} | {create} | Execute INSERT via SQLAlchemy | [Source](../../../../../../{crudSourcePath}) |
159
+ | 5 | Model | {user.py} | {User model} | SQLAlchemy ORM model definition | [Source](../../../../../../{modelSourcePath}) |
160
160
 
161
161
  **Database Operations:**
162
162
 
@@ -213,7 +213,7 @@ graph TB
213
213
  | {related_table} | {One-to-Many} | {ForeignKey("related.id")} | {Relationship description} |
214
214
  | {another_table} | {Many-to-One} | {ForeignKey("another.id")} | {Relationship description} |
215
215
 
216
- **Source:** [Model](../../{modelSourcePath})
216
+ **Source:** [Model](../../../../../../{modelSourcePath})
217
217
 
218
218
  ### 3.2 Model-Database Mapping
219
219
 
@@ -260,23 +260,23 @@ class {UserResponse}(BaseModel):
260
260
 
261
261
  | Service Name | Purpose | Source Path |
262
262
  |--------------|---------|-------------|
263
- | {user_service} | {e.g., User business logic} | [Source](../../{serviceSourcePath}) |
264
- | {auth_service} | {e.g., Authentication validation} | [Source](../../{serviceSourcePath}) |
263
+ | {user_service} | {e.g., User business logic} | [Source](../../../../../../{serviceSourcePath}) |
264
+ | {auth_service} | {e.g., Authentication validation} | [Source](../../../../../../{serviceSourcePath}) |
265
265
 
266
266
  ### 4.2 Data Access Layer
267
267
 
268
268
  | CRUD/Repository | Model | Purpose | Source Path |
269
269
  |-----------------|-------|---------|-------------|
270
- | {user_crud} | {User} | {e.g., User CRUD operations} | [Source](../../{crudSourcePath}) |
271
- | {role_crud} | {Role} | {e.g., Role query} | [Source](../../{crudSourcePath}) |
270
+ | {user_crud} | {User} | {e.g., User CRUD operations} | [Source](../../../../../../{crudSourcePath}) |
271
+ | {role_crud} | {Role} | {e.g., Role query} | [Source](../../../../../../{crudSourcePath}) |
272
272
 
273
273
  ### 4.3 Schemas and Models
274
274
 
275
275
  | Class Name | Type | Purpose | Source Path |
276
276
  |------------|------|---------|-------------|
277
- | {UserCreate} | Request Schema | {e.g., Create user request} | [Source](../../{schemaSourcePath}) |
278
- | {UserResponse} | Response Schema | {e.g., User detail response} | [Source](../../{schemaSourcePath}) |
279
- | {User} | SQLAlchemy Model | {e.g., User database model} | [Source](../../{modelSourcePath}) |
277
+ | {UserCreate} | Request Schema | {e.g., Create user request} | [Source](../../../../../../{schemaSourcePath}) |
278
+ | {UserResponse} | Response Schema | {e.g., User detail response} | [Source](../../../../../../{schemaSourcePath}) |
279
+ | {User} | SQLAlchemy Model | {e.g., User database model} | [Source](../../../../../../{modelSourcePath}) |
280
280
 
281
281
  ### 4.4 API Consumers
282
282
 
@@ -284,8 +284,8 @@ class {UserResponse}(BaseModel):
284
284
 
285
285
  | Page Name | Function Description | Source Path | Document Path |
286
286
  |-----------|---------------------|-------------|---------------|
287
- | {PageName} | {e.g., User management list page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
288
- | {PageName} | {e.g., User form page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
287
+ | {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
288
+ | {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
289
289
 
290
290
  ---
291
291
 
@@ -339,7 +339,7 @@ graph LR
339
339
  ```
340
340
 
341
341
  **Diagram Source**
342
- - [{Service}.py](../../{serviceSourcePath})
342
+ - [{Service}.py](../../../../../../{serviceSourcePath})
343
343
 
344
344
  ### 6.3 External Dependencies
345
345
 
@@ -458,6 +458,6 @@ router = APIRouter(
458
458
  **Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
459
459
 
460
460
  **Section Source**
461
- - [{Router}.py](../../{routerSourcePath})
462
- - [{Service}.py](../../{serviceSourcePath})
463
- - [{Model}.py](../../{modelSourcePath})
461
+ - [{Router}.py](../../../../../../{routerSourcePath})
462
+ - [{Service}.py](../../../../../../{serviceSourcePath})
463
+ - [{Model}.py](../../../../../../{modelSourcePath})
@@ -11,10 +11,10 @@
11
11
 
12
12
  | # | File | Source |
13
13
  |---|------|--------|
14
- | 1 | {Controller} | [View](../../{controllerSourcePath}) |
15
- | 2 | {Service} | [View](../../{serviceSourcePath}) |
16
- | 3 | {Entity} | [View](../../{entitySourcePath}) |
17
- | 4 | {DTO} | [View](../../{dtoSourcePath}) |
14
+ | 1 | {Controller} | [View](../../../../../../{controllerSourcePath}) |
15
+ | 2 | {Service} | [View](../../../../../../{serviceSourcePath}) |
16
+ | 3 | {Entity} | [View](../../../../../../{entitySourcePath}) |
17
+ | 4 | {DTO} | [View](../../../../../../{dtoSourcePath}) |
18
18
 
19
19
  ---
20
20
 
@@ -156,11 +156,11 @@ graph TB
156
156
 
157
157
  | # | Layer | Class | Method | Responsibility | Source |
158
158
  |---|-------|-------|--------|----------------|--------|
159
- | 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](../../{controllerSourcePath}) |
160
- | 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](../../{serviceSourcePath}) |
161
- | 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](../../{serviceSourcePath}) |
162
- | 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](../../{mapperSourcePath}) |
163
- | 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](../../{mapperXmlSourcePath}) |
159
+ | 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](../../../../../../{controllerSourcePath}) |
160
+ | 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](../../../../../../{serviceSourcePath}) |
161
+ | 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](../../../../../../{serviceSourcePath}) |
162
+ | 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](../../../../../../{mapperSourcePath}) |
163
+ | 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](../../../../../../{mapperXmlSourcePath}) |
164
164
 
165
165
  **Database Operations:**
166
166
 
@@ -217,7 +217,7 @@ graph TB
217
217
  | {related_table} | {One-to-Many} | {this_table.related_id} | {Relationship description} |
218
218
  | {another_table} | {Many-to-One} | {this_table.parent_id} | {Relationship description} |
219
219
 
220
- **Source:** [Entity](../../{entitySourcePath}) | [Mapper XML](../../{mapperXmlSourcePath})
220
+ **Source:** [Entity](../../../../../../{entitySourcePath}) | [Mapper XML](../../../../../../{mapperXmlSourcePath})
221
221
 
222
222
  ### 3.2 Entity-Database Mapping
223
223
 
@@ -266,23 +266,23 @@ graph TB
266
266
 
267
267
  | Service Name | Purpose | Source Path |
268
268
  |--------------|---------|-------------|
269
- | {ServiceName} | {e.g., User business logic} | [Source](../../{serviceSourcePath}) |
270
- | {ServiceName} | {e.g., Permission validation} | [Source](../../{serviceSourcePath}) |
269
+ | {ServiceName} | {e.g., User business logic} | [Source](../../../../../../{serviceSourcePath}) |
270
+ | {ServiceName} | {e.g., Permission validation} | [Source](../../../../../../{serviceSourcePath}) |
271
271
 
272
272
  ### 4.2 Data Access Layer
273
273
 
274
274
  | Mapper/Repository | Entity | Purpose | Source Path |
275
275
  |-------------------|--------|---------|-------------|
276
- | {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](../../{mapperSourcePath}) |
277
- | {MapperName} | {EntityName} | {e.g., Role query} | [Source](../../{mapperSourcePath}) |
276
+ | {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](../../../../../../{mapperSourcePath}) |
277
+ | {MapperName} | {EntityName} | {e.g., Role query} | [Source](../../../../../../{mapperSourcePath}) |
278
278
 
279
279
  ### 4.3 DTOs and Entities
280
280
 
281
281
  | Class Name | Type | Purpose | Source Path |
282
282
  |------------|------|---------|-------------|
283
- | {DTOClass} | Request DTO | {e.g., Create user request} | [Source](../../{dtoSourcePath}) |
284
- | {VOClass} | Response VO | {e.g., User detail response} | [Source](../../{voSourcePath}) |
285
- | {EntityClass} | Entity | {e.g., User database entity} | [Source](../../{entitySourcePath}) |
283
+ | {DTOClass} | Request DTO | {e.g., Create user request} | [Source](../../../../../../{dtoSourcePath}) |
284
+ | {VOClass} | Response VO | {e.g., User detail response} | [Source](../../../../../../{voSourcePath}) |
285
+ | {EntityClass} | Entity | {e.g., User database entity} | [Source](../../../../../../{entitySourcePath}) |
286
286
 
287
287
  ### 4.4 API Consumers
288
288
 
@@ -290,8 +290,8 @@ graph TB
290
290
 
291
291
  | Page Name | Function Description | Source Path | Document Path |
292
292
  |-----------|---------------------|-------------|---------------|
293
- | {PageName} | {e.g., User management list page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
294
- | {PageName} | {e.g., User form page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
293
+ | {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
294
+ | {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
295
295
 
296
296
  ---
297
297
 
@@ -346,7 +346,7 @@ graph LR
346
346
  ```
347
347
 
348
348
  **Diagram Source**
349
- - [{Service}.java](../../{serviceSourcePath})
349
+ - [{Service}.java](../../../../../../{serviceSourcePath})
350
350
 
351
351
  ### 6.3 External Dependencies
352
352
 
@@ -476,6 +476,6 @@ feature:
476
476
  **Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
477
477
 
478
478
  **Section Source**
479
- - [{Controller}.java](../../{controllerSourcePath})
480
- - [{Service}.java](../../{serviceSourcePath})
481
- - [{Entity}.java](../../{entitySourcePath})
479
+ - [{Controller}.java](../../../../../../{controllerSourcePath})
480
+ - [{Service}.java](../../../../../../{serviceSourcePath})
481
+ - [{Entity}.java](../../../../../../{entitySourcePath})
@@ -11,10 +11,10 @@
11
11
 
12
12
  | # | File | Source |
13
13
  |---|------|--------|
14
- | 1 | {Controller} | [View](../../{controllerSourcePath}) |
15
- | 2 | {Service} | [View](../../{serviceSourcePath}) |
16
- | 3 | {Repository} | [View](../../{repositorySourcePath}) |
17
- | 4 | {Entity} | [View](../../{entitySourcePath}) |
14
+ | 1 | {Controller} | [View](../../../../../../{controllerSourcePath}) |
15
+ | 2 | {Service} | [View](../../../../../../{serviceSourcePath}) |
16
+ | 3 | {Repository} | [View](../../../../../../{repositorySourcePath}) |
17
+ | 4 | {Entity} | [View](../../../../../../{entitySourcePath}) |
18
18
 
19
19
  ---
20
20
 
@@ -152,11 +152,11 @@ graph TB
152
152
 
153
153
  | # | Layer | File | Method/Class | Responsibility | Source |
154
154
  |---|-------|------|--------------|----------------|--------|
155
- | 1 | Controller | {UsersController.cs} | {CreateUser} | Receive request, validate params, call service | [Source](../../{controllerSourcePath}) |
156
- | 2 | Service | {UserService.cs} | {CreateUserAsync} | Business validation, data processing, call repository | [Source](../../{serviceSourcePath}) |
157
- | 3 | Service | {UserService.cs} | {ValidateUserEmailAsync} | Check email uniqueness | [Source](../../{serviceSourcePath}) |
158
- | 4 | Repository | {UserRepository.cs} | {AddAsync} | Execute Add via EF Core | [Source](../../{repositorySourcePath}) |
159
- | 5 | Entity | {User.cs} | {User entity} | EF Core entity definition | [Source](../../{entitySourcePath}) |
155
+ | 1 | Controller | {UsersController.cs} | {CreateUser} | Receive request, validate params, call service | [Source](../../../../../../{controllerSourcePath}) |
156
+ | 2 | Service | {UserService.cs} | {CreateUserAsync} | Business validation, data processing, call repository | [Source](../../../../../../{serviceSourcePath}) |
157
+ | 3 | Service | {UserService.cs} | {ValidateUserEmailAsync} | Check email uniqueness | [Source](../../../../../../{serviceSourcePath}) |
158
+ | 4 | Repository | {UserRepository.cs} | {AddAsync} | Execute Add via EF Core | [Source](../../../../../../{repositorySourcePath}) |
159
+ | 5 | Entity | {User.cs} | {User entity} | EF Core entity definition | [Source](../../../../../../{entitySourcePath}) |
160
160
 
161
161
  **Database Operations:**
162
162
 
@@ -213,7 +213,7 @@ graph TB
213
213
  | {RelatedTable} | {One-to-Many} | {RelatedId} | {Relationship description} |
214
214
  | {AnotherTable} | {Many-to-One} | {AnotherId} | {Relationship description} |
215
215
 
216
- **Source:** [Entity](../../{entitySourcePath}) | [DbContext](../../{dbContextSourcePath})
216
+ **Source:** [Entity](../../../../../../{entitySourcePath}) | [DbContext](../../../../../../{dbContextSourcePath})
217
217
 
218
218
  ### 3.2 Entity-Database Mapping
219
219
 
@@ -262,23 +262,23 @@ public class {UserResponse}
262
262
 
263
263
  | Service Name | Purpose | Source Path |
264
264
  |--------------|---------|-------------|
265
- | {IUserService} | {e.g., User business logic interface} | [Source](../../{serviceInterfaceSourcePath}) |
266
- | {UserService} | {e.g., User business logic implementation} | [Source](../../{serviceSourcePath}) |
265
+ | {IUserService} | {e.g., User business logic interface} | [Source](../../../../../../{serviceInterfaceSourcePath}) |
266
+ | {UserService} | {e.g., User business logic implementation} | [Source](../../../../../../{serviceSourcePath}) |
267
267
 
268
268
  ### 4.2 Data Access Layer
269
269
 
270
270
  | Repository | Entity | Purpose | Source Path |
271
271
  |------------|--------|---------|-------------|
272
- | {IUserRepository} | {User} | {e.g., User repository interface} | [Source](../../{repositoryInterfaceSourcePath}) |
273
- | {UserRepository} | {User} | {e.g., User repository implementation} | [Source](../../{repositorySourcePath}) |
272
+ | {IUserRepository} | {User} | {e.g., User repository interface} | [Source](../../../../../../{repositoryInterfaceSourcePath}) |
273
+ | {UserRepository} | {User} | {e.g., User repository implementation} | [Source](../../../../../../{repositorySourcePath}) |
274
274
 
275
275
  ### 4.3 DTOs and Entities
276
276
 
277
277
  | Class Name | Type | Purpose | Source Path |
278
278
  |------------|------|---------|-------------|
279
- | {CreateUserRequest} | Request DTO | {e.g., Create user request} | [Source](../../{dtoSourcePath}) |
280
- | {UserResponse} | Response DTO | {e.g., User detail response} | [Source](../../{dtoSourcePath}) |
281
- | {User} | EF Core Entity | {e.g., User database entity} | [Source](../../{entitySourcePath}) |
279
+ | {CreateUserRequest} | Request DTO | {e.g., Create user request} | [Source](../../../../../../{dtoSourcePath}) |
280
+ | {UserResponse} | Response DTO | {e.g., User detail response} | [Source](../../../../../../{dtoSourcePath}) |
281
+ | {User} | EF Core Entity | {e.g., User database entity} | [Source](../../../../../../{entitySourcePath}) |
282
282
 
283
283
  ### 4.4 API Consumers
284
284
 
@@ -286,8 +286,8 @@ public class {UserResponse}
286
286
 
287
287
  | Page Name | Function Description | Source Path | Document Path |
288
288
  |-----------|---------------------|-------------|---------------|
289
- | {PageName} | {e.g., User management list page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
290
- | {PageName} | {e.g., User form page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
289
+ | {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
290
+ | {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
291
291
 
292
292
  ---
293
293
 
@@ -341,7 +341,7 @@ graph LR
341
341
  ```
342
342
 
343
343
  **Diagram Source**
344
- - [{Service}.cs](../../{serviceSourcePath})
344
+ - [{Service}.cs](../../../../../../{serviceSourcePath})
345
345
 
346
346
  ### 6.3 External Dependencies
347
347
 
@@ -460,6 +460,6 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
460
460
  **Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
461
461
 
462
462
  **Section Source**
463
- - [{Controller}.cs](../../{controllerSourcePath})
464
- - [{Service}.cs](../../{serviceSourcePath})
465
- - [{Entity}.cs](../../{entitySourcePath})
463
+ - [{Controller}.cs](../../../../../../{controllerSourcePath})
464
+ - [{Service}.cs](../../../../../../{serviceSourcePath})
465
+ - [{Entity}.cs](../../../../../../{entitySourcePath})
@@ -11,10 +11,10 @@
11
11
 
12
12
  | # | File | Source |
13
13
  |---|------|--------|
14
- | 1 | {Controller} | [View](../../{controllerSourcePath}) |
15
- | 2 | {Service} | [View](../../{serviceSourcePath}) |
16
- | 3 | {Entity} | [View](../../{entitySourcePath}) |
17
- | 4 | {DTO} | [View](../../{dtoSourcePath}) |
14
+ | 1 | {Controller} | [View](../../../../../../{controllerSourcePath}) |
15
+ | 2 | {Service} | [View](../../../../../../{serviceSourcePath}) |
16
+ | 3 | {Entity} | [View](../../../../../../{entitySourcePath}) |
17
+ | 4 | {DTO} | [View](../../../../../../{dtoSourcePath}) |
18
18
 
19
19
  ---
20
20
 
@@ -156,11 +156,11 @@ graph TB
156
156
 
157
157
  | # | Layer | Class | Method | Responsibility | Source |
158
158
  |---|-------|-------|--------|----------------|--------|
159
- | 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](../../{controllerSourcePath}) |
160
- | 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](../../{serviceSourcePath}) |
161
- | 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](../../{serviceSourcePath}) |
162
- | 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](../../{mapperSourcePath}) |
163
- | 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](../../{mapperXmlSourcePath}) |
159
+ | 1 | Controller | {UserController} | {createUser} | Receive request, validate params, call service | [Source](../../../../../../{controllerSourcePath}) |
160
+ | 2 | Service | {UserService} | {createUser} | Business validation, data processing, call mapper | [Source](../../../../../../{serviceSourcePath}) |
161
+ | 3 | Service | {UserService} | {validateUserName} | Check user name uniqueness | [Source](../../../../../../{serviceSourcePath}) |
162
+ | 4 | Mapper | {UserMapper} | {insert} | Execute INSERT SQL | [Source](../../../../../../{mapperSourcePath}) |
163
+ | 5 | Mapper XML | {UserMapper.xml} | {insert} | SQL: INSERT INTO user (...) VALUES (...) | [Source](../../../../../../{mapperXmlSourcePath}) |
164
164
 
165
165
  **Database Operations:**
166
166
 
@@ -217,7 +217,7 @@ graph TB
217
217
  | {related_table} | {One-to-Many} | {this_table.related_id} | {Relationship description} |
218
218
  | {another_table} | {Many-to-One} | {this_table.parent_id} | {Relationship description} |
219
219
 
220
- **Source:** [Entity](../../{entitySourcePath}) | [Mapper XML](../../{mapperXmlSourcePath})
220
+ **Source:** [Entity](../../../../../../{entitySourcePath}) | [Mapper XML](../../../../../../{mapperXmlSourcePath})
221
221
 
222
222
  ### 3.2 Entity-Database Mapping
223
223
 
@@ -266,23 +266,23 @@ graph TB
266
266
 
267
267
  | Service Name | Purpose | Source Path |
268
268
  |--------------|---------|-------------|
269
- | {ServiceName} | {e.g., User business logic} | [Source](../../{serviceSourcePath}) |
270
- | {ServiceName} | {e.g., Permission validation} | [Source](../../{serviceSourcePath}) |
269
+ | {ServiceName} | {e.g., User business logic} | [Source](../../../../../../{serviceSourcePath}) |
270
+ | {ServiceName} | {e.g., Permission validation} | [Source](../../../../../../{serviceSourcePath}) |
271
271
 
272
272
  ### 4.2 Data Access Layer
273
273
 
274
274
  | Mapper/Repository | Entity | Purpose | Source Path |
275
275
  |-------------------|--------|---------|-------------|
276
- | {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](../../{mapperSourcePath}) |
277
- | {MapperName} | {EntityName} | {e.g., Role query} | [Source](../../{mapperSourcePath}) |
276
+ | {MapperName} | {EntityName} | {e.g., User CRUD operations} | [Source](../../../../../../{mapperSourcePath}) |
277
+ | {MapperName} | {EntityName} | {e.g., Role query} | [Source](../../../../../../{mapperSourcePath}) |
278
278
 
279
279
  ### 4.3 DTOs and Entities
280
280
 
281
281
  | Class Name | Type | Purpose | Source Path |
282
282
  |------------|------|---------|-------------|
283
- | {DTOClass} | Request DTO | {e.g., Create user request} | [Source](../../{dtoSourcePath}) |
284
- | {VOClass} | Response VO | {e.g., User detail response} | [Source](../../{voSourcePath}) |
285
- | {EntityClass} | Entity | {e.g., User database entity} | [Source](../../{entitySourcePath}) |
283
+ | {DTOClass} | Request DTO | {e.g., Create user request} | [Source](../../../../../../{dtoSourcePath}) |
284
+ | {VOClass} | Response VO | {e.g., User detail response} | [Source](../../../../../../{voSourcePath}) |
285
+ | {EntityClass} | Entity | {e.g., User database entity} | [Source](../../../../../../{entitySourcePath}) |
286
286
 
287
287
  ### 4.4 API Consumers
288
288
 
@@ -290,8 +290,8 @@ graph TB
290
290
 
291
291
  | Page Name | Function Description | Source Path | Document Path |
292
292
  |-----------|---------------------|-------------|---------------|
293
- | {PageName} | {e.g., User management list page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
294
- | {PageName} | {e.g., User form page} | [Source](../../{pageSourcePath}) | [Doc](../../{pageDocumentPath}) |
293
+ | {PageName} | {e.g., User management list page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
294
+ | {PageName} | {e.g., User form page} | [Source](../../../../../../{pageSourcePath}) | [Doc](../../../../../../{pageDocumentPath}) |
295
295
 
296
296
  ---
297
297
 
@@ -346,7 +346,7 @@ graph LR
346
346
  ```
347
347
 
348
348
  **Diagram Source**
349
- - [{Service}.java](../../{serviceSourcePath})
349
+ - [{Service}.java](../../../../../../{serviceSourcePath})
350
350
 
351
351
  ### 6.3 External Dependencies
352
352
 
@@ -476,6 +476,6 @@ feature:
476
476
  **Related Module Document:** [Module Overview Document](../{{module-name}}-overview.md)
477
477
 
478
478
  **Section Source**
479
- - [{Controller}.java](../../{controllerSourcePath})
480
- - [{Service}.java](../../{serviceSourcePath})
481
- - [{Entity}.java](../../{entitySourcePath})
479
+ - [{Controller}.java](../../../../../../{controllerSourcePath})
480
+ - [{Service}.java](../../../../../../{serviceSourcePath})
481
+ - [{Entity}.java](../../../../../../{entitySourcePath})
@@ -320,11 +320,6 @@
320
320
  </block>
321
321
 
322
322
  <!-- ==================== STEP 5B: FILL EACH SECTION USING SEARCH_REPLACE ==================== -->
323
- <!-- Calculate Dynamic Path Prefix -->
324
- <block type="task" id="B17" action="calculate-path-prefix" desc="Calculate path prefix">
325
- <field name="documentPath" value="${documentPath}"/>
326
- <field name="output" var="pathPrefix" from="calculation.prefix"/>
327
- </block>
328
323
 
329
324
  <!-- Section 1: Content Overview -->
330
325
  <block type="task" id="B18" action="search_replace" desc="Fill overview section">
@@ -479,6 +474,14 @@
479
474
  <field name="verify" value="file.exists(${completed_dir}/${markerName}.done.json)"/>
480
475
  </block>
481
476
 
477
+ <!-- ==================== MANDATORY GRAPH WRITE RULE ==================== -->
478
+ <block type="rule" id="R-GRAPH" level="mandatory" desc="Graph data write is MANDATORY">
479
+ <field name="text">MANDATORY: You MUST execute ALL graph write blocks (B32a through B32g) before proceeding to O1.</field>
480
+ <field name="text">Graph data (nodes + edges) MUST be appended to knowledges/bizs/graph/nodes.json and edges.json.</field>
481
+ <field name="text">DO NOT skip graph write. DO NOT jump directly to O1 output block.</field>
482
+ <field name="text">If graph directory does not exist, create it first.</field>
483
+ </block>
484
+
482
485
  <!-- Step 7b: Construct and Append Graph Data -->
483
486
  <!-- Construct Graph Nodes from API Analysis -->
484
487
  <block type="task" id="B32a" action="analyze" desc="Construct API endpoint nodes">
@@ -612,6 +615,7 @@ console.log('Edges appended:', newEdges.length);
612
615
  <field name="featureName" from="step6-report.feature_name"/>
613
616
  <field name="generatedFile" from="step6-report.generated_file"/>
614
617
  <field name="message" from="step6-report.message"/>
618
+ <field name="graph_status" value="nodes and edges written to knowledges/bizs/graph/"/>
615
619
  </block>
616
620
 
617
621
  <!-- ==================== ERROR HANDLING ==================== -->
@@ -129,7 +129,7 @@ Stage 4: System Summary
129
129
  <field name="changed_files" required="false" type="array" desc="(incremental only) Pre-computed changed file list"/>
130
130
  <field name="max_concurrent_workers" required="false" type="number" default="5" desc="Maximum parallel Worker count"/>
131
131
  <field name="workspace_path" required="true" type="string" desc="Absolute path to speccrew-workspace directory"/>
132
- <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to knowledges/base/sync-state/knowledge-bizs/"/>
132
+ <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to knowledges/base/sync-state/knowledge-bizs/ (✓ correct: .../knowledges/base/sync-state/knowledge-bizs/ | ✗ wrong: .../knowledges/bizs/sync-state/knowledge-bizs/)"/>
133
133
  <field name="ide_skills_dir" required="true" type="string" desc="Absolute path to IDE-specific skills directory (e.g., .qoder/skills/, .cursor/skills/, .claude/skills/) where skill scripts are deployed"/>
134
134
  <field name="configs_dir" required="true" type="string" desc="Absolute path to docs/configs/ directory"/>
135
135
  <field name="graph_root" required="false" type="string" desc="Graph data output root path (absolute path preferred)" default="${workspace_path}/knowledges/bizs/graph"/>
@@ -184,6 +184,13 @@ Stage 4: System Summary
184
184
  <field name="text">Missing a platform means incomplete knowledge base generation</field>
185
185
  </block>
186
186
 
187
+ <block type="rule" id="S0-R2" level="mandatory" desc="platformId format constraints">
188
+ <field name="text">platformId MUST use format: {platformType}-{techStack}</field>
189
+ <field name="text">platformType values: web (NOT frontend), mobile, desktop, backend</field>
190
+ <field name="text">✓ Correct: backend-fastapi, web-vue3, mobile-uniapp, desktop-electron</field>
191
+ <field name="text">✗ Wrong: backend-system, frontend-web, mobile-app, frontend-vue3</field>
192
+ </block>
193
+
187
194
  <!-- Step 1: Scan backend modules -->
188
195
  <block type="task" id="S0-B1" action="run-script" status="pending" desc="Scan backend module directories">
189
196
  <field name="command">Get-ChildItem -Path "${source_path}" -Filter "yudao-module-*" -Directory</field>
@@ -13,7 +13,7 @@
13
13
  <field name="changed_files" required="false" type="array" desc="(incremental only) Pre-computed changed file list"/>
14
14
  <field name="max_concurrent_workers" required="false" type="number" default="5" desc="Maximum parallel Worker count"/>
15
15
  <field name="workspace_path" required="true" type="string" desc="Absolute path to speccrew-workspace directory"/>
16
- <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to knowledges/base/sync-state/knowledge-bizs/"/>
16
+ <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to knowledges/base/sync-state/knowledge-bizs/ (✓ correct: .../knowledges/base/sync-state/knowledge-bizs/ | ✗ wrong: .../knowledges/bizs/sync-state/knowledge-bizs/)"/>
17
17
  <field name="ide_skills_dir" required="true" type="string" desc="Absolute path to IDE-specific skills directory (e.g., .qoder/skills/, .cursor/skills/, .claude/skills/) where skill scripts are deployed"/>
18
18
  <field name="configs_dir" required="true" type="string" desc="Absolute path to docs/configs/ directory"/>
19
19
  <field name="graph_root" required="false" type="string" desc="Graph data output root path (absolute path preferred)" default="${workspace_path}/knowledges/bizs/graph"/>
@@ -72,6 +72,13 @@
72
72
  <field name="text">Missing a platform means incomplete knowledge base generation</field>
73
73
  </block>
74
74
 
75
+ <block type="rule" id="S0-R2" level="mandatory" desc="platformId format constraints">
76
+ <field name="text">platformId MUST use format: {platformType}-{techStack}</field>
77
+ <field name="text">platformType values: web (NOT frontend), mobile, desktop, backend</field>
78
+ <field name="text">✓ Correct: backend-fastapi, web-vue3, mobile-uniapp, desktop-electron</field>
79
+ <field name="text">✗ Wrong: backend-system, frontend-web, mobile-app, frontend-vue3</field>
80
+ </block>
81
+
75
82
  <!-- Step 1: Scan backend modules -->
76
83
  <block type="task" id="S0-B1" action="run-script" status="pending" desc="Scan backend module directories">
77
84
  <field name="command">Get-ChildItem -Path "${source_path}" -Filter "yudao-module-*" -Directory</field>
@@ -35,7 +35,7 @@ All generated documents must match the user's language. Detect the language from
35
35
  | `entryDirsFile` | string | Yes | Absolute path to entry-dirs JSON file |
36
36
  | `outputDir` | string | Yes | Absolute path to features JSON output directory |
37
37
  | `workspace_path` | string | Yes | Absolute path to speccrew-workspace directory |
38
- | `sync_state_bizs_dir` | string | Yes | Absolute path to sync-state/knowledge-bizs directory |
38
+ | `sync_state_bizs_dir` | string | Yes | Absolute path to knowledges/base/sync-state/knowledge-bizs/ (✓ correct: .../knowledges/base/sync-state/knowledge-bizs/ | ✗ wrong: .../knowledges/bizs/sync-state/knowledge-bizs/) |
39
39
  | `language` | string | Yes | Language code for generated content |
40
40
 
41
41
  ## Output
@@ -61,7 +61,7 @@ All generated documents must match the user's language. Detect the language from
61
61
  <field name="entryDirsFile" required="true" type="string" desc="Absolute path to entry-dirs JSON file"/>
62
62
  <field name="outputDir" required="true" type="string" desc="Absolute path to features JSON output directory"/>
63
63
  <field name="workspace_path" required="true" type="string" desc="Absolute path to speccrew-workspace directory"/>
64
- <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to sync-state/knowledge-bizs directory"/>
64
+ <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to knowledges/base/sync-state/knowledge-bizs/ (✓ correct: .../knowledges/base/sync-state/knowledge-bizs/ | ✗ wrong: .../knowledges/bizs/sync-state/knowledge-bizs/)"/>
65
65
  <field name="language" required="true" type="string" desc="Language code for generated content"/>
66
66
  </block>
67
67
 
@@ -14,7 +14,7 @@
14
14
  <field name="entryDirsFile" required="true" type="string" desc="Absolute path to entry-dirs JSON file"/>
15
15
  <field name="outputDir" required="true" type="string" desc="Absolute path to features JSON output directory"/>
16
16
  <field name="workspace_path" required="true" type="string" desc="Absolute path to speccrew-workspace directory"/>
17
- <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to sync-state/knowledge-bizs directory"/>
17
+ <field name="sync_state_bizs_dir" required="true" type="string" desc="Absolute path to knowledges/base/sync-state/knowledge-bizs/ (✓ correct: .../knowledges/base/sync-state/knowledge-bizs/ | ✗ wrong: .../knowledges/bizs/sync-state/knowledge-bizs/)"/>
18
18
  <field name="language" required="true" type="string" desc="Language code for generated content"/>
19
19
  </block>
20
20