Nguon: /fable-clone frontend-designer ensemble 5 lane (wf_016b1bed-b85, 5/5 xong, 0 chet,
755K tok). Spec day du: runs/2026-08-05-S174-khkk-style-audit/spec-khkk-style-dong-bo-05-08-2026.md
=== DOT A — LOI THAT (khong phai style) ===
A1 🔴 Nut "Tai xuong" file dinh kem KHKK BI 401 — lane L1 bat, lead verify.
Cu: <a href="/api/contract-signing-plans/.../download"> TRAN.
JWT chi gan boi interceptor axios (lib/api.ts:18); the <a> KHONG di qua axios => request
toi [Authorize(Policy="KeHoachKyKet.Read")] (ContractSigningPlansController.cs:222-223)
di TAY KHONG => 401, nut khong tai duoc.
Moi: ham downloadAttachment() dung khuon PE (PeWorkflowPanel.tsx:327-342) —
api.get(responseType:'blob') -> createObjectURL -> click ngam -> revoke.
A2 🔴 REGRESSION DO CHINH LEAD GAY RA TRONG PHIEN NAY (lane L3 bat).
Man Thao tac dung <main className="hidden ... lg:block"> => duoi lg chi con panel-1,
KHONG co form => MOBILE KHONG TAO DUOC PHIEU (bam phieu xong khong co cho bam "Tao").
Va 2 ve: (1) <main> bo hidden, hien moi kho; (2) mobile xep DOC voi panel-1 chot tran
14rem — khong chot thi danh sach dai day form roi khoi man, dung cai ngo cut vua va.
A3 Tra no da khai voi owner: trang chi tiet KHKK tren mobile mat nut Gui duyet / Xoa phieu.
Giu KhkkWorkflowPanel o DUNG lg:hidden — desktop van sach (panel-3 lo), mobile thao tac duoc.
=== OWNER CHOT VONG NAY ===
O2 "Dung bo chu sap di" — go SoonChip().
Lane L4 do: KHONG giai doan nao con dung nghia "sap" (ca 4 deu fetch API that);
SoonChip KHONG export, 8 hit noi bo => 0 host ngoai phu thuoc.
🔴 Go != "thay het bang 0". BA ca, BA cach xu dung nghia:
· 2 ca dem-duoc -> luon in SO (ke ca 0)
· ca KHOA-QUYEN -> BO TRANG (in 0 la NOI DOI: co the day phieu, chi la khong duoc
xem, va cung khong duoc phep goi API de biet). O khoa + title du.
· ca FAILED (dau —) -> GIU NGUYEN ("khong tai duoc" khac "co 0 phieu", dung gop)
Cau-4 "vay thi bo luon tu choi ~ tuong tu PE" — go nut TU CHOI khoi KhkkWorkflowPanel.
PE co code tu-choi nhung THUC TE khong hien (BE go khoi nextPhases + FE loc, UAT S60).
🔴 Chi go DUONG BAM o UI. May BE (KhkkTransitionAction.Reject, phase TuChoi=99) GIU
NGUYEN: phieu cu da tu-choi van hien dung, mo lai sau chi la them nut.
B4 Grid man Thao tac 300/340 -> 260/320 dung so cua PE (PurchaseEvaluationWorkspacePage:80).
=== HAI GIA-DINH CUA LEAD BI LANE BAC (lead da tu verify, lane DUNG) ===
- O3 hang-muc N-dong KHONG can migration. ContractSigningPlanLineConfiguration.cs:37-38
unique index 3 COT (PlanId, SupplierId, CatalogEntryId) => 1 NCC DA duoc phep N dong x
N hang muc tu Mig 71. May rong san, chi UI hep. Lead tung bao owner "nang nhat, can
migration" — SAI, da dinh chinh.
- O4 shopdrawing dinh kem = FE-only 0-BE (rail dossierItemId da land du 6 tang tu Mig 69).
Verify: build 2 app PASS; mirror SHA256 4/4 cap KHOP; control-am: <SoonChip=0 · "> Tu choi"=0
· a-href=0; control-duong: responseType=2 + downloadAttachment=2 CA HAI app.
🔴 CHUA co screenshot — ca 5 lane deu khong chup duoc (dev-rig chan: chi :8080 LISTENING,
API :5443 khong co, trang sau ProtectedRoute — gotcha #3). Phai soi that 375/1366/1440 tren
prod sau deploy truoc khi tuyen PASS.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1. Tang duoi man Thao tac: DANH-SACH-TRANG 3 trang-thai — anh: "cho thao tac chi hien tra
lai va nhap, tu choi thoi nhe" => {DangSoanThao, TraLai, TuChoi}. `ChoDuyet` CUNG bi loai
(khac vong-3 chi bo `DaDuyet`): phieu dang trinh duyet thi nguoi soan khong thao tac gi
duoc nua.
🔴 Doi tu LOAI-TRU sang DANH-SACH-TRANG la CO CHU DICH: loai-tru (`!== DaDuyet`) se tu
dong NHAN moi phase them ve sau; danh-sach-trang thi phase moi phai khai TUONG MINH moi
hien. O man chi nen chua viec CON SUA DUOC, im lang nhan them la hong => chon ve chat.
Tieu-de doi thanh "KHKK · nhap / tra lai / tu choi" — noi DUNG tap dang hien, de nguoi
dung biet ngay vi sao phieu vua gui duyet "bien mat".
2. Cay toan trinh trong man Danh sach KHKK: GO vo card — anh: "style cho no giong nhau dong
bo nhe, style ben KHKK co cai vien ben ngoai".
🔴 GOC RE + BAI HOC: truoc do da truyen `className="border-0 shadow-none"` voi Y DINH tat
vo card, nhung `.card-accent` khai o `index.css:112` NAM NGOAI `@layer` nen THANG utility
cua Tailwind v4 => lenh tat bi VO HIEU IM LANG. Day dung la gotcha #66 cua chinh repo
(rule tho ngoai @layer thang utility). Fix = GO CLASS theo dieu kien (`!hideHeader &&
'card-accent lg:sticky lg:top-4'`), KHONG de bang utility.
`hideHeader` nay mang dung nghia "dang NHUNG trong panel khac" => bo ca vo card lan sticky
cho lien mach voi host, y nhu cay ben Duyet NCC. 6 host con lai khong truyen => nguyen ven.
Verify: build 2 app PASS; mirror SHA256 3/3 cap KHOP; grep xac nhan `card-accent` nay nam
sau dieu kien `!hideHeader`.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1. Ho thu: GO `PipelineTreePanel` khoi `/inbox` — anh: "cho hop thu vut panel nay vao lam j,
tap trung vao KHKK thoi". Ho thu = hang-doi-viec-cua-toi, cay toan trinh = ban-do-toan-he
=> sai the loai. Cho trong nay tra ve dung vai: cho quy trinh duyet cua HD dang chon.
🔸 HAI trang GD3/GD4 con lai (`MyContractsPage` · `HardCopiesPage`) GIU NGUYEN — anh chi
dich danh Ho thu, khong noi go het; khong tu suy rong. (Lineage: panel vao day @S168
GD3-D theo owner slot (63) + "mo rong = ca 3 trang"; nay owner thu lai DUNG trang nay.)
2. Panel KHKK: BO nut "+ Them moi". Man nay KHONG co duong "tao tu so 0" — ke hoach LUON
sinh tu mot phieu Duyet NCC, ma cac phieu du dieu kien da nam nguyen o tang tren => nut
chi xoa form chu khong tao them duoc gi. Khac CO CHU DICH voi `PeListPanel`.
3. Tang duoi CHI giu ke hoach DANG XU LY — an phieu `DaDuyet` (anh: "da duyet bo di luon").
🔴 KHAI GIOI-HAN: loc o FE vi endpoint chi nhan `phase` DON, khong co tham so "loai tru"
=> (a) KHONG dung `total` cua server lam so hien thi (da gom phieu DaDuyet) — dem tu mang
da loc; (b) cua-so 30 phieu moi nhat co the TOAN DaDuyet => tang duoi rong du con phieu
nhap cu hon. Chap nhan o UAT; muon chuan thi BE them tham so loai-tru.
Doi luon dong chu "x/total" -> "Da an ke hoach Da duyet": ti so cu doc thanh "dang cat
bot" trong khi that ra la "dang loc bo".
4. Nhom duyet + Quy trinh duyet GAN CUNG theo leaf menu — anh: "gan cung luon theo tung nhom
ko cho User dieu chinh cho nay luon".
- `approvalGroup` khong con la state, DAN XUAT thang tu `?group=n`. Bo luon khoi dong-bo
`lastPresetGroup` + ham `firstFreeGroup()` (chung chi ton tai de tu nhay nhom = dung
hanh-vi vua bi cam).
- Quy trinh: match theo ma tu NGUON BE, khong suy tu man hinh — `DbInitializer.cs:609`
`var code = $"KHKK-N{n}"`. Khong khop => CHAN tao + noi ro thieu ma nao, TUYET DOI
khong tu roi ve quy trinh nhom khac (gan nham = phieu di sai duong duyet).
- UI: hien gia-tri co dinh, CO Y khong dung `<Select disabled>` (o xam van trong nhu
"bam duoc nhung dang khoa" va van trong tab-order).
5. Panel giua: GO Section 5 "Y kien cap duyet" (anh: "bo luon cai nay ra luon"). So-do
Buoc/Cap + chu ky da song o Panel 3 => de ca hai la ke mot chuyen hai lan tren cung man.
DTO giu nguyen (`levelOpinions`/`workflowSteps` panel 3 van dung) — chi bo cho VE.
Verify: build 2 app PASS; mirror SHA256 3/3 cap KHOP.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Anh bac ban truoc: "Bo phan nay di cho duyet NCC da golive va da tot roi, y tao la dang
muon may lam giong giao dien thao tac cua Duyet NCC".
REVERT (quan trong nhat)
- `PurchaseEvaluationWorkspacePage` x2 app tro ve DUNG BYTE cua 1b3bcaa (grid 2 panel,
0 import, 0 markup thua). Verify bang sha256 vs `git show 1b3bcaa:` + control-duong
grep 0 hit ten panel trong pages/pe/.
- Bai hoc ghi vao dau file panel: "lam giong man X" != "sua man X". Ban dau doc anh 2/3
(anh khoanh o man PE) thanh "chen them cot vao man PE"; anh 7 moi lo cho dat that la
cot TRAI cua man Thao tac KHKK.
DI DOI
- `components/pe/PeKhkkSidePanel.tsx` -> `components/khkk/KhkkWorkListPanel.tsx` (git mv,
giu lich su) — no phuc vu KHKK chu khong phai PE.
MAN KHKK — THAO TAC (`/khkk/create`, 8 leaf nhom) doi tu trang-giay-cuon sang HOST 2-PANEL
- Khuon be nguyen tu `PurchaseEvaluationWorkspacePage`: header 1 dong + grid
`lg:grid-cols-[300px_1fr]` + Panel1 danh sach + nut dinh day + Panel2 noi dung.
- Panel 1 = 2 TANG dung anh anh khoanh:
tang TREN "Cot danh sach Duyet NCC" — PE da duyet CHUA lap KHKK, gom theo DU AN;
bam = nap thang vao form tao (tao luon KHKK).
tang DUOI "Cot KHKK da tao" — bam = XEM tai cho, read-only.
- 🔴 KHONG re-direct o BAT KY duong nao (anh chot "cho hien phieu do luon, chi view la dc,
ko re-direct ve phieu goc"): panel nhan CALLBACK onPickPe/onPickPlan thay vi tu navigate.
Van con nut phu "Mo trang day du" cho ai muon roi man — la lua chon, khong phai ep buoc.
- Section 1 cua form doi tu DANH SACH CHON thanh KHOI XAC NHAN phieu dang chon — danh sach
da o Panel 1, de 2 cho chon cung 1 thu = 2 nguon su that tren cung mot man.
- Tao xong KHONG navigate('/khkk/:id') nua ma mo luon phieu vua tao o Panel 2 + tra form ve
trang. Cung tinh than "khong roi man".
- Nut "Them moi" (dinh day Panel 1) = tra Panel 2 ve form trang.
- Gate `KeHoachKyKet.Read` giu nguyen trong panel (gotcha #85); thieu quyen thi NOI RA,
va nut hanh-dong VAN hien de man khong thanh ngo cut.
Verify: build 2 app PASS; mirror SHA256 3/3 cap KHOP; PE workspace 0 du luong (byte-exact
vs 1b3bcaa) + control-duong grep 0 hit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Anh chot qua 6 anh khoanh do + 4 cau tra loi. 7 chinh, mirror SHA256 identical 8/8 cap.
Man DANH SACH KHKK (KhkkListPage / KhkkListPanel)
- Giu DUY NHAT header trang "Ke hoach ky ket HD / Giai doan 2".
- Bo o loc "Tat ca nhom": may loc GIU NGUYEN (query + stage2Content), nhom nay den
DUY NHAT tu URL ?group=n (8 leaf menu trai). Go luon prop onGroupChange (noUnusedLocals).
- Bo thanh "Cay toan trinh - N goi" qua prop MOI `hideHeader` opt-in tren PipelineTreePanel.
6 host con lai (PE / GD3 / GD4 / Inbox) KHONG truyen => hinh cu nguyen ven.
Nut "Hien/An cay" (mobile) song TRONG thanh vua an => hideHeader ep than cay `flex`,
neu khong `<lg` mat trang cai cay.
Man CHI TIET KHKK (KhkkDetailPage / KhkkDetailContent)
- Go khoi "Quy trinh duyet" (so-do Buoc/Cap + HANH DONG + 2 lich su) — day la BAN SAO
THU HAI, ban chinh o Panel-3 man danh sach. Anh: "bo het, no se hien thi o Menu duyet".
KHAI HE QUA: `<lg` dieu huong thang vao trang nay => mobile hien khong con Gui duyet /
Xoa phieu. Mo lai = boc `lg:hidden`.
- Section 5 "Y kien cap duyet" doi sang DUNG style Duyet NCC (PeDetailTabs.tsx:705-774):
card `rounded-lg p-3` + h4 ten cap + chip trang thai + y kien text-sm + chan ngay
border-t; thay o phang 1 dong text-[11px]. GIU o "Chua ky" (PE khong co) — vang o thi
nguoi doc khong biet con thieu chu ky cua ai.
Man TAO KHKK (KhkkCreatePage)
- Doi sang khuon "Tao phieu Duyet NCC moi" (PeWorkspaceCreateView): 1 card + divide-y,
thanh dau ke LUONG, thanh cuoi hint do liet ke DICH DANH truong con thieu thay vi chi
lam xam nut. Nut "Luu nhap" -> "Tao ke hoach".
- Ve "tao xong sang chi tiet" VON DA DUNG tu S161 (onSuccess -> navigate /khkk/:id);
dot nay KHONG dung luong do, chi doi hinh.
Man DUYET NCC — THAO TAC (PurchaseEvaluationWorkspacePage + PeKhkkSidePanel MOI)
- Them cot 3: 1 cot 2 TANG 50/50 — tren = PE da duyet CHUA lap KHKK gom theo DU AN,
duoi = KHKK da tao. Ti le 50/50 bang `min-h-0 flex-1` ca hai tang.
- 0 ENDPOINT MOI: dung lai approved-pe-awaiting-plan + contract-signing-plans.
"Chua co KHKK" = existingGroups RONG — tu K2/S164 BE KHONG con loc ho, loc o FE.
- GATE #85: ca 2 cua gac bang policy `KeHoachKyKet.Read` trong khi day la man PE =>
gate bang DUNG key policy cua endpoint (KHONG OR key menu Khkk_*), thieu quyen thi
NOI RA thay vi de cot trang (cot trang doc thanh "chua co gi").
- Cot chi moc tu `xl`; o `lg` bo cuc giu DUNG 2 panel nhu cu.
Con lai (chua lam, da khai voi anh): bam PE o tang tren moi mo /khkk/create chu chua
chon san dung phieu do — can them ?peId= vao man tao.
Verify: build 2 app PASS; mirror SHA256 8/8 cap KHOP; byte-level grep bundle xac nhan
chuoi moi co mat ca 2 app (khong tin dong "built" — bai gotcha #77).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nội dung 4 folder ĐÃ gom xong @S172 (hoặc chưa từng là nợ), nhưng
detector đo TÊN FILE nên vẫn kêu orphan. Viết nốt `*-synthesis.md`
cho đúng sự thật:
- S159-bookend-open — DƯƠNG-GIẢ, chưa bao giờ là nợ (ring1 chứng
4/4 byte-exact, 10/10 vai landed từ S159). Ghi rõ CẤM gom lại.
- S159-tong-quan-pipeline-menu — arc 4 đợt deploy; nợ 2 sha
a2bbcb9/b5799fc mở 3 phiên đã gom @S172.
- S168-bookend-close — 6 vai / 162.916 B đã gom; ghi 3 lỗ cấu trúc
(vai-không-Write chết trước khi trả · hợp đồng rewrite-dòng-1 ·
vá 1 site không quét cả lớp).
- S171-khkk-ui-mirror-pe — 4 vai / 143.682 B đã gom; ghi 2 bài đắt
nhất (khung-rỗng cần-không-đủ · mất-code ⟂ mất-nghĩ).
Sau commit này: 5/5 tín hiệu Sàn-3 im, /tiep phiên sau dừng sạch.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
68 — mở enum class `view-claim-broader-than-sample` (kiểu hỏng thứ tư:
suy-luận vượt mẫu; 3 nhóm class cũ không phủ được). Seed
class_repeat.counts khoá mới = 0 CÙNG NHỊP ⇒ bất-biến counts ≡ enum
giữ 12/12 hai chiều.
69 — wire cổng ép-seed C2 vào /pause.md §2.5 (đếm 2 cột A∖B, seed
on-behalf trước khi commit `wal: pause`). Token cổng-seed 0/5 → 5/5.
Vá cơ chế lead-gap FLAG-6: phiên kết bằng /pause thì phép đếm không
bao giờ chạy ⇒ sót seed là tất yếu cấu trúc, không phải đãng trí.
70 — tách 2 sổ đếm H24: +param `-CoCa` cho h24-signal-write.ps1.
Class CÓ CA nhưng không thành FLAG (lead tự khai ⇒ con-đo xếp ngoài
TOTAL) nay CHẶN RESET nhưng KHÔNG tăng tally. Vá incentive-inversion
ring2-audit A4 bắt: cơ chế cũ thưởng cho việc giấu.
Fault-inject 4/4 (CoCa chặn reset · đối chứng âm vẫn reset · rào enum
exit 2 · happy-path exit 0). Khôi phục view-stale-header 0 → 4.
71 — gom trọn nợ harvest 11 vai / ~306 KB (S168 6 vai · S171 4 vai +
reviewer×3 lens · cicd 2 sha mở từ S162). KHÔNG gom S159-bookend-open
(dương-giả, ring1 chứng 4/4 byte-exact). Sleep probe pending=1/15 ⇒ IM
nên không nén. Ghi uỷ quyền thường trực gom+nén = AUTO, lead tự quyết,
kèm 2 rào không được nới theo.
72 — MFE vào nhịp closeout: gỡ cổng từ-khoá `eval` ⇒ AUTO mỗi closeout.
Tiền đề "MFE tắt" đã ăn trọn lớp-① reinject + E3 của harness-refine;
đo lại: exit 0, 23 role, implementer-frontend 11/13 = 85%.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cong viec da lam xong tu window-2 (S170) nhung chua commit — 4 path nay nam
NGOAI 4 duong hook wal-flush persist nen khong duoc tu-dong gom.
- .claude/agents/ctx-audit.md — neo persona [p,p+3] theo ctx-audit (b)
- .claude/agents/investigator-codebase.md:81 — bo neo so "40 migration"
(ENV-DEP: so mig doi moi dot, neo cung se stale ngay luot sau)
- docs/HANDOFF.md (47)(48) — thuoc tuoi 47,3% / 18.781 B
- docs/STATUS.md:474 — User-memory 31 -> 59
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Dua man Ke hoach Ky ket HD ve dung lop kien-truc ma GD1 (PE) va GD3 (HD) dang
dung: 1 man 3-panel h-[calc(100vh-4rem)] grid [400px_1fr_360px], thay cho
list 2-panel + detail trang rieng co workflow xep chong. GD2 la mat-xich lech
duy nhat trong 4 giai-doan truoc dot nay.
BE (7/7):
- DetailDto +5 field: WorkflowVersion / EndedByLevelFinalize / FinalizeStepName
/ FinalizeLevelName / Approvals. 2 field Finalize* KHONG phai field append —
ContractSigningPlan chi co co bool, phai DAN XUAT (lam in-memory tu cay
workflow da nap, thay vi port 3 subquery cua PE).
- ContractSigningPlanApprovalDto de moi (truoc do 0 hit toan repo).
- StepDto +DepartmentName (nuoi chip phong panel 3 + header nhom Section 5).
- GET {id}/changelogs — policy KeHoachKyKet.Read.
- POST {id}/approval-attachments + enum +ApprovalAttachment=3 (append-only).
- approvals[] loc bo Decision=Pending de so (N) cung nghia voi (N) cua PE.
- KHONG chep khuon authz cua PurchaseEvaluationsController: file do la mot lo
gotcha #82 (class [Authorize] tran + changelogs khong policy).
FE (x2 app, SHA256 byte-identical 8/8):
- components/khkk/{KhkkListPanel,KhkkDetailContent,KhkkWorkflowPanel}.tsx;
KhkkWorkflowPanel doi tu pages/ sang components/.
- Panel 2: 5 Section danh so, Section 5 "Y kien cap duyet" duoi cung — khoi nay
DOI TU panel 3 sang panel 2 (owner khoanh do trong anh); luoi 2 cot + meta
"x/y cap da duyet · N NV tham gia" thay list phang 1 cot.
- Panel 3: banner ket-thuc-som, chip ten phong, badge Duyet thay CEO, lam mo
buoc sau finalize, khoi File dinh kem khi duyet, Lich su duyet, Lich su
thay doi. Chua chon phieu -> hop dashed y PE (QD owner).
4 mitigation cuong-hanh (owner chot panel 1 = PipelineTreePanel; chon HINH
khong phai chap-nhan VO):
- M-1 fallback !canPe -> danh-sach KHKK phang. Khong co no, user chi co quyen
KHKK (vd nguoi duyet nhom N5) MAT TRANG danh-sach du API van cho doc —
display-layer khoa authz-layer dang mo, mat con lai cua #82.
- M-2 onOpen thanh callback tu host; mac-dinh giu navigate cu => 0 hoi-quy
trang PE/GD3.
- B1 stage2Content di CAP voi stage2Count qua conditional-spread:
khong truyen => stage2 van nhan groups => trang PE GIU NGUYEN 8 ngan N1-N8.
- R-11 search/loc di server-side, KHONG loc-tren-cay; giu dong canh-bao
"Cay tai 200 phieu moi nhat".
Chong hoi-quy da do: build 3/3 PASS · acceptance tinh 20/20 x 2 app ·
mirror SHA256 8/8 · 0 hit path cam (components|pages)/(pe|contracts) ·
KHONG ghi filter/view/group vao URL (chong tai-sinh bug S155 sidebar sang
nham leaf) · giu set-state-in-render :97-101 (dung khuon React, refactor
thanh useEffect se tai-hien va-5).
Con no, khai thang:
- E-7 bang "cot nao chet, chuyen di dau" (8 cot + 6 KpiCard -> card 400px)
THIEU: lane FE chet o luot tra ve, ly-do bo cot mat theo. Phai soi diff
bang mat truoc UAT, neu khong dung ca M-7 mat-chuc-nang-im-lang.
- Test 643/644. 1 FLAKY Create_DifferentEvaluationType_DoesNotAffect_Other
(full-suite 2->1->1, chay rieng 0/0/0; PeWorkflowAdminTests tao
new SqliteDbFixture() rieng x6 test). Baseline tren HEAD sach CHUA do
(git worktree fail duong-dan Dropbox) => CHUA duoc noi "flake co san".
- 5 acceptance RUNTIME cho UAT: approvals co dong Tra lai + ten nguoi (DB dev
0 hang KHKK) · UAT fe-user:8080 an-danh · deep-link fe-admin:8082 (menu
KHKK bi an trong ADMIN_HIDDEN_KEYS) · negative-control go fallback canPe ·
khoi file tu-an khi rong.
- P3-12 4 return-mode = HOAN, khong phai buoc-khac: tien-de "KHKK 3 tram ngan"
do lai la SAI (DbInitializer:554 = 3 Buoc x <=2 Cap, seed tu ghi "sao tu
workflow Duyet NCC prod").
Spec + 6 artifact phan-bien: .claude/workflows/runs/2026-08-04-S171-khkk-ui-mirror-pe/
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>