@educa-corp/sdd-framework 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/lint-trace.js +156 -1
- package/bin/self-check.js +0 -146
- package/bin/trace-schema.json +7 -3
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/generate-code.md +42 -0
- package/core/commands/propose-scenario.md +1 -1
- package/core/commands/qc-analyze.md +22 -260
- package/core/commands/qc-design-test.md +1 -1
- package/core/commands/qc-plan.md +4 -7
- package/core/commands/qc-run-test.md +1 -1
- package/core/commands/refine-prd.md +20 -47
- package/core/commands/report-bug.md +1 -1
- package/core/commands/review-context.md +1 -27
- package/core/commands/validate-traces.md +154 -3
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +2 -4
- package/core/skills/qc/qa-analyst/business-rules.md +4 -38
- package/core/skills/qc/qa-analyst/data-flow.md +3 -5
- package/core/skills/qc/qa-analyst/spec-breakdown.md +7 -9
- package/core/skills/qc/qa-designer/e2e/journey.md +2 -2
- package/core/skills/qc/qa-designer/exploratory/charter.md +1 -1
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
- package/core/skills/qc/qa-designer/functional/api.md +2 -2
- package/core/skills/qc/qa-designer/functional/gui-feature.md +2 -2
- package/core/skills/qc/qa-designer/functional/gui-screen.md +2 -2
- package/core/skills/qc/qa-designer/integration/api.md +2 -2
- package/core/skills/qc/qa-designer/integration/db.md +2 -2
- package/core/skills/qc/qa-designer/integration/gui.md +2 -2
- package/core/skills/qc/qa-designer/integration/kafka.md +2 -2
- package/core/skills/qc/qa-designer/non-functional.md +2 -2
- package/core/skills/qc/qa-planner/test-plan.md +10 -13
- package/core/skills/qc/qa-reviewer/script/e2e.md +1 -1
- package/core/skills/qc/qa-reviewer/script/exploratory.md +1 -1
- package/core/skills/qc/qa-reviewer/script/functional.md +1 -1
- package/core/skills/qc/qa-reviewer/script/integration.md +1 -1
- package/core/skills/qc/qa-reviewer/script/non-functional.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/functional.md +1 -1
- package/core/skills/qc/qa-reviewer/test-case/integration.md +2 -2
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +1 -1
- package/core/skills/qc/qa-runner/e2e.md +1 -1
- package/core/skills/qc/qa-runner/exploratory/session.md +1 -1
- package/core/skills/qc/qa-runner/functional/api.md +1 -1
- package/core/skills/qc/qa-runner/functional/gui-feature.md +1 -1
- package/core/skills/qc/qa-runner/functional/gui-screen.md +1 -1
- package/core/skills/qc/qa-runner/integration.md +1 -1
- package/core/skills/qc/qa-runner/non-functional.md +1 -1
- package/core/skills/qc/qa-runner/report/report.md +1 -1
- package/core/steps/review-fanout.md +1 -27
- package/core/templates/project-context.yaml +2 -2
- package/docs/02-concepts/pipeline-steps/08-qc-automation.md +2 -2
- package/docs/04-reference/commands.md +1 -1
- package/docs/explain/03-refine-prd.md +6 -8
- package/docs/explain/15-qc-analyze.md +7 -10
- package/docs/explain/16-qc-plan.md +2 -2
- package/package.json +3 -2
- package/bin/qc-base-map.json +0 -595
- package/core/skills/qc/qa-analyst/DOC_GAP.template.md +0 -117
- package/core/skills/qc/qa-analyst/exhaustive-gap-scanner.md +0 -174
- package/core/skills/qc/qa-analyst/spec-issue-reporter.md +0 -100
- package/core/skills/qc/qa-planner/risk-model.md +0 -106
- package/core/steps/gap-verify.md +0 -231
- package/docs/plans/qc-implementation-log.md +0 -1446
- package/docs/plans/qc-merge-plan.md +0 -502
- package/docs/plans/qc-sync-command.md +0 -358
package/core/steps/gap-verify.md
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
# Gap Verify — cổng thẩm định độc lập, chống finding bịa
|
|
2
|
-
|
|
3
|
-
**Vì sao có cái này:** `steps/review-fanout.md` chỉ có một chiều lực — vòng
|
|
4
|
-
completeness-critic ở Phase 2 luôn hỏi *"còn thiếu gì nữa?"*, nên nó đẩy **recall** lên
|
|
5
|
-
và **không có gì kéo precision lại**. Fan-out càng rộng, critic càng lặp, thì finding bịa
|
|
6
|
-
càng nhiều: khẳng định hành vi spec không nêu, trích evidence sai, hoặc gắn nhãn "gap"
|
|
7
|
-
cho thứ thực ra là chuyện làm-kỹ-test.
|
|
8
|
-
|
|
9
|
-
Bước này là nửa còn thiếu đó. Nó **mở lại tài liệu nguồn** và bắt mỗi finding tự chứng minh
|
|
10
|
-
trước khi được giữ.
|
|
11
|
-
|
|
12
|
-
> **Nguyên tắc tối thượng:** một finding chỉ hợp lệ khi có **ĐỦ 2 vế** —
|
|
13
|
-
> **(1)** spec nguồn nêu hoặc ngụ ý hành vi X, **VÀ** **(2)** không tài liệu nào trong nguồn
|
|
14
|
-
> trả lời/phủ X. Thiếu một trong hai → **không phải finding**.
|
|
15
|
-
|
|
16
|
-
> ⚠️ **Cấm dùng chính trường evidence/quote của finding làm bằng chứng.** Phải mở file nguồn
|
|
17
|
-
> và đọc lại đoạn được trích — evidence có thể bị diễn giải sai hoặc bịa. Đây là toàn bộ lý do
|
|
18
|
-
> bước này tồn tại; bỏ qua nó thì bước này chỉ là một vòng critic nữa.
|
|
19
|
-
|
|
20
|
-
*Ported từ `ui-automation-testing` — `skills/qa-tc-analyst/gap-verifier.md`.*
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Tham số lệnh gọi truyền vào
|
|
25
|
-
|
|
26
|
-
| Tham số | Bắt buộc | Nghĩa |
|
|
27
|
-
|---|:---:|---|
|
|
28
|
-
| `FINDINGS` | ✅ | Tập finding cần thẩm định. Chỉ xét cái đang ở trạng thái mở (`Open` / `pending`); bỏ qua cái đã đóng trừ khi được yêu cầu soát lại. |
|
|
29
|
-
| `EVIDENCE_ROOT` | ✅ | Nơi chứa **sự thật gốc** — mặc định `{paths.specs_dir}` (spec submodule của PO). Verifier chỉ được lấy căn cứ từ đây. |
|
|
30
|
-
| `VERDICT_FIELD` | ✅ | Ghi kết quả vào đâu. `/qc-analyze` → cột `Trạng thái` + `Câu trả lời` của bảng gap; `/refine-prd` · `/review-context` → `status` + `suggestion` của findings YAML. |
|
|
31
|
-
| `RERATE` | | `on` (mặc định) chạy GIAI ĐOẠN 1B — hiệu chỉnh mức độ. `off` bỏ qua, chỉ giữ/bỏ. |
|
|
32
|
-
|
|
33
|
-
> **Bỏ qua ở chế độ sub-agent:** nếu Gate Bước 0 đã set `_agent_mode: true`, orchestrator
|
|
34
|
-
> chịu trách nhiệm gọi bước này một lần trên tập finding đã hợp nhất — sub-agent **không**
|
|
35
|
-
> tự verify phần của mình (verify từng mảnh rời không thấy được T6 trùng lặp).
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## RÀNG BUỘC NGUỒN
|
|
40
|
-
|
|
41
|
-
- **Chỉ `EVIDENCE_ROOT`** làm căn cứ. **KHÔNG** dùng artifact nội bộ do chính pipeline sinh ra
|
|
42
|
-
(`{paths.qc_dir}/**`, `{paths.refinement_dir}/**`, test-case, report) — đó là vòng lặp:
|
|
43
|
-
lấy kết luận của mình làm bằng chứng cho mình.
|
|
44
|
-
- **Bỏ qua** — không đọc, không trích làm căn cứ — các section **Change Log**, **Appendix**,
|
|
45
|
-
và **Giả định AI / AI Assumptions** trong mọi tài liệu. Căn cứ chỉ lấy từ **thân bài**
|
|
46
|
-
(AC · BR · UC · Wireframe · Screen Spec · Scenario).
|
|
47
|
-
*Change log là "delta narrative", phải re-ground về thân bài; Appendix và Giả định AI là
|
|
48
|
-
ghi chú nháp, không phải nguồn chân lý.*
|
|
49
|
-
- Đọc **cả tài liệu gốc cấp trên** (`{paths.product_definitions_dir}/`) và **tài liệu liên quan**
|
|
50
|
-
(`{paths.business_dictionary}`, `{paths.core_entities}`) — một finding có thể đã được trả lời
|
|
51
|
-
ở tài liệu khác, không riêng spec đang xét.
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## 5 anti-pattern — nhận diện trước khi kết luận
|
|
56
|
-
|
|
57
|
-
| # | Anti-pattern | Dấu hiệu |
|
|
58
|
-
|---|---|---|
|
|
59
|
-
| **AP1** | Phạm vi tích hợp lẫn vào spec nghiệp vụ | Finding nói về API contract, queue, service-to-service, retry backend, webhook — thứ PRD đã khai "ngoài phạm vi" |
|
|
60
|
-
| **AP2** | Rule cha bị tính là thiếu ở con | *"PRD con không mô tả X"* mà X đã có trong `{paths.product_definitions_dir}/` — PRD con **kế thừa** cha theo thiết kế |
|
|
61
|
-
| **AP3** | Finding UI tạo ra mà chưa đọc design-spec | *"thiếu behavior/navigation/state X"* mà X được mô tả rõ trong design-spec §Actions / §Screen States |
|
|
62
|
-
| **AP4** | Bias "nhiều finding = làm kỹ" | Cố sinh nhiều để thể hiện thoroughness. **5 finding thật tốt hơn 22 finding với 20 cái ảo.** Không cần điền đủ K nếu thực tế chỉ có M < K |
|
|
63
|
-
| **AP5** | Trích từ nguồn cấm | Evidence tham chiếu §Giả định AI / AI Assumptions / Change Log |
|
|
64
|
-
| **AP6** | Nâng note thứ cấp thành finding | Một ghi chú *"nghi X lệch"* trong BDD/design-spec là **claim cần verify, KHÔNG phải bằng chứng**. Chưa mở nguồn sơ cấp (PRD·BR·contract·Figma) thì chưa được raise. Không mở được asset → ghi *"chưa verify — cần Designer xác nhận"*, KHÔNG khẳng định *"asset đang sai"* |
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 3 câu hỏi lọc bắt buộc
|
|
69
|
-
|
|
70
|
-
Mỗi finding phải vượt **cả ba**. Rớt bất kỳ câu nào → loại.
|
|
71
|
-
|
|
72
|
-
| Câu | Giữ khi | Rớt thì |
|
|
73
|
-
|---|---|---|
|
|
74
|
-
| **Q1** — *"X đã được spec ở design-spec / product-definition / tech-docs chưa?"* | **Chưa** — tìm khắp `EVIDENCE_ROOT` không thấy | `❌ INVALID — spec đã trả lời` |
|
|
75
|
-
| **Q2** — *"X có thuộc phạm vi spec này không?"* | **Có** — spec này đặc tả hành vi X | `❌ INVALID — ngoài phạm vi` |
|
|
76
|
-
| **Q3** — *"Người thực thi tự quyết được không cần PO/BA confirm?"* | **Không** — bắt buộc cần PO/BA chốt | `⚠️ RECLASSIFY` (xem T5d/T5e) |
|
|
77
|
-
|
|
78
|
-
> **Q3 là câu bảo vệ thời gian của PO.** Mọi thứ QC/dev tự quyết được mà vẫn đẩy lên PO
|
|
79
|
-
> đều là chi phí thuần — và tệ hơn, nó làm loãng những câu thật.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## GIAI ĐOẠN 1 — T1…T6 cho từng finding
|
|
84
|
-
|
|
85
|
-
Chạy tuần tự. Rớt bất kỳ test nào → không hợp lệ, ghi verdict tương ứng.
|
|
86
|
-
|
|
87
|
-
### T1 — Evidence có thật & đúng nội dung *(chống bịa trích dẫn)*
|
|
88
|
-
Mở đúng file/section mà finding trích. Tìm đoạn nguyên văn.
|
|
89
|
-
- **FAIL nếu:** trích dẫn không tồn tại · bị diễn giải sai lệch nghĩa · hoặc đoạn trích
|
|
90
|
-
**không thực sự nói điều finding khẳng định**.
|
|
91
|
-
- **FAIL nếu evidence trích từ Change Log / Appendix / Giả định AI** — nguồn cấm.
|
|
92
|
-
Phải re-ground về thân AC/BR/UC/Wireframe; thân bài không nói điều đó → finding sai.
|
|
93
|
-
- → `❌ INVALID — evidence bịa/sai/nguồn-cấm`
|
|
94
|
-
|
|
95
|
-
### T2 — Hành vi "thiếu" đúng là yêu cầu của spec *(chống bịa yêu cầu)*
|
|
96
|
-
Với finding MISSING/AMBIGUOUS: spec nguồn **có thật sự nêu hoặc ngụ ý** hành vi X không?
|
|
97
|
-
- **FAIL nếu:** X **không được tài liệu nào yêu cầu** — finding tự nghĩ ra một yêu cầu
|
|
98
|
-
rồi than spec không mô tả nó.
|
|
99
|
-
- → `❌ INVALID — yêu cầu tự bịa`
|
|
100
|
-
|
|
101
|
-
### T3 — Chưa được trả lời ở nơi khác *(chống finding đã cover)*
|
|
102
|
-
Tìm khắp `EVIDENCE_ROOT` (gồm tài liệu gốc + liên quan) xem câu hỏi đã có lời đáp chưa —
|
|
103
|
-
kể cả **trả lời ngầm định** bằng cách diễn đạt điều kiện.
|
|
104
|
-
- → `❌ INVALID — spec đã trả lời` *(kèm trích nguồn trả lời)*
|
|
105
|
-
|
|
106
|
-
### T3b — Mâu thuẫn thật hay chỉ khác UC/pha *(chỉ áp cho finding CONTRADICTORY)*
|
|
107
|
-
Xác định **UC + pha** của TỪNG rule (chuẩn bị / thực hiện / nộp / công bố / quay lại).
|
|
108
|
-
- **FAIL nếu:** hai rule thuộc **UC/pha khác nhau** → thường là ngữ cảnh **tuần tự** hoặc
|
|
109
|
-
**không giao nhau**, không phải mâu thuẫn tại cùng một thời điểm quyết định.
|
|
110
|
-
- → `❌ INVALID — khác UC/pha, không mâu thuẫn`
|
|
111
|
-
|
|
112
|
-
### T4 — Kế thừa tài liệu gốc *(chống "con không lặp lại cha")*
|
|
113
|
-
Rule đã định nghĩa trong `{paths.product_definitions_dir}/` thì việc spec con không lặp lại
|
|
114
|
-
**không phải finding**.
|
|
115
|
-
- → `❌ INVALID — đã có ở tài liệu gốc`
|
|
116
|
-
|
|
117
|
-
### T5 — Đúng loại *(chống phân loại nhầm)*
|
|
118
|
-
|
|
119
|
-
> ⚠️ **BẮT BUỘC xác định HƯỚNG trước khi gán loại** (tài liệu dẫn xuất so với PRD):
|
|
120
|
-
> - **THIẾU (dẫn xuất < PRD):** PRD yêu cầu màn/rule mà design/BDD KHÔNG có → `MISSING`.
|
|
121
|
-
> Xử lý = bổ sung vào tài liệu dẫn xuất.
|
|
122
|
-
> - **THỪA (dẫn xuất > PRD):** design/BDD **tự thêm** hành vi PRD không sanction →
|
|
123
|
-
> `CONTRADICTORY`, **KHÔNG dùng `MISSING`**. Xử lý = PO chốt giữ (định nghĩa hệ quả vào PRD)
|
|
124
|
-
> hay gỡ.
|
|
125
|
-
>
|
|
126
|
-
> Sai hướng = framing sai — gọi *"design thiếu"* trong khi design **thừa**.
|
|
127
|
-
|
|
128
|
-
| Nhóm | Nghĩa | Verdict |
|
|
129
|
-
|---|---|---|
|
|
130
|
-
| **(a)** Finding nghiệp vụ thật | spec nêu hành vi, không tài liệu nào phủ | `✅ VALID` — giữ mở |
|
|
131
|
-
| **(b)** Lệch đồng bộ (SYNC) | PRD đã cập nhật nhưng design-spec / BDD chưa phản ánh nội dung mới | `✅ VALID — SYNC` — **giữ mở**, mức Low–Medium, giao đội spec. KHÔNG đóng: cần track để cập nhật |
|
|
132
|
-
| **(c)** Metadata lệch | chênh version header, sai tên trace, format — **nội dung nghiệp vụ vẫn đúng** | `⚠️ RECLASSIFY — metadata` |
|
|
133
|
-
| **(d)** Làm-kỹ-test | thêm giá trị biên, liệt kê đủ ô decision table, biến thể dữ liệu — mà **rule/behavior đã được phủ** | `⚠️ RECLASSIFY — làm-kỹ-test` |
|
|
134
|
-
| **(e)** Tech/UX tự quyết | số lần retry, timeout/delay, loading spinner, animation, exact-copy nút/label, xử lý crash, cơ chế lưu session — thuộc Dev/Design, không phải PO/BA | `⚠️ RECLASSIFY — tech/UX tự quyết` |
|
|
135
|
-
|
|
136
|
-
> **Ranh giới SYNC vs metadata:** SYNC = *nội dung* PRD mới chưa được phản ánh vào tài liệu
|
|
137
|
-
> dẫn xuất (section còn thiếu). Metadata = chỉ số version lệch, nội dung đã đúng.
|
|
138
|
-
>
|
|
139
|
-
> **Ranh giới (c)(d) vs (a):** nếu **bản thân hành vi/rule đã có scenario hoặc mô tả phủ**,
|
|
140
|
-
> mọi đề xuất *"thêm ca biên / thêm giá trị / đủ ô bảng"* đều là (d), KHÔNG phải finding.
|
|
141
|
-
>
|
|
142
|
-
> **Ngoại lệ GIỮ ở (e):** *ý chính / khung thông điệp* của popup do PO chốt intent;
|
|
143
|
-
> và mọi ranh giới pháp lý / privacy.
|
|
144
|
-
|
|
145
|
-
### T6 — Không trùng lặp *(chống double-count)*
|
|
146
|
-
So với các finding còn lại: cùng root cause → merge, giữ một, ghi rõ *"merge từ …"*.
|
|
147
|
-
- → `🔁 MERGE → {id}`
|
|
148
|
-
|
|
149
|
-
**Qua sạch T1–T6 (+T3b nếu CONTRADICTORY) → `✅ VALID`.**
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## GIAI ĐOẠN 1B — Hiệu chỉnh mức độ *(chạy khi `RERATE=on`)*
|
|
154
|
-
|
|
155
|
-
T1–T6 quyết định finding **còn hay bỏ**; giai đoạn này quyết định cái còn lại **nặng hay nhẹ**.
|
|
156
|
-
Nhiều finding hợp lệ về mặt tồn tại nhưng **bị gán mức quá cao** — và một danh sách toàn
|
|
157
|
-
🔴 Critical thì không xếp được ưu tiên, tức mất luôn giá trị của cột mức độ.
|
|
158
|
-
|
|
159
|
-
Với **mỗi** finding còn mở, hạ mức hoặc chuyển sang "ghi chú phạm vi" nếu rơi vào một trong
|
|
160
|
-
năm nhóm sau — cả năm đều **không phải lỗ hổng của feature đang xét**:
|
|
161
|
-
|
|
162
|
-
| # | Nhóm | Dấu hiệu | Xử lý |
|
|
163
|
-
|---|---|---|---|
|
|
164
|
-
| **R1** | Lệch pha với tài liệu gốc | Mâu thuẫn thật giữa PRD con (đã duyệt, version mới hơn) và product-definition / dictionary về cùng một quan sát | → **Low**, nhãn *"master-sync"*. Con chi phối ⇒ không ảnh hưởng test. Không chặn |
|
|
165
|
-
| **R2** | Spec con tự rõ, chỉ nền domain lệch | PRD con phát biểu dứt khoát; chỉ dictionary/master mâu thuẫn | → **ghi chú phạm vi** (không phải finding của feature); đề nghị sync riêng nền domain |
|
|
166
|
-
| **R3** | Nguồn tự đánh dấu "giả định" | Evidence là mục trong design-spec có cảnh báo ⚠️ *"là giả định, cần Designer bổ sung"* | → **ghi chú phạm vi**, không lập finding *(đồng nhất luật AP5)* |
|
|
167
|
-
| **R4** | Nhánh phòng vệ bất-khả-đạt | Nhánh guard chỉ chạy trên dữ liệu **ngoài** enum hợp lệ; ca đạt tới được đã có phủ | → **Low**, nhãn *"test-design"* — vấn đề cách mô phỏng dữ liệu, không phải mơ hồ spec |
|
|
168
|
-
| **R5** | Greenfield thiếu tech-doc | Thiếu openapi/tech-doc cho hành động lõi ở feature xây mới | → nhãn *"feasibility"* — chặn **tự-động-hoá**, KHÔNG phải khuyết tật nghiệp vụ ở tầng PRD |
|
|
169
|
-
|
|
170
|
-
> **Mẹo chi phối:** một *pass-through rule* (hệ thống KHÔNG validate gì) làm tan phần lớn
|
|
171
|
-
> "mơ hồ" vì không có bề mặt test → hạ mạnh. Ngược lại, drift mà **chính PRD tự flag**, hoặc
|
|
172
|
-
> mơ hồ ở **luồng chính có giao diện**, là finding THẬT — giữ nguyên mức.
|
|
173
|
-
|
|
174
|
-
**Cách ghi:** GIỮ mô tả gốc (audit trail), thêm mục *"Phản biện & Re-rating"* liệt kê lý do
|
|
175
|
-
từng thay đổi mức, rồi cập nhật cột mức độ. Finding chuyển hẳn sang "ghi chú phạm vi" thì
|
|
176
|
-
đánh dấu rõ — **KHÔNG xoá**.
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## GIAI ĐOẠN 2 — Bảng thẩm định
|
|
181
|
-
|
|
182
|
-
Xuất bảng verdict *(không chèn dòng trắng giữa các hàng — dòng trắng làm vỡ bảng Markdown)*:
|
|
183
|
-
|
|
184
|
-
| ID | Verdict | Test rớt | Bằng chứng thẩm định (mở file nguồn) |
|
|
185
|
-
|---|---|---|---|
|
|
186
|
-
| … | `✅ VALID` / `❌ INVALID` / `⚠️ RECLASSIFY` / `🔁 MERGE` | T1..T6 / — | trích đúng dòng trong `EVIDENCE_ROOT` chứng minh verdict |
|
|
187
|
-
|
|
188
|
-
**Số liệu tổng:** tổng verify = N · VALID = a · INVALID = b · RECLASSIFY = c · MERGE = d.
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## GIAI ĐOẠN 3 — Áp verdict vào `VERDICT_FIELD`
|
|
193
|
-
|
|
194
|
-
**KHÔNG XOÁ finding nào** — giữ audit trail. Đóng kèm lý do thì kiểm chứng được; xoá thì không.
|
|
195
|
-
|
|
196
|
-
| Verdict | Áp thế nào |
|
|
197
|
-
|---|---|
|
|
198
|
-
| `✅ VALID` | giữ nguyên, trạng thái mở |
|
|
199
|
-
| `✅ VALID — SYNC` | giữ mở, loại `SYNC`, mức Low–Medium, giao đội spec; phần trả lời để trống |
|
|
200
|
-
| `❌ INVALID` | → **đóng**; ghi lý do ngắn + trích nguồn (vd *"Closed — spec đã trả lời tại §BR13: …"*) |
|
|
201
|
-
| `⚠️ RECLASSIFY` | → **đóng**; ghi rõ *"Không phải finding nghiệp vụ — [metadata / làm-kỹ-test / tech-UX tự quyết]"* + đề xuất chuyển sang mục việc tương ứng |
|
|
202
|
-
| `🔁 MERGE` | → **đóng**; ghi *"Trùng root cause với {id}"* |
|
|
203
|
-
|
|
204
|
-
Sau khi áp:
|
|
205
|
-
1. Cập nhật **tổng số** ở header + bảng **ưu tiên xử lý** — chỉ đếm cái còn mở.
|
|
206
|
-
2. Kiểm format bảng Markdown: **không có dòng trắng giữa các hàng**.
|
|
207
|
-
3. Nếu artifact có section liệt kê **tài liệu đã đọc**: verifier vừa mở trực tiếp nguồn nên
|
|
208
|
-
đối chiếu lại — file đã dùng làm evidence mà **thiếu** trong bảng, hoặc file liệt kê nhưng
|
|
209
|
-
không tồn tại → sửa cho khớp.
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## Đầu ra + cam kết
|
|
214
|
-
|
|
215
|
-
In tóm tắt:
|
|
216
|
-
|
|
217
|
-
```
|
|
218
|
-
[GAP VERIFY] {artifact} — verify {N} finding đang mở:
|
|
219
|
-
✅ VALID: {a} | ❌ INVALID: {b} | ⚠️ RECLASSIFY: {c} | 🔁 MERGE: {d}
|
|
220
|
-
INVALID chi tiết: {id} (evidence bịa), {id} (spec đã trả lời), …
|
|
221
|
-
Sau verify còn {a} finding nghiệp vụ đang mở.
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
**Cam kết cuối — bắt buộc in nguyên văn:**
|
|
225
|
-
|
|
226
|
-
> *"Đã mở trực tiếp file nguồn trong `{EVIDENCE_ROOT}` để kiểm chứng từng finding — KHÔNG dựa
|
|
227
|
-
> vào trường evidence của artifact. Mỗi finding còn mở đều có đủ 2 vế: spec nêu hành vi +
|
|
228
|
-
> không tài liệu nào phủ. Không giữ lại finding bịa/sai sự thật."*
|
|
229
|
-
|
|
230
|
-
Cam kết này **không phải nghi thức**: nó là chỗ duy nhất bước này tự khai đã làm đúng việc
|
|
231
|
-
mà không ai kiểm được từ bên ngoài. Không in được cam kết ⇒ chưa chạy đúng bước.
|