@anhth2/spec-driven-dev-plugin 0.9.0 → 0.9.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.
@@ -450,13 +450,14 @@ Write `{paths.prd_dir}/{domain}/{TICKET-ID}-{slug}.md` using the structure below
450
450
 
451
451
  ## a. User Story
452
452
 
453
- As a {User role}
454
- I want to {User goal}
455
- So that {Business value}
453
+ - **As a** {User role}
454
+ - **I want to** {User goal}
455
+ - **So that** {Business value}
456
456
 
457
457
  ## b. Scope
458
458
 
459
- In Scope
459
+ **In Scope**
460
+
460
461
  - {Function 1}
461
462
  - {Function 2}
462
463
 
@@ -464,24 +465,36 @@ In Scope
464
465
 
465
466
  # 2. Acceptance Criteria
466
467
 
467
- AC1: {Acceptance criterion — testable, observable, no UI details}
468
- AC2: {Acceptance criterion}
468
+ - **AC1:** {Acceptance criterion — testable, observable, no UI details}
469
+ - **AC2:** {Acceptance criterion}
469
470
 
470
471
  ---
471
472
 
472
473
  # 3. Use Case
473
474
 
474
475
  #### {TICKET-ID}-UC1: {Use Case Name}
475
- Actor: {User performing the action}
476
- Description: {Business scenario description — 1 sentence}
477
- Pre-condition: {Condition that must be true BEFORE use case begins}
478
- Post-condition: {State / result AFTER use case completes}
479
476
 
480
- Business Rule
481
- | ID | Business Rule | Business Logic |
482
- |-------------------------|--------------------------------------|-------------------------------------------|
483
- | {TICKET-ID}-UC1-BR1 | {Rule WHAT the system must do} | - Logic 1<br/>- Logic 2<br/>- Logic 3 |
484
- | {TICKET-ID}-UC1-BR2 | {Rule} | - Logic |
477
+ - **Actor:** {User performing the action}
478
+ - **Description:** {Business scenario description — 1 sentence}
479
+ - **Pre-condition:** {Condition that must be true BEFORE use case begins}
480
+ - **Post-condition:** {State / result AFTER use case completes}
481
+
482
+ **Business Rule**
483
+
484
+ | ID | Business Rule |
485
+ |----|---------------|
486
+ | {TICKET-ID}-UC1-BR1 | {Rule — WHAT the system must do} |
487
+ | {TICKET-ID}-UC1-BR2 | {Rule} |
488
+
489
+ **Business Logic**
490
+
491
+ **{TICKET-ID}-UC1-BR1:**
492
+ - Logic 1
493
+ - Logic 2
494
+ - Logic 3
495
+
496
+ **{TICKET-ID}-UC1-BR2:**
497
+ - Logic
485
498
 
486
499
  ---
487
500
 
@@ -503,11 +516,16 @@ flowchart TD
503
516
 
504
517
  **Screen 1: {Screen Name}**
505
518
 
506
- | Component | Details |
507
- |----------------|-----------------------------------------------------------------|
508
- | **Screen** | {Screen name} |
509
- | **Components** | - {Component 1}<br/>- {Component 2}<br/>- {Component 3} |
510
- | **Actions** | - {Action 1} → {Result}<br/>- {Action 2} → {Result} |
519
+ **Screen:** {Screen name}
520
+
521
+ **Components:**
522
+ - {Component 1}
523
+ - {Component 2}
524
+ - {Component 3}
525
+
526
+ **Actions:**
527
+ - {Action 1} → {Result}
528
+ - {Action 2} → {Result}
511
529
 
512
530
  ---
513
531
 
@@ -557,6 +575,7 @@ flowchart TD
557
575
  - [ ] No banned terms (if dictionary exists)
558
576
  - [ ] User Flow includes error path / exception path
559
577
  - [ ] Wireframe covers all screens related to Use Cases
578
+ - [ ] **Định dạng (readability)**: User Story / AC / các field của UC (Actor, Description, Pre/Post-condition) viết dạng bullet `- **Label:** …` — mỗi ý MỘT dòng, KHÔNG viết các dòng liền nhau (sẽ bị dồn thành 1 đoạn khi render); có một dòng trống trước và sau mỗi bảng
560
579
 
