wal: flush 20260801T0930
This commit is contained in:
@ -99,6 +99,66 @@ tốn 1 lượt điều tra.
|
||||
- Vá-15 (2 khuôn key trong `MenuKeys.cs`) **ĐÚNG**: `Ct_*`/`Pe_*` thật sự KHÔNG có trong `All`
|
||||
(chỉ factory), còn `AwV2_*`/`Khkk_G*` có ⇒ mô tả 2 khuôn không tự mâu thuẫn.
|
||||
|
||||
## Mục 2 — DELTA `Menu keys` 113 · `Policies` 452 (ĐO ĐỘC LẬP, không tin test cũng không tin lane)
|
||||
|
||||
Phép đo tự dựng (parse `MenuKeys.cs`, KHÔNG gọi lại bộ sinh — tránh tautology): tách phần tử của
|
||||
`All`, phân biệt token thường vs token spread, resolve từng `const string` sang giá trị chuỗi, rồi
|
||||
tự bung 7×(1+6):
|
||||
- token thường = **64** · resolve được **64/64** (0 token không tra ra hằng)
|
||||
- spread duy nhất = `.. KhkkGroupMenuKeys` → bung **49**
|
||||
- **|All| = 113** · **trùng lặp = 0** (`duplicates: []`)
|
||||
- **Policies = 113 × 4 = 452**, khớp đúng vòng sinh `Program.cs:82-89`
|
||||
(`foreach menu in MenuKeys.All / foreach action in MenuKeys.Actions / AddPolicy($"{menu}.{action}")`),
|
||||
`Actions` = 4 phần tử (`MenuKeys.cs:252`). Đây là chỗ DUY NHẤT sinh policy theo menu-key
|
||||
(`grep AddPolicy Program.cs` = 2 hit, hit còn lại `:113` là rate-limit `auth-login`, không tính).
|
||||
⇒ **452 = 113×4 ĐÚNG LOGIC SINH**, không phải số chép tay. PASS.
|
||||
|
||||
STATUS.md (lead vá SAU khi spawn — coi là phần của commit K4a):
|
||||
- `:6` Menu keys **64→113** ✔ khớp máy · Policies **256→452** ✔ khớp máy.
|
||||
- bảng canonical `:470-471` **452** + **113** ✔ khớp máy, kèm câu "test T2 đỏ nếu drift" — câu này
|
||||
ĐÚNG (T2 assert `HaveCount(113)`), tức con số có phép-kiểm-làm-nó-trượt. Đạt cổng nhãn-đo-lường.
|
||||
- `:6` test **614→620** (45D + 575I): file test mới có đúng **6 `[Fact]`** (`grep -c` = 6) ⇒ số học
|
||||
khớp. Đang chạy `dotnet test SolutionErp.slnx` để đo tươi (kết quả ghi ở mục 8).
|
||||
- bảng canonical `:465` Mig **71**: đếm đĩa `src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/`
|
||||
(bỏ `.Designer.cs` + `ModelSnapshot`) = **71** ✔ khớp.
|
||||
|
||||
🔴 **FLAG C (MAJOR) — ô canonical bundle `STATUS.md:479` SAI NGAY LÚC VIẾT, đo bằng 2 lệnh curl.**
|
||||
Ô mới ghi admin **`mySTlx42`** (css `Cf3iCOOv`) · user/eoffice **`CZAYiWWa`** (css `DX1FRk5n`).
|
||||
Đo LIVE 2026-08-01 trong lượt review:
|
||||
|
||||
| Site | STATUS vừa ghi | Đo live (`curl \| grep assets/index-`) | Khớp? |
|
||||
|---|---|---|---|
|
||||
| admin.solutions.com.vn (js) | `mySTlx42` | **`1yiNV4VH`** | ✗ |
|
||||
| admin (css) | `Cf3iCOOv` | `Cf3iCOOv` | ✓ |
|
||||
| eoffice.solutions.com.vn (js) | `CZAYiWWa` | **`DoULfmdT`** | ✗ |
|
||||
| eoffice (css) | `DX1FRk5n` | `DX1FRk5n` | ✓ |
|
||||
|
||||
2 css khớp ⇒ phép đo của tôi đang trỏ ĐÚNG site (không phải đo nhầm chỗ). Chỉ 2 hash JS lệch — đúng
|
||||
như chính ô đó tiên đoán ("F-1 `7a903cf` + K4a push sau đó SẼ rotate tiếp"). Vấn đề: ô này là **hàng
|
||||
canonical**, và nó đang ghi giá-trị đã chết trong khi giá-trị sống lấy được bằng 1 lệnh curl 25 giây.
|
||||
Sửa rẻ: hoặc thay bằng 2 hash vừa đo, hoặc ghi thẳng "chưa đo lại sau `7a903cf`" thay vì để hash cũ
|
||||
đứng ở ô canonical. (Đây là ca *claim mạnh hơn việc đã làm* — nhãn "FROZEN-hợp-lệ K3" đọc như đã-xác-
|
||||
nhận, nhưng thứ được xác nhận là mốc K3, không phải trạng thái prod lúc commit.)
|
||||
|
||||
## Mục 3 — vá-4/12: diff có CHẶN phép đo prod không?
|
||||
|
||||
**Không chặn.** Đo từng vế:
|
||||
- A4 (`SELECT DISTINCT MenuKey FROM Permissions WHERE MenuKey LIKE 'Khkk%'` ⊆ `MenuItems.Key`):
|
||||
mọi key được grant đều có menu-row — site-1 cấp theo `MenuKeys.All` (113 key, invariant T6 K1 phủ),
|
||||
site-2 cấp `KhkkKeys()` = 7 key G1 (có row cứng ở tree initializer) + 49 key mới (có row từ vòng
|
||||
seed mới) ⇒ tập grant ⊆ tập row **by-construction**. Không có đường sinh Permission cho key
|
||||
không-row.
|
||||
- A5 (restart ×2 → `Khkk%` = 56 row): 7 + 49 = 56; không key nào khác bắt đầu bằng `Khkk`
|
||||
(`AwV2_KhkkN*` bắt đầu bằng `AwV2`) ⇒ phép đếm `LIKE 'Khkk%'` sạch, không nhiễu.
|
||||
- ⚠️ **Bẫy CHO LANE CICD, không phải lỗi của diff:** `MenuItems` có 2 cột override
|
||||
(`MenuItem.cs`: `IsVisible` mặc định `true`, `DisplayLabel` nullable — Mig 27). Seeder **không bao
|
||||
giờ ghi 2 cột này** (`grep DisplayLabel DbInitializer.cs` = 0 hit) ⇒ 49 row mới sinh ra `IsVisible=true`,
|
||||
`DisplayLabel=null` (đúng, hiện được). NHƯNG với `Khkk_G1` trên prod: nếu admin từng bấm đổi tên qua
|
||||
`PATCH /api/menus/{key}` thì `DisplayLabel` khác null và **fe-user render `DisplayLabel`, không phải
|
||||
`Label`** (`GetMyMenuTreeQuery.cs:86-88`) ⇒ acceptance đo NHÃN TRÊN UI có thể thấy chữ cũ dù
|
||||
`labelBackfill` đã đổi `Label` thành công. ⇒ khi nghiệm thu A5 phải đo `Label` **bằng SQL**, và nếu
|
||||
đo trên UI thì kiểm `DisplayLabel IS NULL` trước. Ghi ra đây để cicd không kết luận nhầm "backfill hỏng".
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -9,6 +9,11 @@
|
||||
## taskList
|
||||
| # | vai | trạng thái |
|
||||
|---|---|---|
|
||||
| 1 | lead-stale-auditor (deep) | spawned @S166 |
|
||||
| 2 | lead-gap-auditor (deep) | spawned @S166 |
|
||||
| 3 | ring2-audit (SAU khi 1+2 trả) | ☐ |
|
||||
| 1 | lead-stale-auditor (deep) | ✅ 11 FLAG (4H/5M/2L) coverage 8/8-chạm-2-PARTIAL = SÀN — #53 ×2, resume-3 chốt |
|
||||
| 2 | lead-gap-auditor (deep) | ✅ 6 FLAG (4H/2M) coverage 6/6 — #53 ×1, resume-2 chốt; FLAG nặng nhất bắt chính lead (_mind đọc cụt 165/270, vá trong phiên) |
|
||||
| 3 | ring2-audit (SAU khi 1+2 trả) | ✅ **16Đ/1T** — TRƯỢT duy nhất = stale F-8 (đo sai phạm-vi HANDOFF, kết-luận lật ngược; lead đã chép sai vào WAL:33 → đính chính @S166); khuôn C11 17/17 · enum 0-tự-chế · tally ĐẠT |
|
||||
|
||||
## Kết vòng (lead @S166)
|
||||
- last_audit light=deep=**40** · tally 13-cặp ratified (gap-carry-dropped 9 consecutive) · detectors re-run: canonical resolve 97/71 ĐÚNG (poison STATUS:465-472 đã gỡ cùng lượt vá 5-row).
|
||||
- Resolve còn treo → WAL closeout-nợ (F-4 CLAUDE-mig · F-5/F-6/F-9/F-10/F-11 · errata INFORM 2-5 của ring2 ghi tại artifact nó).
|
||||
- Bài đắt nhất vòng: **lead chép claim vai-đo TRƯỚC vòng-kiểm vào sổ = suýt đóng owner-decision (59) bằng tiền-đề sai ngược chiều** — ring2 tồn tại đúng để bắt ca này; từ nay claim ĐẢO-DẤU/LẬT-TIỀN-ĐỀ của vai-đo chỉ vào WAL SAU khi vòng-kiểm chốt.
|
||||
|
||||
@ -286,3 +286,134 @@ mục 7 **CÒN MỞ** thật (`detectors-output.txt:14-25` vẫn kêu `ef-core-m
|
||||
Kết *"không được nói 0/11, cũng không được nói xong hết"* — **đúng và can-đảm**.
|
||||
|
||||
---
|
||||
|
||||
# §5 — FALSIFY-LOG (7 phép · 3 HELD · 4 BROKE)
|
||||
|
||||
🔴 **3/4 BROKE nhắm vào nghi-vấn của CHÍNH TÔI** — ghi đủ để không tạo báo-động-giả (bài S149/S150/S162).
|
||||
|
||||
**F-1 · BROKE (nghi-vấn của chính tôi) — "stale bịa mig=71, đĩa chỉ có 70"**
|
||||
Phép: `ls *.cs | grep -v 'Designer\|Snapshot' | wc -l` → **70** ≠ 71 ⇒ suýt buộc tội thổi số.
|
||||
Phản-chứng: `ls *.cs | grep 'Snapshot'` lòi ra **`20260717032812_AddPeApprovedBudgetSnapshot.cs`** — một
|
||||
**migration mà TÊN chứa chữ "Snapshot"** (Mig 67, PE freeze ngân-sách S133). Chính bộ lọc của tôi nuốt nó.
|
||||
Đếm đúng: `ls *.cs | grep -E '^[0-9]{14}_' | grep -v '\.Designer\.cs$'` = **71** ✓, và
|
||||
`detectors-output.txt:4 disk cross-check: mig=71` xác nhận độc-lập. ⇒ **stale ĐÚNG, tôi SAI.**
|
||||
Cùng lớp bẫy `grep -c` vs `-o|wc -l` (S150) và en-dash-alternation (S149): **bộ lọc phủ-định là dao hai lưỡi.**
|
||||
|
||||
**F-2 · BROKE (nghi-vấn của chính tôi) — "stale trích `honest_caveats.token_estimate` = khoá TREO"**
|
||||
Phép: `json['honest_caveats']` → **null** ⇒ nghi nó trích công-thức không tồn tại.
|
||||
Phản-chứng: probe đường khác (`grep -n 'token_estimate'`) → khoá có thật, **lồng trong `token_governor`**
|
||||
tại `:105-106`, nguyên văn *"report a RANGE **[bytes/4 .. bytes/3.0]**; FIT verdict uses bytes/3.0"*.
|
||||
⇒ **stale trích ĐÚNG công-thức** (chỉ rút gọn đường dẫn). Tôi giữ nguyên dải nó dùng khi tính lại F-8.
|
||||
|
||||
**F-3 · BROKE (nghi-vấn của chính tôi) — "gap bịa `lead-gap-auditor` có `archive/2026-07.md`"**
|
||||
Phép: `ls` gộp 2 thư mục → phần `lead-gap-auditor/archive/` hiện **rỗng**.
|
||||
Phản-chứng: chạy lại **tách riêng** → có `2026-07.md` **22.645 B** + `2026-07.gist.md` + `_INDEX.md`.
|
||||
Lần đầu tôi cắt bằng `head -8` nên listing thứ hai bị nuốt. ⇒ **gap ĐÚNG, tôi SAI** (lần thứ 3 cùng lượt).
|
||||
|
||||
**F-4 · BROKE (nhắm vào CON-ĐO) — "TỔNG 180.649 B của stale F-8"** → xem §3.
|
||||
Phạm-vi HANDOFF sai (`:1-117` thay `:1-40`, biên `:41` = `🧊 (Last updated cũ)`), thổi **+60.016 B**.
|
||||
Đúng phạm-vi = **120.633 B** ⇒ ~30-40K tok ⇒ **vẫn dưới sàn 40K** ⇒ mệnh-đề "ĐẢO DẤU" **BROKE**.
|
||||
Control chống vu-oan: tổng-trọn-file dựng lại = **424.634** khớp **tuyệt đối** con số stale tự khai ⇒
|
||||
byte-đo của nó chuẩn, **chỉ phạm-vi sai**.
|
||||
|
||||
**F-5 · HELD — thử bác FLAG-7 (`_INDEX` 101,23%)**
|
||||
Đo độc-lập từ `tiers.l2_index.cap_bytes`: `20.731 / 20.480` = **101,23 %**, headroom **−251 B** — trùng
|
||||
tới từng byte. Thử bác thêm bằng "cap có thể đã được nâng": `cap_bytes` ở cây tươi vẫn **20.480**. **Không bác được.**
|
||||
|
||||
**F-6 · HELD — thử bác FLAG-3 bằng "cây tươi nói counter 40 ⇒ FLAG oan"**
|
||||
`git show HEAD:` ra **39**; `mtime STATUS.md 09:21:06` > `mtime sub-lead-stale 09:05`; `git diff --stat` = 6+/6−.
|
||||
⇒ **vá-SAU, không phải flag-oan.** Phép bác của tôi tự sụp. (Đúng bài S162 — lần thứ hai cứu được nhờ `HEAD:`.)
|
||||
|
||||
**F-7 · HELD — thử bác honest-zero `gap-incident-unrecorded`** → xem §6.
|
||||
|
||||
---
|
||||
|
||||
# §6 — THÁCH honest-zero + thách-CLEAN (bắt buộc khi con-đo tuyên 0)
|
||||
|
||||
## 6a. `gap-incident-unrecorded = 0` — **CÓ RĂNG, không phải 0-rỗng**
|
||||
|
||||
Lý-lẽ gap: class đòi *"0 hit trên **bất-kỳ** sổ bền nào"*; `_context-s-9.md:62` **CÓ** ghi cả 2 escalate S163
|
||||
⇒ không đủ điều-kiện ⇒ không phát flag. **Tôi xác-nhận `:62` verbatim:**
|
||||
> *"2 ESCALATE của `harness-audit` chưa xử: (i) backstop G-015 rỗng-hoá vì Stop-hook nuốt `agent-memory` vào
|
||||
> commit trước khi lead soát · (ii) stray `agent-cwd-relative-memory-misland` tái phát ×3/phiên"* ✓
|
||||
và `error-ledger.md` = **0 hit** ✓ (đúng như nó khai — nó **không giấu** vế bất-lợi).
|
||||
|
||||
🔴 **Tôi thách bằng tập-đo KHÁC nó: sự-cố CỦA CHÍNH PHIÊN S166.** Nếu 8 lượt `#53` + engine-exit phiên này
|
||||
không nằm ở sổ bền nào thì honest-zero vỡ. Kết quả — **`.claude/WAL.md:28-29` có ghi, đích danh và có số:**
|
||||
> `[ ] closeout-nợ: … · tally #53 CHỐT (S166 tới giờ: cicd×2 + reviewer×2 + stale×2 + gap×1 + laneBE×1
|
||||
> = 8 lượt #53-return / 0 mất công, artifact cứu hết)`
|
||||
|
||||
`WAL` nằm trong `tiep_reload.sources` (đọc **trọn**) ⇒ **sự-cố phiên này CÓ nhà**. **honest-zero HELD.**
|
||||
|
||||
**2 caveat tôi phải khai (không làm tròn thành sạch):**
|
||||
1. `WAL` ghi `gap×1`, trong khi sổ auto-memory ghi `lead-gap ×2` (lần 1 = **skeleton-nấc-2**, 1.302 B).
|
||||
Chênh **1**. Nhưng dòng WAL tự gắn nhãn *"S166 **tới giờ**"* + nằm trong mục **"tally #53 CHỐT"** của
|
||||
closeout-nợ ⇒ **tự khai là tạm, chưa chốt** ⇒ trung-thực, không phải giấu. Đề-nghị lead chốt số ở closeout.
|
||||
2. **Lượt chạy này của TÔI cũng chết một lần (engine-exit sau §2).** Nó xảy ra **SAU** khi cả 2 con-đo trả
|
||||
(09:05 / 09:06) ⇒ **CẤM tính vào lỗi của chúng**. Time-drift bảo-vệ cả hai chiều — tôi đã dùng nó để cứu
|
||||
FLAG-3 của stale thì cũng phải dùng nó để tha cho cặp ở đây.
|
||||
|
||||
## 6b. Thách 2 mục stale tự tuyên "SẠCH"
|
||||
|
||||
- **Nhóm 4 (roster) SẠCH ⇒ HELD.** Soi đúng ô nó tuyên sạch (bài S150 — *CLEAN nguy nhất ở class con-đo tự
|
||||
tuyên 0*): `ls .claude/agents/*.md` = 24 − README = **23** ✓ · `README:242` dài **1.788 B** ✓ chứa **đủ cả 3**
|
||||
`ctx-*` ✓ có `13 monitor` ✓. **Không bới được FLAG sót.** Đây là đảo chiều so với S150 (khi đó tôi bắt được M-1
|
||||
ở đúng ô này) — lần này ô đó **đã lành thật**.
|
||||
- **Nhóm 8 (mirror) "SẠCH trong phạm-vi đã soi" ⇒ chấp nhận**: nó **tự dán PARTIAL**, không làm tròn. Ghi-chú
|
||||
*"đếm file thô 3-vs-1 trông y hệt sửa-một-phía — phải mở TÊN file"* là **phòng dương-giả đúng chỗ**.
|
||||
- **gap: 9/9 slot cũ SẠCH ⇒ HELD.** Nó tự dựng **control ÂM** `(63)`/`(64)` = 0 ⇒ chứng phép đo **phân-biệt
|
||||
được**, không phải luôn-dương. Tôi chạy lại: 0/0 ✓. Đây là khuôn honest-zero **đúng chuẩn**.
|
||||
|
||||
## 6c. 🔴 Chỗ tôi KHÔNG tuyên sạch được (giữ nguyên nấc, cấm làm tròn)
|
||||
|
||||
`lead-stale` tự khai coverage **8/8 chạm nhưng 2/8 PARTIAL** — nhóm 7 mới soi **2/23 persona**. Tôi **giữ nguyên
|
||||
nấc "chưa xác định"**, KHÔNG đọc 11 FLAG thành TỔNG. Chính nó cũng dự-báo *"quét nốt 21 persona gần như chắc
|
||||
có thêm FLAG cùng class"* và tự khai **điểm mù tự-quy-chiếu** (chưa loại trừ được `lead-stale-auditor.md` /
|
||||
`lead-gap-auditor.md` đang mang số/nhịp lệch — đúng M-1 tôi bắt @S153). **Khai SÀN như vậy là hành-vi ĐÚNG**,
|
||||
tôi ghi nhận dương chứ không trừ điểm.
|
||||
|
||||
---
|
||||
|
||||
# §7 — TỔNG KẾT
|
||||
|
||||
## Verdict: **16 ĐẠT / 1 TRƯỢT** trên 17 FLAG
|
||||
|
||||
| vai | ĐẠT | TRƯỢT | ghi chú |
|
||||
|---|---|---|---|
|
||||
| `lead-stale-auditor` | **10** | **1** (FLAG-8) | 11 FLAG · 4H/5M/2L |
|
||||
| `lead-gap-auditor` | **6** | 0 | 6 FLAG · 4H/2M/0L |
|
||||
|
||||
- **Khuôn C11:** 17/17 đúng `## FLAG-<n> — \`<class>\` — SEV` ⇒ máy đếm được.
|
||||
- **Enum ĐÓNG:** 17/17 ∈ 11 class · **0 tự chế** · **0 ca ép-vừa-enum** (bài S162 không tái-phát).
|
||||
- **Tally:** 9 class fired +1 · 2 non-fired giữ 0 · 11 key hai phía · counter 39→40 · light=deep=40. **ĐẠT.**
|
||||
- **C4b tuần-tự:** artifact này ghi sau mtime cả hai con-đo (09:05 / 09:06). ✓
|
||||
|
||||
## 🔴 Câu nặng nhất
|
||||
|
||||
**`lead-stale` FLAG-8 quan-sát ĐÚNG (số ở `HANDOFF:19` thật sự stale, 71.492 → 120.633 B) nhưng đo SAI PHẠM-VI
|
||||
HANDOFF (`:1-117` nuốt 7 header `Last updated` cũ thay vì segment `:1-40`), thổi tổng +60.016 B và **lật ngược
|
||||
kết-luận**: đúng phạm-vi vẫn là **~30-40K tok, DƯỚI sàn 40K** — không hề "đã ĐẠT dải". Lead **đã chép cái sai
|
||||
vào `.claude/WAL.md:33`** (`F-8 … ĐẢO-DẤU 180.649B-đã-đạt-dải`), nên nếu closeout thi hành resolve của nó
|
||||
(*"câu hỏi có thể tự tiêu"*) thì **một owner-decision đang treo bị đóng bằng tiền-đề sai, và đóng ngược chiều**.**
|
||||
|
||||
## INFORM cho lead (không đổi verdict — nhưng nên vá cùng lượt)
|
||||
|
||||
1. 🔴 **`WAL.md:33`** — sửa `180.649B-đã-đạt-dải` → `120.633 B ~30-40K tok, VẪN DƯỚI sàn`; slot (59) **còn sống**.
|
||||
2. `gap` FLAG-5: *"27 finding"* → **24** (6+10+8). Bản liệt-kê ID đúng, chỉ tổng sai.
|
||||
3. `gap` FLAG-1: lệnh `grep -n 'chỉ-sống-ở-đây'` không tái-lập (bản thân dùng **khoảng trắng**); và `:200` → **`:201`**.
|
||||
4. `gap` FLAG-3: thêm `sed -n '1,40p' |` vào lệnh `Carry @S` — chạy trên cả file ra **3** giá-trị, dễ bị đọc thành FLAG sai.
|
||||
5. `gap` FLAG-6: `lead-gap-auditor/MEMORY.md` nay **12.551 B** (nó ghi 10.777; mtime 09:11:25 **sau** lượt đo
|
||||
09:06 — diary vừa được seed). Hướng "đã refine" **không đổi**.
|
||||
6. `stale` FLAG-1/FLAG-3 **đã được lead vá một phần trong lúc tôi chấm** (`STATUS.md` 6+/6− @09:21, counter 39→40).
|
||||
Nên re-chạy `governance-detectors.ps1` sau khi vá nốt 5 ô canonical — kỳ vọng FLAG `SKILL.md:93` biến mất và TOTAL đổi.
|
||||
|
||||
## Ranh-trục + caveat
|
||||
|
||||
Tôi **KIỂM 2 con-đo**, **KHÔNG tự soi lead** (chỉ chạm bề-mặt lead ở mức tái-dựng số của chúng + phép thách-CLEAN
|
||||
tại §6b). Không lấn `ring1-audit` / `harness-audit` / `reviewer` / `ring4-audit`.
|
||||
🔴 Caveat read-only: frontmatter khai thiếu Write/Edit **không có răng runtime** (`[carry:tools-whitelist-no-teeth]`
|
||||
S143) — backstop THẬT = lead soát `git status` + commit-gate. Lượt này tôi **chỉ Write đúng artifact này**, 0 Edit
|
||||
doc, 0 commit, 0 RAG-write. **Propose-only — tôi PHÁN, lead GHI.**
|
||||
|
||||
END sub-ring2-audit-deep-S166 — VERDICT=16 ĐẠT / 1 TRƯỢT trên 17 FLAG (stale 10Đ/1T · gap 6Đ/0T) ·
|
||||
khuôn C11 17/17 · enum 17/17 · tally 11/11 key ĐÚNG · falsify 7 (3 HELD / 4 BROKE, 3 BROKE vào nghi-vấn của chính tôi)
|
||||
|
||||
Reference in New Issue
Block a user