[CLAUDE] Docs: P0-2 eoffice trắng màn — hotfix bundle local D6lFjgKF + gotcha #92 khắc thật (runner build-env nhiễm, CẤM push code tới khi vá) [skip ci]
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
|
||||
> **Tiering rule (S40):** giữ **2-3 session gần nhất**. Cũ hơn → `docs/changelog/sessions/`. Full brief history pre-S40 → `docs/_archive/HANDOFF-preS40-fullhistory.md`.
|
||||
|
||||
**🆕 Last updated:** 2026-08-13 (**S189→S191, phiên-LOGIC L15 window 1-3** — GIỮ MỞ chờ anh kiểm prod): **YC-028 cứu prod 4 tầng** (disk 0-byte · orphan-sshd · Gitea câm #91 · RAM pin 1200MB; +#89/#90/#91, P0 hotfix scp outage 15') → **YC-029 5-wave B6 + YC-030 Q1-Q5 SHIP deploy #600 PASS 6/6** (test **697** · **Mig 73** prod-top · bundle eoffice `BIN1bEGo`/admin `D2FHMRPX` · Q5 type-3 = 7 `HD-*`) → **@S191 cửa ngoài-giờ đóng trọn** (cron `archive_cleanup` Gitea ON + **cứu `Vietreport_Master` khỏi RECOVERY_PENDING** #88 + note báo VIETREPORT) + finish-bằng-đo 2 mục NEXT-em (nén-2-memory = SAI ĐÍCH cờ-8, investigator/reviewer dưới trần — chỉ `ring2-audit` 27.458B vượt {đang-cãi}; un-delete `a79dd579` = HẾT CẦN, Dev đồng hình prod 8 type-3). Log: `docs/changelog/sessions/2026-08-12-2252-S189-S191-yc028-yc030-l15.md`. **Chờ anh: KIỂM PROD GĐ3** (eoffice 7 loại HĐ + admin 7 mục Designer) — lệch-ý-thì-chỉnh; "ổn rồi" ⇒ mở W8 + `[carry:w8-delete-policy]`.
|
||||
**🆕 Last updated:** 2026-08-13 (**S189→S191, phiên-LOGIC L15 window 1-3** — GIỮ MỞ chờ anh kiểm prod): **YC-028 cứu prod 4 tầng** (disk 0-byte · orphan-sshd · Gitea câm #91 · RAM pin 1200MB; +#89/#90/#91, P0 hotfix scp outage 15') → **YC-029 5-wave B6 + YC-030 Q1-Q5 SHIP deploy #600 PASS 6/6** (test **697** · **Mig 73** prod-top · bundle eoffice `BIN1bEGo`/admin `D2FHMRPX` · Q5 type-3 = 7 `HD-*`) → **@S191 cửa ngoài-giờ đóng trọn** (cron `archive_cleanup` Gitea ON + **cứu `Vietreport_Master` khỏi RECOVERY_PENDING** #88 + note báo VIETREPORT) + finish-bằng-đo 2 mục NEXT-em (nén-2-memory = SAI ĐÍCH cờ-8, investigator/reviewer dưới trần — chỉ `ring2-audit` 27.458B vượt {đang-cãi}; un-delete `a79dd579` = HẾT CẦN, Dev đồng hình prod 8 type-3) + **P0-2 @00:50 anh kiểm ra: eoffice trắng màn — bundle CI #600 crash `useState null` → hotfix build-local scp đè, eoffice nay `D6lFjgKF` SỐNG (admin giữ `D2FHMRPX` — cùng lò nhiễm +39KB nhưng sống, dist local `KRJldwaN` sẵn) ⇒ gotcha #92 khắc thật (row 91→92)**. Log: `docs/changelog/sessions/2026-08-12-2252-S189-S191-yc028-yc030-l15.md`. **Chờ anh: KIỂM PROD GĐ3 tiếp** (eoffice đã sống lại) — lệch-ý-thì-chỉnh; "ổn rồi" ⇒ mở W8 + `[carry:w8-delete-policy]` · **chọn giờ VÁ GỐC runner** (dọn npm-cache SYSTEM + dispatch verify — SẼ rotate bundle prod). 🔴 **CẤM push CODE / dispatch CI tới khi runner vá+verify** (#92(4) — build mới đè hotfix bằng bundle nhiễm; docs push = `[skip ci]`).
|
||||
> 🧊 *(Segment cũ giữ nguyên bên dưới:)* 2026-08-10 (**S187→S188 ĐÓNG** — phiên-LOGIC **L14** window 2-3): **module Duyệt Hợp đồng GĐ3 từ KHKK SHIP PROD 2 đợt** — đợt-1 `0149f106` (W1/W2/W7) + cụm `b275893c` (W3/W4/W5/W6) + sổ `80febec9`; test **680** · 0-mig · Menu keys **120** / Policies **480** · cicd **4/4 + 5/5** · W10 dry-run Dev **PASS 5/5**. Owner: YC-024 9 đáp án (80)-(88) + YC-025 *"làm tiếp hết, review 1 lần"*. **W8 authz HOÃN** (chờ anh nói "ổn rồi") · **W9 HỦY**.
|
||||
> 🔺 **CARRY MỚI @S188 — ADDITIVE vào danh sách RE-STAMP dưới:** `[carry:w7b-inbox-param]` *(BE `/contracts/inbox` thêm `?type=` + bỏ `Take(100)` → rồi FE mới gỡ client-filter `InboxPage`; kèm `ContractCreatePage` ×2 app cùng lớp lọc-client-sau-phân-trang)* · `[carry:fe-contract-family-drift]` *(`fe-admin/src/lib/contractWorkflowFamily.ts` chép 7 mã `HD-*` — khớp BE hôm nay, cần drift-watch vì 2 nhà)* · `[carry:sentinel-truoc-bu]` *(guard SÓT-1 ring5 @S188: mọi lượt CHẠY-BÙ nghi-thức phải ĐẶT LẠI `closing:` sentinel trước khi bù — lượt bù S188 chạy không sentinel ⇒ cửa sổ mù Sàn-2 ~73 phút; wire vào `session-end.md` khối ONE-SHOT; RCA `ONESHOT-S188` error-ledger)*. 🔴 **Vì sao phải ghi TAY ở đây:** `lead-gap-auditor` DEEP FLAG-1 chứng nợ này **chỉ sống trong WAL**, mà `§6.4` xoá trắng WAL ở bước CUỐI, và nghi-thức re-stamp **chép danh-sách kỳ trước** nên slug sinh-trong-WAL **vô hình có cấu-trúc** ⇒ không lượt chép nào nhặt được.
|
||||
> 🔺 **CARRY MỚI @S190 (`/tiep` window-2 L15) — ADDITIVE, di-trú 2 ý khỏi bề mặt tự-hủy (ctx-verifier cờ-13: một ý WAL-only mà WAL tái sinh mỗi `/pause`, một ý `_mind`-only mà nén block là mất):** `[carry:gotcha-92-candidate]` *(runner-workspace corrupt — node_modules ghi dở đêm disk-0 + workspace giữ giữa run ⇒ CI build ra bundle crash `React null useState` CÙNG commit với local lành >100KB lệch [P0 @S189]; CHỐT thành gotcha #92 SAU khi dọn workspace runner + dispatch run verify xác nhận root-cause — việc nằm trong CỬA NGOÀI-GIỜ)* · `[carry:pin-max-server-memory-fleet]` *(S189 pin 1200MB mới cho SQLEXPRESS của SOLUTION_ERP/VIETREPORT; các máy SQL nhỏ KHÁC cùng hạ tầng còn default unbounded 2147483647 = bom chậm giằng RAM — rà + pin lúc setup, khắc runbook theo luật gotcha #91(3))*.
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -10,7 +10,7 @@ Anh Kiệt báo phiếu `PE/2026/A/059` "ko duyệt được / ko tìm thấy ph
|
||||
- **T2 orphan-sshd:** 3 con sshd mồ côi của chính lead (ssh|head cắt pipe — #90, tự khai RCA) ăn 3/3 core → kill → A/059 47s→0,38s.
|
||||
- **T3 Gitea tầng-app câm** nuốt push (#91): restart + workflow_dispatch → run #486 ship trọn (gate 680 EXACT · bundle rotate ×2 · marker 10/10).
|
||||
- **T4 RAM:** pin `max server memory` unbounded→**1200MB**, PLE 522→1123.
|
||||
- **P0 chen giữa /pause:** bundle CI crash `React null useState` — build LỆCH local >100KB cùng commit ⇒ BUILD-ENV runner hỏng (workspace ghi dở đêm disk-0). **Hotfix scp dist local lành** đè fe-user+fe-admin → SỐNG, outage ~15'. Root-cause sau đó chốt = **disk, KHÔNG phải node_modules** (deploy.yml tự xóa fresh mỗi run) ⇒ #92-candidate đóng, không sinh gotcha mới.
|
||||
- **P0 chen giữa /pause:** bundle CI crash `React null useState` — build LỆCH local >100KB cùng commit ⇒ BUILD-ENV runner hỏng (workspace ghi dở đêm disk-0). **Hotfix scp dist local lành** đè fe-user+fe-admin → SỐNG, outage ~15'. ~~Root-cause chốt = disk ⇒ #92-candidate đóng~~ → **BÁC @S191 ca-2** (xem dưới): thành **gotcha #92 chính thức**.
|
||||
- Gotcha **#89/#90/#91** (STATUS row 88→91) · sổ +YC-028 +PN-002 · FE tách "404 thật ⟂ lỗi hệ thống" 5 site ×2 app LIVE.
|
||||
|
||||
## S190 (2026-08-12) — YC-029 "SOLTUON-12-08-2026" + YC-030 Q1-Q5 + DEPLOY #600
|
||||
@ -30,10 +30,19 @@ Anh Kiệt báo phiếu `PE/2026/A/059` "ko duyệt được / ko tìm thấy ph
|
||||
- **Finish NEXT-em bằng ĐO (không làm mù theo claim):**
|
||||
- "Nén 2 agent-memory over-cap" = **SAI ĐÍCH** (ctx-verifier cờ-8, lead đối chứng từng byte): investigator 23.148B + reviewer 25.469B đều **DƯỚI** trần `autoinject_cap_bytes` 25.600 ⇒ KHÔNG nén (nén = phá thông tin vô cớ). File duy nhất vượt = `ring2-audit` 27.458B — vốn nhãn *đang-cãi* (60,1% bất-khả-drain), giữ nguyên chờ thiết kế. reviewer dư 131B = watch.
|
||||
- "Un-delete `a79dd579` Dev" = **HẾT CẦN** (đo `SolutionErp_Dev`): seeder tắt-từ-lúc-sinh đã tái tạo QT-HD-V2-001 (Active=0/UserSel=0, Id mới) — Dev đồng hình prod 8 type-3, 0 HĐ mồ côi. Un-delete giờ = row trùng Code, bẩn hơn.
|
||||
- Gotcha #92-candidate **đóng** (root-cause = disk; #600 build sạch sau dọn đĩa là bằng chứng sống) — không sinh gotcha mới, lớp đã có #89.
|
||||
- ~~Gotcha #92-candidate đóng (root-cause = disk)~~ → **BÁC ngay trong phiên bằng ca-2** (giữ dòng làm vết: claim "đóng được" sống đúng 40 phút — bài *đo-lại-tiền-đề* thắng, nhưng chính claim này cũng do em vừa ghi).
|
||||
- **Vá bề mặt theo cờ ctx-verifier:** STATUS `:6` (4 mặt chết: 693→697 · "PUSH GOM CHỜ"→#600 · nhãn IN-PROGRESS→ĐÓNG · con-trỏ `:476` chết) · `run.md` S190 bổ nửa sau (B5-kết-quả→B6→YC-030→deploy) · `sub-wq3-be.md` trám on-behalf (skeleton 593B → có đường tái dựng) · dọn stray dir rỗng · HANDOFF segment mới. Cờ-6 bác (dương giả — carry `pin-max-server-memory-fleet` đã có nhà HANDOFF @S190, vai grep từ khóa spaced).
|
||||
|
||||
## Carry/treo sau phiên
|
||||
|
||||
- `[carry:w5-host-ondeleted]` (5 host clear-selection sau xoá) · `[carry:w8-delete-policy]` (policy DELETE khi anh nói "ổn rồi") · ring2-audit over-cap {đang-cãi} · session-log này gánh cả S189 (đã hết vô chủ).
|
||||
- Chờ anh: **KIỂM PROD GĐ3** (lệch-ý-thì-chỉnh) · tồn (76)(77)(78)(79) · (89) jump-dài · (74) rotate vrapp · value_protect · lật ô YC-008↔YC-010 · "ổn rồi" mở W8 · tồn (22)(67)(72).
|
||||
|
||||
## S191 bổ sung 00:50 — P0 LẦN 2: eOffice trắng màn khi anh kiểm → hotfix + gotcha #92 khắc thật
|
||||
|
||||
- Anh kiểm prod: *"Admin → tạm ổn. eOffice → vào trắng màn hình"*. Browser đo thật: console `Uncaught TypeError: Cannot read properties of null (reading 'useState')` @ `index-BIN1bEGo.js:8` — **bundle CI #600 crash runtime** dù byte-match + smoke 200 đều xanh @S190.
|
||||
- ⇒ Giả thuyết "#92 đóng vì root-cause=disk" (em ghi 40 phút trước) **SAI**: file-integrity ≠ runtime; npm-cache runner (di chứng #89) vẫn là nghi phạm — `npm ci` kéo từ cache hỏng thì xóa node_modules cũng vô ích.
|
||||
- **Hotfix (mirror S189, đã chứng):** build local HEAD (hash `D6lFjgKF` trùng dist 21:54 — determinism control-dương) → scp đè fe-user (GIỮ `BIN1bEGo` trên đĩa = rollback 1s) → verify **runtime**: form login render (`read_page`) + network load `D6lFjgKF` + console load-mới sạch. **eOffice SỐNG.**
|
||||
- Chẩn admin cùng lò: CI `D2FHMRPX` 1.819.492B vs local `KRJldwaN` 1.780.807B (**lệch 39KB**) — nhiễm nhưng ĐANG SỐNG → không đụng (anh đang kiểm); dist local sẵn nếu anh muốn đồng nhất.
|
||||
- **Gotcha #92 khắc chính thức** (2 ca đủ chín — docs/gotchas.md, STATUS row 91→92). Ràng buộc nổi ở WAL `next:`: 🔴 **CẤM push code / dispatch CI tới khi runner được vá + verify runtime** — build mới sẽ đè hotfix bằng bundle nhiễm.
|
||||
- Vá gốc (chờ anh chọn giờ — sẽ rotate bundle prod): dọn `npm cache` SYSTEM + workspace runner → `workflow_dispatch` → cicd-monitor + **smoke runtime** (luật #92(1)) → khi đó mới mở lại đường push code.
|
||||
|
||||
@ -1455,6 +1455,18 @@ for h in resp.points: # ← .points không phải iterable trực tiếp
|
||||
|
||||
**Luật:** (1) verifier tuyên "đang chờ CI" phải đo **`repo.updated_at ≥ thời-điểm-push`** trước — head khớp chưa đủ; (2) sau restart service có re-index/warm-up: **phép đo latency trong cửa sổ đó là số bẩn**, khai rõ hoặc đợi lắng; (3) SQLEXPRESS trên máy nhỏ: **pin `max server memory` ngay lúc setup** (ghi vào runbook), đừng để default unbounded.
|
||||
|
||||
### 92. Runner build-env NHIỄM — CI exit-0 + byte-match CI↔prod nhưng bundle CRASH runtime; "build thành công" ≠ "bundle sống" (Session 189 + 191)
|
||||
|
||||
**Triệu chứng (2 ca cùng chữ ký):** deploy CI xanh trọn — test gate pass, bundle rotate, **byte-match CI↔prod từng byte**, smoke HTTP 200 — nhưng mở trang = **trắng màn**. Console: `Uncaught TypeError: Cannot read properties of null (reading 'useState')` ngay dòng đầu bundle. Ca-1 @S189 (P0 sau #486, cả 2 app, outage 15'). Ca-2 @S191 (sau **#600**: fe-user chết / fe-admin sống — nhiễm KHÔNG đồng đều).
|
||||
|
||||
**Chữ ký đo được:** bundle CI **lệch size local đáng kể CÙNG commit** dù local build deterministic (2 lần build local ra đúng 1 hash): ca-2 fe-user CI 1.803.881B vs local 1.700.709B (**+103KB**) · fe-admin CI 1.819.492B vs local 1.780.807B (**+39KB**, đang sống nhưng cùng lò). `useState null` = React bị resolve trùng/lệch bản trong graph — dấu node_modules/npm-cache hỏng trên runner (di chứng đêm disk-0-byte #89, npm-cache SYSTEM 12,76GB ghi dở).
|
||||
|
||||
**Vì sao lọt 2 lần:** verify deploy đo **file-integrity** (hash CI-log ↔ prod) + **HTTP status** — cả hai đều là tính chất của FILE, không phải của CHƯƠNG TRÌNH. Bundle nhiễm vẫn thắng mọi phép đo đó. Giả thuyết "root-cause = disk, deploy.yml tự xóa node_modules fresh mỗi run nên #92 đóng được" (S190) bị ca-2 **bác**: xóa node_modules không cứu nếu **npm cache** là nguồn nhiễm (`npm ci` kéo lại từ cache hỏng).
|
||||
|
||||
**Fix chuẩn (đã chứng ×2):** build local từ HEAD (env lành) → so hash 2 lần build (determinism = control dương) → scp `dist/` đè app chết, **GIỮ bundle hỏng trên đĩa** (index.html cũ = rollback 1 giây) → verify bằng **console + read_page** (form render, load-mới sạch lỗi), KHÔNG chỉ curl.
|
||||
|
||||
**Luật:** (1) verify deploy FE phải có **1 phép đo RUNTIME** (console error sau load / marker JS thực thi) — file-integrity + HTTP 200 chưa đủ; (2) bundle CI lệch local >vài KB cùng commit khi local deterministic = **ĐỎ**, chặn trước khi ship; (3) sau sự cố hạ tầng (disk-0, kill-process giữa ghi): coi **mọi cache** của toolchain trên máy đó là nghi phạm — dọn `npm cache` + workspace RỒI MỚI tin build; (4) vá gốc phải **verify bằng dispatch-run + smoke runtime**, tới lúc đó **CẤM push code** (build mới sẽ đè hotfix bằng bundle nhiễm).
|
||||
|
||||
## Checklist debug bug mới
|
||||
|
||||
1. Build pass không? → fail → check using + package version compat
|
||||
|
||||
Reference in New Issue
Block a user