561
580
  ## Changelog Section (append at end of PRD)
562
581
 
@@ -98,13 +98,14 @@ Write `{paths.prd_dir}/{domain}/{TICKET-ID}-{slug}.md` using the structure below
98
98
 
99
99
  ## a. User Story
100
100
 
101
- As a {User role}
102
- I want to {User goal}
103
- So that {Business value}
101
+ - **As a** {User role}
102
+ - **I want to** {User goal}
103
+ - **So that** {Business value}
104
104
 
105
105
  ## b. Scope
106
106
 
107
- In Scope
107
+ **In Scope**
108
+
108
109
  - {Function 1}
109
110
  - {Function 2}
110
111
 
@@ -112,24 +113,36 @@ In Scope
112
113
 
113
114
  # 2. Acceptance Criteria
114
115
 
115
- AC1: {Acceptance criterion — testable, observable, no UI details}
116
- AC2: {Acceptance criterion}
116
+ - **AC1:** {Acceptance criterion — testable, observable, no UI details}
117
+ - **AC2:** {Acceptance criterion}
117
118
 
118
119
  ---
119
120
 
120
121
  # 3. Use Case
121
122
 
122
123
  #### {TICKET-ID}-UC1: {Use Case Name}
123
- Actor: {User performing the action}
124
- Description: {Business scenario description — 1 sentence}
125
- Pre-condition: {Condition that must be true BEFORE use case begins}
126
- Post-condition: {State / result AFTER use case completes}
127
124
 
128
- Business Rule
129
- | ID | Business Rule | Business Logic |
130
- |-------------------------|--------------------------------------|-------------------------------------------|
131
- | {TICKET-ID}-UC1-BR1 | {Rule WHAT the system must do} | - Logic 1<br/>- Logic 2<br/>- Logic 3 |
132
- | {TICKET-ID}-UC1-BR2 | {Rule} | - Logic |
125
+ - **Actor:** {User performing the action}
126
+ - **Description:** {Business scenario description — 1 sentence}
127
+ - **Pre-condition:** {Condition that must be true BEFORE use case begins}
128
+ - **Post-condition:** {State / result AFTER use case completes}
129
+
130
+ **Business Rule**
131
+
132
+ | ID | Business Rule |
133
+ |----|---------------|
134
+ | {TICKET-ID}-UC1-BR1 | {Rule — WHAT the system must do} |
135
+ | {TICKET-ID}-UC1-BR2 | {Rule} |
136
+
137
+ **Business Logic**
138
+
139
+ **{TICKET-ID}-UC1-BR1:**
140
+ - Logic 1
141
+ - Logic 2
142
+ - Logic 3
143
+
144
+ **{TICKET-ID}-UC1-BR2:**
145
+ - Logic
133
146
 
134
147
  ---
135
148
 
@@ -151,11 +164,16 @@ flowchart TD
151
164
 
152
165
  **Screen 1: {Screen Name}**
153
166
 
154
- | Component | Details |
155
- |----------------|-----------------------------------------------------------------|
156
- | **Screen** | {Screen name} |
157
- | **Components** | - {Component 1}<br/>- {Component 2}<br/>- {Component 3} |
158
- | **Actions** | - {Action 1} → {Result}<br/>- {Action 2} → {Result} |
167
+ **Screen:** {Screen name}
168
+
169
+ **Components:**
170
+ - {Component 1}
171
+ - {Component 2}
172
+ - {Component 3}
173
+
174
+ **Actions:**
175
+ - {Action 1} → {Result}
176
+ - {Action 2} → {Result}
159
177
 
160
178
  ---
161
179
 
@@ -205,6 +223,7 @@ flowchart TD
205
223
  - [ ] No banned terms (if dictionary exists)
206
224
  - [ ] User Flow includes error path / exception path
207
225
  - [ ] Wireframe covers all screens related to Use Cases
