# WQ3b-FE — port 3 mon KHKK vao panel duyet HD + tai-vi-tri may duyet ve panel-3 (S190 · YC-030)

> Worker #53 chết giữa (68 tool-use, artifact 0 ruột). Trạng thái lúc chết: panel ×2 + types ×2 +
> content fe-user + MyContractsPage-comment ĐÃ sửa; THIẾU copy content fe-admin + gắn panel 5 host.
> **LEAD hoàn thiện on-behalf phần cơ học còn lại** (copy-byte + 5 khối render cùng khuôn) — khai.

## Việc đã làm

1. (worker) `ContractWorkflowPanel.tsx` ×2 app: port 3 món KHKK — ô tích "Cấp này KẾT THÚC quy
   trình" (`allowApproverFinalize` 3 hit) + meta `{workflowCode} v{NN}` + banner
   `endedByLevelFinalize` (7 hit cụm) + gửi `applyLevelFinalize` trong body Duyệt. SHA cặp
   `2edbe534901d` ×2 KHỚP.
2. (worker) `types/contracts.ts` ×2 app (KHÔNG phải cặp SHA — vốn khác nhau by-design, HEAD
   `1d4d649f`≠`3d2da3bd`): nở `workflowCode`/`workflowVersion`/`endedByLevelFinalize` +
   body `applyLevelFinalize?`/`skipToFinal?` (fe-admin :194-220).
3. (worker) `ContractDetailContent.tsx` fe-user: GỠ khối isV2 render máy duyệt (comment lật :15,
   :144 — 0 hit code-only).
4. (lead) copy-byte content → fe-admin: SHA cặp `7ab04d9d939e` ×2 KHỚP.
5. (lead) Gắn `<ContractWorkflowPanel contract={detail.data}>` (vỏ `section border-brand-200`,
   điều kiện `approvalWorkflowId != null` — đúng khối cũ) vào **5 host**: MyContractsPage panel-3
   (TRÊN WorkflowHistoryPanel — khuôn KhkkListPage) · ContractDetailPage ×2 app (aside) ·
   InboxPage fe-user · ContractsListPage fe-admin. Mỗi host +1 import.

## Ô acceptance (lead đo @S190 sau hoàn thiện)

- tsc ×2 EXIT=0 · build ×2 EXIT=0 (`✓ built`) · eslint fe-user **47** / fe-admin **42** = baseline KHÔNG TĂNG
- SHA cặp: panel `2edbe534901d`×2 ✅ · content `7ab04d9d939e`×2 ✅
- Content 0 render panel (grep code-only = 0; 2 hit còn lại là comment lineage) ✅
- 5/5 host `<ContractWorkflowPanel` = 1 mỗi host ✅
- Hành-vi (ô tích finalize gửi body · banner · meta) = DEFERRED-TO-LOCAL-VERIFY vòng-2 của lead

## DEFERRED/DỪNG

- IDE diagnostics never-read/cannot-find giữa chuỗi edit = snapshot dở (#68) — bác bằng tsc EXIT=0 ×2.
- `skipToFinal` có surface body nhưng FE chưa có đường bấm (khai trong types comment :212) — đúng
  scope; ô-tích chỉ cho `applyLevelFinalize`.
