This commit is contained in:
Canhchimlac
2026-09-15 16:02:30 +07:00
parent d169c85dd4
commit 343ad8bbbc
37 changed files with 9726 additions and 61 deletions

View File

@@ -2,13 +2,54 @@
| | |
|---|---|
| **Cập nhật** | 2026-09-10 |
| **Author** | sa-lifecycle (khởi tạo — khung rỗng, chưa có ADR nào) |
| **Tổng số ADR** | 0 |
| **Nguồn quét** | `02-architecture/adr/` *(chưa tồn tại — sẽ tạo khi ADR đầu tiên được sinh ở sa-2-architecture)* |
| **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.
> Khung khởi tạo — sẽ được `sa-conformance` cập nhật sau mỗi giai đoạn.
> 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`. |
---
@@ -16,7 +57,7 @@
| Trạng thái | Số lượng |
|---|---|
| `Proposed` | 0 |
| `Proposed` | 17 |
| `Accepted` | 0 |
| `Rejected` | 0 |
| `Superseded` | 0 |
@@ -24,9 +65,9 @@
| Cảnh báo | Số lượng |
|---|---|
| `Proposed` quá 10 ngày | 0 |
| Điểm radar ≥ 8 mà `Accepted` không có POC | 0 |
| Nguồn (`QAS`/`ASR`) đã đổi sau khi ADR được ký | 0 |
| `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 |
@@ -34,6 +75,23 @@
| 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
@@ -44,26 +102,43 @@ tích hợp · bảo mật · hạ tầng · frontend · vận hành
| `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
@@ -71,48 +146,125 @@ tích hợp · bảo mật · hạ tầng · frontend · vận hành
| `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 |