226
+ - [ ] **Định dạng (readability)**: User Story / AC / các field của UC (Actor, Description, Pre/Post-condition) viết dạng bullet `- **Label:** …` — mỗi ý MỘT dòng, KHÔNG viết các dòng liền nhau (sẽ bị dồn thành 1 đoạn khi render); có một dòng trống trước và sau mỗi bảng
208
227
 
209
228
  ## Changelog Section (append at end of PRD)
210
229
 
@@ -389,7 +389,9 @@ findings:
389
389
  - id: "F001"
390
390
  lens: "QA" # QA | DEV | SA | PO
391
391
  severity: "major" # critical | major | minor
392
- section: "§6. Acceptance Criteria"
392
+ section: "§6. Acceptance Criteria" # human-readable heading/section label
393
+ uc_id: "{TICKET-ID}-UC{N}" # UC this finding belongs to; "" if PRD-global (scope, metrics, problem statement)
394
+ quote: "{verbatim snippet copied EXACTLY from the PRD at the issue location, ≤120 chars}"
393
395
  finding: "{description of gap or issue}"
394
396
  suggestion: "{specific actionable improvement}"
395
397
  auto_fixable: false # true = AI applies in --resume; false = human must write decision in note
@@ -402,6 +404,12 @@ summary:
402
404
  recommendation: "APPROVED_WITH_MINOR_CHANGES | NEEDS_REVISION | BLOCKED"
403
405
  ```
404
406
 
407
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
408
+ > For every finding, copy a short **verbatim** `quote` straight from the PRD at the exact spot the
409
+ > issue occurs — do NOT paraphrase; it is matched against the document to locate the line. Set
410
+ > `uc_id` to the owning Use Case (or `""` for PRD-global findings). These let a reviewer click a
411
+ > finding in the Review Board and jump straight to the precise location in the source PRD.
412
+
405
413
  ## Report
406
414
 
407
415
  # Report Footer — Standard Command Output Format
@@ -37,7 +37,9 @@ findings:
37
37
  - id: "F001"
38
38
  lens: "QA" # QA | DEV | SA | PO
39
39
  severity: "major" # critical | major | minor
40
- section: "§6. Acceptance Criteria"
40
+ section: "§6. Acceptance Criteria" # human-readable heading/section label
41
+ uc_id: "{TICKET-ID}-UC{N}" # UC this finding belongs to; "" if PRD-global (scope, metrics, problem statement)
42
+ quote: "{verbatim snippet copied EXACTLY from the PRD at the issue location, ≤120 chars}"
41
43
  finding: "{description of gap or issue}"
42
44
  suggestion: "{specific actionable improvement}"
43
45
  auto_fixable: false # true = AI applies in --resume; false = human must write decision in note
@@ -50,6 +52,12 @@ summary:
50
52
  recommendation: "APPROVED_WITH_MINOR_CHANGES | NEEDS_REVISION | BLOCKED"
51
53
  ```
52
54
 
55
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
56
+ > For every finding, copy a short **verbatim** `quote` straight from the PRD at the exact spot the
57
+ > issue occurs — do NOT paraphrase; it is matched against the document to locate the line. Set
58
+ > `uc_id` to the owning Use Case (or `""` for PRD-global findings). These let a reviewer click a
59
+ > finding in the Review Board and jump straight to the precise location in the source PRD.
60
+
53
61
  ## Report
54
62
 
55
63
  {{include:steps/report-footer.md}}
@@ -563,6 +563,8 @@ findings:
563
563
  check_id: "P1" # P1-P5 for PRD; B1-B6 for BDD
564
564
  severity: "critical" # critical | major | minor
565
565
  section: "{section or scenario ID where issue was found}"
566
+ uc_id: "{UC-ID this finding belongs to — PRD: the UC heading; BDD: @trace.id; \"\" if global}"
567
+ quote: "{verbatim snippet copied EXACTLY from the reviewed file at the issue location, ≤120 chars}"
566
568
  finding: "{clear description of the issue}"
567
569
  suggestion: "{specific actionable fix — AI will apply this in --resume if accepted}"
568
570
  auto_fixable: true # true = AI can apply; false = human must write note in Review Board
@@ -576,6 +578,12 @@ summary:
576
578
  recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
