@relipa/ai-flow-kit 0.2.0 → 0.2.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/custom/rules/java/spring-boot-rules.md +209 -0
- package/custom/rules/javascript/nestjs-examples.md +41 -0
- package/custom/rules/javascript/nestjs-rules.md +42 -0
- package/custom/rules/javascript/nodejs-express-examples.md +35 -0
- package/custom/rules/javascript/nodejs-express-rules.md +49 -0
- package/custom/rules/javascript/reactjs-examples.md +380 -0
- package/custom/rules/javascript/reactjs-rules.md +173 -0
- package/custom/rules/php/php-examples.md +161 -0
- package/custom/rules/php/php-rules.md +127 -0
- package/custom/rules/python/python-django-examples.md +34 -0
- package/custom/rules/python/python-django-rules.md +48 -0
- package/custom/rules/python/python-examples.md +32 -0
- package/custom/rules/python/python-fastapi-examples.md +30 -0
- package/custom/rules/python/python-fastapi-rules.md +35 -0
- package/custom/rules/python/python-ml-examples.md +187 -0
- package/custom/rules/python/python-ml-rules.md +121 -0
- package/custom/rules/python/python-rules.md +58 -0
- package/custom/skills/ba-skills/skill-ba-qna-template-v1.md +4 -4
- package/custom/skills/ba-skills/skill-ba-qna-v1.md +6 -0
- package/custom/skills/create-system-requirement/SKILL.md +52 -16
- package/custom/skills/create-system-requirement/system-requirement-template-v1.md +128 -0
- package/custom/skills/impact-analysis/SKILL.md +106 -106
- package/custom/skills/report-customer/SKILL.md +99 -99
- package/custom/templates/nestjs.md +5 -72
- package/custom/templates/nodejs-express.md +5 -73
- package/custom/templates/php-plain.md +5 -261
- package/custom/templates/php.md +5 -261
- package/custom/templates/python-django.md +5 -71
- package/custom/templates/python-fastapi.md +5 -54
- package/custom/templates/python-ml.md +1 -269
- package/custom/templates/python.md +5 -79
- package/custom/templates/reactjs.md +5 -492
- package/custom/templates/shared/gate-workflow.md +1 -0
- package/custom/templates/shared/ml-gate-workflow.md +1 -0
- package/custom/templates/spring-boot.md +5 -224
- package/docs/common/CHANGELOG.md +20 -10
- package/package.json +1 -1
- package/scripts/init.js +143 -40
|
@@ -28,6 +28,11 @@ Ngôn ngữ output: auto-detect theo ngôn ngữ của ticket/task input — xem
|
|
|
28
28
|
- Điền cột Mức độ ảnh hưởng (🔴 Blocking / 🟡 Non-blocking) đã gắn ở Bước 2.
|
|
29
29
|
- **Bước 4: Nhận phản hồi và Cập nhật (Process Responses):**
|
|
30
30
|
- Khi nhận được câu trả lời: Đọc kỹ để đảm bảo câu trả lời đã giải quyết triệt để câu hỏi.
|
|
31
|
+
- Ghi nhận đầy đủ 3 cột theo dõi phản hồi cho mỗi câu đã trả lời:
|
|
32
|
+
- **Người trả lời** — mặc định tự lấy từ `git config user.email` (chạy `git config user.email`, fallback `git config user.name` nếu email trống) của người đang thao tác trong phiên hiện tại; nếu BA chỉ định rõ người trả lời khác (ví dụ trả lời hộ khách hàng, hoặc người phản hồi không phải chính người đang chat) thì dùng giá trị BA nhập, không tự lấy git config.
|
|
33
|
+
- **Ngày trả lời** — tự động lấy theo ngày giờ hệ thống hiện tại (không hỏi lại BA), định dạng `dd/mm/yyyy`.
|
|
34
|
+
- **Nguồn** — luôn hỏi BA nhập tay (ví dụ: "Khách hàng", "Nội bộ team", "Team Marketing", "Team Dev"...); không tự suy đoán hoặc đặt giá trị mặc định.
|
|
35
|
+
Câu hỏi còn **Open** để trống cả 3 cột này (`—`).
|
|
31
36
|
- Đã rõ ràng → đánh dấu **Confirmed**, cập nhật thông tin đó trực tiếp vào tài liệu phân tích hiện tại, xóa marker `[PENDING - QA-ID]` liên quan nếu có.
|
|
32
37
|
- Chưa rõ ràng / khách hàng chưa trả lời được ngay:
|
|
33
38
|
- 🟡 Non-blocking → giữ **Open** (deferred), tiếp tục các câu khác/gate tiếp theo bình thường, ghi marker `[PENDING - QA-ID]` tại vị trí nội dung liên quan trong tài liệu.
|
|
@@ -42,6 +47,7 @@ Ngôn ngữ output: auto-detect theo ngôn ngữ của ticket/task input — xem
|
|
|
42
47
|
- [ ] Mỗi câu hỏi đã có nhãn Mức độ ảnh hưởng (🔴 Blocking / 🟡 Non-blocking) chưa?
|
|
43
48
|
- [ ] Số lượng câu hỏi có phản ánh đúng độ phức tạp thực tế của yêu cầu, không bị gò về một số cố định không?
|
|
44
49
|
- [ ] Đã cập nhật đúng và đầy đủ tất cả câu trả lời của khách hàng vào tài liệu phân tích chưa? (Không bỏ sót bất kỳ điểm chốt nào).
|
|
50
|
+
- [ ] Mỗi câu hỏi **Confirmed** đã điền đủ Người trả lời, Ngày trả lời, Nguồn chưa?
|
|
45
51
|
- [ ] Mọi nội dung phụ thuộc câu hỏi còn Open đã có marker `[PENDING - QA-ID]` tại đúng vị trí, chưa bị tự suy diễn để lấp đầy?
|
|
46
52
|
|
|
47
53
|
## 5. Output mong đợi (Expected Output)
|
|
@@ -16,7 +16,7 @@ keywords: system requirement, uc spec, functionId, trace, acceptance test, excep
|
|
|
16
16
|
|
|
17
17
|
`create-system-requirement` is its own **task type** — 2 gates, selectable in the "Task type:" prompt of `ak use` (or auto-detected by `aiflow prompt "..."` — see `scripts/detect.js`). It is not invoked inline from within a coding ticket's session; it runs as its own task, tied to the `functionId` (not to a coding ticket).
|
|
18
18
|
|
|
19
|
-
- **Gate 1** = Steps 0–4 below (resolve UC Spec, investigate source code, draft, Q&A until every Gap is Confirmed).
|
|
19
|
+
- **Gate 1** = Steps 0–4 below (resolve UC Spec, investigate source code, draft, 1-1 traceability audit, Q&A until every Gap is Confirmed).
|
|
20
20
|
- **Gate 2** = Steps 5–7 below (split decision, write output, present for APPROVED).
|
|
21
21
|
|
|
22
22
|
**Hand-off from coding Gate 1 Pre-flight** (`read-study-requirement`, Step 0) when:
|
|
@@ -36,7 +36,7 @@ Any of these → coding Gate 1 shows a ⚠️ non-blocking warning and **continu
|
|
|
36
36
|
|
|
37
37
|
0. `git status --porcelain` → clean tree → `git pull --ff-only`; dirty tree → skip pull, notify DEV (same rule as `read-study-requirement` Step 1.0).
|
|
38
38
|
1. Resolve `functionId` from `.aiflow/context/current.json` (or ask DEV once if absent).
|
|
39
|
-
2. Locate the current UC Spec: `AK-Docs/02.BA-Specs/04.UC-Specs/[functionId]/UC-Spec_v{N}.md` (highest non-archived version). **Not found → STOP.** Tell DEV the UC Spec must exist and be
|
|
39
|
+
2. Locate the current UC Spec: `AK-Docs/02.BA-Specs/04.UC-Specs/[functionId]/UC-Spec_v{N}.md` (highest non-archived version). **Not found → STOP.** Tell DEV the UC Spec must exist and be PM-signed-off before System Requirement can be created — this skill never fabricates a UC.
|
|
40
40
|
3. Check `AK-Docs/02.BA-Specs/00.Requirements/[functionId]/System-Requirement_v*.md`:
|
|
41
41
|
- **None exists** → Mode = `CREATE` (go to Step 1).
|
|
42
42
|
- **Exists, `UC-Spec-Version` matches current UC Spec version** → nothing to do — this task is not needed; tell DEV the coding Gate 1 (`read-study-requirement`) can proceed directly.
|
|
@@ -64,6 +64,17 @@ Same methodology as `read-study-requirement` Step 1 (steps 4–5), reused here:
|
|
|
64
64
|
|
|
65
65
|
This step exists so System Requirement reflects what the system *can actually do today*, not just what the UC Spec says in the abstract.
|
|
66
66
|
|
|
67
|
+
#### Token/session cost control (investigate once, not once per rule)
|
|
68
|
+
|
|
69
|
+
This is the single most expensive step in the whole skill — most of the session budget goes here, not into drafting. The cost driver is almost always **re-opening the same file repeatedly**, once per Business Rule/Flow step, instead of investigating the module once and reusing the findings. Apply these levers, in priority order:
|
|
70
|
+
|
|
71
|
+
1. **GitNexus MCP first, always** — if `.mcp.json` has a `gitnexus` entry, `context()`/`query()`/`impact()` replace multi-file manual reads for that area entirely. Do not fall back to manual `grep`/`Read` for a module GitNexus already covers.
|
|
72
|
+
2. **Delegate the exploration itself to `Explore` sub-agents when GitNexus is unavailable or doesn't cover an area** — spawn one `Explore` agent per concern (e.g. one for "checkout controller + transaction boundaries", one for "cart/pricing repository", one for "frontend checkout flow"), run them in parallel, and have each return a condensed finding (file:line + 1–2 sentence behavior note per item) — not raw file contents. This keeps the bulk of the raw file reading inside disposable sub-agent context instead of the main session's context, which is the actual lever that controls session-token cost, independent of which model is running the main skill.
|
|
73
|
+
3. **Investigate per module/concern, not per Business Rule.** Read/query "the checkout transaction flow" once as a whole, then answer 10 Business Rules from that one pass — do not re-open `OrderController.php` from scratch for each BR that happens to touch it.
|
|
74
|
+
4. **Keep a running Investigation Notes table** (UC ref → file:line → 1-line finding) as you go, built from GitNexus/Explore output. Step 3 drafting must read from this table, not trigger a fresh file read per FR/VR/ER item. Only re-open a file if the table doesn't already answer the question at hand.
|
|
75
|
+
|
|
76
|
+
Two ways to spend the resulting savings, not to skip investigation: (a) let a cheaper/faster model draft Sections 1–5 from a *smaller, denser* Investigation Notes table instead of raw exploration noise, or (b) reinvest the savings into the Step 3.5 traceability audit below, which is where the Opus/Sonnet quality gap in practice tends to show up (missed edge cases), not in prose quality.
|
|
77
|
+
|
|
67
78
|
---
|
|
68
79
|
|
|
69
80
|
### Step 3: Draft Content — Translate UC → System Requirement [Gate 1]
|
|
@@ -82,10 +93,10 @@ For every row in the UC Spec's Main Flow, Alternative/Exception Flows, and Busin
|
|
|
82
93
|
|
|
83
94
|
Every item is a stack of layers, each aimed at a different reader — write each layer, don't blend them:
|
|
84
95
|
|
|
85
|
-
1. **Requirement** — the system behavior in plain business language. No framework names, class names, method names, or library calls (`Rule::unique`, `FormRequest`, `Middleware`, `permission_handle()`, enum class names, etc.). PM
|
|
96
|
+
1. **Requirement** — the system behavior in plain business language. No framework names, class names, method names, or library calls (`Rule::unique`, `FormRequest`, `Middleware`, `permission_handle()`, enum class names, etc.). PM must be able to read this layer alone and understand what the system does.
|
|
86
97
|
- ❌ `Rule::unique(...)` → ✅ "The system validates that the Tag name is unique among active Tags."
|
|
87
98
|
- ❌ `permission_handle()` → ✅ "Only users with CREATE permission can create Tags."
|
|
88
|
-
- When a technical concept (e.g. an enum) has a business meaning, state the business impact first (e.g. "Newly created Tags are assigned the default status PENDING") and put the raw technical value in Implementation Reference as a `Tech Reference:` line — **never invent or assume what an enum/status value means in business terms unless the
|
|
99
|
+
- When a technical concept (e.g. an enum) has a business meaning, state the business impact first (e.g. "Newly created Tags are assigned the default status PENDING") and put the raw technical value in Implementation Reference as a `Tech Reference:` line — **never invent or assume what an enum/status value means in business terms unless the PM has confirmed it**; if unconfirmed, ask in Step 4 or leave it as the raw value with a Gap/Assumption tag. Every `Tech Reference:` line also gets a row in Section 6.2 (Glossary / Term Mapping) — write it once there, don't leave it scattered only inside individual items.
|
|
89
100
|
2. **System Behavior** — how the system processes it, still in plain language (conditions, order of checks, what triggers what). This is what BA/Tester use to write test cases.
|
|
90
101
|
3. **Error Response** (Validation Rules and Exception & Error Handling only) — the expected result for Tester: keep the HTTP status code (never drop it — Tester needs it), paired with a friendly label and the user-facing message, e.g. `HTTP 422 (Validation Error) — "..."`.
|
|
91
102
|
4. **Implementation Reference** — file/class/method/framework rule, for Developer cross-check only. This is where all the technical detail from Step 2 belongs — it never appears in layers 1–2.
|
|
@@ -96,12 +107,28 @@ Classify every item as **Gap** (missing entirely) / **Assumption** (inferred, un
|
|
|
96
107
|
|
|
97
108
|
---
|
|
98
109
|
|
|
110
|
+
### Step 3.5: Traceability Verification — 1-1 Gap Audit [Gate 1]
|
|
111
|
+
|
|
112
|
+
Step 3 asks for a traced source on every item *while drafting*, but drafting under time/token pressure is not a reliable substitute for actually checking. Run this as a separate, explicit pass over the finished draft — using Section 0 (Traceability Matrix) as the working artifact — before opening Q&A in Step 4. This is a checklist walk, not a re-investigation; it should be cheap.
|
|
113
|
+
|
|
114
|
+
**Direction A — UC Spec → System Requirement (coverage: did we forget anything?):** Walk every row of the UC Spec read in Step 1 — each Main/Alternative/Exception Flow step, each Business Rule, each NFR, each Pre/Post-Condition — and confirm the Traceability Matrix lists at least one FR/NFR/VR/ER against it.
|
|
115
|
+
- Listed → leave as is.
|
|
116
|
+
- Missing → **Gap — Missing Coverage.** Add a row to Section 7 tagged `Gap` citing the UC reference, and add it to the Step 4 Q&A queue. Do not invent an item just to fill the matrix cell, and do not quietly drop the row.
|
|
117
|
+
|
|
118
|
+
**Direction B — System Requirement → UC Spec (grounding: did we invent anything?):** Walk every FR/NFR/VR/ER/AT item drafted in Sections 1–5 and re-check its `Traced UC Ref`/`Traced UC BR`/`Requirement Coverage` line against the actual UC Spec text from Step 1 (not from memory of having read it).
|
|
119
|
+
- Traces to real content → leave as is.
|
|
120
|
+
- Doesn't trace to anything that's actually there (invented, or drifted onto an unrelated UC item) → **Gap — Unsupported Item.** Either correct the trace to the right UC reference, or if truly ungrounded, remove the item and note why in Section 7/Change Log.
|
|
121
|
+
|
|
122
|
+
Record the result as two counts — `UC items matched: X/Y` and `Unsupported items removed: Z` — and carry them into the Gate 2 prompt (Step 7). Any finding from this pass is a Gap and follows the same hard rule as Step 4 below: **do not proceed to Gate 2 while it's unresolved** — either resolve it via Q&A or get an explicit DEV/PM acknowledgement that it's accepted as a known, tracked gap (never a silent pass-through).
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
99
126
|
### Step 4: Clarify via Q&A (ask until Confirmed) [Gate 1]
|
|
100
127
|
|
|
101
|
-
- Ask **one question at a time**, prioritizing unresolved Assumptions/Gaps from Step 3.
|
|
102
|
-
- **Do not run `aiflow task next` into Gate 2 while any Gap remains unresolved.** This is the hard rule from proposal #7 — no fabrication, no "reasonable default" for missing UC content. If DEV genuinely cannot answer (needs
|
|
128
|
+
- Ask **one question at a time**, prioritizing unresolved Assumptions/Gaps from Step 3 and any coverage/grounding Gaps surfaced by Step 3.5.
|
|
129
|
+
- **Do not run `aiflow task next` into Gate 2 while any Gap remains unresolved.** This is the hard rule from proposal #7 — no fabrication, no "reasonable default" for missing UC content. If DEV genuinely cannot answer (needs PM), stop and record it as an unresolved Gap in Section 7 rather than guessing.
|
|
103
130
|
- Do NOT invoke `superpowers:brainstorming` (same reason as `read-study-requirement`: its terminal state bypasses this gate's approval).
|
|
104
|
-
- All Gaps Confirmed → present a short Gate 1 summary, wait for DEV to run `aiflow task next` before continuing to Step 5.
|
|
131
|
+
- All Gaps Confirmed (including Step 3.5's) → present a short Gate 1 summary, wait for DEV to run `aiflow task next` before continuing to Step 5.
|
|
105
132
|
|
|
106
133
|
---
|
|
107
134
|
|
|
@@ -140,10 +167,11 @@ Save to `AK-Docs/02.BA-Specs/00.Requirements/[functionId]/System-Requirement_v{N
|
|
|
140
167
|
## Executive Summary
|
|
141
168
|
- **Purpose:** [1 sentence — what this document covers and why it exists]
|
|
142
169
|
- **Implementation status:** [e.g. Not started / In progress / Matches UC Spec v{N}]
|
|
170
|
+
- **Traceability coverage (from Step 3.5 audit):** [X]/[Y] UC Spec items have a matching System Requirement item · [Z] unsupported item(s) removed
|
|
143
171
|
- **Key deviations from UC Spec:** [bullet list of Deviation-tagged items, or "None identified"]
|
|
144
|
-
- **Action needed from
|
|
172
|
+
- **Action needed from PM:** [bullet list of unresolved Gaps/Assumptions needing PM input, or "None — ready for Dev handoff"]
|
|
145
173
|
|
|
146
|
-
> This section alone should give PM
|
|
174
|
+
> This section alone should give PM the full picture in about 30 seconds — everything below is supporting detail for BA/Tester/Dev.
|
|
147
175
|
|
|
148
176
|
---
|
|
149
177
|
|
|
@@ -156,7 +184,7 @@ Save to `AK-Docs/02.BA-Specs/00.Requirements/[functionId]/System-Requirement_v{N
|
|
|
156
184
|
|
|
157
185
|
## 1. Functional Requirements
|
|
158
186
|
|
|
159
|
-
Each item below is layered: **Requirement** (business language, for PM
|
|
187
|
+
Each item below is layered: **Requirement** (business language, for PM) → **System Behavior** (for BA/Tester) → **Implementation Reference** (for Dev, technical detail only — never appears in the layers above it).
|
|
160
188
|
|
|
161
189
|
### FR-01: [short business-behavior title]
|
|
162
190
|
- **Requirement:** [system behavior in business language, no framework/class/method names]
|
|
@@ -223,11 +251,11 @@ Summary only — deeper implementation detail belongs in each item's **Implement
|
|
|
223
251
|
| Test | ... |
|
|
224
252
|
|
|
225
253
|
### 6.2 Glossary / Term Mapping
|
|
226
|
-
Every `Tech Reference:` used in Sections 1–4 gets one row here — a single place to look up what a business term maps to in code, instead of hunting through every item. Only include terms with a
|
|
254
|
+
Every `Tech Reference:` used in Sections 1–4 gets one row here — a single place to look up what a business term maps to in code, instead of hunting through every item. Only include terms with a PM-confirmed business meaning (Decision) or the PM-unconfirmed raw value tagged accordingly — never a guessed meaning.
|
|
227
255
|
|
|
228
256
|
| Business Term | Technical Reference | Classification |
|
|
229
257
|
|---|---|---|
|
|
230
|
-
| [e.g. "default status PENDING"] | `TagStatusEnum::PENDING` | Decision (
|
|
258
|
+
| [e.g. "default status PENDING"] | `TagStatusEnum::PENDING` | Decision (PM-confirmed [date]) / Assumption (unconfirmed) |
|
|
231
259
|
|
|
232
260
|
### 6.3 External System Interfaces *(optional — include only if this UC integrates with a system outside the app's own UI/DB, e.g. third-party API, webhook, message queue)*
|
|
233
261
|
The UC Spec describes UI/business flow, not external integration contracts — capture those here when they exist. Omit this subsection entirely if the UC has no external interface.
|
|
@@ -271,6 +299,11 @@ Coverage:
|
|
|
271
299
|
Validation Rules: [N] Exception Handling: [N]
|
|
272
300
|
Open Gaps: [N] ← must be 0 to approve
|
|
273
301
|
|
|
302
|
+
Traceability Audit (Step 3.5):
|
|
303
|
+
UC Spec items matched 1-1: [X]/[Y]
|
|
304
|
+
Unsupported items removed: [Z]
|
|
305
|
+
⚠️ [N] unresolved gap(s) from this audit — see Section 7 (omit this line if 0)
|
|
306
|
+
|
|
274
307
|
Please review — matching 1-1 with UC Spec v{N} is the point of this document.
|
|
275
308
|
→ Type APPROVED (then run `aiflow task next`) to close this task and clear
|
|
276
309
|
the Gate 1 warning for tickets on this functionId
|
|
@@ -299,8 +332,9 @@ This does not bump `System-Requirement-Version` — the version stays tied to th
|
|
|
299
332
|
|
|
300
333
|
| Concern | Handled by |
|
|
301
334
|
|---|---|
|
|
302
|
-
| Source code investigation methodology | `read-study-requirement` Step 1 pattern (reused inline) / GitNexus MCP |
|
|
335
|
+
| Source code investigation methodology | `read-study-requirement` Step 1 pattern (reused inline) / GitNexus MCP / `Explore` sub-agents (Step 2 cost-control) |
|
|
303
336
|
| Gap/Assumption/Decision/Deviation classification | This skill (inline, Step 3 — output-only convention, distinct from `read-study-requirement` Step 1.75's Fact/Assumption/Gap) |
|
|
337
|
+
| 1-1 traceability audit (UC ↔ System Requirement) | This skill (inline, Step 3.5 — separate from Step 3's while-drafting tracing) |
|
|
304
338
|
| Q&A loop (one question at a time, no fabrication) | This skill (inline) |
|
|
305
339
|
| UC Spec structure/content | `skill-ba-uc-template-v1.md` (read-only reference, never edited by this skill) |
|
|
306
340
|
| Split decision | This skill (Step 5) |
|
|
@@ -312,10 +346,12 @@ This does not bump `System-Requirement-Version` — the version stays tied to th
|
|
|
312
346
|
## Mandatory Rules
|
|
313
347
|
|
|
314
348
|
- ❌ **DO NOT** create System Requirement content that isn't traced to the UC Spec or a DEV-confirmed answer — no invented Functional Requirements, error messages, or NFR numbers.
|
|
315
|
-
- ❌ **DO NOT** proceed to Step 5 while any Gap is unresolved.
|
|
349
|
+
- ❌ **DO NOT** proceed to Step 5 while any Gap is unresolved — this includes Step 3.5's traceability-audit Gaps, not just Step 3/Step 4's.
|
|
350
|
+
- ✅ **MUST** run Step 3.5's 1-1 traceability audit (both directions — UC→SR coverage and SR→UC grounding) before Q&A closes; report its counts in the Step 7 Gate 2 prompt so DEV/PM see explicit match numbers, not just a claim of completeness.
|
|
351
|
+
- ❌ **DO NOT** re-investigate a file from scratch for every Business Rule that touches it (Step 2) — investigate per module/concern once, keep an Investigation Notes table, and prefer GitNexus MCP or `Explore` sub-agent delegation over serial multi-file reads in the main session.
|
|
316
352
|
- ❌ **DO NOT** split into multiple files unless a Step 5 threshold is actually met — default is one file.
|
|
317
353
|
- ❌ **DO NOT** split to paper over a UC Spec that bundles multiple independent use cases — escalate to BA instead.
|
|
318
|
-
- ❌ **DO NOT** run this skill if the UC Spec isn't
|
|
354
|
+
- ❌ **DO NOT** run this skill if the UC Spec isn't PM-signed-off yet — this skill never substitutes for missing UC Spec content.
|
|
319
355
|
- ❌ **DO NOT** bump `System-Requirement-Version` independently of the UC Spec version.
|
|
320
356
|
- ✅ **MUST** read the full UC Spec (Step 1) before drafting anything.
|
|
321
357
|
- ✅ **MUST** investigate source code (Step 2) before drafting Exception/Error Handling or Existing System Context.
|
|
@@ -325,6 +361,6 @@ This does not bump `System-Requirement-Version` — the version stays tied to th
|
|
|
325
361
|
- ✅ **MUST** keep the HTTP status code in every `Error Response` line, paired with a friendly label and the user-facing message (e.g. `HTTP 422 (Validation Error) — "..."`) — never drop the code for readability.
|
|
326
362
|
- ✅ **MUST** tag each Acceptance Test with its `Requirement Coverage` (the FR/VR/ER IDs it exercises).
|
|
327
363
|
- ❌ **DO NOT** tag every item "Fact" — a plain fact is the unmarked default; only tag `Gap`, `Assumption`, `Decision`, or `Deviation` when one applies.
|
|
328
|
-
- ❌ **DO NOT** state or assume the business meaning of an enum/status value (e.g. what `PENDING` "means" for the business) unless the
|
|
364
|
+
- ❌ **DO NOT** state or assume the business meaning of an enum/status value (e.g. what `PENDING` "means" for the business) unless the PM has confirmed it — reference the raw technical value in `Implementation Reference` and tag it `Assumption` or `Gap` until confirmed.
|
|
329
365
|
- ✅ **MUST** mirror every `Tech Reference:` used in Sections 1–4 as a row in Section 6.2 (Glossary / Term Mapping) — don't leave the mapping only inside individual items.
|
|
330
366
|
- ❌ **DO NOT** include Section 6.3 (External System Interfaces) when the UC has no integration outside the app's own UI/DB — omit the subsection entirely rather than leaving an empty table.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Template Yêu Cầu Hệ Thống (System Requirement) — Phiên bản v1
|
|
2
|
+
|
|
3
|
+
Cấu trúc chuẩn của tài liệu System Requirement. Phải trace 1-1 với một phiên bản UC Spec cụ thể — không bao giờ bịa ra nội dung mà UC Spec không có.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tài Liệu Yêu Cầu Hệ Thống: [functionId] — [Tên Chức Năng]
|
|
8
|
+
|
|
9
|
+
**Ngày tạo (Date):** [YYYY-MM-DD]
|
|
10
|
+
**Phiên bản System Requirement (System-Requirement-Version):** v{N}
|
|
11
|
+
**Phiên bản UC Spec tham chiếu (UC-Spec-Version):** [functionId] @ v{N} <!-- BẮT BUỘC — mốc khớp 1-1 -->
|
|
12
|
+
**UC Spec nguồn (Source UC Spec):** AK-Docs/02.BA-Specs/04.UC-Specs/[functionId]/UC-Spec_v{N}.md
|
|
13
|
+
**Trạng thái (Status):** ⏸️ Waiting for Approval
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Tóm tắt điều hành (Executive Summary)
|
|
18
|
+
- **Mục đích (Purpose):** [1 câu — tài liệu này bao gồm gì và vì sao nó tồn tại]
|
|
19
|
+
- **Tình trạng triển khai (Implementation status):** [ví dụ: Chưa bắt đầu / Đang triển khai / Khớp với UC Spec v{N}]
|
|
20
|
+
- **Độ khớp truy vết (Traceability coverage — từ audit Step 3.5):** [X]/[Y] mục UC Spec đã có System Requirement tương ứng · [Z] item bị gỡ vì không có căn cứ (unsupported)
|
|
21
|
+
- **Các sai khác chính so với UC Spec (Key deviations from UC Spec):** [danh sách các mục được gắn nhãn Deviation, hoặc "Không phát hiện sai khác"]
|
|
22
|
+
- **Hành động cần từ PM (Action needed from PM):** [danh sách các Gap/Assumption chưa được giải quyết cần PM xác nhận, hoặc "Không có — sẵn sàng chuyển giao cho Dev"]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 0. Ma trận truy vết (Traceability Matrix)
|
|
28
|
+
| Tham chiếu UC (Flow / BR) | Mục System Requirement tương ứng |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Main Flow bước 3 | FR-01 |
|
|
31
|
+
| Exception Flow B | FR-05, ER-02 |
|
|
32
|
+
| BR1.1 | VR-01 |
|
|
33
|
+
|
|
34
|
+
## 1. Yêu Cầu Chức Năng (Functional Requirements)
|
|
35
|
+
|
|
36
|
+
Mỗi mục dưới đây có 3 tầng: **Requirement** (ngôn ngữ nghiệp vụ, dành cho PM) → **System Behavior** (dành cho BA/Tester) → **Implementation Reference** (chi tiết kỹ thuật, chỉ dành cho Dev — không bao giờ xuất hiện ở 2 tầng phía trên).
|
|
37
|
+
|
|
38
|
+
### FR-01: [tên ngắn gọn mô tả hành vi nghiệp vụ]
|
|
39
|
+
- **Requirement:** [hành vi hệ thống bằng ngôn ngữ nghiệp vụ, không dùng tên framework/class/method]
|
|
40
|
+
- **System Behavior:** [hệ thống xử lý như thế nào — điều kiện, thứ tự kiểm tra]
|
|
41
|
+
- **Traced UC Ref:** Main Flow #3
|
|
42
|
+
- **Classification:** [Gap | Assumption | Decision | Deviation — bỏ dòng này nếu là một fact đơn thuần]
|
|
43
|
+
- **Implementation Reference:** [file:line / class / method]
|
|
44
|
+
|
|
45
|
+
<!-- lặp lại FR-02, FR-03, ... theo cùng cấu trúc trên -->
|
|
46
|
+
|
|
47
|
+
## 2. Yêu Cầu Phi Chức Năng (Non-Functional Requirements)
|
|
48
|
+
|
|
49
|
+
### NFR-01: [tên ngắn]
|
|
50
|
+
- **Requirement:** [ngôn ngữ nghiệp vụ — ví dụ: yêu cầu về performance/security]
|
|
51
|
+
- **System Behavior:** [cách yêu cầu này được thực thi, bằng ngôn ngữ đơn giản]
|
|
52
|
+
- **Traced UC Ref:** BR3.1
|
|
53
|
+
- **Classification:** [Gap | Assumption | Decision | Deviation — bỏ nếu là fact đơn thuần]
|
|
54
|
+
- **Implementation Reference:** [file:line / class / method]
|
|
55
|
+
|
|
56
|
+
## 3. Quy Tắc Nghiệp Vụ → Quy Tắc Kiểm Tra Hợp Lệ (Business Rules → Validation Rules)
|
|
57
|
+
|
|
58
|
+
### VR-01: [tên ngắn]
|
|
59
|
+
- **Requirement:** [ví dụ: "Tên Tag phải là duy nhất trong số các Tag đang active."]
|
|
60
|
+
- **System Behavior:** [ví dụ: "Hệ thống kiểm tra tên Tag với toàn bộ Tag đang active trước khi lưu."]
|
|
61
|
+
- **Error Response:** HTTP 422 (Validation Error) — "[thông báo hiển thị cho người dùng]"
|
|
62
|
+
- **Traced UC BR:** BR1.1
|
|
63
|
+
- **Classification:** [Gap | Assumption | Decision | Deviation — bỏ nếu là fact đơn thuần]
|
|
64
|
+
- **Implementation Reference:** [ví dụ: `Rule::unique(...)` trong `StoreTagRequest`]
|
|
65
|
+
|
|
66
|
+
## 4. Xử Lý Ngoại Lệ & Lỗi (Exception & Error Handling)
|
|
67
|
+
|
|
68
|
+
### ER-01: [điều kiện kích hoạt, bằng ngôn ngữ nghiệp vụ]
|
|
69
|
+
- **Requirement:** [ví dụ: "Chỉ người dùng có quyền CREATE mới được tạo Tag."]
|
|
70
|
+
- **System Behavior:** [ví dụ: "Request bị từ chối vì người gọi không có quyền cần thiết."]
|
|
71
|
+
- **Error Response:** HTTP 403 (Forbidden) — "[thông báo hiển thị cho người dùng]"
|
|
72
|
+
- **Traced Exception Flow:** Exception Flow B
|
|
73
|
+
- **Classification:** [Gap | Assumption | Decision | Deviation — bỏ nếu là fact đơn thuần]
|
|
74
|
+
- **Implementation Reference:** [error code/class/middleware hiện có]
|
|
75
|
+
|
|
76
|
+
## 5. Kịch Bản Kiểm Thử Chấp Nhận (Acceptance Test Scenarios)
|
|
77
|
+
### AT-01: [Tên kịch bản] (Main Flow)
|
|
78
|
+
- **Given** ...
|
|
79
|
+
- **When** ...
|
|
80
|
+
- **Then** ...
|
|
81
|
+
- **Requirement Coverage:** FR-01, FR-03
|
|
82
|
+
|
|
83
|
+
### AT-02: [Tên kịch bản] (Exception Flow B)
|
|
84
|
+
- **Given** ...
|
|
85
|
+
- **When** ...
|
|
86
|
+
- **Then** ...
|
|
87
|
+
- **Requirement Coverage:** VR-01, ER-01
|
|
88
|
+
|
|
89
|
+
## 6. Bối Cảnh Hệ Thống Hiện Có (Existing System Context)
|
|
90
|
+
|
|
91
|
+
### 6.1 Tổng Quan Các Khu Vực Hệ Thống (System Areas Summary)
|
|
92
|
+
Chỉ tóm tắt — chi tiết triển khai sâu hơn thuộc về mục **Implementation Reference** của từng item ở trên, không đặt ở đây.
|
|
93
|
+
|
|
94
|
+
| Khu vực (Area) | Tóm tắt (Summary) |
|
|
95
|
+
|---|---|
|
|
96
|
+
| API | ... |
|
|
97
|
+
| Model | ... |
|
|
98
|
+
| Validation | ... |
|
|
99
|
+
| Migration | ... |
|
|
100
|
+
| Test | ... |
|
|
101
|
+
|
|
102
|
+
### 6.2 Bảng Thuật Ngữ / Ánh Xạ Thuật Ngữ (Glossary / Term Mapping)
|
|
103
|
+
Mỗi `Tech Reference:` được dùng trong Mục 1–4 phải có một dòng tương ứng ở đây — một nơi duy nhất để tra thuật ngữ nghiệp vụ ánh xạ sang cái gì trong code, thay vì phải lục từng item. Chỉ đưa vào các thuật ngữ đã được PM xác nhận ý nghĩa nghiệp vụ (Decision) hoặc giá trị thô chưa được PM xác nhận nhưng đã gắn nhãn tương ứng — không bao giờ đoán ý nghĩa.
|
|
104
|
+
|
|
105
|
+
| Thuật Ngữ Nghiệp Vụ (Business Term) | Tham Chiếu Kỹ Thuật (Technical Reference) | Classification |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| [ví dụ: "trạng thái mặc định PENDING"] | `TagStatusEnum::PENDING` | Decision (PM xác nhận ngày [date]) / Assumption (chưa xác nhận) |
|
|
108
|
+
|
|
109
|
+
### 6.3 Giao Diện Với Hệ Thống Ngoài (External System Interfaces) *(tùy chọn — chỉ có khi UC này tích hợp với hệ thống bên ngoài UI/DB của app, ví dụ third-party API, webhook, message queue)*
|
|
110
|
+
UC Spec chỉ mô tả luồng UI/nghiệp vụ, không mô tả hợp đồng tích hợp bên ngoài — mục này ghi lại các tích hợp đó nếu có. Bỏ hẳn mục này nếu UC không có giao diện bên ngoài nào.
|
|
111
|
+
|
|
112
|
+
| Giao diện (Interface) | Chiều (Direction) | Protocol/Format | Ghi chú (Note) |
|
|
113
|
+
|---|---|---|---|
|
|
114
|
+
| [ví dụ: Payment Gateway API] | Outbound | REST/JSON | ... |
|
|
115
|
+
|
|
116
|
+
## 7. Giả Định / Điểm Thiếu / Quyết Định / Sai Khác (Assumptions / Gaps / Decisions / Deviations)
|
|
117
|
+
Chỉ những item được gắn nhãn Gap / Assumption / Decision / Deviation mới xuất hiện ở đây — một fact đơn thuần là trạng thái mặc định (không gắn nhãn) của mọi item ở trên và không lặp lại trong bảng này.
|
|
118
|
+
|
|
119
|
+
| Loại (Type) | Item | Cách xử lý (Resolution) |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
|
|
122
|
+
## 8. Nhật Ký Quyết Định (Decision Log)
|
|
123
|
+
[Câu hỏi đã đặt → quyết định/câu trả lời nhận được → ngày. Các Gap chưa giải quyết vẫn phải được liệt kê ở đây, không bao giờ bị bỏ qua âm thầm.]
|
|
124
|
+
|
|
125
|
+
## 9. Nhật Ký Thay Đổi (Change Log)
|
|
126
|
+
| Ngày (Date) | Ticket | Thay đổi (Change) | Ghi chú (Note) |
|
|
127
|
+
|---|---|---|---|
|
|
128
|
+
| [YYYY-MM-DD] | — | Tạo lần đầu từ UC Spec v{N} | |
|
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: impact-analysis
|
|
3
|
-
description: Analyze the impact scope when modifying logic or the database to ensure system-wide safety.
|
|
4
|
-
keywords: impact, refactor, breaking change, scope
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Impact Analysis
|
|
8
|
-
|
|
9
|
-
## When mandatory to run
|
|
10
|
-
|
|
11
|
-
- Modifying **Core Services / shared utilities** used in many places
|
|
12
|
-
- Changing **database schema** (add/rename/drop column, table)
|
|
13
|
-
- Changing **API response structure** (rename field, remove field)
|
|
14
|
-
- Changing **interfaces / contracts** between modules
|
|
15
|
-
- After fixing a bug — to ensure the fix doesn't break other parts
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Analysis Process
|
|
20
|
-
|
|
21
|
-
### Step 1: Find all usage (Dependency Map)
|
|
22
|
-
|
|
23
|
-
**Preferred — If GitNexus MCP is available** (`.mcp.json` has `gitnexus` entry):
|
|
24
|
-
```
|
|
25
|
-
impact("ClassName") → structured blast radius: callers, dependents, risk score
|
|
26
|
-
detect_changes() → reads current git diff, maps changed lines → affected symbols
|
|
27
|
-
```
|
|
28
|
-
- Use `impact()` when you know the class/function name being modified.
|
|
29
|
-
- Use `detect_changes()` when starting Gate 4 review — it auto-detects what changed from git diff without needing to specify names.
|
|
30
|
-
- One call replaces all grep commands below. Proceed directly to Step 2 with the result.
|
|
31
|
-
|
|
32
|
-
**Fallback — grep manually** (if GitNexus not configured):
|
|
33
|
-
```bash
|
|
34
|
-
# Find all files importing/calling the class/function being modified
|
|
35
|
-
grep -r "ClassName\|functionName\|methodName" --include="*.php" .
|
|
36
|
-
grep -r "ClassName\|functionName\|methodName" --include="*.java" .
|
|
37
|
-
grep -r "ClassName\|functionName\|methodName" --include="*.ts" .
|
|
38
|
-
|
|
39
|
-
# Check which routes/controllers trigger this service
|
|
40
|
-
grep -r "ServiceName" app/Http/Controllers/
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
List all:
|
|
44
|
-
- Controllers / Routes calling it directly
|
|
45
|
-
- Jobs / Commands / Events calling it indirectly
|
|
46
|
-
- Tests mocking/stubbing this class
|
|
47
|
-
- Frontend components calling related APIs
|
|
48
|
-
|
|
49
|
-
### Step 2: Evaluate each aspect
|
|
50
|
-
|
|
51
|
-
| Aspect | Checkpoint questions |
|
|
52
|
-
|-----------|---------------------|
|
|
53
|
-
| **Database / Cache** | Which queries are affected by schema changes? Which cache keys need flushing? |
|
|
54
|
-
| **Background Jobs** | Which Crons / Queues call this logic? Will they break? |
|
|
55
|
-
| **Import / Export** | Do bulk data flows use this field/logic? |
|
|
56
|
-
| **Permissions** | Are API / UI permission checks sufficient after the change? |
|
|
57
|
-
| **API / Mobile** | Will JSON responses lose fields? Do mobile clients need updates? |
|
|
58
|
-
| **Tests** | Which tests will fail? Which mocks/stubs need updating? |
|
|
59
|
-
|
|
60
|
-
### Step 3: Classify impact level
|
|
61
|
-
|
|
62
|
-
| Level | Definition | Action |
|
|
63
|
-
|-----|-----------|-----------|
|
|
64
|
-
| 🟢 Low | Only 1 file, no dependencies | Proceed |
|
|
65
|
-
| 🟡 Medium | 2–5 files, tests need updates | Review carefully before merging |
|
|
66
|
-
| 🔴 High | 6+ files, API breaking change, DB migration | Discuss with the team first |
|
|
67
|
-
| ⛔ Critical | Affects payment, auth, data integrity | Tech Lead review mandatory |
|
|
68
|
-
|
|
69
|
-
### Step 4: Export report
|
|
70
|
-
|
|
71
|
-
**Report structure:**
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
## Impact Analysis: [Change Name]
|
|
75
|
-
|
|
76
|
-
**Level:** 🟡 Medium
|
|
77
|
-
|
|
78
|
-
### Impact Scope
|
|
79
|
-
- [File/Class A] — [reason for impact]
|
|
80
|
-
- [File/Class B] — [reason for impact]
|
|
81
|
-
|
|
82
|
-
### Breaking changes
|
|
83
|
-
- [Describe breaking change if any]
|
|
84
|
-
|
|
85
|
-
### Tests to check after merge
|
|
86
|
-
- [ ] [Test case / screen 1]
|
|
87
|
-
- [ ] [Test case / screen 2]
|
|
88
|
-
- [ ] [Job/Command to test run]
|
|
89
|
-
|
|
90
|
-
### Notes for QA
|
|
91
|
-
[Specific points QA should pay attention to]
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Output language: auto-detect from the ticket/task input — see `custom/rules/output-language.md` (Vietnamese input → Vietnamese output; otherwise English).
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Completion Checklist
|
|
99
|
-
|
|
100
|
-
- [ ] Found all dependencies using grep/IDE search
|
|
101
|
-
- [ ] Checked Jobs, Events, and Crons
|
|
102
|
-
- [ ] Checked API response structure
|
|
103
|
-
- [ ] Checked tests
|
|
104
|
-
- [ ] Determined impact level (Low/Medium/High/Critical)
|
|
105
|
-
- [ ] Wrote impact report
|
|
106
|
-
- [ ] Notified the team if High/Critical
|
|
1
|
+
---
|
|
2
|
+
name: impact-analysis
|
|
3
|
+
description: Analyze the impact scope when modifying logic or the database to ensure system-wide safety.
|
|
4
|
+
keywords: impact, refactor, breaking change, scope
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Impact Analysis
|
|
8
|
+
|
|
9
|
+
## When mandatory to run
|
|
10
|
+
|
|
11
|
+
- Modifying **Core Services / shared utilities** used in many places
|
|
12
|
+
- Changing **database schema** (add/rename/drop column, table)
|
|
13
|
+
- Changing **API response structure** (rename field, remove field)
|
|
14
|
+
- Changing **interfaces / contracts** between modules
|
|
15
|
+
- After fixing a bug — to ensure the fix doesn't break other parts
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Analysis Process
|
|
20
|
+
|
|
21
|
+
### Step 1: Find all usage (Dependency Map)
|
|
22
|
+
|
|
23
|
+
**Preferred — If GitNexus MCP is available** (`.mcp.json` has `gitnexus` entry):
|
|
24
|
+
```
|
|
25
|
+
impact("ClassName") → structured blast radius: callers, dependents, risk score
|
|
26
|
+
detect_changes() → reads current git diff, maps changed lines → affected symbols
|
|
27
|
+
```
|
|
28
|
+
- Use `impact()` when you know the class/function name being modified.
|
|
29
|
+
- Use `detect_changes()` when starting Gate 4 review — it auto-detects what changed from git diff without needing to specify names.
|
|
30
|
+
- One call replaces all grep commands below. Proceed directly to Step 2 with the result.
|
|
31
|
+
|
|
32
|
+
**Fallback — grep manually** (if GitNexus not configured):
|
|
33
|
+
```bash
|
|
34
|
+
# Find all files importing/calling the class/function being modified
|
|
35
|
+
grep -r "ClassName\|functionName\|methodName" --include="*.php" .
|
|
36
|
+
grep -r "ClassName\|functionName\|methodName" --include="*.java" .
|
|
37
|
+
grep -r "ClassName\|functionName\|methodName" --include="*.ts" .
|
|
38
|
+
|
|
39
|
+
# Check which routes/controllers trigger this service
|
|
40
|
+
grep -r "ServiceName" app/Http/Controllers/
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
List all:
|
|
44
|
+
- Controllers / Routes calling it directly
|
|
45
|
+
- Jobs / Commands / Events calling it indirectly
|
|
46
|
+
- Tests mocking/stubbing this class
|
|
47
|
+
- Frontend components calling related APIs
|
|
48
|
+
|
|
49
|
+
### Step 2: Evaluate each aspect
|
|
50
|
+
|
|
51
|
+
| Aspect | Checkpoint questions |
|
|
52
|
+
|-----------|---------------------|
|
|
53
|
+
| **Database / Cache** | Which queries are affected by schema changes? Which cache keys need flushing? |
|
|
54
|
+
| **Background Jobs** | Which Crons / Queues call this logic? Will they break? |
|
|
55
|
+
| **Import / Export** | Do bulk data flows use this field/logic? |
|
|
56
|
+
| **Permissions** | Are API / UI permission checks sufficient after the change? |
|
|
57
|
+
| **API / Mobile** | Will JSON responses lose fields? Do mobile clients need updates? |
|
|
58
|
+
| **Tests** | Which tests will fail? Which mocks/stubs need updating? |
|
|
59
|
+
|
|
60
|
+
### Step 3: Classify impact level
|
|
61
|
+
|
|
62
|
+
| Level | Definition | Action |
|
|
63
|
+
|-----|-----------|-----------|
|
|
64
|
+
| 🟢 Low | Only 1 file, no dependencies | Proceed |
|
|
65
|
+
| 🟡 Medium | 2–5 files, tests need updates | Review carefully before merging |
|
|
66
|
+
| 🔴 High | 6+ files, API breaking change, DB migration | Discuss with the team first |
|
|
67
|
+
| ⛔ Critical | Affects payment, auth, data integrity | Tech Lead review mandatory |
|
|
68
|
+
|
|
69
|
+
### Step 4: Export report
|
|
70
|
+
|
|
71
|
+
**Report structure:**
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
## Impact Analysis: [Change Name]
|
|
75
|
+
|
|
76
|
+
**Level:** 🟡 Medium
|
|
77
|
+
|
|
78
|
+
### Impact Scope
|
|
79
|
+
- [File/Class A] — [reason for impact]
|
|
80
|
+
- [File/Class B] — [reason for impact]
|
|
81
|
+
|
|
82
|
+
### Breaking changes
|
|
83
|
+
- [Describe breaking change if any]
|
|
84
|
+
|
|
85
|
+
### Tests to check after merge
|
|
86
|
+
- [ ] [Test case / screen 1]
|
|
87
|
+
- [ ] [Test case / screen 2]
|
|
88
|
+
- [ ] [Job/Command to test run]
|
|
89
|
+
|
|
90
|
+
### Notes for QA
|
|
91
|
+
[Specific points QA should pay attention to]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Output language: auto-detect from the ticket/task input — see `custom/rules/output-language.md` (Vietnamese input → Vietnamese output; otherwise English).
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Completion Checklist
|
|
99
|
+
|
|
100
|
+
- [ ] Found all dependencies using grep/IDE search
|
|
101
|
+
- [ ] Checked Jobs, Events, and Crons
|
|
102
|
+
- [ ] Checked API response structure
|
|
103
|
+
- [ ] Checked tests
|
|
104
|
+
- [ ] Determined impact level (Low/Medium/High/Critical)
|
|
105
|
+
- [ ] Wrote impact report
|
|
106
|
+
- [ ] Notified the team if High/Critical
|