wal: flush 20260814T1958

This commit is contained in:
pqhuy1987
2026-08-14 19:58:44 +07:00
parent dea90ef301
commit eeed573b7d
2 changed files with 9 additions and 5 deletions

View File

@ -22,7 +22,8 @@ chain:
- [x] dọn `grep.exe.stackdump` (untracked, xóa @S197); "2 dir rỗng" đo lại = 1 (`.vs/sd` IDE-local, giữ — VS tự tái tạo)
- [ ] `harness-refine-return.md` nợ S195 — mất theo phiên chết, không tái tạo; trio @S197 scribe đủ 3 return MỚI
- [x] seed on-behalf ctx-verifier lần-14 + A1/N2 ledger + A2 diary refine — LAND sau audit (Mirror C1 mở); còn @pause kế: đổi 3 nhãn D (cờ-6/7/8) + cứu 2 ý MIND-0 (cờ-10)
- [!] YC-040 (106)=(b) gate KHKK-only: BE+FE+test ✓ · reviewer PASS_WITH_FIXES 6/6 vá (2 lần #53 cứu resume) · STATUS row Tests lật 697+6skip · commit `55a01643` PUSH `24566a50..55a01643` cicd-monitor ĐANG verify (kỳ vọng: test-gate 697/6 · bundle ×2 rotate · smoke 3/3 · MIGCOUNT giữ 74 · POST /contracts 401-pre-auth)
- [x] YC-040 (106)=(b) gate KHKK-only SHIP `55a01643` cicd **PASS run #492** 9m59s: test-gate CI 697+6skip KHỚP · bundle ×2 rotate (`erVPHB3N`/`DuAbkPD_`, hash CI==local 4/4) · smoke 5/5 · MIGCOUNT giữ 74 · **probe RUNTIME 404→409 cả 2 endpoint (gate sống prod, 0 row ghi)** · FE marker "Tạo từ KHKK" 5/3, "Tạo HĐ mới" 0/0 · browser: login render + console 0 lỗi (vế #92(1) đóng) — CHỜ MẮT ANH: menu HĐ sau-login
- [ ] nợ quan-sát tiền-tồn (cicd bắt): `Program.cs:170-171` Serilog vòng-trong ⇒ log ghi 4xx thành 500 — chip spawn-task đã treo, việc riêng
next: CHỜ CHỦ DỰ ÁN — hàng đợi 4 chặng (cờ-1 ctx-verifier @S197, next cũ chở 1/4): ① nghiệm thu YC-032 prod ② 7 câu (90)-(96) ③ (103)(104)(105)(106—YC-039 siết đường tạo HĐ tự do) ④ 2 nhãn carry-age-vacuous · ctx-t9-dogfood. "ổn rồi" = hỏi rõ BÀI NÀO (3 cổng — HANDOFF:6). KHÔNG tự mở việc.

View File

@ -1,5 +1,8 @@
# CI/CD Monitor Agent — Persistent Memory
- **S197 (08-14) `55a01643` YC-040 chặn tạo HĐ ngoài KHKK — PASS 8/8 (run #492, 9m59s).** 🔑 **KỸ THUẬT MỚI, DÙNG LẠI ĐƯỢC: differential-probe KHÔNG-GHI chứng BE runtime.** Gate đứng dòng ĐẦU handler, TRƯỚC mọi load ⇒ payload **qua validator nhưng SupplierId/PeId bịa** cho: PRE=**404** ("Supplier … không tồn tại") → POST=**409** đúng câu YC-040, **2/2 write-site**, **0 row ghi vào prod**. Mạnh hơn hẳn byte-match: chứng **code MỚI đang CHẠY**, không chỉ "file đã tới". Neo: gate-trước-NotFound ⇒ đảo 404→409 chỉ xảy ra nếu gate thật sự nạp. 🔑 Hash CI==local **4/4 lần 2 liên tiếp** (`erVPHB3N`1.848.933·`CgELGQXw`91.502·`DuAbkPD_`1.768.774·`CL0cCjp0`97.389) — npm ci deterministic (#92) đứng vững; **CSS FROZEN mà ĐÚNG** (hash==local, #69 mode-C). LM 12:49:14/12:50:23Z rơi trong run 12:41:06-12:51:05Z + control âm hash-cũ→`text/html` 900B/876B. Gate **697 pass + 6 Skip/0 fail** (45 Domain+652 Infra, total 703) — Skip ĐÚNG 6 test `CreateContractFromEvaluationMultiWinnerTests` **gọi tên trong log**, khớp commit-msg. GUARD-92 OK ×2. Mig **74** no-advance (0 file mig trong diff). Tag `[s197, differential-probe-404to409, khong-ghi-prod, hash-CI==local-x2, 697+6skip, serilog-500-artifact]`
- 🔴 **BẪY ĐỌC LOG MỚI — `[ERR] responded 500` trong Serilog KHI CLIENT NHẬN 404/409.** `Program.cs:170` `UseMiddleware<GlobalExceptionMiddleware>()` **TRƯỚC** `:171 UseSerilogRequestLogging()` ⇒ Serilog nằm TRONG, thấy exception thoát ra và ghi 500; GlobalException (vòng ngoài) mới map lại 409/404 cho client. **Tiền-tồn, KHÔNG phải regression** — chứng bằng **control dương**: `GET /api/contracts/{guid-bịa}` client=**404** mà log cũng `[ERR] responded 500` + `[WRN] Handled exception: NotFoundException`. ⚠️ Suýt báo oan deploy này. **LUẬT: thấy 500 trong log thì đối chiếu mã client curl đo được TRƯỚC**; log 500 ≠ prod lỗi. Kèm: **deploy xoá `logs/` ⇒ không so được lịch sử ⇒ phải TỰ SINH control cùng lớp.**
- **S191 (08-13) `305b573f` vá GỐC #92 (CI-config-only: `deploy.yml`+2 lockfile) — PASS 6/6 + 1 caveat tự khai.** Run **#488** success 10m24s. 🔑 **PHÉP ĐO QUYẾT ĐỊNH: hash CI == local 4/4** (`CR538vZx`1.700.709·`DNE0buTg`94.665·`C10ta-wB`1.780.807·`CTIZKsjE`88.858) **DÙ runner node v24.15.0/npm11 ⟂ local v22.13.0/npm10** ⇒ nghi-vấn 'chênh node/npm = nguồn bất định thứ 2' **BỊ BÁC BẰNG ĐO**. GUARD-92 **2/2 app** `react don ban = 19.2.5`, 0 FAIL. Gate **697** Δ0. Mig **73** no-advance. 🔑 **BẪY MỚI — hash-delta VÔ DỤNG khi PRE đã trùng hash kỳ vọng** (prod đang chạy bản-cứu chép tay) ⇒ ship-proof chuyển sang **Last-Modified nhảy vào cửa sổ run** (18:10:28→18:23:17 · 18:10:37→18:21:58; run 18:13:51-18:24:15Z) + control âm hash-cũ→`text/html` 876B. Bổ sung #69: **mode-C FROZEN-nhưng-ĐÚNG**. 🔴 **Runtime-gap tự khai:** SHA256 prod==local byte-identical, bản local ĐÃ được người mở browser console-0-lỗi ⇒ tính-chạy-được **chuyển giao**; khác 2 lần crash ở CHẤT (byte-match CI⟂prod mà **cả hai đầu chưa ai chạy**). Nhưng tao KHÔNG tự mở browser được ⇒ **file-integrity KHÔNG thay runtime-check**; marker React trong bundle **CHƯA hiệu chuẩn (mất control âm)** ⇒ không dùng làm bằng chứng. Evidence `runs/2026-08-12-S190-soltuon-dieu-chinh-hd/sub-cicd-va-goc-92.md`. Tag `[s191, gotcha-92-va-goc, npm-ci-deterministic, hash-CI==local, guard92-2/2, LM-thay-hash-delta, runtime-gap-tu-khai]`
- _(**S190 (08-12) `091073f9` YC-029+YC-030 GĐ3 Duyệt HĐ — PASS TRỌN 6/6**: gate **697 EXACT** (45+652, Δ+17 trọn ở Infra), **Mig 73** `AddContractEndedByLevelFinalize` áp prod (tables 97 unchanged), ship-proof **3 CHÂN** (rotate ×2 + size==log CI tới byte + control âm `text/html` 876B), #91 XANH. 🔑 **PRE-snapshot chụp NGAY lúc build đang chạy** (deploy ở CUỐI ⇒ bundle+mig còn CŨ) = differential sạch. verbatim → `archive/2026-08.md`)_
@ -47,7 +50,7 @@ cicd-lane trả nhầm slice transcript thay verdict — **tao TÁI PHẠM dai n
- **Stage 0 RAG infra:** `Get-Service Qdrant` Running + `http://localhost:6333/healthz`. Collection `proj_solution_erp`.
- **Stage 1 Push+filter:** `git log -1 --format='%H %s'` + `git log origin/main..HEAD` empty + diff vs paths-ignore (docs-only SKIPPED-DOCS return).
- **Stage 2 Gitea poll** (max 10 iter × 60s): API `.../actions/tasks?limit=5` (NOT `/runs` 404). Match `head_sha` (NOT run_number cancelled runs shift numbering). `updated_at` stale ~2min (gotcha #46) cross-check VPS mtime. Foreground-sleep BLOCKED Windows Monitor-style busy-wait-curl-spin ~30s/iter.
- **Stage 3 Test gate:** baseline **697 PASS** (45 Domain + 652 Infra; run #600/#487 `091073f9` 08-12; climb 697/680/645/644/639/622/614/609/598/590/566/551/532/509). CI chạy cả 2 proj TRƯỚC build/deploy `status:success` = gate passed (`tasks` KHÔNG populate `conclusion` tin `status`). Local grep undercount (Theory/InlineData).
- **Stage 3 Test gate:** baseline **697 PASS + 6 SKIP** (45 Domain + 652 Infra; run #492 `55a01643` 08-14; Skipfail xem row Tests; climb 697/680/645/644/639/622/614/609/598/590/566/551/532/509). CI chạy cả 2 proj TRƯỚC build/deploy `status:success` = gate passed (`tasks` KHÔNG populate `conclusion` tin `status`). Local grep undercount (Theory/InlineData).
- **Stage 4 Post-deploy** (if SUCCESS): login bearer (admin + nv.test #44; token=`accessToken`) smoke 2XX (**NEW-endpoint bodyless-POST = 411 pre-auth NOT 404**; re-probe WITH body 401 = đã wire; 415 cùng lớp) bundle 2 app (#69: real-size, KHÔNG hash-delta) SignalR (#25) mig prod==repo.
- **Stage 4.6 (S29):** sqlcmd seed verify post-deploy (NOT chỉ schema) seed = runtime-row-insert (history/tables KHÔNG nhích) verify bằng DB-query, không bằng bundle-frozen.
- enum cần input SỐ (no `JsonStringEnumConverter`). INFRASTRUCTURE seed ungated / DEMO seed gated #51.
@ -65,9 +68,9 @@ cicd-lane trả nhầm slice transcript thay verdict — **tao TÁI PHẠM dai n
- **Gitea:** `git.baocaogiaoduc.vn/vietreport-admin/solution-erp` · workflow `.gitea/workflows/deploy.yml` · paths-ignore 7-entry (D10 S111 #495): `['docs/**','**/*.md','.claude/skills/**','.claude/agent-memory/**','.claude/workflows/runs/**','.gitignore','scripts/**.md']`. Anon API works (public repo) when GITEA_TOKEN absent.
- **Prod:** `.solutions.com.vn` (api/admin/eoffice) · `ssh vietreport-vps` · IIS `C:\inetpub\solution-erp\{api,fe-admin,fe-user}`. DB `.\SQLEXPRESS`/`SolutionErp`, key **`ConnectionStrings.Default`**. **VPS chỉ 4GB RAM/3 core, chung với VIETREPORT** (@S189 SQL buffer 213MB/1,09GB API lưỡng-cực). **SSH→PS: viết `.ps1` + `scp` + `powershell -File`**, đừng inline. 🔴 **CẤM `ssh … | head`** `Select-Object -First N` phía REMOTE.
- **SSHPS quoting (S42):** bashsshpowershell nuốt `$var`/`\"` viết `.sql`/`.ps1` rồi `scp` + `sqlcmd -i` / `powershell -File` (đừng nhét inline). sqlcmd `-W -h -1` pw-inline. sys-catalog concat `COLLATE DATABASE_DEFAULT`.
- **Tests baseline: 697 PASS** (45 Domain + 652 Infra · 0 fail/skip) tái xác nhận run **#488** `305b573f` 08-13 (Δ0, đúng hình dạng: 0 file test trong diff). 🔑 Số lấy web-UI log `…/actions/runs/{run_number}/jobs/0/logs` (KHÔNG `/api/v1/`) mỗi project 1 dòng `Passed! - Failed: 0, Passed: N`; đối chiếu **TÁCH-PHẦN** (45/652) chứ đừng chỉ khớp tổng, **so delta với số Fact mới khai trong commit-msg**.
- **Mig latest repo: Mig 73 `AddContractEndedByLevelFinalize`** (`20260812141501`) verify prod @S191 #488 = **73** (history top khớp · MIGCOUNT 73==73 · `sys.tables` **97**). 🔴 Đếm phải **NEO ĐUÔI** `grep -vE 'Designer\.cs$|ModelSnapshot\.cs$'`. Mạnh hơn khớp-tổng = **set-diff repo↔prod 2 chiều** (`comm -23`/`-13` cùng rỗng). Prod: `sqlcmd -S .\SQLEXPRESS -d SolutionErp -E` (⚠ `$env:PROD_DB_PASSWORD` KHÔNG trên VPS). **NO-Mig proof = history NOT-advance + empty `git diff <base>..<head> -- '*Migrations*'`.**
- **Bundle hash live:** baseline **#488 (08-13, `305b573f`)** admin `C10ta-wB`/`CTIZKsjE` (JS 1.780.807 · CSS 88.858) · eoffice `CR538vZx`/`DNE0buTg` (JS 1.700.709 · CSS 94.665) **trùng ĐÚNG dist local đã verify runtime**, khớp CI log tới byte. 🧊 prev #600 admin `D2FHMRPX` · eoffice `BIN1bEGo` (1.819.492/1.803.881 bản này crash `useState null`, đã thay). 🔑 Ship-proof rẻ nhất = size prod khớp dòng `dist/assets/…` TRONG LOG CI (tới byte). marker minify ra **BACKTICK** `grep -F`/python. **re-snapshot LIVE sau status=success** (#69). id run_number (key theo head_sha).
- **Tests baseline: 697 PASS + 6 SKIP / 0 fail (total 703)** (45 Domain [0 skip] + 652 Infra [6 skip]) lật @S197 run **#492** `55a01643`. 🔴 **6 Skip là CHỦ ĐÍCH, = XANH** (spec di sản PE `CreateContractFromEvaluationMultiWinnerTests`, mở lại khi owner nới gate YC-040) **lệch CẶP 697/6 mới là ĐỎ**, đừng đọc "Skipped: 6" thành fail. Log gọi ĐÍCH DANH từng test Skip đối chiếu TÊN, không chỉ số. 🔑 Số lấy web-UI log `…/actions/runs/{run_number}/jobs/0/logs` (KHÔNG `/api/v1/`) mỗi project 1 dòng `Passed! - Failed: 0, Passed: N`; đối chiếu **TÁCH-PHẦN** (45/652) chứ đừng chỉ khớp tổng, **so delta với số Fact mới khai trong commit-msg**.
- **Mig latest repo: Mig 74 `AddContractSealedAt`** (`20260813204332`, @S194 `88bdd054`) verify prod @S197 #492 = **74** (history top khớp · MIGCOUNT prod 74 == repo 74 đếm-neo-đuôi · 0 file mig trong diff = no-advance ĐÚNG). 🔴 Đếm phải **NEO ĐUÔI** `grep -vE 'Designer\.cs$|ModelSnapshot\.cs$'`. Mạnh hơn khớp-tổng = **set-diff repo↔prod 2 chiều** (`comm -23`/`-13` cùng rỗng). Prod: `sqlcmd -S .\SQLEXPRESS -d SolutionErp -E` (⚠ `$env:PROD_DB_PASSWORD` KHÔNG trên VPS). **NO-Mig proof = history NOT-advance + empty `git diff <base>..<head> -- '*Migrations*'`.**
- **Bundle hash live:** baseline **#492 (08-14, `55a01643`)** admin `erVPHB3N`/`CgELGQXw` (JS 1.848.933 · CSS 91.502) · eoffice `DuAbkPD_`/`CL0cCjp0` (JS 1.768.774 · CSS 97.389) **trùng ĐÚNG dist local 4/4**, khớp CI log tới byte. 🧊 prev #488 admin `C10ta-wB`/`CTIZKsjE` · eoffice `CR538vZx`/`DNE0buTg`. 🧊 prev #600 admin `D2FHMRPX` · eoffice `BIN1bEGo` (1.819.492/1.803.881 bản này crash `useState null`, đã thay). 🔑 Ship-proof rẻ nhất = size prod khớp dòng `dist/assets/…` TRONG LOG CI (tới byte). marker minify ra **BACKTICK** `grep -F`/python. **re-snapshot LIVE sau status=success** (#69). id run_number (key theo head_sha).
- **Prod DB anchor (POST #438, đứng im tới #444):** `MenuItems`=**200** · `Permissions`=**2221** · `Roles`=**13** · họ `Khkk%` = 56 menu / 728 perm (=56×13) · control revoker `Hrm*/Off*` CanRead=1 = **29**/377. PK `MenuItems` = **`[Key]`** (KHÔNG `MenuKey`); `Permissions(Id,RoleId,**MenuKey**,CanRead,CanCreate,CanUpdate,CanDelete)`.
- **Bearer:** admin `admin@solutions.com.vn/Admin@123456` (full) · UAT `nv.test@solutions.com.vn/TestUser@123456` (Drafter CCM, gotcha #44 check).
- **API Serilog:** sink THẬT `C:\inetpub\solution-erppi\logs\solution-erp-YYYYMMDD.log` (skill-runbook `…\Logs\log-*.txt` STALE). Level=Information (seed/revoke lines ghi). deploy xoá `logs/` chỉ còn từ deploy cuối.