577
579
  ```
578
580
 
581
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
582
+ > For every finding, copy a short **verbatim** `quote` straight from the reviewed file at the exact
583
+ > spot the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
584
+ > Set `uc_id` to the owning Use Case (`@trace.id` for BDD, the UC heading for PRD; `""` if global).
585
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
586
+
579
587
  ## Post-Analysis Routing
580
588
 
581
589
  After running all checks and writing the findings file:
@@ -211,6 +211,8 @@ findings:
211
211
  check_id: "P1" # P1-P5 for PRD; B1-B6 for BDD
212
212
  severity: "critical" # critical | major | minor
213
213
  section: "{section or scenario ID where issue was found}"
214
+ uc_id: "{UC-ID this finding belongs to — PRD: the UC heading; BDD: @trace.id; \"\" if global}"
215
+ quote: "{verbatim snippet copied EXACTLY from the reviewed file at the issue location, ≤120 chars}"
214
216
  finding: "{clear description of the issue}"
215
217
  suggestion: "{specific actionable fix — AI will apply this in --resume if accepted}"
216
218
  auto_fixable: true # true = AI can apply; false = human must write note in Review Board
@@ -224,6 +226,12 @@ summary:
224
226
  recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
225
227
  ```
226
228
 
229
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
230
+ > For every finding, copy a short **verbatim** `quote` straight from the reviewed file at the exact
231
+ > spot the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
232
+ > Set `uc_id` to the owning Use Case (`@trace.id` for BDD, the UC heading for PRD; `""` if global).
233
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
234
+
227
235
  ## Post-Analysis Routing
228
236
 
229
237
  After running all checks and writing the findings file:
@@ -554,6 +554,8 @@ findings:
554
554
  check_id: "T1" # T1–T7
555
555
  severity: "critical" # critical | major | minor
556
556
  section: "{section heading or component name where issue was found}"
557
+ uc_id: "{UC-ID}" # same as top-level uc_id (the UC this tech-doc designs)
558
+ quote: "{verbatim snippet copied EXACTLY from the tech-doc at the issue location, ≤120 chars}"
557
559
  finding: "{clear description of the violation or gap}"
558
560
  suggestion: "{specific fix — AI applies this in --resume if accepted}"
559
561
  auto_fixable: false # true = AI can apply; false = human must write decision in note
@@ -568,6 +570,11 @@ summary:
568
570
  sign_off_gate: "{blocked — pending: fe_team, app_team, sa | ready}"
569
571
  ```
570
572
 
573
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
574
+ > For every finding, copy a short **verbatim** `quote` straight from the tech-doc at the exact spot
575
+ > the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
576
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
577
+
571
578
  ## Report
572
579
 
573
580
  # Report Footer — Standard Command Output Format
@@ -202,6 +202,8 @@ findings:
202
202
  check_id: "T1" # T1–T7
203
203
  severity: "critical" # critical | major | minor
204
204
  section: "{section heading or component name where issue was found}"
205
+ uc_id: "{UC-ID}" # same as top-level uc_id (the UC this tech-doc designs)
206
+ quote: "{verbatim snippet copied EXACTLY from the tech-doc at the issue location, ≤120 chars}"
205
207
  finding: "{clear description of the violation or gap}"
206
208
  suggestion: "{specific fix — AI applies this in --resume if accepted}"
207
209
  auto_fixable: false # true = AI can apply; false = human must write decision in note
@@ -216,6 +218,11 @@ summary:
216
218
  sign_off_gate: "{blocked — pending: fe_team, app_team, sa | ready}"
217
219
  ```
218
220
 
221
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
222
+ > For every finding, copy a short **verbatim** `quote` straight from the tech-doc at the exact spot
223
+ > the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
224
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
225
+
219
226
  ## Report
220
227
 
221
228
  {{include:steps/report-footer.md}}
@@ -1 +1 @@
1
- 0.9.0
1
+ 0.9.1
@@ -450,13 +450,14 @@ Write `{paths.prd_dir}/{domain}/{TICKET-ID}-{slug}.md` using the structure below
450
450
 
451
451
  ## a. User Story
452
452
 
