ai-developer-skill-os 9.3.1 → 10.1.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/.agents/AGENTS.md +60 -40
- package/.agents/DEV_PROFILE.md +36 -2
- package/.agents/registry/graph.json +95 -342
- package/.agents/registry/index.yaml +61 -237
- package/.agents/rules/coding.md +30 -12
- package/.agents/rules/command-safety.md +19 -8
- package/.agents/rules/global.md +234 -28
- package/.agents/rules/prompt-compiler.md +170 -0
- package/.agents/skills/qk-api-data-discovery/SKILL.md +470 -0
- package/.agents/skills/qk-backend-data/SKILL.md +190 -0
- package/.agents/skills/qk-bug-resolution/SKILL.md +176 -248
- package/.agents/skills/qk-code-cleaner/SKILL.md +250 -0
- package/.agents/skills/qk-code-review/SKILL.md +126 -247
- package/.agents/skills/qk-devops-release/SKILL.md +145 -0
- package/.agents/skills/qk-feature-delivery/SKILL.md +179 -247
- package/.agents/skills/qk-orchestrator/SKILL.md +100 -151
- package/.agents/skills/qk-product-spec/SKILL.md +113 -0
- package/.agents/skills/qk-prompt-compiler/SKILL.md +321 -0
- package/.agents/skills/qk-ui-engineer/SKILL.md +137 -0
- package/.agents/workflows/feature-delivery.yml +1 -1
- package/.agents/workflows/production-release.yml +1 -1
- package/.agents/workflows/spec-driven-development.yml +109 -87
- package/CHANGELOG.md +16 -0
- package/README.md +125 -205
- package/bin/install.js +337 -329
- package/package.json +2 -2
- package/.agents/README.md +0 -90
- package/.agents/docs/CHI_TIET_SKILLS.md +0 -126
- package/.agents/docs/HUONG_DAN_SU_DUNG.md +0 -120
- package/.agents/docs/MIGRATION-CLEANUP-V8.1.3.md +0 -36
- package/.agents/docs/MIGRATION-STATUS.md +0 -35
- package/.agents/docs/MIGRATION-V8.md +0 -10
- package/.agents/docs/ROADMAP-V8.2.md +0 -78
- package/.agents/docs/V8-CERTIFICATION.md +0 -27
- package/.agents/skills/qk-access-policy/SKILL.md +0 -206
- package/.agents/skills/qk-access-policy/capability.yaml +0 -23
- package/.agents/skills/qk-access-policy/evals/scorecard.yaml +0 -36
- package/.agents/skills/qk-agent-observability/SKILL.md +0 -108
- package/.agents/skills/qk-agent-observability/capability.yaml +0 -29
- package/.agents/skills/qk-agent-observability/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-agent-observability/references/scorecard.yaml +0 -80
- package/.agents/skills/qk-ai-builder/SKILL.md +0 -254
- package/.agents/skills/qk-ai-builder/capability.yaml +0 -23
- package/.agents/skills/qk-ai-builder/evals/scorecard.yaml +0 -30
- package/.agents/skills/qk-api-consumer/SKILL.md +0 -256
- package/.agents/skills/qk-api-consumer/capability.yaml +0 -21
- package/.agents/skills/qk-api-consumer/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-api-lifecycle/SKILL.md +0 -251
- package/.agents/skills/qk-api-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-api-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-bug-resolution/capability.yaml +0 -25
- package/.agents/skills/qk-code-review/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/SKILL.md +0 -198
- package/.agents/skills/qk-context-loader/capability.yaml +0 -23
- package/.agents/skills/qk-context-loader/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-data-engineer/SKILL.md +0 -253
- package/.agents/skills/qk-data-lifecycle/SKILL.md +0 -197
- package/.agents/skills/qk-data-lifecycle/capability.yaml +0 -23
- package/.agents/skills/qk-data-lifecycle/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-db-optimizer/SKILL.md +0 -210
- package/.agents/skills/qk-db-optimizer/capability.yaml +0 -22
- package/.agents/skills/qk-db-optimizer/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-design-system-engineering/SKILL.md +0 -193
- package/.agents/skills/qk-design-system-engineering/capability.yaml +0 -25
- package/.agents/skills/qk-design-system-engineering/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-devops-platform/SKILL.md +0 -198
- package/.agents/skills/qk-devops-platform/capability.yaml +0 -29
- package/.agents/skills/qk-devops-platform/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-docs/SKILL.md +0 -193
- package/.agents/skills/qk-docs/capability.yaml +0 -23
- package/.agents/skills/qk-docs/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-engineering-standard/SKILL.md +0 -89
- package/.agents/skills/qk-engineering-standard/capability.yaml +0 -23
- package/.agents/skills/qk-engineering-standard/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-engineering-standard/references/anti-patterns.md +0 -121
- package/.agents/skills/qk-engineering-standard/rules/backend.md +0 -122
- package/.agents/skills/qk-engineering-standard/rules/database.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/frontend.md +0 -152
- package/.agents/skills/qk-engineering-standard/rules/security.md +0 -3
- package/.agents/skills/qk-engineering-standard/rules/testing.md +0 -3
- package/.agents/skills/qk-fe-api-integration/SKILL.md +0 -704
- package/.agents/skills/qk-fe-api-integration/capability.yaml +0 -21
- package/.agents/skills/qk-fe-api-integration/evals/scorecard.yaml +0 -29
- package/.agents/skills/qk-feature-delivery/capability.yaml +0 -24
- package/.agents/skills/qk-frontend-architecture/SKILL.md +0 -127
- package/.agents/skills/qk-frontend-architecture/capability.yaml +0 -28
- package/.agents/skills/qk-frontend-architecture/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-help/SKILL.md +0 -107
- package/.agents/skills/qk-help/capability.yaml +0 -20
- package/.agents/skills/qk-help/evals/scorecard.yaml +0 -13
- package/.agents/skills/qk-orchestrator/capability.yaml +0 -22
- package/.agents/skills/qk-product-specification/SKILL.md +0 -187
- package/.agents/skills/qk-product-specification/capability.yaml +0 -27
- package/.agents/skills/qk-product-specification/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-production-release/SKILL.md +0 -188
- package/.agents/skills/qk-production-release/capability.yaml +0 -27
- package/.agents/skills/qk-production-release/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-audit/SKILL.md +0 -174
- package/.agents/skills/qk-project-bootstrap/SKILL.md +0 -372
- package/.agents/skills/qk-project-bootstrap/capability.yaml +0 -23
- package/.agents/skills/qk-project-bootstrap/evals/scorecard.yaml +0 -28
- package/.agents/skills/qk-project-health/SKILL.md +0 -202
- package/.agents/skills/qk-project-health/capability.yaml +0 -23
- package/.agents/skills/qk-project-health/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-project-memory/SKILL.md +0 -303
- package/.agents/skills/qk-project-memory/capability.yaml +0 -23
- package/.agents/skills/qk-project-memory/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-refactor/SKILL.md +0 -243
- package/.agents/skills/qk-refactor/capability.yaml +0 -26
- package/.agents/skills/qk-refactor/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-security-audit/SKILL.md +0 -280
- package/.agents/skills/qk-security-audit/capability.yaml +0 -29
- package/.agents/skills/qk-security-audit/evals/scorecard.yaml +0 -27
- package/.agents/skills/qk-system-evolution/SKILL.md +0 -625
- package/.agents/skills/qk-system-evolution/capability.yaml +0 -24
- package/.agents/skills/qk-system-evolution/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-test-engineering/SKILL.md +0 -215
- package/.agents/skills/qk-test-engineering/capability.yaml +0 -28
- package/.agents/skills/qk-test-engineering/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/SKILL.md +0 -175
- package/.agents/skills/qk-ui-audit/capability.yaml +0 -23
- package/.agents/skills/qk-ui-audit/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-audit/references/anti-slop-checklist.md +0 -136
- package/.agents/skills/qk-ui-builder/SKILL.md +0 -521
- package/.agents/skills/qk-ui-builder/capability.yaml +0 -29
- package/.agents/skills/qk-ui-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-ui-builder/references/anti-patterns.md +0 -295
- package/.agents/skills/qk-ui-builder/references/color.md +0 -115
- package/.agents/skills/qk-ui-builder/references/component-cookbook.md +0 -458
- package/.agents/skills/qk-ui-builder/references/copy.md +0 -250
- package/.agents/skills/qk-ui-builder/references/interaction-and-states.md +0 -115
- package/.agents/skills/qk-ui-builder/references/layout-and-space.md +0 -111
- package/.agents/skills/qk-ui-builder/references/macrostructures/01-bento-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/02-long-document.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/03-marquee-hero.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/04-stat-led.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/05-workbench.md +0 -44
- package/.agents/skills/qk-ui-builder/references/macrostructures/06-conversational-faq.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/07-manifesto.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/08-photographic.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/09-quote-led.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/11-catalogue.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/12-letter.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/13-index-first.md +0 -49
- package/.agents/skills/qk-ui-builder/references/macrostructures/14-narrative-workflow.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/15-split-studio.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/16-feature-stack.md +0 -51
- package/.agents/skills/qk-ui-builder/references/macrostructures/17-type-specimen.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/18-portfolio-grid.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/19-map-diagram.md +0 -50
- package/.agents/skills/qk-ui-builder/references/macrostructures/20-ecosystem-index.md +0 -48
- package/.agents/skills/qk-ui-builder/references/macrostructures/21-component-playground.md +0 -45
- package/.agents/skills/qk-ui-builder/references/macrostructures.md +0 -38
- package/.agents/skills/qk-ui-builder/references/motion.md +0 -95
- package/.agents/skills/qk-ui-builder/references/responsive.md +0 -115
- package/.agents/skills/qk-ui-builder/references/slop-test.md +0 -135
- package/.agents/skills/qk-ui-builder/references/structure.md +0 -280
- package/.agents/skills/qk-ui-builder/references/themes/atmospheric.md +0 -53
- package/.agents/skills/qk-ui-builder/references/themes/carnival.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/cobalt.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/editorial.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/garden.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/hum.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/lumen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/midnight.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/modern-minimal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/playful.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/specimen.md +0 -52
- package/.agents/skills/qk-ui-builder/references/themes/terminal.md +0 -52
- package/.agents/skills/qk-ui-builder/references/typography.md +0 -129
- package/.agents/skills/qk-ui-system-builder/SKILL.md +0 -183
- package/.agents/skills/qk-ui-system-builder/capability.yaml +0 -25
- package/.agents/skills/qk-ui-system-builder/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-upgrade/SKILL.md +0 -301
- package/.agents/skills/qk-upgrade/capability.yaml +0 -24
- package/.agents/skills/qk-upgrade/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-validation-gate/SKILL.md +0 -88
- package/.agents/skills/qk-validation-gate/capability.yaml +0 -23
- package/.agents/skills/qk-validation-gate/evals/scorecard.yaml +0 -26
- package/.agents/skills/qk-web-quality-gate/SKILL.md +0 -197
- package/.agents/skills/qk-web-quality-gate/capability.yaml +0 -24
- package/.agents/skills/qk-web-quality-gate/evals/scorecard.yaml +0 -26
- package/.agents/workflows/research.yml +0 -75
- package/.agents/workflows/skill-evolution.yml +0 -97
- package/tooling/fix-refactor.js +0 -8
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qk-api-data-discovery
|
|
3
|
+
version: 10.1.0
|
|
4
|
+
status: stable
|
|
5
|
+
subtitle: "API & Data Discovery"
|
|
6
|
+
description: "Kỹ sư Khám phá API & Hợp đồng Dữ liệu: Phân tích Postman collection, thu thập phản hồi thực tế (Real API Evidence), khám phá Schema & Data Dictionary, đánh giá tầng Bronze Medallion, đối chiếu kiến trúc dự án và xuất báo cáo Checkpoint. Tuân thủ nguyên tắc: Discovery First, Implementation Only on User Direction. Dùng khi: postman, api discovery, api evidence, schema discovery, data contract, data dictionary, bronze ingestion, chuẩn hóa postman, phân tích postman collection."
|
|
7
|
+
tools:
|
|
8
|
+
- filesystem
|
|
9
|
+
- terminal
|
|
10
|
+
rules:
|
|
11
|
+
- global
|
|
12
|
+
- coding-standards
|
|
13
|
+
- security
|
|
14
|
+
workflow: context-discovery
|
|
15
|
+
triggers:
|
|
16
|
+
- "postman"
|
|
17
|
+
- "chuẩn hóa postman"
|
|
18
|
+
- "phân tích postman"
|
|
19
|
+
- "api discovery"
|
|
20
|
+
- "api evidence"
|
|
21
|
+
- "schema discovery"
|
|
22
|
+
- "data contract"
|
|
23
|
+
- "data dictionary"
|
|
24
|
+
- "bronze ingestion"
|
|
25
|
+
- "postman_collection"
|
|
26
|
+
- "khám phá api"
|
|
27
|
+
- "api to data"
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# qk-api-data-discovery — API & Data Discovery (API Evidence, Schema Discovery & Data Contract Engine)
|
|
31
|
+
|
|
32
|
+
> **Language rule:** Code, schema identifiers, file names, JSON keys → English. Explanations, analysis, recommendations → Vietnamese.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 1. Nguyên Tắc Cốt Lõi & Tôn Chỉ Bất Di Bất Dịch
|
|
37
|
+
|
|
38
|
+
> 🎯 **Core Identity:** Đây KHÔNG PHẢI là một công cụ định dạng Postman đơn thuần ("Postman Formatter"). Đây là hệ thống **API-to-Data Discovery Engine**: Biến Postman collection từ một tập hợp request thô thành nguồn tri thức có bằng chứng thực tế phục vụ đồng thời Backend, QA, Data Engineer, Data Analyst và AI Agent.
|
|
39
|
+
|
|
40
|
+
### 🌟 4 Nguyên Tắc Vàng (Golden Principles)
|
|
41
|
+
1. **Evidence Over Inference (Bằng chứng trên suy đoán):**
|
|
42
|
+
> *"Never infer an API contract from endpoint names alone. Observe the real API response first, preserve raw evidence, then derive the schema and standardized collection from observed evidence."*
|
|
43
|
+
*(Không bao giờ suy diễn hợp đồng API chỉ từ tên endpoint. Luôn quan sát phản hồi thật trước, bảo toàn bằng chứng thô, rồi mới suy ra schema và bộ collection chuẩn hóa).*
|
|
44
|
+
2. **Hypothesis vs Truth (Giả thuyết vs Sự thật):**
|
|
45
|
+
> *"Observed API behavior is evidence; inferred schema is a hypothesis until validated by sufficient executions."*
|
|
46
|
+
*(Hành vi API quan sát được là bằng chứng; schema suy luận chỉ là giả thuyết cho đến khi được kiểm chứng qua đủ số lần chạy).*
|
|
47
|
+
3. **Discovery First, Implementation Upon Direction (Khám phá trước, làm sau):**
|
|
48
|
+
> *"DISCOVERY FIRST, IMPLEMENTATION ONLY ON EXPLICIT USER DIRECTION."*
|
|
49
|
+
*(Luôn ưu tiên khám phá, đánh giá và lập báo cáo checkpoint. TUYỆT ĐỐI KHÔNG tự động triển khai code, pipeline hay migration nếu chưa có chỉ đạo tường minh từ người dùng).*
|
|
50
|
+
4. **No Premature Architecture Mutation (Không tự ý biến đổi hệ thống):**
|
|
51
|
+
> *"The discovery agent MUST NOT create production code, Bronze pipelines, database schemas, or modify project architecture merely because those actions appear to be logical next steps."*
|
|
52
|
+
*(Agent cấm tự tiện tạo mã nguồn production, pipeline Bronze, hay sửa schema cơ sở dữ liệu chỉ vì thấy đó là bước tiếp theo hợp lý).*
|
|
53
|
+
|
|
54
|
+
### 📜 Quy Tắc Bàn Giao Quyền Quyết Định (The Handoff Contract Rule)
|
|
55
|
+
```text
|
|
56
|
+
DISCOVERY REPORT IS THE HANDOFF CONTRACT.
|
|
57
|
+
|
|
58
|
+
The report MUST contain enough verified information for the user
|
|
59
|
+
or another AI skill to continue the work without repeating discovery.
|
|
60
|
+
|
|
61
|
+
The discovery skill MUST NOT assume which downstream implementation
|
|
62
|
+
the user wants.
|
|
63
|
+
```
|
|
64
|
+
> **Bản chất:** Kỹ năng này không phải là *"làm API → tự làm Bronze"*.
|
|
65
|
+
> Bản chất của nó là: **"API → Hiểu sâu → Chứng minh thực nghiệm → Phân tích toàn diện → Báo cáo Checkpoint → Bàn giao quyền quyết định cho User."**
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 2. Mô Hình Thực Thi 2 Pha (Two-Phase Execution Model)
|
|
70
|
+
|
|
71
|
+
Hệ thống hoạt động theo mô hình tách bạch nghiêm ngặt: **Pha A (Mặc định: Khám phá & Lập Báo cáo Checkpoint)** kết thúc tại một **Điểm dừng Kiểm soát (Checkpoint STOP)** để người dùng thẩm định và ra quyết định hướng đi tiếp theo.
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
POSTMAN COLLECTION + PROJECT CONTEXT
|
|
75
|
+
│
|
|
76
|
+
▼
|
|
77
|
+
DISCOVERY (Parse endpoints, variables, auth, query params)
|
|
78
|
+
│
|
|
79
|
+
▼
|
|
80
|
+
REAL API EVIDENCE (Execute safe requests, capture status, latency, headers)
|
|
81
|
+
│
|
|
82
|
+
▼
|
|
83
|
+
SCHEMA DISCOVERY (Derive datatypes, nullability, nested fields, arrays)
|
|
84
|
+
│
|
|
85
|
+
▼
|
|
86
|
+
PROJECT BASE ANALYSIS (Inspect existing pipelines, bronze, schemas, models)
|
|
87
|
+
│
|
|
88
|
+
▼
|
|
89
|
+
DATA ENGINEERING ASSESSMENT (Candidate bronze, pagination, immutability)
|
|
90
|
+
│
|
|
91
|
+
▼
|
|
92
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
93
|
+
│ API DISCOVERY REPORT.md (Checkpoint / Decision Handoff) │
|
|
94
|
+
│ │
|
|
95
|
+
│ 1. What was observed (Real status, latency, raw JSON) │
|
|
96
|
+
│ 2. What was verified (HTTP 200, headers, datatypes) │
|
|
97
|
+
│ 3. What was inferred (Schema hypothesis, relationships)│
|
|
98
|
+
│ 4. Project currently has (Existing modules, tables, zones) │
|
|
99
|
+
│ 5. Problems & risks (Token expiry, rate limit, 5xx) │
|
|
100
|
+
│ 6. Candidate directions (Option A / B / C / D / E) │
|
|
101
|
+
└──────────────────────────────┬──────────────────────────────┘
|
|
102
|
+
▼
|
|
103
|
+
⛔ CHECKPOINT STOP
|
|
104
|
+
(User Reviews & Chooses Next Direction)
|
|
105
|
+
│
|
|
106
|
+
┌──────────────────┼──────────────────┐
|
|
107
|
+
▼ ▼ ▼
|
|
108
|
+
Option A Option B Option C
|
|
109
|
+
[Bronze Ingest] [Data Contract] [Standardize]
|
|
110
|
+
│ │ │
|
|
111
|
+
▼ ▼ ▼
|
|
112
|
+
Targeted Task Targeted Task Targeted Task
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Cơ chế chuyển giao Phase B (Targeted Continuation):
|
|
116
|
+
- **Chỉ kích hoạt Phase B khi có chỉ đạo rõ ràng từ Người Dùng:** AI không tự chọn bất kỳ Option nào nếu User chưa xác nhận.
|
|
117
|
+
- **Ủy quyền & Biên dịch kế hoạch (Delegation & Plan Compilation):**
|
|
118
|
+
- Khi User chọn hướng (ví dụ: *"Làm Option A cho users và orders"*), AI chuyển giao mục tiêu qua `qk-prompt-compiler` để biên dịch thành Compiled Execution Prompt.
|
|
119
|
+
- Sau đó ủy quyền tới skill phù hợp: `qk-backend-data` (xây dựng DDL / Bronze pipeline), `qk-feature-delivery` (tích hợp API client), hoặc tiếp tục xử lý tạo bộ artifact `api-discovery/`.
|
|
120
|
+
- Nếu chưa có downstream skill chuyên biệt phù hợp với stack người dùng chọn, AI tạo `implementation_plan.md` theo chuẩn Interactive Planning Mode và xin phê duyệt trước khi viết code.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 3. Chi Tiết Quy Trình Phase A (7 Bước Khám Phá Cốt Lõi)
|
|
125
|
+
|
|
126
|
+
### Bước 1: Parse Collection & Kiểm Toán Biến Môi Trường (Discover)
|
|
127
|
+
- Đọc file `postman_collection.json` (và file environment đính kèm nếu có).
|
|
128
|
+
- Bóc tách toàn bộ cây thư mục (folders), danh sách request, HTTP methods, headers, parameters, authentication type (`bearer`, `basic`, `apiKey`, `oauth2`).
|
|
129
|
+
- Rà soát các biến môi trường chưa được gán giá trị (unresolved variables: `{{base_url}}`, `{{token}}`, `{{user_id}}`).
|
|
130
|
+
|
|
131
|
+
### Bước 2: Phân Loại Rủi Ro & Chọn Cổng Thực Thi (Risk Classification Gate)
|
|
132
|
+
Áp dụng cơ chế phân định an toàn bắt buộc trước khi thực hiện bất kỳ lệnh gọi mạng nào:
|
|
133
|
+
|
|
134
|
+
| Loại Request | Môi trường đích | Mức rủi ro | Chế độ thực thi | Hành động của AI |
|
|
135
|
+
|---|---|---|---|---|
|
|
136
|
+
| **GET / HEAD / OPTIONS** (Idempotent, Read) | Staging / Dev / Sandbox | Thấp (`R0/R1`) | 🟢 `AUTO` | Chạy an toàn để lấy response thật |
|
|
137
|
+
| **GET** (Read) | Production / Live | Trung bình (`R2`) | 🟡 `CONFIRM` | Cần xác nhận trước khi gửi request |
|
|
138
|
+
| **POST / PUT / PATCH / DELETE** (Ghi/Xóa dữ liệu) | Staging / Test / Sandbox | Trung bình (`R2`) | 🟡 `CONFIRM` | Dừng lại, liệt kê payload và chờ user duyệt |
|
|
139
|
+
| **POST / PUT / PATCH / DELETE** | Production / Live | Rất cao (`R4`) | 🔴 `CONFIRM` Bắt buộc | Mặc định **CẤM TỰ CHẠY**. Chỉ chạy khi user xác nhận 2 lần |
|
|
140
|
+
| **Thiếu Auth Token / Base URL / Biến cốt lõi** | Mọi môi trường | — | 🔴 `ASK` | Dừng hỏi user cung cấp. **CẤM BỊA MOCK CREDENTIALS** |
|
|
141
|
+
|
|
142
|
+
### Bước 3: Thu Thập Bằng Chứng Thực Tế (Real API Evidence)
|
|
143
|
+
- **Phương thức thực thi:**
|
|
144
|
+
- *Cách 1 (Khuyến nghị):* Chạy qua Newman CLI hoặc local script nếu môi trường có kết nối mạng tới endpoint.
|
|
145
|
+
- *Cách 2 (Sandbox / No direct network):* Người dùng cung cấp file export log từ Postman Console hoặc response json dump từ server.
|
|
146
|
+
- **Dữ liệu bằng chứng (Evidence) bắt buộc lưu lại:**
|
|
147
|
+
- HTTP Status Code (ví dụ: `200 OK`, `401 Unauthorized`, `404 Not Found`).
|
|
148
|
+
- Response Time / Latency (đo bằng milliseconds `ms`).
|
|
149
|
+
- Headers quan trọng (Content-Type, X-RateLimit, Pagination headers).
|
|
150
|
+
- Raw JSON Body nguyên bản.
|
|
151
|
+
- **Quy tắc Bằng chứng Thực Tế (Anti-Fake-Pass):**
|
|
152
|
+
- Nếu một endpoint chưa thể chạy (do thiếu auth, network, hay là method ghi chưa được duyệt): **BẮT BUỘC ĐÁNH DẤU `NOT_EXECUTED`** kèm lý do minh bạch.
|
|
153
|
+
- **CẤM TUYỆT ĐỐI** tự chế response mẫu giả định rồi giả vờ đó là "kết quả chạy thật".
|
|
154
|
+
|
|
155
|
+
### Bước 4: Khám Phá Schema & Lập Data Dictionary (Schema Discovery)
|
|
156
|
+
Từ các response JSON thu thập được, phân tích cấu trúc dữ liệu theo chiều sâu:
|
|
157
|
+
- **Xác định Kiểu Dữ Liệu:** `integer`, `float`, `string`, `boolean`, `datetime` (ISO-8601), `array`, `object`, `null`.
|
|
158
|
+
- **Nhận diện Khả năng Nullable:** Đối chiếu giữa nhiều records hoặc kịch bản để xem trường nào có thể mang giá trị `null` hoặc không xuất hiện (optional).
|
|
159
|
+
- **Phát hiện Cấu trúc Mảng & Quan hệ (1-N):** Bóc tách các mảng lồng nhau (`items[]`, `tags[]`, `addresses[]`).
|
|
160
|
+
- **Lập Bảng Từ Điển Dữ Liệu (API Data Dictionary):**
|
|
161
|
+
|
|
162
|
+
```markdown
|
|
163
|
+
### Observed Schema: `GET /users`
|
|
164
|
+
|
|
165
|
+
| Field | Type | Nullable | Example Value | Evidence Level |
|
|
166
|
+
|---|---|---|---|---|
|
|
167
|
+
| `id` | integer | No | `1024` | OBSERVED (200 OK) |
|
|
168
|
+
| `name` | string | No | `"Nguyen Van A"` | OBSERVED (200 OK) |
|
|
169
|
+
| `email` | string | Yes | `"user@example.com"` | OBSERVED (200 OK) |
|
|
170
|
+
| `createdAt` | datetime | No | `"2026-09-15T10:20:00Z"` | OBSERVED (200 OK) |
|
|
171
|
+
| `roles[]` | array[string] | No | `["admin", "editor"]` | OBSERVED (200 OK) |
|
|
172
|
+
| `profile.bio`| string | Yes | `null` | OBSERVED (200 OK) |
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Bước 5: Đánh Giá Kỹ Nghệ Dữ Liệu Tầng Bronze (Data Engineering Assessment)
|
|
176
|
+
- **Candidate Bronze Sources:** Chọn lọc các endpoint trả về dữ liệu entity cốt lõi thích hợp để lưu trữ dạng thô trong hồ dữ liệu (Data Lake / Medallion Architecture).
|
|
177
|
+
- **Nguyên Tắc Lưu Trữ Tầng Bronze:**
|
|
178
|
+
- **Giữ nguyên trạng thái Raw:** Không vội vàng chuẩn hóa hay làm phẳng (flatten) các trường JSON lồng nhau ở tầng Bronze. Việc flattening và type casting là trách nhiệm của tầng Silver.
|
|
179
|
+
- **Gắn nhãn Ingestion Metadata:** Mỗi record Bronze phải đi kèm metadata truy vết nguồn gốc (lineage).
|
|
180
|
+
- **Phân Tích Cơ Chế Phân Trang (Pagination Strategy):**
|
|
181
|
+
- Nhận diện loại phân trang: Page-based (`?page=1&size=20`), Offset/Limit (`?offset=0&limit=50`), hay Cursor-based (`?cursor=eyJ...`).
|
|
182
|
+
- Ghi nhận cách tính tổng số bản ghi (`total`, `totalPages`, `has_more`).
|
|
183
|
+
|
|
184
|
+
### Bước 6: Đối Chiếu Kiến Trúc Dự Án Hiện Có (Project Base Alignment)
|
|
185
|
+
AI quét nhanh cấu trúc thư mục của dự án hiện tại để tìm kiếm sự tương thích:
|
|
186
|
+
- Kiểm tra xem dự án đã có các thư mục: `bronze/`, `data/`, `pipelines/`, `schemas/`, `models/`, `services/`, hay file cấu hình API sources không.
|
|
187
|
+
- Xác định API này đang thuộc domain nghiệp vụ nào trong codebase (User, Order, Payment, Inventory, Telemetry...).
|
|
188
|
+
- Lập bản đồ liên kết: API này có thể mở rộng vào pipeline nào đang có, hoặc tích hợp vào service backend nào.
|
|
189
|
+
|
|
190
|
+
### Bước 7: Xuất Báo Cáo Checkpoint & DỪNG LẠI (Checkpoint Report & STOP)
|
|
191
|
+
Tạo file báo cáo toàn diện tại đường dẫn:
|
|
192
|
+
`docs/api-discovery/<collection-name>-analysis.md`
|
|
193
|
+
|
|
194
|
+
Sau khi ghi file, AI **DỪNG TOÀN BỘ HÀNH ĐỘNG CODE TIẾP THEO**, in bản Tóm tắt Điều hành (Executive Summary) ra cửa sổ chat và chờ người dùng lựa chọn bước đi tiếp theo.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 4. Cấu Trúc 3 Tầng Thông Tin & Mẫu Báo Cáo Checkpoint Chuẩn
|
|
199
|
+
|
|
200
|
+
Báo cáo phân tích `docs/api-discovery/<collection>-analysis.md` đóng vai trò là **Hợp đồng Bàn giao Quyết định (Decision Handoff Contract)**. Để đảm bảo tính khách quan và khoa học, báo cáo BẮT BUỘC tách biệt rõ ràng 3 tầng thông tin:
|
|
201
|
+
|
|
202
|
+
### 🏛️ Ba Tầng Thông Tin Tách Bạch (The 3-Tier Information Model)
|
|
203
|
+
1. **Tầng 1: FACT — Thực tế quan sát được (What was observed & verified):**
|
|
204
|
+
- Không suy diễn, chỉ ghi nhận dữ liệu thực nghiệm đã chạy thật:
|
|
205
|
+
- Endpoint, HTTP Status (`200 OK`, `401 Unauthorized`).
|
|
206
|
+
- Response Body JSON thô nguyên bản.
|
|
207
|
+
- Response Latency (`ms`), Headers (`Content-Type`, `X-RateLimit`).
|
|
208
|
+
- Cấu trúc phân trang thực tế (`page`, `total`, `cursor`).
|
|
209
|
+
2. **Tầng 2: ANALYSIS — AI phân tích chuyên môn (What was inferred & assessed):**
|
|
210
|
+
- Đánh giá kỹ nghệ dữ liệu từ dữ liệu thực nghiệm:
|
|
211
|
+
- Endpoint này có phù hợp làm Candidate Bronze Source không?
|
|
212
|
+
- Cấu trúc JSON có lồng nhau phức tạp (nested objects) cần giữ nguyên ở Bronze hay không?
|
|
213
|
+
- Phân trang có đòi hỏi vòng lặp lặp lại (loop iteration) khi ingest hay không?
|
|
214
|
+
- Có hiện tượng bất thường (anomalies), rate limiting hay schema không đồng nhất không?
|
|
215
|
+
3. **Tầng 3: DECISION OPTIONS — Hướng có thể đi tiếp (Candidate next directions):**
|
|
216
|
+
- Các định hướng khả thi cho User lựa chọn:
|
|
217
|
+
- Option A: Bronze Ingestion Pipeline (NDJSON raw records).
|
|
218
|
+
- Option B: Postman Standardization (Collection chuẩn hóa, tests).
|
|
219
|
+
- Option C: Data Contract chính thức (Schema JSON, Data Dictionary, YAML).
|
|
220
|
+
- Option D: Data Quality Assertions (Kiểm tra null, type, unique).
|
|
221
|
+
- Option E: Deep Scenario Execution (Chạy tiếp các kịch bản ngoại lệ biên).
|
|
222
|
+
- ⚠️ **Ranh giới tối thượng:** **AI TUYỆT ĐỐI KHÔNG ĐƯỢC BIẾN TẦNG 3 THÀNH HÀNH ĐỘNG KHI CHƯA CÓ LỆNH RÕ RÀNG TỪ USER.**
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
### Mẫu Báo Cáo 10 Mục Hoàn Chỉnh (`docs/api-discovery/<collection>-analysis.md`)
|
|
227
|
+
|
|
228
|
+
```markdown
|
|
229
|
+
# API Discovery & Evidence Report: [<collection_name>]
|
|
230
|
+
|
|
231
|
+
> **Status:** DISCOVERY_COMPLETED (Awaiting User Decision)
|
|
232
|
+
> **Execution Date:** <ISO_TIMESTAMP>
|
|
233
|
+
> **Environment:** <Staging / Production / Offline Logs>
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 1. Executive Summary
|
|
238
|
+
- **Collection Name:** `<name>`
|
|
239
|
+
- **Total Requests Analyzed:** `<total>`
|
|
240
|
+
- **Requests Executed (Evidence Collected):** `<executed_count>` (Success: `<success>`, Failed: `<failed>`)
|
|
241
|
+
- **Requests Not Executed:** `<skipped_count>` (Do phân loại rủi ro hoặc thiếu thông tin)
|
|
242
|
+
- **Average Response Latency:** `<avg_ms> ms` (Min: `<min_ms>`, Max: `<max_ms>`)
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 2. Project Context & Detected Architecture
|
|
247
|
+
- **Backend Stack:** `<stack hoặc None>`
|
|
248
|
+
- **Data Pipeline Stack:** `<dbt / Airflow / Python scripts / Không có>`
|
|
249
|
+
- **Existing Storage Zones:** `<Bronze/Silver/Gold folders hiện có>`
|
|
250
|
+
- **Relevant Existing Modules:**
|
|
251
|
+
- `<file_link_1>`
|
|
252
|
+
- `<file_link_2>`
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 3. API Inventory & Risk Classification
|
|
257
|
+
| # | Method | Endpoint Path | Risk Gate | Execution Status | HTTP Status | Response Time | Domain / Module |
|
|
258
|
+
|---|---|---|---|---|---|---|---|
|
|
259
|
+
| 1 | GET | `/api/v1/users` | AUTO | EXECUTED | 200 OK | 184 ms | User Management |
|
|
260
|
+
| 2 | POST | `/api/v1/users` | CONFIRM | NOT_EXECUTED | — | — | User Management |
|
|
261
|
+
| 3 | GET | `/api/v1/orders` | AUTO | EXECUTED | 200 OK | 340 ms | Order Processing |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 4. Real API Evidence (Observed Responses)
|
|
266
|
+
### Endpoint: `GET /api/v1/users`
|
|
267
|
+
- **Execution Status:** EXECUTED
|
|
268
|
+
- **HTTP Code:** `200 OK` | **Latency:** `184 ms`
|
|
269
|
+
- **Observed Response Body (Raw Snippet):**
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"data": [
|
|
273
|
+
{ "id": 1024, "name": "Nguyen Van A", "createdAt": "2026-09-15T10:20:00Z" }
|
|
274
|
+
],
|
|
275
|
+
"pagination": { "page": 1, "pageSize": 20, "total": 128 }
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 5. Schema Discovery & API Data Dictionary
|
|
282
|
+
### Entity: `users` (Derived from `GET /api/v1/users`)
|
|
283
|
+
| Field Path | Data Type | Nullable | Sample Value | Evidence Confidence |
|
|
284
|
+
|---|---|---|---|---|
|
|
285
|
+
| `data[].id` | integer | No | `1024` | 100% (Observed) |
|
|
286
|
+
| `data[].name` | string | No | `"Nguyen Van A"` | 100% (Observed) |
|
|
287
|
+
| `data[].createdAt` | datetime | No | `"2026-09-15T10:20:00Z"` | 100% (Observed) |
|
|
288
|
+
| `pagination.total` | integer | No | `128` | 100% (Observed) |
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 6. Data Engineering Assessment (Medallion Bronze Layer)
|
|
293
|
+
- **Candidate Bronze Sources:**
|
|
294
|
+
- `GET /api/v1/users` → Bảng Bronze: `bronze_raw_users`
|
|
295
|
+
- `GET /api/v1/orders` → Bảng Bronze: `bronze_raw_orders`
|
|
296
|
+
- **Khuyến nghị Chiến lược Ingestion:**
|
|
297
|
+
- Lưu trữ dưới dạng `NDJSON` (Newline Delimited JSON) theo từng batch chạy.
|
|
298
|
+
- Bổ sung Ingestion Metadata Header (`ingestion_id`, `ingested_at`, `status_code`, `latency_ms`).
|
|
299
|
+
- Không bóc tách mảng `data[]` ở Bronze; giữ nguyên toàn bộ payload để đảm bảo tính toàn vẹn (Immutability).
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## 7. Existing Project Alignment
|
|
304
|
+
- Codebase hiện đã có cấu trúc: `<liệt kê>`
|
|
305
|
+
- **Phương án tích hợp khả thi:**
|
|
306
|
+
- Phương án 1: Tích hợp vào pipeline ingest sẵn có tại `<path>`.
|
|
307
|
+
- Phương án 2: Tạo module API ingestion độc lập tại `<path>`.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 8. Key Findings & Anomalies
|
|
312
|
+
- **F-001 (Pagination):** Endpoint `GET /api/v1/orders` dùng phân trang `page` & `pageSize`. Cần vòng lặp loop khi ingest toàn bộ.
|
|
313
|
+
- **F-002 (Nested Structures):** Trường `customer.profile` trả về object lồng nhau 3 cấp. Khuyến nghị chuẩn hóa tại tầng Silver.
|
|
314
|
+
- **F-003 (Rate Limiting):** API trả về header `X-RateLimit-Remaining: 60`. Cần cơ chế throttle delay 500ms giữa các batch.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## 9. Identified Risks
|
|
319
|
+
- ⚠️ **R-01 (Token Expiration):** Bearer token hết hạn sau 30 phút. Cần cơ chế refresh token nếu crawl dữ liệu lớn.
|
|
320
|
+
- ⚠️ **R-02 (Inconsistent Error Schema):** Endpoint trả về HTTP 404 có format khác với HTTP 500.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 10. Recommended Next Actions & DECISION REQUIRED
|
|
325
|
+
|
|
326
|
+
> ⛔ **AI ACTION STOPPED HERE — WAITING FOR USER INSTRUCTION**
|
|
327
|
+
> AI **CHƯA THỰC HIỆN BẤT KỲ THAY ĐỔI MÃ NGUỒN HOẶC TẠO PIPELINE NÀO**. Xin vui lòng chọn 1 trong các định hướng sau:
|
|
328
|
+
|
|
329
|
+
- **Option A — Bronze Ingestion Pipeline:**
|
|
330
|
+
Xây dựng pipeline thu thập và sinh file dữ liệu thô `api_responses.ndjson` + `ingestion_manifest.json` sẵn sàng nạp vào hồ dữ liệu.
|
|
331
|
+
- **Option B — Postman Collection Standardization:**
|
|
332
|
+
Chuẩn hóa lại toàn bộ collection: gom nhóm folders theo Resource, gắn response mẫu thật, thiết lập biến môi trường và bổ sung bộ test scripts `pm.test`.
|
|
333
|
+
- **Option C — Formal Data Contract:**
|
|
334
|
+
Sinh file đặc tả hợp đồng dữ liệu `api_schema.json` + `data_dictionary.md` + file contract YAML làm căn cứ kiểm định cho tầng Silver.
|
|
335
|
+
- **Option D — Data Quality & Anomaly Assertions:**
|
|
336
|
+
Thiết lập bộ quy tắc kiểm tra chất lượng dữ liệu (Null checks, Uniqueness, Type assertions) cho các endpoint quan trọng.
|
|
337
|
+
- **Option E — Deep Scenario Execution:**
|
|
338
|
+
Tiếp tục chạy thêm các kịch bản biên (Empty Result, Invalid Params, Unauthorized) để hoàn thiện bức tranh hành vi của API.
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## 5. Đặc Tả Bộ API Discovery Package (Khi User Duyệt Phase B)
|
|
344
|
+
|
|
345
|
+
Khi người dùng ra lệnh thực thi một trong các Options tiếp theo, hệ thống sẽ sinh ra bộ package hoàn chỉnh trong thư mục `api-discovery/`:
|
|
346
|
+
|
|
347
|
+
```text
|
|
348
|
+
api-discovery/
|
|
349
|
+
├── postman/
|
|
350
|
+
│ └── standardized_collection.json # Collection chuẩn: folder resource, real responses, pm.test
|
|
351
|
+
├── bronze/
|
|
352
|
+
│ ├── api_responses.ndjson # Raw Bronze data (mỗi dòng 1 request-response record)
|
|
353
|
+
│ └── ingestion_manifest.json # Metadata phiên ingest, batch size, timestamps
|
|
354
|
+
├── schema/
|
|
355
|
+
│ ├── api_schema.json # JSON Schema chính thức
|
|
356
|
+
│ └── data_dictionary.md # Từ điển dữ liệu chi tiết cho Data Analyst / BI
|
|
357
|
+
├── quality/
|
|
358
|
+
│ └── api_quality_report.md # Báo cáo đo lường độ phủ, lỗi, độ trễ và bất thường
|
|
359
|
+
└── evidence/
|
|
360
|
+
└── execution_report.json # Log chi tiết kỹ thuật từng lần gọi mạng
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Cấu Trúc Bản Ghi Raw Bronze (`api_responses.ndjson`)
|
|
364
|
+
Mỗi dòng là một đối tượng JSON độc lập, bảo tồn trọn vẹn dữ liệu gốc và dữ liệu truy vết:
|
|
365
|
+
|
|
366
|
+
```json
|
|
367
|
+
{
|
|
368
|
+
"ingestion_metadata": {
|
|
369
|
+
"ingestion_id": "b7a2d481-9f33-4a11-8e02-4876211c1209",
|
|
370
|
+
"ingested_at": "2026-09-15T10:20:31.402Z",
|
|
371
|
+
"source_type": "postman_collection",
|
|
372
|
+
"collection_name": "ECommerce-Core-API",
|
|
373
|
+
"endpoint": "GET /api/v1/orders",
|
|
374
|
+
"environment": "staging",
|
|
375
|
+
"status_code": 200,
|
|
376
|
+
"response_time_ms": 184
|
|
377
|
+
},
|
|
378
|
+
"raw_request": {
|
|
379
|
+
"method": "GET",
|
|
380
|
+
"url": "https://staging.api.example.com/api/v1/orders?page=1&pageSize=20",
|
|
381
|
+
"headers": {
|
|
382
|
+
"Accept": "application/json",
|
|
383
|
+
"Authorization": "Bearer [REDACTED_SECRET]"
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
"raw_response": {
|
|
387
|
+
"status": 200,
|
|
388
|
+
"status_text": "OK",
|
|
389
|
+
"headers": {
|
|
390
|
+
"content-type": "application/json; charset=utf-8",
|
|
391
|
+
"x-ratelimit-remaining": "59"
|
|
392
|
+
},
|
|
393
|
+
"body": {
|
|
394
|
+
"data": [
|
|
395
|
+
{ "id": 501, "order_number": "ORD-2026-001", "total_amount": 1250000, "status": "COMPLETED" }
|
|
396
|
+
],
|
|
397
|
+
"pagination": { "page": 1, "pageSize": 20, "total": 1 }
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Cấu Trúc Data Contract YAML (`schema/data_contract.yaml`)
|
|
404
|
+
```yaml
|
|
405
|
+
contract_version: "1.0.0"
|
|
406
|
+
dataset: "orders"
|
|
407
|
+
source_endpoint: "GET /api/v1/orders"
|
|
408
|
+
schema:
|
|
409
|
+
fields:
|
|
410
|
+
- name: "id"
|
|
411
|
+
type: "integer"
|
|
412
|
+
nullable: false
|
|
413
|
+
description: "Primary key của đơn hàng"
|
|
414
|
+
- name: "order_number"
|
|
415
|
+
type: "string"
|
|
416
|
+
nullable: false
|
|
417
|
+
format: "^ORD-[0-9]{4}-[0-9]+$"
|
|
418
|
+
- name: "total_amount"
|
|
419
|
+
type: "numeric"
|
|
420
|
+
nullable: false
|
|
421
|
+
- name: "status"
|
|
422
|
+
type: "string"
|
|
423
|
+
allowed_values: ["PENDING", "PROCESSING", "COMPLETED", "CANCELLED"]
|
|
424
|
+
quality_rules:
|
|
425
|
+
- rule: "id must be unique"
|
|
426
|
+
level: "critical"
|
|
427
|
+
- rule: "total_amount must be greater than or equal to 0"
|
|
428
|
+
level: "critical"
|
|
429
|
+
- rule: "order_number must not be null"
|
|
430
|
+
level: "critical"
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## 6. Ranh Giới Kỹ Thuật & Cấm Kỵ Tuyệt Đối (Hard Guardrails)
|
|
436
|
+
|
|
437
|
+
- ❌ **CẤM TỰ Ý CODE HOẶC TẠO PIPELINE TRONG PHASE A:** Hoàn thành báo cáo `docs/api-discovery/<collection>-analysis.md` là PHẢI DỪNG LẠI. Không tự ý viết script ingestion hay tạo migration khi user chưa ra lệnh.
|
|
438
|
+
- ❌ **CẤM ÉP PASS ẢO / FAKE MOCK DATA (R-G-14.5):** Không được tự tạo JSON response giả vờ như đã chạy thật. Chưa chạy được thì ghi rõ `NOT_EXECUTED`.
|
|
439
|
+
- ❌ **CẤM CHẠY REQUEST PHÁ HỦY TRÊN PRODUCTION:** Mọi request `POST / PUT / PATCH / DELETE` trên môi trường production đều phải qua cổng kiểm soát `CONFIRM` và được người dùng duyệt rõ ràng từng endpoint.
|
|
440
|
+
- ❌ **CẤM ĐỂ LỘ SECRET / TOKEN TRONG OUTPUT:** Tất cả API keys, Bearer tokens, Passwords trong file output hoặc báo cáo PHẢI được che giấu (`[REDACTED_SECRET]`).
|
|
441
|
+
- ❌ **CẤM FLOOD REQUEST (RATE-LIMITING SAFETY):** Khi chạy runner gọi hàng loạt endpoint thật, phải áp dụng độ trễ (delay tối thiểu 200–500ms) giữa các request để tránh làm sập server thử nghiệm.
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## 7. Định Dạng Báo Cáo Phản Hồi Khi Hoàn Tất Phase A
|
|
446
|
+
|
|
447
|
+
Sau khi xuất file báo cáo Checkpoint, AI phản hồi vào cửa sổ chat với định dạng Executive Summary ngắn gọn (không xả toàn bộ markdown dài):
|
|
448
|
+
|
|
449
|
+
```markdown
|
|
450
|
+
🔧 API & Data Discovery Summary [Role: <role> | Stack: <primary stack>]
|
|
451
|
+
─────────────────────────────────────────────────────────────────────
|
|
452
|
+
Scope: Khám phá API Postman, thu thập bằng chứng thực tế và đánh giá Data Contract
|
|
453
|
+
Report: [docs/api-discovery/<collection>-analysis.md](file:///<workspace-root>/docs/api-discovery/<collection>-analysis.md)
|
|
454
|
+
|
|
455
|
+
📊 Kết quả khám phá:
|
|
456
|
+
✅ Endpoints phân tích: <total_count> endpoints
|
|
457
|
+
✅ Thực thi an toàn: <executed_count> requests đã lấy response thật (Avg latency: <avg>ms)
|
|
458
|
+
⏸️ Chưa thực thi: <skipped_count> requests (yêu cầu quyền ghi / thiếu credentials)
|
|
459
|
+
📐 Schema phát hiện: <entity_count> data entities với từ điển kiểu dữ liệu chi tiết
|
|
460
|
+
🧱 Bronze Assessment: Xác định <candidate_count> candidate sources cho Bronze layer
|
|
461
|
+
|
|
462
|
+
⛔ CHECKPOINT ĐÃ THIẾT LẬP:
|
|
463
|
+
AI đã dừng lại và CHƯA tự ý sinh mã nguồn ingestion hay sửa đổi hệ thống.
|
|
464
|
+
Vui lòng xem báo cáo chi tiết và chọn bước đi tiếp theo:
|
|
465
|
+
👉 Option A: Tạo Bronze Ingestion Pipeline & Raw NDJSON data
|
|
466
|
+
👉 Option B: Chuẩn hóa lại file Postman Collection hoàn chỉnh
|
|
467
|
+
👉 Option C: Thiết lập Formal Data Contract & Data Dictionary
|
|
468
|
+
👉 Option D: Cấu hình bộ Quality Assertion Rules
|
|
469
|
+
👉 Option E: Tiếp tục khám phá các kịch bản ngoại lệ sâu hơn
|
|
470
|
+
```
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qk-backend-data
|
|
3
|
+
version: 10.1.0
|
|
4
|
+
status: stable
|
|
5
|
+
subtitle: "API & Database"
|
|
6
|
+
description: "Kỹ sư Backend & Cơ sở dữ liệu toàn diện: Thiết kế Zero-Trust API, quản lý Schema Migration an toàn, phân quyền RBAC/ABAC, tối ưu SQL EXPLAIN/ANALYZE và xây dựng Data Pipeline. Dùng khi: viết api, tạo endpoint, sửa database, migration, thêm cột, rbac, abac, phân quyền, auth middleware, tối ưu query, query chậm, slow query, n+1 query, data pipeline, etl, dbt — TUYỆT ĐỐI KHÔNG dùng cho việc code UI/CSS (dùng qk-ui-engineer) hoặc cấu hình hạ tầng k8s/cluster (dùng qk-devops-release)."
|
|
7
|
+
tools:
|
|
8
|
+
- filesystem
|
|
9
|
+
- terminal
|
|
10
|
+
rules:
|
|
11
|
+
- global
|
|
12
|
+
- coding-standards
|
|
13
|
+
- security
|
|
14
|
+
workflow: feature-delivery
|
|
15
|
+
triggers:
|
|
16
|
+
- "viết api"
|
|
17
|
+
- "tạo endpoint"
|
|
18
|
+
- "thiết kế api"
|
|
19
|
+
- "sửa database"
|
|
20
|
+
- "migration"
|
|
21
|
+
- "thêm cột"
|
|
22
|
+
- "db schema"
|
|
23
|
+
- "rbac"
|
|
24
|
+
- "abac"
|
|
25
|
+
- "phân quyền"
|
|
26
|
+
- "auth middleware"
|
|
27
|
+
- "tối ưu query"
|
|
28
|
+
- "query chậm"
|
|
29
|
+
- "slow query"
|
|
30
|
+
- "n+1 query"
|
|
31
|
+
- "data pipeline"
|
|
32
|
+
- "etl"
|
|
33
|
+
- "dbt"
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
# qk-backend-data — API & Database (Zero-Trust API & Data Architecture Engine)
|
|
37
|
+
|
|
38
|
+
> **Language rule:** Code, identifiers, file names → English. Explanations, summaries → Vietnamese.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 1. Nguyên Tắc Cốt Lõi & Luật Chống Over-Engineering
|
|
43
|
+
|
|
44
|
+
> **Core Principle:** Data integrity and security are non-negotiable. Prefer simple, direct, type-safe queries over multi-layered abstractions. Every schema change must have a safe rollback path.
|
|
45
|
+
> **Verification Principle:** PASS is a verified conclusion, never a target. Zero workarounds.
|
|
46
|
+
|
|
47
|
+
### 🛡️ Anti-Overengineering Rule (CẤM TẠO LAYER RÁC)
|
|
48
|
+
- **Không đẻ tầng lớp trung gian vô nghĩa:** Nếu dự án dùng ORM trực tiếp (Prisma, Drizzle, SQLAlchemy) hoặc Active Record, KHÔNG tự ý bọc thêm 3 tầng Interface, DAO, Repository rườm rà nếu codebase hiện tại không theo chuẩn Clean/Hexagonal Architecture. Viết code thẳng thắn, dễ đọc và dễ test.
|
|
49
|
+
- **Không lạm dụng Message Broker:** Nếu chỉ là tác vụ xử lý thông thường, ưu tiên DB Transactions hoặc simple background queue thay vì đề xuất cài Kafka, RabbitMQ làm phức tạp hóa hệ thống.
|
|
50
|
+
|
|
51
|
+
### 🔒 No Unrelated Changes Rule (CẤM SỬA LAN MAN)
|
|
52
|
+
- Chỉ sửa đúng endpoints, schemas hoặc pipelines được phân công.
|
|
53
|
+
- **CẤM** tiện tay sửa controller khác hoặc reformat toàn bộ schema không liên quan.
|
|
54
|
+
- Nếu phát hiện endpoint cũ thiếu bảo mật: **Chỉ ghi nhận vào báo cáo kiểm toán**, không tự ý sửa nếu ngoài scope.
|
|
55
|
+
|
|
56
|
+
### 🛡️ Anti-Fake-Pass Rule (CẤM ÉP PASS ẢO - R-G-14.5)
|
|
57
|
+
- **CẤM** bypass auth middleware hoặc hardcode role Admin chỉ để test case vượt qua.
|
|
58
|
+
- **CẤM** tắt các ràng buộc Foreign Key, Unique, NOT NULL chỉ để insert dữ liệu mẫu.
|
|
59
|
+
- **CẤM** dùng `as any` để ép kiểu kết quả truy vấn database.
|
|
60
|
+
- **CẤM** swallow DB exceptions (`try/catch {}` rỗng nuốt transaction rollback).
|
|
61
|
+
|
|
62
|
+
### ⚖️ Verify Before Claim Rule (XÁC MINH TRƯỚC KHI BÁO CÁO)
|
|
63
|
+
- **Cấm tuyên bố query đã tối ưu nếu chưa chạy EXPLAIN:** Nếu có database test, BẮT BUỘC chạy `EXPLAIN (ANALYZE)` để xem Execution Plan (Index Scan vs Seq Scan).
|
|
64
|
+
- **Báo cáo trung thực:** Nếu không có DB live cục bộ để test, ghi rõ: `"Trạng thái: NOT VERIFIED — Đã rà soát cú pháp tĩnh và đặt Index hợp lý. Chưa chạy EXPLAIN ANALYZE thực tế"`.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 2. Ranh Giới & Phạm Vi Kỹ Thuật (Hard Boundaries)
|
|
69
|
+
|
|
70
|
+
### ✅ Việc skill này BẮT BUỘC làm:
|
|
71
|
+
- **Zero-Trust API:** Mọi endpoint phải kiểm tra Auth & Input validation (Zod/Pydantic) trước khi vào logic nghiệp vụ. Chặn đứng IDOR bằng cách kiểm tra quyền sở hữu tài nguyên (`WHERE id = :id AND user_id = :current_user`).
|
|
72
|
+
- **Expand and Contract Migrations:** Thêm cột mới dạng `NULLABLE` trước, migrate dữ liệu, sau đó mới siết ràng buộc NOT NULL. Tuyệt đối KHÔNG xóa/đổi tên cột trong một migration duy nhất.
|
|
73
|
+
- **Diệt Trừ N+1 Queries:** Luôn sử dụng `eager loading` hoặc `DataLoader` khi truy vấn dữ liệu quan hệ (1-N).
|
|
74
|
+
- **Idempotent Data Pipelines:** Pipeline ETL/dbt phải chạy lại được nhiều lần mà không sinh trùng lặp dữ liệu (sử dụng Upsert / Partition Overwrite).
|
|
75
|
+
- **Planning Gate & Exceptions:** Với schema migration hoặc thay đổi model ảnh hưởng ≥ 2 files, BẮT BUỘC lập `implementation_plan.md` với `RequestFeedback: true` và dừng lại chờ phê duyệt. Ngoại lệ: query optimization đơn lẻ trong 1 file không cần qua gate.
|
|
76
|
+
|
|
77
|
+
### ❌ Việc skill này TUYỆT ĐỐI KHÔNG làm (Chuyển giao quyền):
|
|
78
|
+
- Viết component giao diện, HTML/CSS trên Frontend → Chuyển sang `qk-ui-engineer`.
|
|
79
|
+
- Cấu hình hạ tầng Kubernetes cluster hoặc deploy production → Chuyển sang `qk-devops-release`.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 3. Quy Trình Kỹ Nghệ Backend & Dữ Liệu 4 Bước
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
[Bước 1: Contract & Validation] ── Định nghĩa Schemas, Request/Response DTOs & Auth Guards
|
|
87
|
+
│
|
|
88
|
+
▼
|
|
89
|
+
[Bước 2: Safe Data Modeling] ── Viết Migration theo chuẩn Expand & Contract kèm Script Rollback
|
|
90
|
+
│
|
|
91
|
+
▼
|
|
92
|
+
[Bước 3: Service & Query Opt] ── Triển khai Service layer, bọc Transaction & tối ưu hóa Query
|
|
93
|
+
│
|
|
94
|
+
▼
|
|
95
|
+
[Bước 4: Verification & Test] ── Chạy Migration test, Typecheck. Nếu FAIL ──► Rollback ngay
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 4. Xử Lý Sự Cố Khi Migration / Query Thất Bại (Failure Path)
|
|
101
|
+
|
|
102
|
+
### 🚨 Khi Migration gặp lỗi hoặc làm crash Database:
|
|
103
|
+
1. **Dừng ngay lập tức:** Không cố gắng ép chạy tiếp migration tiếp theo.
|
|
104
|
+
2. **Kích hoạt Script Rollback:**
|
|
105
|
+
```bash
|
|
106
|
+
# Với Prisma:
|
|
107
|
+
npx prisma migrate resolve --rolled-back <migration_name>
|
|
108
|
+
# Hoặc chạy file down.sql tương ứng đã chuẩn bị sẵn
|
|
109
|
+
```
|
|
110
|
+
3. **Phục hồi schema cũ:** Khôi phục file schema về commit an toàn gần nhất.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 5. Mẫu Code Thực Chiến Đa Ngôn Ngữ (Chống IDOR & N+1)
|
|
115
|
+
|
|
116
|
+
### TypeScript / Prisma:
|
|
117
|
+
```typescript
|
|
118
|
+
// ❌ Nguy hiểm: Dính IDOR, ai cũng xem được hóa đơn của người khác
|
|
119
|
+
export async function getInvoice(invoiceId: string) {
|
|
120
|
+
return prisma.invoice.findUnique({ where: { id: invoiceId } });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// ✅ An toàn: Zero-Trust kiểm tra quyền sở hữu tài nguyên + Eager load chống N+1
|
|
124
|
+
export async function getInvoice(invoiceId: string, currentUserId: string) {
|
|
125
|
+
const invoice = await prisma.invoice.findFirst({
|
|
126
|
+
where: {
|
|
127
|
+
id: invoiceId,
|
|
128
|
+
userId: currentUserId, // Chặn đứng IDOR
|
|
129
|
+
},
|
|
130
|
+
include: {
|
|
131
|
+
items: true, // Eager loading diệt N+1
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
if (!invoice) throw new NotFoundError("Invoice not found or access denied");
|
|
136
|
+
return invoice;
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Python / SQLAlchemy:
|
|
141
|
+
```python
|
|
142
|
+
# ✅ An toàn: Eager loading joinedload + Filter theo User ID
|
|
143
|
+
from sqlalchemy.orm import joinedload
|
|
144
|
+
|
|
145
|
+
def get_user_order(db, order_id: str, user_id: str):
|
|
146
|
+
order = db.query(Order).options(
|
|
147
|
+
joinedload(Order.items) # Chống N+1 query
|
|
148
|
+
).filter(
|
|
149
|
+
Order.id == order_id,
|
|
150
|
+
Order.user_id == user_id # Chống IDOR
|
|
151
|
+
).first()
|
|
152
|
+
|
|
153
|
+
if not order:
|
|
154
|
+
raise HTTPException(status_code=404, detail="Order not found")
|
|
155
|
+
return order
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 6. Thích Ứng Theo Role Kỹ Thuật (Role Adaptation)
|
|
161
|
+
|
|
162
|
+
| Role | Trọng tâm khi xử lý Backend & Data | Hành vi kỹ thuật đặc thù |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| `backend` | API architecture, transaction safety, business validation, JWT/OAuth | Viết Service layer, RBAC middleware, transaction manager |
|
|
165
|
+
| `data` | Pipeline reliability, incremental processing, dbt models, SLA | Thiết kế Medallion (Bronze/Silver/Gold), partitioned loads, schema assertion |
|
|
166
|
+
| `data-analyst` | SQL performance, aggregations, window functions, analytics views | Tối ưu complex queries, tạo materialized views, tính cohort metrics |
|
|
167
|
+
| `data-architect` | Enterprise data model, governance, retention, contract compatibility | Thiết kế chuẩn hóa 3NF/Kimball, zero-downtime migration strategy |
|
|
168
|
+
| `fullstack` | API schema contract, ORM updates, FE-BE type synchronization | Cập nhật schema, sinh types cho FE, tạo API handler |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 7. Báo Cáo Nghiệm Thu Chuẩn Xác (Truth-First Report)
|
|
173
|
+
|
|
174
|
+
```markdown
|
|
175
|
+
🗄️ Backend & Data Summary [Role: <role> | Target: <API / DB / Pipeline>]
|
|
176
|
+
─────────────────────────────────────────────────────────────────────
|
|
177
|
+
Trạng thái: [SUCCESS | BLOCKED | FAILED | PARTIAL]
|
|
178
|
+
Nghiệp vụ thực hiện: [Endpoint mới / Migration / Tối ưu Query]
|
|
179
|
+
Cơ sở dữ liệu / ORM: [PostgreSQL / MySQL / Prisma / SQLAlchemy]
|
|
180
|
+
|
|
181
|
+
Các thay đổi kỹ thuật (Laser Focus):
|
|
182
|
+
• [API Endpoint] [orderController.ts](file:///<workspace-root>/path): [Zod validation + Auth guard]
|
|
183
|
+
• [Migration] [20260915_add_column.sql](file:///<workspace-root>/path): [Nullable, có rollback]
|
|
184
|
+
|
|
185
|
+
Kiểm chứng thực tế (Verify Before Claim):
|
|
186
|
+
• Zero-Trust: ✅ Middleware bảo vệ, chặn IDOR
|
|
187
|
+
• Migration Safety: ✅ Cột mới Nullable, có kịch bản Down/Rollback
|
|
188
|
+
• Query Plan: [Đã diệt trừ N+1 bằng Eager loading | Đã kiểm tra Index tĩnh]
|
|
189
|
+
• Zero Hack: ✅ Không dùng as any, không tắt ràng buộc DB, không bypass auth
|
|
190
|
+
```
|