wal: pause

This commit is contained in:
pqhuy1987
2026-08-06 17:23:41 +07:00
parent e1942a5b7c
commit ee21056442
10 changed files with 217 additions and 73 deletions

View File

@ -32,6 +32,7 @@
- [Prod config: inspect-before-change](feedback_prod_config_inspect_before_change.md) — đổi config prod = inspect LIVE trước (runbook STALE); backup→apply→verify-LIVE→commit; replicate mọi rule cũ + delta (S88)
- [Wipe durability — check re-seed](feedback_wipe_durability_check_reseed.md) — sau prod-wipe audit seeder: ungated per-code seed RE-ADD mỗi restart; gate sau env-flag + verify-by-restart-THẬT (S91, #75/#76)
- [Verify deployed artifact byte-level](feedback_verify_deployed_artifact_byte_level.md) — UAT "fix chưa ăn" sau deploy → curl-grep bundle prod byte-level (cache≠deploy); incognito=golden-test (S96, #77)
- [Verify prod không cần credential](feedback_prod_db_verify_integrated_auth.md) — `sqlcmd -E` qua ssh (runbook ghi đường mật-khẩu nhưng env TRỐNG; env rỗng ≠ tín hiệu đi tìm credential) · **grep DLL đã deploy để chứng BE live** (UTF-8 ⟂ UTF-16 × 2 khung; pattern dựng ở remote) · **mỗi phép đo kèm CONTROL DƯƠNG** — control `False` = hỏng THƯỚC không phải hỏng deploy · bundle CŨ = 900B SPA-fallback, đối chứng bằng dist local CÙNG app (S177)
- [Agent return-garble recover](feedback_agent_return_garble_recover.md) — #53 return = wrong-slice-of-transcript, KHÔNG phải mất việc; recover: (0) WRITE-lane→disk-truth · VERIFY-lane→em-main-re-đo-2-nguồn → (1) diary → (2) resume-in-session → (3) lead-on-behalf-từ-sub-file → (4) solo; **chống-#53 = thiết-kế ARTIFACT đổ-ruột-liên-tục, KHÔNG phải prompt** (đối-chứng nội-phiên S158); tally derive-from-body chốt @closeout (72-cận-dưới qua S162 — chi tiết + sub-class `ngược-#53`/`skeleton-nấc-2`/`engine-process-exit` + "câu garble chứa finding, đừng vứt" đều Ở TRONG FILE)
- [H18 ghost-wire + stamp-integrity](feedback_h18_ghostwire_stamp_integrity.md) — hash-verify TRƯỚC khi áp broadcast (bắt stamp-then-edit THẬT → HELD + re-stamp); ghost-wire 2 class (cron-claim CronList=0 · config-key defined-but-unread); KHÔNG stamp run-id chưa chạy (S100)
- [Resume premise re-verify](feedback_resume_premise_reverify.md) — re-verify tiền-đề từ ĐĨA trước execute; khẳng-định trạng-thái-đĩa = chạm đĩa 1 lệnh ("không-ai-được-giao" ≠ "chưa-làm"); 5 bẫy đo trong file (grep -c mega-line · no-BOM ANSI · BOM-json · acceptance-literal · con-trỏ-số-dòng-vào-sổ-tái-sinh)
@ -40,7 +41,7 @@
- [Return terminates agent](feedback_return_terminates_agent.md) — CẤM lệnh "trả verdict TRƯỚC, làm việc SAU" (bất-khả-thi vật-lý — sub mô-tả ý-định rồi tắt, lỗi ở LỆNH lead); thứ-tự = làm→verify→return hoặc lead on-behalf sau verify-đĩa; +S123 trong file
- [Citation-trap self-reference](feedback_citation_trap_selfreference.md) — doc định-nghĩa anti-pattern TẤT-YẾU chứa mẫu đó ⇒ detector khớp-mẫu bắt chính nó, **lây qua trích-dẫn** (3 đời/1 wave); discriminator = **enclosure use⟂mention**, KHÔNG port charset-guard; vá 1 CLASS ⇒ grep MỌI matcher cùng-lớp TRONG diff (gen-2 xảy ra thật)
- [Goodhart: rời tập-đo](feedback_goodhart_leave_measurement_set.md) — "vá" bằng đổi HÌNH-DẠNG thứ đang bị đo = rời tập-đo; **flag-count giảm trông y hệt thành công** ⇒ hỏi "cái mất đi là dương-giả hay CHỨNG-NHÂN?"; kể chuyện bằng THÀNH-PHẦN không bằng tổng; +2 phép thử rẻ (trục-nào-KHÔNG-có-ca · áp-luật-cho-nhánh-anh-em)
- [Vắng-mặt trông giống ổn](feedback_absence_looks_like_clean.md) — slot-index tái-dụng xoá IM-LẶNG (mất uỷ-quyền owner, hỏi lại 3 lượt) · phép trích RỖNG đọc thành sạch (`.{50}x` vs `.{0,60}x`) · ghost-wire soi 2 CHIỀU (wired-but-declared-unwired); vá xong PHẢI grep lại bằng lệnh KHÁC (S146)
- [Vắng-mặt trông giống ổn](feedback_absence_looks_like_clean.md) — slot-index tái-dụng xoá IM-LẶNG (mất uỷ-quyền owner, hỏi lại 3 lượt) · phép trích RỖNG đọc thành sạch (`.{50}x` vs `.{0,60}x`) · ghost-wire soi 2 CHIỀU (wired-but-declared-unwired) · **+S177 `HEAD~n` ≠ commit-trước-của-mình** (hook `wal:` chèn giữa ⇒ so bản mới với CHÍNH NÓ, "y hệt nhau" trông như phép đo hợp-lệ — dùng SHA đích danh); vá xong PHẢI grep lại bằng lệnh KHÁC
- [Claim mạnh hơn việc đã làm](feedback_claim_stronger_than_work.md) — "đã ghi/đã VERDICT" = CLAIM ĐO ĐƯỢC, đo trước khi viết; 0-hit kèm control-dương; +S166: claim ĐẢO-DẤU của vai-đo chỉ vào sổ SAU vòng-kiểm (ring2 bác F-8 cứu slot 59)
- [Edit phải có trước review](feedback_edit_must_predate_review.md) — edit-cần-review (nhất là file vai reviewer) LAND TRƯỚC lượt L3 (no-self-exempt cần vật tồn-tại trong diff); spec tự-mâu-thuẫn → fix-mới thắng footer-cũ + khai trong report (anh ratify S139)

View File

@ -5,7 +5,7 @@ metadata:
node_type: memory
type: feedback
originSessionId: 55aae6bd-8d74-4018-a203-343da07d3618
modified: 2026-07-22T17:15:28.207Z
modified: 2026-08-06T08:31:35.632Z
---
**Ba ca cùng một lớp, đo được @S146 (2026-07-22/23) — "cái BỊ MẤT không tự tố-giác".**
@ -23,4 +23,8 @@ metadata:
**Why:** khai-chưa-xong cho thứ đã xong khiến người sau đi vá cái đã lành, và làm mất niềm tin vào chính lưới đó.
**How to apply:** khi lật một cơ-chế sang "đã wire", grep **mọi surface khai nó chưa wire** — cùng kỷ-luật [[feedback_cardinality_change_grep_consumers]].
🔸 **Neo chung cả 3:** thứ *có mặt sai* thì grep ra; thứ *vắng mặt* thì **không**. Nên với xoá/đè/rỗng, **bằng-chứng phải đến từ NGUỒN KHÁC** (git history · lệnh khác · người khác), không từ chính bề-mặt đang soi.
**(4) `HEAD~n` KHÔNG phải "commit trước của mình" — đo @S177 (2026-08-06), sập THẬT 1 lần.** Verify deploy cần đối-chứng trước/sau, lead chạy `git show HEAD~1:<file>` vs `git show HEAD:<file>`**y hệt nhau**. Đọc thẳng thành *"không có gì đổi ⇒ deploy hỏng?"*. Thật ra Stop-hook `wal-flush.ps1` auto-commit ở **turn-boundary** nên `HEAD` = `wal: flush`, còn `HEAD~1` = **chính commit vừa tạo** ⇒ phép so **bản mới với chính nó**.
🔴 Cùng lớp: **hai vế bằng nhau trông như một phép đo hợp-lệ**, không có gì kêu. Khác ca (2) ở chỗ output không rỗng mà *khớp* — còn dễ tin hơn.
**How to apply:** trong repo có hook auto-commit, **CẤM `HEAD~n`** cho mọi phép so trước/sau — dùng **SHA đích danh** (`git log --oneline` lấy đúng commit sản-phẩm, bỏ qua `wal:`). Cùng gốc với luật đã có ở [[project_h22_wal_session_continuity]] (hook 4-path) và điểm-mù Sàn-3: hook làm *"cây sạch"**"HEAD~1"* đều mất nghĩa. Bonus S177: bundle prod CŨ cũng không dùng làm đối-chứng được (deploy dọn `dist` ⇒ URL cũ trả ~900B SPA-fallback, grep ra 0 mọi chuỗi = lại một *rỗng đọc thành sạch*) — xem [[feedback_prod_db_verify_integrated_auth]].
🔸 **Neo chung cả 4:** thứ *có mặt sai* thì grep ra; thứ *vắng mặt* thì **không**. Nên với xoá/đè/rỗng/so-nhầm-mốc, **bằng-chứng phải đến từ NGUỒN KHÁC** (git history theo SHA · lệnh khác · người khác), không từ chính bề-mặt đang soi.

View File

@ -0,0 +1,35 @@
---
name: feedback_prod_db_verify_integrated_auth
description: Verify DB prod dùng sqlcmd -E (integrated auth) qua ssh — runbook ghi đường mật-khẩu nhưng biến env TRỐNG trong phiên ssh; đừng đi tìm credential
metadata:
node_type: memory
type: feedback
originSessionId: 8db6a47b-a6fc-4268-a9df-266308bb2d03
modified: 2026-08-06T09:10:10.756Z
---
Xác minh schema/dữ-liệu **prod** sau deploy: dùng **integrated auth**, KHÔNG dùng mật khẩu.
```
ssh vietreport-vps 'sqlcmd -S .\SQLEXPRESS -d SolutionErp -E -Q "SET NOCOUNT ON; SELECT ..."'
```
**Why:** `.claude/agents/cicd-monitor.md` ghi biến thể `-U vrapp -P '$env:PROD_DB_PASSWORD'`. Đo @S177: biến đó **TRỐNG trong phiên ssh** (chỉ sống ở context khác), nên lệnh runbook trả `Login failed for user 'vrapp'`. Thêm nữa, viết `$env:...` trong single-quote của bash thì PowerShell remote KHÔNG giãn — sqlcmd nhận đúng mấy chữ đó làm mật khẩu. Cờ `-E` bỏ qua cả hai vấn đề.
**How to apply:** cần đọc prod DB (verify migration đã áp · đếm dòng backfill · soi cột mới) ⇒ dùng `-E` ngay từ đầu. Env-var trống **KHÔNG** phải tín hiệu đi tìm credential — credential là thứ CẤM lục; đổi sang đường không cần credential. Cặp verify sau deploy: `__EFMigrationsHistory` dòng đầu = migration vừa ship, RỒI đếm dữ-liệu thật để chứng backfill có ăn (xem [[feedback_mechanism_right_data_absent]] — cơ-chế đúng ≠ dữ-liệu có). Vế artifact FE đo riêng theo [[feedback_verify_deployed_artifact_byte_level]].
🔴 **Verify thay-đổi BACKEND đã live (bundle FE KHÔNG nói gì về BE)** — grep chuỗi trong DLL đã deploy, đúng khuôn byte-level của FE. Đổi 1 **string literal** kèm bản vá (vd thông-điệp `ConflictException`) rồi soi nó:
```
ssh vietreport-vps '$b=[IO.File]::ReadAllBytes("C:\inetpub\solution-erp\api\SolutionErp.Application.dll")
$u8=[Text.Encoding]::UTF8.GetString($b) # heap #Strings = tên kiểu/thành-viên
$ea=[Text.Encoding]::Unicode.GetString($b) # heap #US = literal, khung CHẴN
$eb=[Text.Encoding]::Unicode.GetString($b,1,$b.Length-1) # ... khung LẺ'
```
3 bẫy đã sập THẬT @S177, mỗi cái đều trả `False` trông y như *"BE chưa deploy"*:
1. **Decode sai heap** — tên kiểu là **UTF-8**, literal là **UTF-16**; dùng 1 kiểu decode thì control ASCII cũng `False`.
2. **Lệch khung UTF-16** — literal bắt đầu ở offset LẺ thì decode-cả-file trượt ⇒ phải thử **CẢ 2 khung**.
3. **Quoting** — ký tự có dấu bị mangle qua ssh ⇒ dựng pattern **trên máy remote** từ code-point (`[char]0x1EA3`); và PowerShell **không** thoát nháy bằng `\"` (dùng backtick / nháy đôi).
🔴 **LUẬT CỨU MẠNG rút ra: mỗi phép đo phải kèm CONTROL DƯƠNG** — một chuỗi **phải đúng dù bản vá có hay không**. Control `False` ⇒ hỏng **cái thước**, không phải cái được đo. Thiếu nó thì *đo hỏng**deploy hỏng* trông giống hệt nhau (cùng gốc [[feedback_claim_stronger_than_work]] "0-hit kèm control-dương", và [[feedback_absence_looks_like_clean]]). Bộ đủ = 2 control dương + chuỗi-MỚI `True` + chuỗi-CŨ `False`.
🔴 **Bundle CŨ không dùng làm đối-chứng byte-level được**: deploy dọn `dist` nên URL asset cũ trả ~900B SPA-fallback, không phải JS. Đối-chứng đúng = **dist local của CHÍNH app đó** (mỗi app so với dist của nó — fe-admin ⟂ fe-user có nội dung khác nhau, so chéo là ra "lệch" giả).