453
- As a {User role}
454
- I want to {User goal}
455
- So that {Business value}
453
+ - **As a** {User role}
454
+ - **I want to** {User goal}
455
+ - **So that** {Business value}
456
456
 
457
457
  ## b. Scope
458
458
 
459
- In Scope
459
+ **In Scope**
460
+
460
461
  - {Function 1}
461
462
  - {Function 2}
462
463
 
@@ -464,24 +465,36 @@ In Scope
464
465
 
465
466
  # 2. Acceptance Criteria
466
467
 
467
- AC1: {Acceptance criterion — testable, observable, no UI details}
468
- AC2: {Acceptance criterion}
468
+ - **AC1:** {Acceptance criterion — testable, observable, no UI details}
469
+ - **AC2:** {Acceptance criterion}
469
470
 
470
471
  ---
471
472
 
472
473
  # 3. Use Case
473
474
 
474
475
  #### {TICKET-ID}-UC1: {Use Case Name}
475
- Actor: {User performing the action}
476
- Description: {Business scenario description — 1 sentence}
477
- Pre-condition: {Condition that must be true BEFORE use case begins}
478
- Post-condition: {State / result AFTER use case completes}
479
476
 
480
- Business Rule
481
- | ID | Business Rule | Business Logic |
482
- |-------------------------|--------------------------------------|-------------------------------------------|
483
- | {TICKET-ID}-UC1-BR1 | {Rule WHAT the system must do} | - Logic 1<br/>- Logic 2<br/>- Logic 3 |
484
- | {TICKET-ID}-UC1-BR2 | {Rule} | - Logic |
477
+ - **Actor:** {User performing the action}
478
+ - **Description:** {Business scenario description — 1 sentence}
479
+ - **Pre-condition:** {Condition that must be true BEFORE use case begins}
480
+ - **Post-condition:** {State / result AFTER use case completes}
481
+
482
+ **Business Rule**
483
+
484
+ | ID | Business Rule |
485
+ |----|---------------|
486
+ | {TICKET-ID}-UC1-BR1 | {Rule — WHAT the system must do} |
487
+ | {TICKET-ID}-UC1-BR2 | {Rule} |
488
+
489
+ **Business Logic**
490
+
491
+ **{TICKET-ID}-UC1-BR1:**
492
+ - Logic 1
493
+ - Logic 2
494
+ - Logic 3
495
+
496
+ **{TICKET-ID}-UC1-BR2:**
497
+ - Logic
485
498
 
486
499
  ---
487
500
 
@@ -503,11 +516,16 @@ flowchart TD
503
516
 
504
517
  **Screen 1: {Screen Name}**
505
518
 
506
- | Component | Details |
507
- |----------------|-----------------------------------------------------------------|
508
- | **Screen** | {Screen name} |
509
- | **Components** | - {Component 1}<br/>- {Component 2}<br/>- {Component 3} |
510
- | **Actions** | - {Action 1} → {Result}<br/>- {Action 2} → {Result} |
519
+ **Screen:** {Screen name}
520
+
521
+ **Components:**
522
+ - {Component 1}
523
+ - {Component 2}
524
+ - {Component 3}
525
+
526
+ **Actions:**
527
+ - {Action 1} → {Result}
528
+ - {Action 2} → {Result}
511
529
 
512
530
  ---
513
531
 
@@ -557,6 +575,7 @@ flowchart TD
557
575
  - [ ] No banned terms (if dictionary exists)
558
576
  - [ ] User Flow includes error path / exception path
559
577
  - [ ] Wireframe covers all screens related to Use Cases
578
+ - [ ] **Định dạng (readability)**: User Story / AC / các field của UC (Actor, Description, Pre/Post-condition) viết dạng bullet `- **Label:** …` — mỗi ý MỘT dòng, KHÔNG viết các dòng liền nhau (sẽ bị dồn thành 1 đoạn khi render); có một dòng trống trước và sau mỗi bảng
560
579
 
561
580
  ## Changelog Section (append at end of PRD)
562
581
 
@@ -389,7 +389,9 @@ findings:
389
389
  - id: "F001"
390
390
  lens: "QA" # QA | DEV | SA | PO
