Files
sys-analysis-design/sa-output/e-commerce/00-index/ADL_e-commerce.md
Canhchimlac 343ad8bbbc save
2026-09-15 16:02:30 +07:00

271 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADL — ADR Ledger — e-commerce
| | |
|---|---|
| **Cập nhật** | 2026-09-15 |
| **Author** | SA (qua skill `sa-2-architecture`, hoạt động `adr`) — cập nhật sổ sau khi viết `ADR-014`/`ADR-015`/`ADR-016`/`ADR-017` (`DEC-31`), trả hết 4 khoản nợ ADR còn treo từ `DEC-25`/`DEC-28`/`DEC-30`; `sa-conformance` nên đối chiếu lại ở lần đồng bộ kế tiếp |
| **Tổng số ADR** | 17 *(mới — thêm `ADR-014`/`ADR-015`/`ADR-016`/`ADR-017`, không còn ADR nào "nợ chưa viết")* |
| **Nguồn quét** | `02-architecture/adr/ADR-001…017_*.md` (đọc header thật của từng file) · `00-index/DEC_e-commerce.md` v1.29 (đối chiếu §7 dưới đây) |
> Sổ này là **mục lục**, không phải nơi chứa nội dung quyết định. Nội dung ở từng file ADR.
> Cập nhật lần trước (12 ADR, 2026-09-15): tất cả ở `Proposed` — không ADR nào `Accepted` vì
> chưa có chữ ký thật (Tech Lead + Security + Ops/SRE) và 3 ADR (`ADR-005`/`ADR-006`/`ADR-009`)
> có radar ≥8 nên **bắt buộc** POC/diễn tập PASS trước khi `Accepted`, hiện chưa chạy. `DEC-06`
> (chọn P2, GĐ1) đã được **trả nợ** bằng `ADR-001` ở lượt đó.
> Cập nhật kế tiếp: thêm `ADR-013` (bất đồng bộ hoá bước khởi tạo thanh toán, radar 7/10,
> `Proposed`) — hiện thực hoá Lựa chọn B đã chọn ở `OQ-034`/`DEC-22`. Dưới ngưỡng 8 nên không bắt
> buộc POC trước `Accepted`, nhưng cần Tech Lead + PO **thật** xác nhận. Không đổi 12 ADR cũ.
> **Cập nhật lần này (2026-09-15, `DEC-26`):** `ADR-013` được **review nội dung** (không phải
> "sign" gate) — chấp nhận §3 làm cơ sở thiết kế tiếp, **giữ nguyên `Proposed`**, ghi dòng
> "Reviewed (Proposed giữ nguyên)" ở `ADR-013 §9`, cùng mẫu 12 ADR trước. Không đổi Status của
> `ADR-013` hay 12 ADR cũ. Cũng ghi nhận `DAT_e-commerce_v1.0.md` (hoạt động 5) đã được duyệt
> từng phần (`DEC-25`) và chọn Transactional Outbox cho `OQ-044` — **còn nợ `ADR-014`** (`Proposed`)
> ở lượt hoạt động `adr` kế tiếp (chưa viết, ngoài phạm vi cập nhật sổ lần này).
> **Cập nhật kế tiếp (2026-09-15, `DEC-28`):** `SEC_e-commerce_v1.0.md` (hoạt động 6) đã được
> duyệt từng phần bởi Tech Lead (ký thay, ngoại lệ `DEC-01`) — ghi nhận nội dung threat model/
> authn/authz, **không có `ADR` nào được viết** trong lượt `sec`. Chốt TẠM `OQ-050`: chọn **PA-3**
> (service JWT ngắn hạn ký bởi Identity & Access) cho service-to-service authn TB3/TB4 — **còn nợ
> `ADR-015`** (`Proposed`) ở lượt hoạt động `adr` kế tiếp, **cùng lúc** với `ADR-014` đã nợ từ
> `DEC-25`. Tổng số nợ ADR hiện tại: 2 (`ADR-014`, `ADR-015`). Security **không** ký thay — `SEC`
> chưa có hiệu lực phủ quyết `ADR-002`/`ADR-007`/`ADR-008` (bảo mật) cho tới khi có người (`OQ-007`).
> Không đổi 13 ADR hiện có.
> **Cập nhật kế tiếp (2026-09-15, `DEC-31`):** SA viết đủ 4 `ADR` còn nợ — `ADR-014`
> (Transactional Outbox, radar 6/10, nguồn `DAT §4.1`/`OQ-044`), `ADR-015` (Service JWT ngắn hạn
> service-to-service, radar 5/10, nguồn `SEC §2.4`/`OQ-050`), `ADR-016` (Blue-green qua AWS
> CodeDeploy cho 3 dịch vụ ECS, radar 6/10, nguồn `INF §7.2`), `ADR-017` (IaC Terraform, radar
> 7/10, nguồn `INF §11`). **Tất cả 4 `ADR` giữ `Status Proposed`** — không cái nào `Accepted`.
> Không cái nào đạt radar ≥8 nên không bắt buộc POC, nhưng mỗi ADR ghi rõ điều kiện `Accepted`
> riêng (Tech Lead/Ops-SRE xác nhận + bài đo `FIT`). 🔴 **`ADR-015` có điều kiện chặn cứng nhất**:
> đây là quyết định bảo mật (Security chốt theo `decision-radar.md §5`), nhưng Security **chưa có
> người** (`OQ-007`) — `ADR-015` không thể chuyển `Accepted` bất kể Tech Lead có đồng ý hay không.
> Tổng số ADR nay là **17**, không còn khoản nợ nào treo. Đã link cả 4 ADR vào `DAT`/`SEC`/`INF`
> (mỗi file +0.1, chỉ link không đổi nội dung). Không đổi 13 ADR cũ.
## Change Log (Review — không đổi Status)
| Ngày | Người review | Vai trò | Việc | Ghi chú |
|---|---|---|---|---|
| 2026-09-15 | Điều phối dự án (thay mặt Tech Lead, chế độ chạy thử) | Tech Lead (ký thay, ngoại lệ `DEC-01`) | `approve` yêu cầu ở mức **ghi nhận nội dung**, không phải baseline/accept | Ghi nhận 12 `ADR` (`ADR-001..012`, `02-architecture/adr/`) được chấp nhận về **NỘI DUNG** làm cơ sở thiết kế tiếp (`icd`/`dat`/`sec`/`inf`/`fail`). **KHÔNG** đề nghị chuyển bất kỳ `ADR` nào sang `Accepted` — tất cả giữ `Proposed` vì: (1) chưa có chữ ký thật Tech Lead/Security; (2) `POC-01`/`POC-02` chưa chạy (`ADR-005`/`ADR-006`); (3) diễn tập DR chưa chạy (`ADR-009`); (4) Security/Legal chưa có người được chỉ định (`ADR-002`/`ADR-007`/`ADR-008`); (5) `OQ-010`/`OQ-011`/`OQ-026` còn mở (`ADR-001`/`ADR-003`/`ADR-012`). Ký thay theo ngoại lệ `DEC-01` (SA). **Confidence: 🔴**. `AG2` chưa ký. Mỗi ADR đã được ghi một dòng "Reviewed (Proposed giữ nguyên)" ở `§9 Review log` riêng của file đó (xem `02-architecture/adr/ADR-001..012_*.md §9`). |
| 2026-09-15 | SA (qua skill `sa-2-architecture`, hoạt động `adr`, phạm vi hẹp) | SA (viết, không phải ký) | Ghi mới `ADR-013` vào sổ | `ADR-013` (bất đồng bộ hoá bước khởi tạo thanh toán, radar 7/10, `Proposed`) hiện thực hoá Lựa chọn B đã chọn ở `OQ-034`/`DEC-22`. **Chưa ai ký thật** — Tech Lead + PO thật cần xác nhận trước `Accepted` (xem `ADR-013 §7`). Không đổi Status của 12 `ADR` cũ. |
| 2026-09-15 | Điều phối dự án (thay mặt Tech Lead, chế độ chạy thử) | Tech Lead (ký thay, ngoại lệ `DEC-01`) | `approve` yêu cầu ở mức **ghi nhận nội dung**, không phải baseline/accept | Ghi nhận `ADR-013` được chấp nhận về **NỘI DUNG** (state machine, timeout async 10s, idempotency, hành vi thất bại) làm cơ sở thiết kế tiếp (`ICD`/`DAT`/FE). **KHÔNG** đề nghị chuyển sang `Accepted` — giữ `Proposed` vì chưa có Tech Lead + PO thật xác nhận (`OQ-034`), BA chưa viết `SRS`/`AC` US-004. Ghi Review log "Reviewed (Proposed giữ nguyên)" như 12 `ADR` trước (`ADR-013 §9`). Ký thay theo ngoại lệ `DEC-01` (SA). **Confidence: 🔴**. `AG2` chưa ký. Ghi thêm `DEC-26`. |
| 2026-09-15 | Điều phối dự án (thay mặt Tech Lead, chế độ chạy thử) | Tech Lead (ký thay, ngoại lệ `DEC-01`) | `approve` yêu cầu ở mức **ghi nhận nội dung** trên `SEC_e-commerce_v1.0.md` — không có `ADR` nào để ký ở lượt này | Không có `ADR` nào được viết/ký trong hoạt động `sec` — chỉ ghi nhận **1 `ADR` ứng viên mới** (service-to-service authn, PA-3, radar ~5) mà `SEC §2.4` phát hiện, chưa viết. Chốt TẠM hướng PA-3 làm baseline cho lượt viết `ADR-015` kế tiếp — **không tự viết/ký `ADR` ngay** vì ngoài phạm vi hoạt động `sec` được giao. **KHÔNG** ký thay Security — `SEC` chưa có hiệu lực phủ quyết `ADR-002`/`ADR-007`/`ADR-008` cho tới khi có người (`OQ-007`). Ghi thêm `DEC-28`. **Confidence: 🔴**. `AG2` chưa ký. |
| 2026-09-15 | SA (qua skill `sa-2-architecture`, hoạt động `adr`) | SA (viết, không phải ký) | Ghi mới `ADR-014`/`ADR-015`/`ADR-016`/`ADR-017` vào sổ | Bốn `ADR` còn nợ đã được viết đủ: `ADR-014` (Transactional Outbox, radar 6/10, `DEC-25`), `ADR-015` (Service JWT service-to-service, radar 5/10, `DEC-28` — **`Accepted` chặn cứng bởi `OQ-007`, Security chưa có người**), `ADR-016` (Blue-green CodeDeploy, radar 6/10, `DEC-30`), `ADR-017` (IaC Terraform, radar 7/10, `DEC-30`). **Chưa ai ký thật** — tất cả giữ `Proposed`. Không đổi Status của 13 ADR cũ. Ghi `DEC-31`. |
---
## 1. Tóm tắt
| Trạng thái | Số lượng |
|---|---|
| `Proposed` | 17 |
| `Accepted` | 0 |
| `Rejected` | 0 |
| `Superseded` | 0 |
| `Deprecated` | 0 |
| Cảnh báo | Số lượng |
|---|---|
| `Proposed` quá 10 ngày | 0 *(mới sinh 2026-09-15, kể cả `ADR-013…017`)* |
| Điểm radar ≥ 8 mà `Accepted` không có POC | 0 *(3 ADR radar ≥8 đều đang giữ `Proposed`, đúng quy tắc — xem §4.3; `ADR-013…017` radar 5–7, dưới ngưỡng)* |
| Nguồn (`QAS`/`ASR`) đã đổi sau khi ADR được ký | 0 *(chưa ADR nào được ký)* |
| Chuỗi supersede gãy | 0 |
| **Hai ADR mâu thuẫn** | 0 |
## 2. Mục lục
| ID | Quyết định | Chủ đề | Status | Ngày | Người quyết | Radar | POC | Nguồn | Supersedes | Superseded by |
|---|---|---|---|---|---|---|---|---|---|---|
| `ADR-001` | Kiểu kiến trúc tổng thể — Modular Monolith P2, không phải Microservices P1 | Cấu trúc | `Proposed` | 2026-09-15 | SA + Tech Lead *(chưa ký thật)* | 7 | Cần `POC-01`+`POC-02` | `ASR-001`, `DEC-06` | — | — |
| `ADR-002` | Payment Service — biên cô lập PCI-DSS SAQ A | Bảo mật | `Proposed` | 2026-09-15 | Security *(chưa có người)* | 7 | Không bắt buộc (pháp lý) | `ASR-002`, `CON-06` | — | — |
| `ADR-003` | Mô hình `Order`/`OrderSeller` — tách đơn theo seller | Dữ liệu | `Proposed` | 2026-09-15 | SA + Tech Lead | 6 | Không — chờ `OQ-011` (BA) | `ASR-003`, `BR-CART-01` | — | — |
| `ADR-004` | Idempotency + đối soát bù cho webhook thanh toán | Tích hợp | `Proposed` | 2026-09-15 | SA + Tech Lead | 6 | Không bắt buộc — cần sandbox | `ASR-004`, `BR-CART-06` | — | — |
| `ADR-005` | Message backbone — SQS FIFO + EventBridge | Tích hợp | `Proposed` | 2026-09-15 | SA + Tech Lead | **8** | **Bắt buộc `POC-01` — chưa chạy** | `ASR-005`, `QAS-005` | — | — |
| `ADR-006` | Chiến lược dữ liệu — RDS gộp schema-per-module | Dữ liệu | `Proposed` | 2026-09-15 | SA + Tech Lead/DBA | **8** | **Bắt buộc `POC-02` — chưa chạy** | `ASR-006`, `QAS-006` | — | — |
| `ADR-007` | Chỗ ra quyết định ownership/authz Cart & Order — service + cache Redis | Bảo mật | `Proposed` | 2026-09-15 | SA + Tech Lead | 6 | Không bắt buộc — khuyến nghị đo | `ASR-007`, `QAS-010` | — | — |
| `ADR-008` | Vùng lưu trữ PII & chính sách chia sẻ cho seller | Bảo mật | `Proposed` | 2026-09-15 | Security/Legal *(chưa có người — `OQ-007`)* | 7 | Không — chặn hoàn toàn tới khi có người | `ASR-008`, `QAS-011` | — | — |
| `ADR-009` | Chiến lược HA/DR cho nhóm dịch vụ giao dịch lõi | Hạ tầng | `Proposed` | 2026-09-15 | SA + Ops/SRE | **9** | **Bắt buộc diễn tập DR — chưa chạy** | `ASR-010`, `QAS-008` | — | — |
| `ADR-010` | Kiến trúc observability & alerting | Hạ tầng | `Proposed` | 2026-09-15 | SA + Ops/SRE | 6 | Không bắt buộc — khuyến nghị diễn tập | `ASR-011`, `QAS-013` | — | — |
| `ADR-011` | Chính sách resilience đối tác thanh toán/vận chuyển ngoài | Tích hợp | `Proposed` | 2026-09-15 | SA + Tech Lead | 6 | Không bắt buộc — cần sandbox | `ASR-013` | — | — |
| `ADR-012` | Ranh giới nhóm triển khai theo domain và năng lực đội | Cấu trúc | `Proposed` | 2026-09-15 | SA + Tech Lead | 7 | Không — chờ `OQ-010`/`OQ-026`/`OQ-027` | `ASR-014` | — | — |
| `ADR-013` | Bất đồng bộ hoá bước khởi tạo thanh toán trong checkout (Lựa chọn B của `OQ-034`) | Tích hợp | `Proposed` | 2026-09-15 | Tech Lead + PO *(chưa ký thật)* | 7 | Không bắt buộc (dưới ngưỡng 8) — khuyến nghị `FIT-23` (chaos đo p95) trước go-live | `ASR-004`, `QAS-002`, `DRV-02`, `OQ-034`, `DEC-22` | — | — |
| `ADR-014` | Transactional Outbox cho publish sự kiện Cart & Order / Payment | Tích hợp | `Proposed` | 2026-09-15 | SA + Tech Lead *(chưa ký thật)* | 6 | Không bắt buộc (dưới ngưỡng 8) — khuyến nghị bài đo relay lag (`FIT-26/27`) trước `Accepted` | `ASR-004`, `ASR-005`, `QAS-005`, `DRV-08`, `OQ-044`, `DEC-25` | — | — |
| `ADR-015` | Xác thực service-to-service bằng Service JWT ngắn hạn | Bảo mật | `Proposed` | 2026-09-15 | Security *(chưa có người — `OQ-007`)* + Tech Lead | 5 | Không bắt buộc — nhưng **`Accepted` chặn cứng tới khi có Security thật ký** | `ASR-002`, `ASR-007`, `QAS-002`, `QAS-010`, `THR-09`, `THR-13`, `OQ-050`, `DEC-28` | — | — |
| `ADR-016` | Chiến lược triển khai Blue-Green qua AWS CodeDeploy cho 3 dịch vụ ECS | Hạ tầng | `Proposed` | 2026-09-15 | SA + Ops/SRE *(chưa ký thật)* | 6 | Không bắt buộc — khuyến nghị chạy thử blue-green/rollback ở staging trước `Accepted` | `QAS-007`, `ASR-011`, `OQ-020`, `OQ-056`, `DEC-30` | — | — |
| `ADR-017` | Công cụ Infrastructure as Code — Terraform | Hạ tầng | `Proposed` | 2026-09-15 | Tech Lead + Ops/SRE *(chưa ký thật)* | 7 | Không bắt buộc (dưới ngưỡng 8) | `CON-05`, `OQ-060`, `DEC-30` | — | — |
**Chủ đề** *(dùng để rà mâu thuẫn — rà theo chủ đề, không theo số thứ tự)*: cấu trúc · dữ liệu ·
tích hợp · bảo mật · hạ tầng · frontend · vận hành
## 3. Theo chủ đề
### Cấu trúc hệ thống
| `ADR` | Quyết định | Status | Có mâu thuẫn với |
|---|---|---|---|
| `ADR-001` | Modular Monolith P2 | `Proposed` | Không |
| `ADR-012` | Ranh giới nhóm triển khai (Nhóm Giao dịch/Nhóm Hỗ trợ) | `Proposed` | Không — mở rộng `ADR-001`, không mâu thuẫn |
### Dữ liệu
| `ADR` | Quyết định | Status | Có mâu thuẫn với |
|---|---|---|---|
| `ADR-003` | `Order`/`OrderSeller` | `Proposed` | Không |
| `ADR-006` | RDS gộp schema-per-module | `Proposed` | Không |
### Tích hợp
| `ADR` | Quyết định | Status | Có mâu thuẫn với |
|---|---|---|---|
| `ADR-004` | Idempotency + đối soát webhook | `Proposed` | Không |
| `ADR-005` | SQS FIFO + EventBridge | `Proposed` | Không |
| `ADR-011` | Resilience đối tác ngoài | `Proposed` | Không |
| `ADR-013` | Bất đồng bộ hoá khởi tạo thanh toán | `Proposed` | Không — mở rộng `ADR-004`/`ADR-005`/`ADR-011` (tái dùng idempotency + message backbone + resilience đối tác đã có), không mâu thuẫn |
| `ADR-014` | Transactional Outbox cho publish sự kiện | `Proposed` | Không — mở rộng `ADR-005`/`ADR-013` (đảm bảo publish nguyên tử cho các sự kiện đã chọn ở hai ADR đó), không mâu thuẫn |
### Bảo mật
| `ADR` | Quyết định | Status | Có mâu thuẫn với |
|---|---|---|---|
| `ADR-002` | Payment cô lập PCI-DSS | `Proposed` | Không |
| `ADR-007` | Ownership/authz Cart & Order | `Proposed` | Không |
| `ADR-008` | Vùng lưu trữ PII | `Proposed` | Không |
| `ADR-015` | Service JWT service-to-service | `Proposed` | Không — bổ sung một lớp phòng thủ cho TB3/TB4, không thay đổi mô hình authn/authz người dùng cuối đã có ở `ADR-007` |
### Hạ tầng & vận hành
| `ADR` | Quyết định | Status | Có mâu thuẫn với |
|---|---|---|---|
| `ADR-009` | HA/DR nhóm giao dịch lõi | `Proposed` | Không |
| `ADR-010` | Observability & alerting | `Proposed` | Không |
| `ADR-016` | Blue-green deploy qua AWS CodeDeploy | `Proposed` | Không |
| `ADR-017` | IaC — Terraform | `Proposed` | Không |
## 4. Năm kiểm tra
### 4.1 Chuỗi supersede
| `ADR` cũ | Ghi `Superseded by` | `ADR` mới | Ghi `Supersedes` ngược lại | Khớp |
|---|---|---|---|---|
| *(không có — 12 ADR đều mới, chưa ADR nào bị supersede)* | | | | |
### 4.2 `Proposed` quá hạn
| `ADR` | Đề xuất ngày | Số ngày treo | Ai phải quyết | Đang chặn gì |
|---|---|---|---|---|
| *(chưa quá hạn — tất cả đề xuất 2026-09-15, cần theo dõi từ lần đồng bộ sau: > 10 ngày ⇒ cảnh báo)* | | | | |
### 4.3 Điểm radar ≥ 8 chưa có POC
| `ADR` | Radar | Status | POC | Vi phạm |
|---|---|---|---|---|
| `ADR-005` | 8 | `Proposed` | `POC-01` chưa chạy | Không vi phạm — đúng quy tắc (giữ `Proposed`, chưa `Accepted`) |
| `ADR-006` | 8 | `Proposed` | `POC-02` chưa chạy | Không vi phạm — đúng quy tắc |
| `ADR-009` | 9 | `Proposed` | Diễn tập DR chưa chạy | Không vi phạm — đúng quy tắc, cũng là điều kiện tiên quyết AG2 |
| `ADR-013` | 7 | `Proposed` | *(không áp dụng — dưới ngưỡng 8, POC không bắt buộc)* | Không vi phạm — radar 7 chỉ cần Tech Lead + PO thật xác nhận trước `Accepted`, không bắt buộc POC (`decision-radar.md §2/§6`) |
| `ADR-014` | 6 | `Proposed` | *(không áp dụng — dưới ngưỡng 8)* | Không vi phạm — khuyến nghị bài đo relay lag (`FIT-26/27`) trước `Accepted`, không bắt buộc POC |
| `ADR-015` | 5 | `Proposed` | *(không áp dụng — dưới ngưỡng 8)* | Không vi phạm — nhưng `Accepted` bị **chặn cứng bởi `OQ-007`** (Security chưa có người), độc lập với ngưỡng radar |
| `ADR-016` | 6 | `Proposed` | *(không áp dụng — dưới ngưỡng 8)* | Không vi phạm — khuyến nghị chạy thử blue-green/rollback ở staging trước `Accepted` |
| `ADR-017` | 7 | `Proposed` | *(không áp dụng — dưới ngưỡng 8)* | Không vi phạm — cần Tech Lead + Ops/SRE xác nhận công cụ trước `Accepted` |
### 4.4 Nguồn đã đổi
| `ADR` | Dựa trên | Nguồn đó đã đổi | Quyết định còn đúng không |
|---|---|---|---|
| *(chưa phát hiện — `ASR`/`QAS` nguồn chưa đổi kể từ khi 12 ADR này được viết)* | | | |
### 4.5 Mâu thuẫn
| `ADR` A | `ADR` B | Cùng chủ đề | Mâu thuẫn ở đâu | Xử lý |
|---|---|---|---|---|
| *(không phát hiện mâu thuẫn giữa 12 ADR ở lượt rà này — xem §3 theo chủ đề)* | | | | |
## 5. Điều kiện xét lại đã chạm ngưỡng
| `ADR` | Điều kiện (§7 của ADR) | Ngưỡng | Thực tế | Chạm | Hành động |
|---|---|---|---|---|---|
| *(chưa chạm — mới sinh, chưa có dữ liệu production để đối chiếu)* | | | | | |
## 6. ADR không có `FIT` bảo vệ
| `ADR` | Ràng buộc nó đặt ra | `FIT` | Nhãn `⚠️ Khuyến nghị` | Đứt |
|---|---|---|---|---|
| `ADR-001` | Ranh giới module không import chéo | `FIT-01`, `FIT-02` (ứng viên, chưa viết ở GĐ3) | — | 🟡 Ứng viên ghi nhận, `FIT` thật thuộc GĐ3 |
| `ADR-002` | Không truy cập chéo RDS Payment | `FIT-03`, `FIT-04` (ứng viên) | — | 🟡 |
| `ADR-003` | `OrderSeller` luôn thuộc đúng 1 `Order`/1 seller | `FIT-05`, `FIT-06` (ứng viên) | — | 🟡 |
| `ADR-004` | Webhook idempotent | `FIT-07` (ứng viên) | — | 🟡 |
| `ADR-005` | Publish luôn có `seller_id` làm message group | `FIT-08` (ứng viên) | — | 🟡 |
| `ADR-006` | Không truy cập chéo schema | `FIT-09` (ứng viên) | — | 🟡 |
| `ADR-007` | Gateway không chứa authz chi tiết | `FIT-10` (ứng viên) | — | 🟡 |
| `ADR-008` | Response cho seller chỉ chứa whitelist | `FIT-11` (ứng viên) | `⚠️ Khuyến nghị` cho audit định kỳ | 🟡 |
| `ADR-009` | Backup PITR đúng tần suất | `FIT-12` (ứng viên) | `⚠️ Khuyến nghị` cho diễn tập | 🟡 |
| `ADR-010` | Log format chuẩn có `correlation_id` | `FIT-13` (ứng viên) | `⚠️ Khuyến nghị` cho kiểm on-call | 🟡 |
| `ADR-011` | Idempotency key cho mọi lời gọi ghi đối tác ngoài | `FIT-14`, `FIT-15` (ứng viên) | — | 🟡 |
| `ADR-012` | Đúng 2 ECS service + 1 Payment | `FIT-16` (ứng viên) | — | 🟡 |
| `ADR-013` | p95 checkout ≤3.000ms (`QAS-002`) bất kể VNPay/Momo chậm; TX không giữ mở quá bước tạo `Order`; `PaymentInitRequested` idempotent | `FIT-23`, `FIT-24`, `FIT-25` (ứng viên) | — | 🟡 |
| `ADR-014` | Không publish sự kiện nào bỏ qua `outbox_event`; relay không mất/không publish thiếu khi bị kill | `FIT-26`, `FIT-27` (ứng viên) | — | 🟡 |
| `ADR-015` | Mọi lời gọi `IF-006`/`IF-021`/`IF-022` phải có service JWT hợp lệ | `FIT-31` (ứng viên) | — | 🟡 |
| `ADR-016` | Blue-green deploy tự động rollback khi health check fail | `FIT-37` (ứng viên) | — | 🟡 |
| `ADR-017` | Hạ tầng thật khớp Terraform state; đủ tag bắt buộc; đúng cấu trúc service/SG | `FIT-34`, `FIT-35`, `FIT-36` (ứng viên) | — | 🟡 |
🟡 Toàn bộ `FIT-01…16`, `FIT-23…27`, `FIT-31`, `FIT-34…37` là **ứng viên** ghi nhận trong ADR —
chưa viết `FIT` thật (thuộc GĐ3 `sa-3-enablement`). Không tính là "Đứt" theo nghĩa vi phạm `D8` vì
GĐ3 chưa chạy; đây là danh sách việc bàn giao cho GĐ3.
## 7. Quyết định KHÔNG đủ tầm ADR — `DEC`
*(Đồng bộ 2026-09-15 từ `00-index/DEC_e-commerce.md` v1.15 — `DEC-01..17` hiện có đều là ngoại lệ
gate hoặc phê duyệt từng phần, radar ước lượng 3–7. `DEC-06` (radar ~7, "kiểu kiến trúc tổng
thể") **đã được trả nợ** bằng `ADR-001` ở lượt này — không còn treo. Không có `DEC` nào khác
vượt ngưỡng 8 mà bị "giấu" thay vì `ADR`.)*
| `DEC` | Quyết định | Ngày | Ai | Radar |
|---|---|---|---|---|
| `DEC-01` | Chạy `sa-1-context` (Driver) khi BA chưa qua G1 | 2026-09-12 | Điều phối dự án | ~4 |
| `DEC-02` | Giả định tạm "team MVP chuẩn" cho ràng buộc Con người | 2026-09-12 | Điều phối dự án | ~4–5 |
| `DEC-03` | Tiếp tục ngoại lệ gate sang Bước 2 (Ràng buộc) | 2026-09-12 | Điều phối dự án | ~3–4 |
| `DEC-04` | Đóng `OQ-009` — dùng `SAD.md`/hồ sơ thầu làm điểm khởi đầu tham khảo cho `OPT`, có điều kiện | 2026-09-12 | Điều phối dự án | ~3–4 (ngoại lệ) / ~4–5 (nội dung) |
| `DEC-05` | Tiếp tục ngoại lệ gate sang Bước 4 (Phương án) | 2026-09-12 | Điều phối dự án | ~3–4 |
| `DEC-06` | **Chọn P2** làm hướng đi tạm cho Bước 5/GĐ2, có điều kiện `OQ-010`/`OQ-012` — **đã trả nợ bằng `ADR-001`** ở lượt `adr` này (2026-09-15) | 2026-09-12 | Điều phối dự án | ~7 — không còn "nợ" treo, xem `ADR-001` |
| `DEC-07` | Tiếp tục ngoại lệ gate sang Bước 5, phần `TCO` | 2026-09-12 | Điều phối dự án | ~3–4 |
| `DEC-08` | Tiếp tục ngoại lệ gate sang Bước 5, phần `ARISK` | 2026-09-12 | Điều phối dự án | ~3–4 |
| `DEC-09` | Duyệt từng phần `TCO` v1.1 (cấu trúc chi phí + kết luận P2 rẻ hơn P1) | 2026-09-12 | Điều phối dự án | ~3–4 |
| `DEC-10` | Duyệt từng phần `ARISK` v1.0 (10 rủi ro + kế hoạch `POC-01`/`POC-02`) | 2026-09-12 | Điều phối dự án | ~3–4 |
| `DEC-11` | Bắt đầu hoạt động `QAS` (GĐ2) dù AG1 chưa ký thật | 2026-09-14 | Điều phối dự án | ~4 |
| `DEC-12` | Duyệt từng phần `QAS` v1.0 | 2026-09-14 | Điều phối dự án (thay Tech Lead) | ~4 |
| `DEC-13` | Bắt đầu hoạt động `ASR` (GĐ2) | 2026-09-14 | Điều phối dự án | ~4 |
| `DEC-14` | Duyệt từng phần `ASR` v1.0 (15 `ASR` + 12 `ADR` ứng viên) | 2026-09-15 | Điều phối dự án (thay Tech Lead) | ~4 |
| `DEC-15` | Bắt đầu hoạt động `SAD` (GĐ2) | 2026-09-15 | Điều phối dự án | ~4 |
| `DEC-16` | Duyệt từng phần `SAD` v1.0 | 2026-09-15 | Điều phối dự án (thay Tech Lead) | ~4 |
| `DEC-17` | Bắt đầu hoạt động `adr` (GĐ2) — viết 12 ADR ứng viên | 2026-09-15 | Điều phối dự án | ~4 |
| `DEC-25` | Duyệt từng phần `DAT` v1.0 (ownership 15 `CMP`, mô hình `Order`/`OrderSeller`/`Payment`, idempotency, backup); TẠM `ASM-35`/Outbox (`OQ-044`, yêu cầu `ADR-014`)/audit phương án (a)/job quét 5 phút/polling; §5 PII chưa có hiệu lực (`OQ-007`) | 2026-09-15 | Điều phối dự án (thay Tech Lead) | ~4 |
| `DEC-26` | Review nội dung `ADR-013` (không chuyển `Accepted`, giữ `Proposed`) | 2026-09-15 | Điều phối dự án (thay Tech Lead) | ~7 *(radar gốc của `ADR-013`, không đổi bởi việc review)* |
| `DEC-28` | Duyệt từng phần `SEC` v1.0 (31 `THR` STRIDE, mô hình authn/authz đề xuất, SAQ A, rate limit đề xuất); chốt TẠM `OQ-050` chọn **PA-3** (service-to-service authn), yêu cầu `ADR-015`; §5/§8.2 PII/residency chưa có hiệu lực (`OQ-007`, Security chưa có người) | 2026-09-15 | Điều phối dự án (thay Tech Lead) | ~5 *(radar ước lượng PA-3, `SEC §2.4`)* |
## 8. Việc phải làm
| # | Việc | ADR liên quan | Chủ | Hạn | Mức |
|---|---|---|---|---|---|
| 1 | ~~Viết `ADR-001`~~ **Đã xong** ở lượt `adr` 2026-09-15 — 12 ADR viết đủ, tất cả `Proposed` | `ADR-001…012` | SA | — | ✅ Đóng |
| 2 | Chạy `POC-01` (throughput SQS/EventBridge) — chặn `ADR-005` chuyển `Accepted` | `ADR-005` | Tech Lead + DevOps | Trước khi `Accepted` `ADR-005`/`ADR-001` | 🔴 |
| 3 | Chạy `POC-02` (RDS gộp tải) — chặn `ADR-006` chuyển `Accepted` | `ADR-006` | Tech Lead/DBA | Trước khi `Accepted` `ADR-006`/`ADR-001` | 🔴 |
| 4 | Diễn tập DR (failover drill) — chặn `ADR-009` chuyển `Accepted`, cũng là điều kiện tiên quyết AG2 | `ADR-009` | Ops/SRE | Trước khi ký AG2 | 🔴 |
| 5 | PO chỉ định đại diện Pháp chế/Bảo mật — chặn `ADR-008` hoàn toàn (`OQ-007`) | `ADR-008` | PO | Càng sớm càng tốt | 🔴 |
| 6 | Tech Lead xác nhận `OQ-010`/`OQ-026`/`OQ-027` — chặn `ADR-012` chuyển `Accepted` | `ADR-012` | Tech Lead + Ops/SRE | Trước khi `Accepted` `ADR-012` | 🟠 |
| 7 | Security ký `ADR-002` (Payment cô lập) và `ADR-007` (ownership/authz) | `ADR-002`, `ADR-007` | Security | Trước AG2 | 🟠 |
| 8 | BA xác nhận `OQ-011` — chặn `ADR-003` chuyển `Accepted` | `ADR-003` | BA + PO | Trước khi `Accepted` `ADR-003` | 🟡 |
| 9 | Tech Lead + PO **thật** xác nhận `ADR-013` (không chỉ ký thay `DEC-01`); BA viết `SRS`/`AC` US-004 theo trạng thái mới; `ICD` lượt sau chốt endpoint polling/retry/chuyển COD (`OQ-041`) | `ADR-013` | Tech Lead + PO + BA + SA | Trước khi `Accepted` `ADR-013` / trước Dev thi công US-004 | 🟠 |
| 10 | ~~Viết `ADR-014`~~ **Đã xong** ở lượt `adr` 2026-09-15 (`DEC-31`) — Transactional Outbox, `Proposed` | `ADR-014` | SA | — | ✅ Đóng — còn nợ: Tech Lead xác nhận thiết kế relay (`OQ-044`) trước `Accepted` |
| 11 | ~~Viết `ADR-015`~~ **Đã xong** ở lượt `adr` 2026-09-15 (`DEC-31`) — Service JWT ngắn hạn (PA-3), `Proposed` | `ADR-015` | SA | — | ✅ Đóng — còn nợ: có đại diện Security thật ký (`OQ-007`, **chặn cứng `Accepted`**) + Tech Lead xác nhận hướng (`OQ-050`) |
| 12 | Tech Lead + Security + Ops/SRE xác nhận hướng PA-3 (không phải PA-2 mTLS) trước khi `ADR-015` có thể `Accepted` — `OQ-050`. **Security chưa có người (`OQ-007`) — đây là điều kiện chặn cứng nhất, đứng trước cả việc Tech Lead đồng ý nội dung** | `ADR-015` | Tech Lead + Security + Ops/SRE | Trước khi `Accepted` `ADR-015` | 🔴 |
| 13 | Viết `ADR-016`/`ADR-017` — **Đã xong** ở lượt `adr` 2026-09-15 (`DEC-31`) — Blue-green CodeDeploy + IaC Terraform, cả hai `Proposed` | `ADR-016`, `ADR-017` | SA | — | ✅ Đóng — còn nợ: Ops/SRE xác nhận năng lực vận hành + chạy thử ở staging (`ADR-016`); Tech Lead + Ops/SRE xác nhận công cụ (`OQ-060`, `ADR-017`) |
| 14 | Ops/SRE chạy thử blue-green deploy + rollback thành công ít nhất 1 lần ở staging — chặn `ADR-016` chuyển `Accepted` | `ADR-016` | Ops/SRE | Trước AG2 | 🟠 |
| 15 | Tech Lead + Ops/SRE xác nhận công cụ Terraform (`OQ-060`) và thiết lập backend state (S3+DynamoDB) — chặn `ADR-017` chuyển `Accepted` | `ADR-017` | Tech Lead + Ops/SRE | Trước AG2 | 🟠 |
## 9. Thống kê theo thời gian
| Kỳ | ADR mới | Superseded | Ghi chú |
|---|---|---|---|
| 2026-09-15 | 12 (`ADR-001…012`, tất cả `Proposed`) | 0 | Lượt chạy đầu tiên của hoạt động `adr` — trả nợ `DEC-06` |
| 2026-09-15 (cùng ngày, lượt sau) | 1 (`ADR-013`, `Proposed`) | 0 | Hoạt động `adr` phạm vi hẹp — hiện thực hoá Lựa chọn B của `OQ-034`/`DEC-22` (bất đồng bộ hoá bước khởi tạo thanh toán) |
| 2026-09-15 (cùng ngày, lượt cuối) | 4 (`ADR-014…017`, tất cả `Proposed`) | 0 | Hoạt động `adr` — trả hết 4 khoản nợ ADR còn treo từ `DEC-25`/`DEC-28`/`DEC-30` (outbox, service JWT, blue-green, Terraform). Tổng ADR nay là 17, không còn nợ nào |