Compare commits
2 Commits
1fa079d5b7
...
ca9208f686
| Author | SHA1 | Date | |
|---|---|---|---|
| ca9208f686 | |||
| 35db51a3d9 |
@ -1,7 +1,7 @@
|
||||
# WAL — auto-generated, không sửa tay
|
||||
updated: 2026-08-06 | session: S177 (phiên-LOGIC L11, window 5) | branch: main
|
||||
|
||||
goal: nối mạch S177 → anh UAT liên-tục màn KHKK qua 4 ảnh. **4 đợt ship + deploy VERIFIED 2-vế ×2 app, tất cả yêu-cầu anh nêu đã làm hết.** Engine `SỬA-6` vẫn treo NGUYÊN, chưa vá điểm nào.
|
||||
goal: nối mạch S177 → anh UAT liên-tục màn KHKK. **5 đợt ship + deploy VERIFIED 2-vế ×2 app, tất cả yêu-cầu anh nêu đã làm hết.** Engine `SỬA-6` vẫn treo NGUYÊN, chưa vá điểm nào.
|
||||
|
||||
chain:
|
||||
- [x] nối mạch /tiep @S177: Sàn-3 4/5 tín-hiệu MẠNH kêu · 8/8 `verify:` KHỚP · tick 50→51 · `_tiep-4.md` cân sổ · §3-ter lead tự chạy 4-khoản (fallback CÓ KHAI, `ctx-verifier` KHÔNG spawn)
|
||||
@ -9,8 +9,8 @@ chain:
|
||||
- [x] **đợt-2 `b346b41`** (`DbWf4jNk` · `BqrZMtfo`): "Hạng mục (dự án)" → header mục 2 (đặt NGOÀI ternary `lines.length===0`) · nút thêm dời vào `tbody`
|
||||
- [x] **đợt-3 `cd79d1c`** (`gymC4mU_` · `BKyJyauY`): gỡ dải 2 nút góc phải (Sửa + Về form tạo) · header CHỈ còn mã in đậm · nút **+** vào cột hành-động TỪNG DÒNG · **allow-list xoá +`TraLai`** = VÁ LỆCH 2 TẦNG (FE đã hiện nút, BE 409 — gotcha #82) · +1 test ĐÃ CHỨNG CÓ RĂNG (stash vá → FAIL, trả vá → PASS) · **645/645**
|
||||
- [x] **đợt-4 `4704aaf`** (`8z75Zyyu` · `Bfwi0T6c`): gộp panel "Thêm hạng mục" thành **1 DÒNG của bảng** (anh: *"cho 2 cái này về làm một"*). KHÔNG làm kiểu "+ đẻ dòng trống inline" vì `CatalogEntryId` non-nullable + unique CỐ Ý không lọc NULL ⇒ dòng trống thứ 2 cùng NCC đụng dòng gốc. Dùng **dòng nháp client**, gọi API 1 lần
|
||||
- [x] 🔴 **4 phép đo của LEAD hỏng rồi tự bắt** (ghi để đừng lặp): ① dò thư quét `../AI_INFRA…` — repo không ở đó ⇒ `all=0` là RỖNG-VÌ-HỎI-SAI-CHỖ, số sống vẫn `all=6` · ② `HEAD~1` ≠ commit-trước-của-mình (hook `wal:` chèn giữa ⇒ so bản mới với CHÍNH NÓ) · ③ đọc DLL sai heap + lệch khung UTF-16 + quoting `\"` không phải PowerShell ⇒ 3 lần `False` trông y như "BE chưa deploy" · ④ kỳ vọng `Giá đề xuất`=0 sau khi gỡ panel, đo ra 6 vì là nhãn DÙNG CHUNG. **CONTROL DƯƠNG là thứ cứu cả 4**
|
||||
- [x] 🔴 lead tự vượt trần sổ: WAL phình **73 dòng / trần 40** (nhồi chi tiết verify vào sổ trong khi commit đã giữ verbatim) — đã nén @cuối đợt-4
|
||||
- [x] **đợt-5 `1fa079d`** (`Cx8NQ8lS` · `BYHa3JR8`): gỡ chú-thích "Thêm cho: NCC" (đẩy select lệch 1 dòng) + gỡ vẻ-khối-riêng + dọn `addFor.supplierName` gán-mà-không-ai-đọc. 🔴 **2 câu trả lời của anh MÂU THUẪN** (giữ dòng-nhập ⟂ bỏ cả khối) — chọn hướng làm CẢ HAI khớp: "bỏ khối" = bỏ vẻ-khối, KHÔNG bỏ đường thêm; sai hướng này anh nói 1 câu là sửa, sai hướng kia là mất tính năng trên prod. 🔸 **CÁI MẤT đã khai:** bảng không có cột NCC ⇒ phiếu nhiều NCC thì dòng nhập không tự nói thuộc ai; vá rẻ nhất về sau = chèn dòng nhập NGAY DƯỚI dòng vừa bấm `+`, đừng thêm chữ lại
|
||||
- [x] 🔴 **4 phép đo của LEAD hỏng rồi tự bắt** (ghi để đừng lặp): ① dò thư quét `../AI_INFRA…` — repo không ở đó ⇒ `all=0` là RỖNG-VÌ-HỎI-SAI-CHỖ, số sống vẫn `all=6` · ② `HEAD~1` ≠ commit-trước-của-mình (hook `wal:` chèn giữa ⇒ so bản mới với CHÍNH NÓ) · ③ đọc DLL sai heap + lệch khung UTF-16 + quoting `\"` không phải PowerShell ⇒ 3 lần `False` trông y như "BE chưa deploy" · ④ kỳ vọng chuỗi=0 sai **3 lần** (`STT` · `Giá đề xuất`=6 · `bg-brand-50/40`=12) vì đều là chuỗi DÙNG CHUNG. **CONTROL DƯƠNG là thứ cứu cả 4** · ⑤ lead tự vượt trần sổ: WAL phình **73 dòng / trần 40** (nhồi chi tiết verify vào sổ trong khi commit đã giữ verbatim) — đã nén
|
||||
- [!] 🔴 `/fable-real reviewer` `wf_264fb5c2-0db` = `SETUP-REVIEW: SỬA-6` (nền ĐỨNG VỮNG) — **6 điểm CHƯA vá cái nào**. Spec: `runs/2026-08-06-S176-doi-style-3-vai/spec-va-doi-style-3-vai-06-08-2026.md`
|
||||
- [!] 🔴 **SỬA-1 SỐNG-CHẾT:** thước dispatch `origin/main...HEAD` (**ba-chấm**) ⇒ mù uncommitted+untracked ⇒ đội STYLE gate PRE-commit **chết CÂM** (0 spawn, 0 `SKIP-CO-KHAI` để lộ). Sửa 4 site → 2-chấm ∪ `porcelain` lọc `??`. 🔴 **Bằng-chứng sống: S177 sửa 10 file đúng địa-phận cả 3 vai, 0 con được gọi**
|
||||
- [!] 🔴 **SỬA-5a (rẻ nhất):** 3 vai style thiếu dir `agent-memory/<vai>/` ⇒ vô hình trong đo/budget. Lead đo lại **3/3 THIẾU CONFIRMED**
|
||||
@ -20,17 +20,17 @@ chain:
|
||||
- [ ] 🔴 2 NỢ vòng-3: ① khung thẻ 2 nguồn sự-thật (`index.css:112` ⟂ utility hardcode ×2 app) · ② overclaim gotcha #66 **4 site / 2 CHUỖI KHÁC NHAU** (grep 1 chuỗi = vá 2/4 rồi tưởng xong)
|
||||
- [ ] 🔴 đính-chính `_context-s-11.md:152` — *"Lead đã flush (a)"* SAI: flush **1/7**. Append-only ⇒ đính chính bằng entry PAUSE-6
|
||||
- [ ] 🔴 ghi synthesis cho **2** run-folder ORPHAN: `2026-08-05-S173-bookend-open` · `2026-08-05-S175-duan-budget-column`
|
||||
- [ ] E4 vế ➊ · 5 điểm governance (`STATUS:473` 86→87 · 5 slot HANDOFF · `ROTATE vrapp` · Carry 14 slug · slot (70) anchor) · A1 `ring2-audit` 26.440B>25.600 · drift-audit quá hạn · 9 dir rỗng · 📌 STATUS/HANDOFF chưa phản-ánh Mig 72 + 4 đợt S177 (@closeout)
|
||||
- [ ] E4 vế ➊ · 5 điểm governance (`STATUS:473` 86→87 · 5 slot HANDOFF · `ROTATE vrapp` · Carry 14 slug · slot (70) anchor) · A1 `ring2-audit` 26.440B>25.600 · drift-audit quá hạn · 9 dir rỗng · 📌 STATUS/HANDOFF chưa phản-ánh Mig 72 + 5 đợt S177 (@closeout)
|
||||
- [ ] kéo thư `all=6` (2 `loi-do-luong` + 4 `upgrade-pack-phased` thiếu adap-report) — 🔴 đo bằng ĐÚNG đường, đừng lặp lỗi quét `../`
|
||||
- [ ] ⚠️ roster **26** > `hmw_width.cap` **20** ⇒ full-roster-sweep LOUD-skip 6 lane cuối. Số cap = quyền anh, O-7 treo
|
||||
- 🅿️ **PARK (anh @S176) — KHÔNG hỏi lại, KHÔNG tự làm:** cột DỰ ÁN 11 ô · `Project.BudgetTotal` rỗng 61/69
|
||||
- 🔴 **GIỮ mã dự án lặp trên từng dòng** — anh: *"để người ta dễ hình dung hạng mục to chứa hạng mục con nào"*. Em nêu 2 lượt, anh chốt 2 lần cùng hướng ⇒ **ĐỪNG hỏi lại**
|
||||
- 🔴 **CHƯA ai soi mắt prod** vòng-4/4b (S176) + 4 đợt S177 — kết luận giao diện vẫn là ĐỌC MÃ (gotcha #3)
|
||||
- 🔴 **CHƯA ai soi mắt prod** vòng-4/4b (S176) + 5 đợt S177 — kết luận giao diện vẫn là ĐỌC MÃ (gotcha #3)
|
||||
|
||||
next: vá **SỬA-1** → SỬA-5a → 2/3/4/5b/5c/6a/6b → re-review · song song chờ anh soi prod
|
||||
|
||||
verify:
|
||||
- `curl -s https://admin.solutions.com.vn/ | grep -oE 'index-[A-Za-z0-9_-]+\.js'` → khác `index-8z75Zyyu.js` = đợt SAU đã tới (mốc S177 đợt-4 = `4704aaf`; eoffice `index-Bfwi0T6c.js`)
|
||||
- `curl -s https://admin.solutions.com.vn/ | grep -oE 'index-[A-Za-z0-9_-]+\.js'` → khác `index-Cx8NQ8lS.js` = đợt SAU đã tới (mốc S177 đợt-5 = `1fa079d`; eoffice `index-BYHa3JR8.js`)
|
||||
- 🔴 LUẬT ĐO bundle: `grep -o '<chuỗi>' | wc -l`, **KHÔNG** `grep -c` (minify = 1 mega-dòng). Chuỗi DÙNG-CHUNG phải hỏi "còn ai dùng nữa không" TRƯỚC khi kết luận (ca `Giá đề xuất`=6)
|
||||
- 🔴 **so trước/sau bằng SHA ĐÍCH DANH, CẤM `HEAD~n`** (hook `wal:` chèn ở turn-boundary). Bundle CŨ cũng vô dụng (deploy dọn `dist` ⇒ 900B SPA-fallback)
|
||||
- 🔴 verify BE live = grep DLL prod: `ssh vietreport-vps` đọc `C:\inetpub\solution-erp\api\SolutionErp.Application.dll` UTF-8 **và** UTF-16 × 2 khung, **kèm CONTROL DƯƠNG**
|
||||
|
||||
@ -551,7 +551,14 @@ export function KhkkDetailContent({
|
||||
onChange={(e) => e.target.value && assignLine.mutate({ lineId: l.id, catalogEntryId: e.target.value })}
|
||||
disabled={assignLine.isPending}
|
||||
aria-label={`Chọn hạng mục cho dòng ${l.id}`}
|
||||
className="h-8 w-full rounded-md border border-slate-200 bg-white px-2 text-xs text-slate-700 focus-visible:border-brand-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
// [S177 — anh: "Các cái mẫu bỏ đi nhé"] DÒNG ĐÃ CÓ = đọc như DỮ
|
||||
// LIỆU, không như form: viền trong suốt + nền trong suốt, khung chỉ
|
||||
// hiện khi rê chuột / vào ô. Đúng khuôn ô Ghi chú ngay dưới (đã ghost
|
||||
// từ S175) ⇒ 3 trường của một dòng nay CÙNG một ngôn ngữ.
|
||||
// 🔴 Chỉ đổi VẺ, KHÔNG đổi hành vi: vẫn `<select>` thật, vẫn sửa
|
||||
// được, vẫn tự lưu. Mũi tên dropdown của native select vẫn hiện nên
|
||||
// không mất tín-hiệu "ô này bấm được".
|
||||
className="h-8 w-full rounded border border-transparent bg-transparent px-2 text-xs text-slate-700 hover:border-slate-200 focus-visible:border-brand-500 focus-visible:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
>
|
||||
<option value="">— Chọn hạng mục —</option>
|
||||
{l.catalogEntryId && !(catalogOptions.data ?? []).some((c) => c.id === l.catalogEntryId) && (
|
||||
@ -607,7 +614,8 @@ export function KhkkDetailContent({
|
||||
if (!Number.isFinite(v) || v < 0) { e.target.value = String(l.proposedAmount); return }
|
||||
if (v !== l.proposedAmount) saveLineField.mutate({ lineId: l.id, proposedAmount: v })
|
||||
}}
|
||||
className="h-8 w-full rounded-md border border-slate-200 bg-white px-2 text-right text-xs tabular-nums text-brand-800 focus-visible:border-brand-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
// [S177] Cùng lý lẽ với ô hạng mục ngay trên — bỏ khung ở dòng ĐÃ CÓ.
|
||||
className="h-8 w-full rounded border border-transparent bg-transparent px-2 text-right text-xs tabular-nums text-brand-800 hover:border-slate-200 focus-visible:border-brand-500 focus-visible:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
/>
|
||||
) : moneyOrDash(l.proposedAmount)}
|
||||
</td>
|
||||
|
||||
@ -551,7 +551,14 @@ export function KhkkDetailContent({
|
||||
onChange={(e) => e.target.value && assignLine.mutate({ lineId: l.id, catalogEntryId: e.target.value })}
|
||||
disabled={assignLine.isPending}
|
||||
aria-label={`Chọn hạng mục cho dòng ${l.id}`}
|
||||
className="h-8 w-full rounded-md border border-slate-200 bg-white px-2 text-xs text-slate-700 focus-visible:border-brand-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
// [S177 — anh: "Các cái mẫu bỏ đi nhé"] DÒNG ĐÃ CÓ = đọc như DỮ
|
||||
// LIỆU, không như form: viền trong suốt + nền trong suốt, khung chỉ
|
||||
// hiện khi rê chuột / vào ô. Đúng khuôn ô Ghi chú ngay dưới (đã ghost
|
||||
// từ S175) ⇒ 3 trường của một dòng nay CÙNG một ngôn ngữ.
|
||||
// 🔴 Chỉ đổi VẺ, KHÔNG đổi hành vi: vẫn `<select>` thật, vẫn sửa
|
||||
// được, vẫn tự lưu. Mũi tên dropdown của native select vẫn hiện nên
|
||||
// không mất tín-hiệu "ô này bấm được".
|
||||
className="h-8 w-full rounded border border-transparent bg-transparent px-2 text-xs text-slate-700 hover:border-slate-200 focus-visible:border-brand-500 focus-visible:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
>
|
||||
<option value="">— Chọn hạng mục —</option>
|
||||
{l.catalogEntryId && !(catalogOptions.data ?? []).some((c) => c.id === l.catalogEntryId) && (
|
||||
@ -607,7 +614,8 @@ export function KhkkDetailContent({
|
||||
if (!Number.isFinite(v) || v < 0) { e.target.value = String(l.proposedAmount); return }
|
||||
if (v !== l.proposedAmount) saveLineField.mutate({ lineId: l.id, proposedAmount: v })
|
||||
}}
|
||||
className="h-8 w-full rounded-md border border-slate-200 bg-white px-2 text-right text-xs tabular-nums text-brand-800 focus-visible:border-brand-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
// [S177] Cùng lý lẽ với ô hạng mục ngay trên — bỏ khung ở dòng ĐÃ CÓ.
|
||||
className="h-8 w-full rounded border border-transparent bg-transparent px-2 text-right text-xs tabular-nums text-brand-800 hover:border-slate-200 focus-visible:border-brand-500 focus-visible:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30"
|
||||
/>
|
||||
) : moneyOrDash(l.proposedAmount)}
|
||||
</td>
|
||||
|
||||
Reference in New Issue
Block a user