391
391
  severity: "major" # critical | major | minor
392
- section: "§6. Acceptance Criteria"
392
+ section: "§6. Acceptance Criteria" # human-readable heading/section label
393
+ uc_id: "{TICKET-ID}-UC{N}" # UC this finding belongs to; "" if PRD-global (scope, metrics, problem statement)
394
+ quote: "{verbatim snippet copied EXACTLY from the PRD at the issue location, ≤120 chars}"
393
395
  finding: "{description of gap or issue}"
394
396
  suggestion: "{specific actionable improvement}"
395
397
  auto_fixable: false # true = AI applies in --resume; false = human must write decision in note
@@ -402,6 +404,12 @@ summary:
402
404
  recommendation: "APPROVED_WITH_MINOR_CHANGES | NEEDS_REVISION | BLOCKED"
403
405
  ```
404
406
 
407
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
408
+ > For every finding, copy a short **verbatim** `quote` straight from the PRD at the exact spot the
409
+ > issue occurs — do NOT paraphrase; it is matched against the document to locate the line. Set
410
+ > `uc_id` to the owning Use Case (or `""` for PRD-global findings). These let a reviewer click a
411
+ > finding in the Review Board and jump straight to the precise location in the source PRD.
412
+
405
413
  ## Report
406
414
 
407
415
  # Report Footer — Standard Command Output Format
@@ -563,6 +563,8 @@ findings:
563
563
  check_id: "P1" # P1-P5 for PRD; B1-B6 for BDD
564
564
  severity: "critical" # critical | major | minor
565
565
  section: "{section or scenario ID where issue was found}"
566
+ uc_id: "{UC-ID this finding belongs to — PRD: the UC heading; BDD: @trace.id; \"\" if global}"
567
+ quote: "{verbatim snippet copied EXACTLY from the reviewed file at the issue location, ≤120 chars}"
566
568
  finding: "{clear description of the issue}"
567
569
  suggestion: "{specific actionable fix — AI will apply this in --resume if accepted}"
568
570
  auto_fixable: true # true = AI can apply; false = human must write note in Review Board
@@ -576,6 +578,12 @@ summary:
576
578
  recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
577
579
  ```
578
580
 
581
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
582
+ > For every finding, copy a short **verbatim** `quote` straight from the reviewed file at the exact
583
+ > spot the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
584
+ > Set `uc_id` to the owning Use Case (`@trace.id` for BDD, the UC heading for PRD; `""` if global).
585
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
586
+
579
587
  ## Post-Analysis Routing
580
588
 
581
589
  After running all checks and writing the findings file:
@@ -554,6 +554,8 @@ findings:
554
554
  check_id: "T1" # T1–T7
555
555
  severity: "critical" # critical | major | minor
556
556
  section: "{section heading or component name where issue was found}"
557
+ uc_id: "{UC-ID}" # same as top-level uc_id (the UC this tech-doc designs)
558
+ quote: "{verbatim snippet copied EXACTLY from the tech-doc at the issue location, ≤120 chars}"
557
559
  finding: "{clear description of the violation or gap}"
558
560
  suggestion: "{specific fix — AI applies this in --resume if accepted}"
559
561
  auto_fixable: false # true = AI can apply; false = human must write decision in note
@@ -568,6 +570,11 @@ summary:
568
570
  sign_off_gate: "{blocked — pending: fe_team, app_team, sa | ready}"
