[CLAUDE] Docs: gotcha #88 disk-day + NTFS-compress .mdf -> RECOVERY_PENDING (fix compact /U + ONLINE, login 200, 0 mat data) + WAL reset dong S185

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-08-10 12:56:12 +07:00
parent b45a8fec63
commit 5860b84a95
4 changed files with 26 additions and 22 deletions

View File

@ -1,27 +1,11 @@
# WAL — auto-generated, không sửa tay
closing: S185 @2026-08-10T03:55+07:00 — 🔴 GIỮ NGUYÊN: closeout chạy TRỌN §L.b→§6.3-bis nhưng **PUSH HỎNG 3/3** (Gitea 502 + unpacker error; root HTTP 200 + ls-remote ĐỌC được ⇒ hỏng đường GHI, không phải mạng; ssh VPS timeout 2 ⇒ nghi máy quá tải). 36 commit local SẠCH chờ push.
updated: 2026-08-09T20:04+07:00 | session: S185/L13 (tiep-3, window-4) | branch: main
updated: — | session: — | branch: —
goal: YC-013 8-panel KHKK mirror DuyetNcc — SHIP `706134da` + verify 4/4 · YC-016 slot(67) tay-cầm-phiếu — SHIP `72568f05` + verify DLL prod. Giao diện SỐNG. Còn: acceptance-mắt-anh + acceptance-động-local + bookend @close + governance-vá + đóng sổ.
goal: (trống — không có mạch dở)
chain:
[x] window-1 (S182): bookend @open 5 vòng + YC-013 pipeline trọn + ship `706134da` + pause-1 — narrative: .claude/sessions/session-13/_context-s-13.md PAUSE-1
[x] window-2 (S183 /tiep): verify 4-chân `706134da` PASS (bundle ×2 rotate + marker KhkkN1 + DLL 3-hit + 8-row IsActive=1/pin-lệch-0) — lead-solo khai lệch-có-lý-do
[x] YC-016 slot(67) "(c) TAY CẦM PHIẾU": guard `EnsureApprovalAttachmentUploaderAsync` + wire Purpose-only + 8 test → suite 668/0 → SHIP `72568f05` → verify DLL prod `new-guard: 3` mtime 13:11:21 — verify: git log origin/main -1 --format=%h (=72568f05)
[x] pause-2 nghi thức: PAUSE-2 land trước chèn (curator #1) + MIND-2 (curator SUA-6 → sửa cả 6) + marker + snapshot
[x] acceptance MẮT-ANH: "Tạm OK" @YC-019(1) — YC-013/016 lật đóng
[x] acceptance ĐỘNG local @S185: A2-răng 2-tầng PASS (ô mờ hiện STATE THẬT DB=1, control-âm NV cùng cấp) + T8-động PASS (PUT-đổi-thật → 1 row changelog đúng shape; 3 echo-PUT = control-âm 0-row) + bonus guard-409 cờ-KẾT-THÚC sống runtime + revert sạch — verify: addendum `runs/2026-08-08-S182-khkk-awf-mirror-ncc/implement-synthesis.md`
[x] YC-021 TRỌN @S185 (4W + REVIEW): **W-2** ring5-audit land + wire-4-chỗ + **spawn-probe ALIVE fail-closed = verified-runtime CÙNG PHIÊN** (data-point hot-reload-file-MỚI ×2) · **W-1** day-wake 4/4 floor (`day-probe.ps1` fault-inject 4/4 · `/day` listed-in-session · 3-chạm + 2-guard F2) · **W-3** 500ms → goi-chot 4.3 PASS · **W-4** bảng-DRAFT (3 dòng owner-SỐ vá theo reviewer) + thư hub `0cbaccaafa73` re-stamp-OK + _index · REVIEW gói `PASS_WITH_FIXES 8MAJ/6m` → 8/8 MAJOR vá trước commit — verify: python scripts/stamp_verify.py broadcasts/outbox/ai_infra/2026-08-10-*.md (=OK) · CHỜ-ANH: gật bảng-DRAFT (3 dòng đã sửa: 380K/48/soft-cap-nhà-thật)
[x] bookend @close ONE-SHOT @S185 (YC-018 lượt đầu): 9 vai + 5 máy MỘT MẠCH — harvest 698KB→17-khối/11-sổ+7-tệp+7-lane · trio 40Đ/4T-183-số · H24-deep 16-FLAG trả-nợ-19/15 (tally máy @59) · ring2 16Đ/0T · ring1 30Đ/3T · tooling PWF-6 · ctx-audit 8-FLAG + MIND-3 (mind-check 11/11) · vá-sau-verdict: STATUS-668 + HANDOFF-12-slug-khôi-phục + sổ-YC-lật + A1/A2/A3 + (k-ter)-máy-3 · probe-sau: deep 0/15 ok, over-cap 5→3 — verify: test -s .claude/workflows/runs/2026-08-09-S185-bookend-close/bookend-close-synthesis.md
[ ] governance-vá + đóng sổ: CÒN gom nợ harvest 576.255B/18-lượt (uỷ-quyền slot 71) + STATUS/HANDOFF closeout + YC-013 lật đóng sau mắt-anh — ✅ @S185: orphan S182 ĐÓNG (`implement-synthesis.md` + 7/7 ô + 2-thước-im) · 3 site tự-quy-chiếu VÁ+verify (session-start:161-162 trỏ-enum thay chép-class · detectors.ps1 pre-marker-segment → 29 slug vào lưới EXIT=0 · HANDOFF:58 dòng-bổ-sung giữ ảnh-chụp)
[x] YC-017 ĐÓNG @S185: P1-P4 trọn — wf_5d16a842-28e 7/7 lane (16D+3P-đúng-luật+1S-khai; +C-7 lead tự vá rơi ⇒ 21/21 disposition) + verify-lead 3/3 + synthesis land — verify: test -s .claude/workflows/runs/2026-08-09-S185-email-adap-pipeline/implement-synthesis.md · tồn: C-1-đợi-rider-jump(nợ-chưa-có-chủ F-L2-2) · C-6-quyết-nén-ring2 · 4W+5-SKIP-owner (trình anh cuối lượt)
[x] adap thư 08-08 TRỌN @S185 (Harness-9 2-workflow): 3 phép-thử ĐO THẬT (sàn-vs-trần ring2 DƯƠNG 24.793=96,8%cap+A5 · công-cụ-nói-dối ÂM 3/3-khớp · đo-trước-gộp DƯƠNG→vá `(f-bis)` session-end) + REVIEW độc-lập `PASS_WITH_FIXES` (2 FIX áp: nhãn f-bis + "dưới ràng-buộc A5") + K5 "đèn KHÔNG đếm 11 lớp" ghi vào report — verify: test -s docs/governance/adap-reports/2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc.md
(rỗng)
wf: ✅ orphan S182 ĐÓNG @S185 (window-4): `implement-synthesis.md` VERIFIED (2 khai lệch: 659-literal→660-lúc-ship · engine-mix Fable/Opus) + 7/7 ô bảng tick + detector-①-im + probe 1→0. 🧊 vết cũ giữ 1 dòng: _mind:108 `find -newermt` chạy trên path không tồn tại — thước hỏng, kết-luận 0-fan-out window-2 vẫn đúng (đo lại mtime); đính-chính hẹn MIND-3.
next: (trống)
next: 🔴 **VIỆC ĐẦU TIÊN phiên sau = `git push origin main`** (36 commit ahead, cây sạch, commit chốt `38896120`). Hỏng tiếp ⇒ chẩn VPS (disk/gitea service) TRƯỚC khi làm việc khác — KHÔNG bypass, KHÔNG force. Push xong ⇒ xoá dòng `closing:` + reset WAL template (§6.4 còn nợ đúng 2 thao-tác đó). 🧊 next cũ: [YC-018 CẤU HÌNH XONG @S185: ONE-SHOT 2-site session-start/end + CLAUDE.md trỏ + sổ YC-018] → đợi P4 wf_5d16a842-28e xong → verify 7 lane + synthesis + tick P4 → 🔴 bookend @close TRỌN MỘT LƯỢT theo luật ONE-SHOT mới (deep-sweep 19/15 + trio tuần-tự + cặp H24 + ring2 + ctx-audit mồi + gom nợ harvest 576KB + MIND-3 đính-chính [_mind:108 thước-hỏng · V-5 nhà=WAL:24 · D5/D6 hạ nhãn] — KHÔNG rải cửa) → acceptance-động-local → chờ mắt-anh 8-panel lật YC-013/YC-016
verify: git log origin/main -1 --format=%h (=72568f05) ; dotnet test SolutionErp.slnx (=668/0) ; ssh vietreport-vps grep DLL EnsureApprovalAttachmentUploaderAsync UTF-8 (=3, khuôn EncodedCommand ở _context PAUSE-2)
treo-chờ-anh (SAU YC-019 @S185): ring5(41)=W-2 + W-1/W-3/W-4 + 5-SKIP-owner (đã GIẢI THÍCH, chờ phán) · việc-VẬT-LÝ-anh: (73) restart CLI · (74) rotate vrapp — 🧊 ĐÓNG @S185: VK-5 (phán @S181:49 thi hành @S185) · (72)+E1 (-Detail cắm) · 4-câu-S181 · JUMP→deep_every=1 · YC-013/016/017/018 · C-6 (nén ring2 24.859B dưới cap)
việc-CỦA-EM (ctx-verifier cờ-8/9/10 — KHÔNG đẩy sang anh): 🔴 V-5 vị-từ mã-hoá chưa cắm — **DI-TRÚ vào WAL @S184** vì đo 0 hit ở WAL·HANDOFF·STATUS (control-dương 4/34/10 ⇒ grep sống), nhà cũ chỉ `_mind:96` + `bao-cao-cuoi.md:79` artifact ĐÃ ĐÓNG ⇒ nén `_mind` là mất HẲN, carry lần 3 · đề-nghị ring2 "đòi phép đo trước khi vào tally" (cùng cảnh 0-hit) · sửa ring1-persona "CẤM chạy @open" thối 5 phiên (WAL cũ chỉ chở MỒI cho ctx-audit, KHÔNG chở việc SỬA) · D5/D6 ĐÃ SHIP — gỡ khỏi ngăn chờ-anh, chỉ chờ veto, KHÔNG chặn
verify: (trống)

File diff suppressed because one or more lines are too long

View File

@ -50,3 +50,7 @@ completeness-gate S185: vong 4/5 chuc-nang (khong-nhip: V4 nén-ngủ — SHARD-
3. **`(f-bis)` chứng giá trị ngay lần đầu**: seed M9 đẩy `ctx-audit` vượt cap — đo-trước-seed như cũ thì sổ ghi số CHẾT.
4. **Bẫy `grep -c || echo 0` tái diễn lần 4** (chính lead, ngay trong closeout đang đọc luật cấm nó) — bằng chứng lặp lại: *bài học viết ra không tự chặn được gì; chỉ luật soi-được mới chặn*.
5. **`value_protect` 0/10 phủ hợp-đồng-vai** — máy đúng luật của nó khi rủ drain `Role baseline`; luật mới là thứ mù. Chính sách ⇒ owner phán (đã phán: YC-019(2)).
## ADDENDUM — Sự cố prod SAU closeout (cùng đêm, gotcha #88)
Push closeout hỏng 3/3 (Gitea 502 + unpacker) → giữ sentinel `closing:` đúng luật Sàn-2 → anh báo disk quá tải rồi "không đăng nhập được". Truy chuỗi: login 500 `transient failure UseSqlServer` → errorlog `Failed to open database 'SolutionErp'`**RECOVERY_PENDING ×2 DB** → SET ONLINE fail **Msg 5118 file-is-compressed** = Disk-Cleanup nén NTFS đúng các .mdf/.ldf đang đóng. Fix theo phương án anh duyệt (copy-trước): OFFLINE từng DB → backup `C:\DBBackup-20260810` 4/4 → restart service nhả handle → `compact /U` → ONLINE → `Recovery is complete`, login **200 + token**, data nguyên (58 PE · 21 user · 12 KHKK · 97 bảng). Push lại **THÔNG** `72568f05..b45a8fec`, ahead 0 → §6.4 trả nợ (xoá sentinel + reset WAL) trong lượt này. 🔴 Treo cho anh: **1433 phơi Internet — `sa` bị brute-force liên tục** (thấy trong errorlog); đề xuất chặn firewall/disable sa — em không tự đổi security setting.

View File

@ -1406,6 +1406,21 @@ for h in resp.points: # ← .points không phải iterable trực tiếp
**Fix:** (1) Verifier đọc run **CUỐI của commit-range** (run của push mới nhất HEAD chứa mọi commit trước), CANCELLED giữa range = cơ-chế, KHÔNG phán fail; (2) bằng-chứng ship lấy **artifact-level** (bundle-hash rotate + marker set + seeder log + smoke), không nhãn run per-commit; (3) cần verdict/side-effect per-commit riêng (vd đo seeder từng đợt) giãn push hoặc re-run tay. Nguồn: `runs/2026-07-31-S164-4gd-khkk-fanout/sub-cicd-verify-k7.md` M0/M4.
### 88. Windows "giải phóng dung lượng" NÉN file .mdf/.ldf → SQL Server RECOVERY_PENDING, login prod 500 (Session 185)
**Triệu chứng:** login prod trả **500** sau ~10s, detail `"transient failure … UseSqlServer"`; errorlog SQL: `Login failed for user 'vrapp'. Reason: Failed to open the explicitly specified database 'SolutionErp'`; `sys.databases` `SolutionErp` + `VietReport` = **RECOVERY_PENDING** (các DB khác ONLINE). Web tĩnh/IIS vẫn 200 hết nhìn ngoài tưởng "chỉ hỏng login".
**Cơ chế (chuỗi 2 tầng):** (1) **disk C: đầy** SQL không ghi được 2 DB rơi RECOVERY_PENDING, file bị đóng; (2) người/Storage Sense chạy **Disk Cleanup "compress"** để free dung lượng NTFS **nén được đúng các file .mdf/.ldf đang ĐÓNG** (DB đang ONLINE thoát nạn file bị khoá). SQL Server **từ chối mở file nén** cho DB read-write `ALTER DATABASE SET ONLINE` fail `Msg 5118 "file is compressed"`. Cùng sự cố disk làm Gitea push chết (`502` + `unpacker error`) 2 triệu chứng tưởng không liên quan, 1 gốc.
**Fix (đã chạy thật S185, downtime ~1 phút):**
1. `ALTER DATABASE [X] SET OFFLINE` từng DB (KHÔNG dừng cả instance khi chưa cần DB khác còn sống).
2. Copy .mdf/.ldf ra `C:\DBBackup-<date>` làm bản lùi (NTFS tự giải nén khi đọc bản copy hợp lệ).
3. File vẫn bị giữ handle sau lần ONLINE-fail `Restart-Service MSSQL*` (DB OFFLINE không được mở lại lúc startup handle tự do).
4. `compact /U <4 file>` + `compact /U <folder DATA>` (gỡ cờ nén folder kẻo file mới sinh bị nén tiếp).
5. `ALTER DATABASE [X] SET ONLINE` recovery chạy sạch. Verify: `state_desc=ONLINE` + errorlog `Recovery is complete` + login API 200 + đếm row bảng chính khớp.
**Luật:** thấy `Msg 5118` / RECOVERY_PENDING sau sự cố disk **`compact <file>` kiểm cờ nén TRƯỚC** khi nghĩ tới restore backup; **CẤM bật compression trên cây thư mục SQL DATA** (freeing-space bằng nén = bẫy hẹn giờ cho mọi DB đang offline/detached). Bonus bảo mật lộ ra cùng lượt đọc errorlog: port 1433 phơi Internet, `sa` bị brute-force liên tục từ IP lạ firewall riêng.
## Checklist debug bug mới
1. Build pass không? fail check using + package version compat
@ -1444,3 +1459,4 @@ for h in resp.points: # ← .points không phải iterable trực tiếp
33. Nếu thêm enum value vào entity DÙNG-CHUNG mà UI/guard phân-loại sai (file lẫn section / false-pass guard) → grep MỌI predicate field-proxy (`supplierId===null`...) loại value mới + build-verify TỪNG app riêng (#71)
34. Nếu Gitea Actions run CANCELLED ngay sau khi push 2 commit sát nhau → auto-cancel cùng-branch: đọc run CUỐI của range + verify artifact-level (bundle/marker/seeder-log), KHÔNG đọc CANCELLED thành deploy-fail; side-effect @startup chỉ chạy 1 lần cho cả cụm (#86)
35. Nếu probe endpoint để hỏi **authz** mà nhận **415/411** → đó là mã **PRE-AUTH**, vô nghĩa cho câu hỏi authz: request bị loại ở tầng **action-selection / IIS** TRƯỚC authorization filter. Re-probe đúng dạng body (multipart cho endpoint upload; có body cho SignalR negotiate) rồi mới đọc 401/403 (#87)
36. Nếu login prod 500 "transient failure UseSqlServer" + DB RECOVERY_PENDING sau sự cố disk đầy → check **cờ nén NTFS** trên .mdf/.ldf (`compact <file>`, Msg 5118): SET OFFLINE → backup copy → restart service nhả handle → `compact /U` → SET ONLINE. CẤM nén cây SQL DATA (#88)