569
571
  ```
570
572
 
573
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
574
+ > For every finding, copy a short **verbatim** `quote` straight from the tech-doc at the exact spot
575
+ > the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
576
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
577
+
571
578
  ## Report
572
579
 
573
580
  # Report Footer — Standard Command Output Format
@@ -102,9 +102,9 @@
102
102
  - {Business value}→ Giá trị nghiệp vụ mang lại (lý do tại sao người dùng cần điều này)
103
103
  -->
104
104
 
105
- As a {User role}
106
- I want to {User goal}
107
- So that {Business value}
105
+ - **As a** {User role}
106
+ - **I want to** {User goal}
107
+ - **So that** {Business value}
108
108
 
109
109
  ## b. Phạm vi
110
110
 
@@ -119,7 +119,8 @@ So that {Business value}
119
119
  - Viết ngắn gọn, súc tích, đủ để người đọc hiểu mà không cần giải thích thêm.
120
120
  -->
121
121
 
122
- In Scope
122
+ **In Scope**
123
+
123
124
  - {Chức năng thuộc feature}
124
125
 
125
126
  ---
@@ -141,9 +142,9 @@ In Scope
141
142
  - Chi tiết kỹ thuật hoặc logic xử lý nội bộ → thuộc Business Rule / Business Logic.
142
143
  -->
143
144
 
144
- AC1: {Điều kiện chấp nhận}
145
- AC2: {Điều kiện chấp nhận}
146
- AC3: {Điều kiện chấp nhận}
145
+ - **AC1:** {Điều kiện chấp nhận}
146
+ - **AC2:** {Điều kiện chấp nhận}
147
+ - **AC3:** {Điều kiện chấp nhận}
147
148
 
148
149
  ---
149
150
 
@@ -183,15 +184,24 @@ AC3: {Điều kiện chấp nhận}
183
184
  -->
184
185
 
185
186
  #### {TICKET_ID}-UC1: {Tên Use Case}
186
- Actor: {Người dùng thực hiện}
187
- Description: {Mô tả ngắn gọn kịch bản nghiệp vụ}
188
- Pre-condition: {Điều kiện cần trước khi Use Case bắt đầu}
189
- Post-condition: {Kết quả sau khi Use Case hoàn thành}
190
187
 
191
- Business Rule
192
- | ID | Business Rule | Business Logic |
193
- |----|---------------|----------------|
194
- | {TICKET_ID}-UC1-BR1 | | - Logic 1<br/>- Logic 2<br/>- Logic 3 |
188
+ - **Actor:** {Người dùng thực hiện}
189
+ - **Description:** {Mô tả ngắn gọn kịch bản nghiệp vụ}
190
+ - **Pre-condition:** {Điều kiện cần trước khi Use Case bắt đầu}
191
+ - **Post-condition:** {Kết quả sau khi Use Case hoàn thành}
192
+
193
+ **Business Rule**
194
+
195
+ | ID | Business Rule |
196
+ |----|---------------|
197
+ | {TICKET_ID}-UC1-BR1 | |
198
+
199
+ **Business Logic**
200
+
201
+ **{TICKET_ID}-UC1-BR1:**
202
+ - Logic 1
203
+ - Logic 2
204
+ - Logic 3
195
205
 
196
206
  ---
197
207
 
@@ -246,11 +256,16 @@ flowchart TD
246
256
 
247
257
  **Screen N: {Tên màn hình}**
248
258
 
249
- | Thành phần | Chi tiết |
250
- | -------------- | -------- |
251
- | **Screen** | {Tên màn hình} |
252
- | **Components** | - {Component 1} <br>- {Component 2} <br>- {Component 3} |
253
- | **Actions** | - {Hành động 1} → {Kết quả} <br>- {Hành động 2} → {Kết quả} |
259
+ **Screen:** {Tên màn hình}
260
+
261
+ **Components:**
262
+ - {Component 1}
263
+ - {Component 2}
264
+ - {Component 3}
265
+
266
+ **Actions:**
267
+ - {Hành động 1} → {Kết quả}
268
+ - {Hành động 2} → {Kết quả}
254
269
 
255
270
  <!-- Figma Design: {Link Figma — xóa dòng này nếu không có URL} -->
256
271
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anhth2/spec-driven-dev-plugin",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "AI-First Spec-Driven Development workflow plugin for Claude Code",
5
5
  "bin": {
6
6
  "spec-driven-dev": "./bin/index.js"
@@ -26,7 +26,14 @@
26
26
  "templates/",
27
27
  "ARCHITECTURE.md"
28
28
  ],
29
- "keywords": ["claude-code", "spec-driven", "ai-first", "bdd", "traceability", "workflow"],
29
+ "keywords": [
30
+ "claude-code",
31
+ "spec-driven",
32
+ "ai-first",
33
+ "bdd",
34
+ "traceability",
35
+ "workflow"
36
+ ],
30
37
  "author": "Edupia Team",
31
38
  "license": "MIT",
32
39
  "repository": {
@@ -102,9 +102,9 @@
102
102
  - {Business value}→ Giá trị nghiệp vụ mang lại (lý do tại sao người dùng cần điều này)
103
103
  -->
104
104
 
105
- As a {User role}
106
- I want to {User goal}
107
- So that {Business value}
105
+ - **As a** {User role}
106
+ - **I want to** {User goal}
107
+ - **So that** {Business value}
108
108
 
109
109
  ## b. Phạm vi
110
110
 
@@ -119,7 +119,8 @@ So that {Business value}
119
119
  - Viết ngắn gọn, súc tích, đủ để người đọc hiểu mà không cần giải thích thêm.
120
120
  -->
121
121
 
122
- In Scope
122
+ **In Scope**
123
+
123
124
  - {Chức năng thuộc feature}
124
125
 
125
126
  ---
@@ -141,9 +142,9 @@ In Scope
141
142
  - Chi tiết kỹ thuật hoặc logic xử lý nội bộ → thuộc Business Rule / Business Logic.
142
143
  -->
143
144
 
144
- AC1: {Điều kiện chấp nhận}
145
- AC2: {Điều kiện chấp nhận}
146
- AC3: {Điều kiện chấp nhận}
145
+ - **AC1:** {Điều kiện chấp nhận}
146
+ - **AC2:** {Điều kiện chấp nhận}
147
+ - **AC3:** {Điều kiện chấp nhận}
147
148
 
148
149
  ---
149
150
 
@@ -183,15 +184,24 @@ AC3: {Điều kiện chấp nhận}
183
184
  -->
184
185
 
185
186
  #### {TICKET_ID}-UC1: {Tên Use Case}
186
- Actor: {Người dùng thực hiện}
187
- Description: {Mô tả ngắn gọn kịch bản nghiệp vụ}
188
- Pre-condition: {Điều kiện cần trước khi Use Case bắt đầu}
189
- Post-condition: {Kết quả sau khi Use Case hoàn thành}
190
187
 
191
- Business Rule
192
- | ID | Business Rule | Business Logic |
193
- |----|---------------|----------------|
194
- | {TICKET_ID}-UC1-BR1 | | - Logic 1<br/>- Logic 2<br/>- Logic 3 |
188
+ - **Actor:** {Người dùng thực hiện}
189
+ - **Description:** {Mô tả ngắn gọn kịch bản nghiệp vụ}
190
+ - **Pre-condition:** {Điều kiện cần trước khi Use Case bắt đầu}
191
+ - **Post-condition:** {Kết quả sau khi Use Case hoàn thành}
192
+
193
+ **Business Rule**
194
+
195
+ | ID | Business Rule |
196
+ |----|---------------|
197
+ | {TICKET_ID}-UC1-BR1 | |
198
+
199
+ **Business Logic**
200
+
201
+ **{TICKET_ID}-UC1-BR1:**
202
+ - Logic 1
203
+ - Logic 2
204
+ - Logic 3
195
205
 
196
206
  ---
197
207
 
@@ -246,11 +256,16 @@ flowchart TD
246
256
 
247
257
  **Screen N: {Tên màn hình}**
248
258
 
249
- | Thành phần | Chi tiết |
250
- | -------------- | -------- |
251
- | **Screen** | {Tên màn hình} |
252
- | **Components** | - {Component 1} <br>- {Component 2} <br>- {Component 3} |
253
- | **Actions** | - {Hành động 1} → {Kết quả} <br>- {Hành động 2} → {Kết quả} |
259
+ **Screen:** {Tên màn hình}
260
+
261
+ **Components:**
262
+ - {Component 1}
263
+ - {Component 2}
264
+ - {Component 3}
265
+
266
+ **Actions:**
267
+ - {Hành động 1} → {Kết quả}
268
+ - {Hành động 2} → {Kết quả}
254
269
 
255
270
  <!-- Figma Design: {Link Figma — xóa dòng này nếu không có URL} -->
256
271