KB-1663

Handoff S178 Fix 29 → Fix 30

7 min read Revision 1
handoffs178fix29

Handoff S178 Fix 29 → Fix 30

Phiên: S178 Fix 29 | Ngày: 2026-04-22 → 04-23 HP: v4.6.3 (14 NT) | Đ22: v1.2 Fix 29 (rev 21) | Đ43: v1.2 FINAL rev 6


§0. TÓM TẮT 1 CÂU

Auto-heal H11a DONE (y tá trực vào ca) + Đ22 §1.1 Issue Lifecycle enacted (sổ bệnh 5 cases: insert/idempotent+stamp/reopen/auto-close/noop). Executor v1.5.0. Luật Đ22 rev 21 sạch. A11 DROP chờ gate ngày 23/4.


§1. ĐÃ LÀM

# Việc Status Commits
1 H11 split PG: H11 cũ deactivated, H11a (critical, detect_and_fix) + H11b (warn, detect_only) seed trong system_health_checks. threshold_config khớp dispatch_sql contract. dot d2d2f16, main 0dea298
2 Auto-heal H11a (y tá trực): Handler autofix_heal_description_basic trong executor. PG introspection (pg_constraint) cho PK. Anti-loop guard (post-heal empty → CRITICAL + DỪNG). 7 guards. Companion trigger UPDATE gap → caller INSERT entity_labels PROV-DOT. dot d2d2f16, main 0dea298
3 Config gate flip: hc_heal_description_basic_autofix_enabled = 'true'. Y tá vào ca trực. SQL direct
4 Đ22 §1.1 Issue Lifecycle — auto-close (phase 1): Constraint 'resolved' + resolved_at + resolved_by. Auto-close logic: composite matching key (source, entity_type, entity_code) + success gate + scope guard + config gate. dot 54d41a8→a85d148, main aadd5d3→d1c40f5
5 Đ22 §1.1 Case C rework (phase 3): Sửa từ "tạo mới" → REOPEN cùng row + reopen_count+1. NT1 SSOT: 1 entity + 1 check = 1 issue mãi mãi. dot 6564795 (v1.5.0), main 27010e3
6 Case B last_seen_at metadata: Sửa luật §1.1 Case B từ "KHÔNG LÀM GÌ" → "UPDATE last_seen_at=NOW()". Schema +last_seen_at TIMESTAMPTZ. Executor đã implement từ trước — luật retroactive cho phép. KB rev 19-21, SQL direct
7 Archive row 5385: Duplicate từ phase 2 (tạo mới thay reopen). status='archived'. SQL direct
8 APR id=24: Đã xử lý từ trước — retroactive_documented, retroactive_apr_id=252, deadline 2026-04-23 22:44 UTC. Đã có
9 Dọn rác luật Đ22: Header chồng 2 bản, nhãn "5 trường hợp" trùng, metadata title v1.1. Sửa sạch rev 18→21. KB rev 16-21

§2. QUYẾT ĐỊNH KỸ THUẬT

# Quyết định Lý do
1 H11a detect_and_fix thay vì detect_only NT12 DOT cặp: detect + heal hoàn chỉnh
2 PG introspection cho PK (pg_constraint) thay vì hardcode WHERE code = NT4+NT11+NT13: không phải bảng nào cũng có cột code. Tham chiếu fn_description_context commit 8d11e88
3 REOPEN thay vì tạo issue MỚI khi finding tái xuất NT1 SSOT + Đ14: 1 entity + 1 check = 1 issue row. Tạo mới = phình DB + vòng lặp tạo-đóng vô nghĩa
4 Case B stamp last_seen_at thay vì SKIP hoàn toàn Auto-close cần biết finding còn sống lần cuối. Metadata only, không đổi status/severity
5 Sửa chui Đ22 thay vì Council Bổ sung HOW cho WHAT đã có (bước ④ thiếu spec từ v1.0). Không thay đổi triết lý
6 fn_log_issue p_source = check_code thay vì 'dot-hc-executor' Matching key §1.1 cần source cụ thể. Agent tự phát hiện và sửa đúng

§3. LUẬT SỬA TRONG PHIÊN

Luật Version Thay đổi KB rev
Đ22 v1.2 Fix 29 +§1.1 Vòng đời Issue: 5 cases, matching key composite, success gate, reopen, last_seen_at, reopen_count, config hc_auto_close_enabled rev 21

§4. SỐ LIỆU PRODUCTION

system_issues: open=1374, resolved=661, archived=20
H11a findings: 0 (PASS)
H11b findings: 1238 (WARN)
system_health_checks: 29 active (H11 inactive, H11a+H11b active)
executor: v1.5.0 (+145 dòng từ v1.3.0 ban đầu)
reopen_count > 0: 1 row (id 5335, reopen_count=1)

§5. PHIÊN SAU CẦN LÀM

# Việc Effort Ghi chú
1 A11 DROP bảng cũ Low Gate mở 2026-04-23T08:17 UTC. Prompt prompt-a11 sẵn từ Fix 26. 1 câu DROP + verify.
2 Reclassify 58 issues cũ Low source='dot-hc-executor' (label chung) → cần UPDATE source thành check_code cụ thể hoặc archive. Scope guard hiện filter hết 58 rows này.
3 resolved_at timestamp → timestamptz Low Pre-existing, server UTC nên chưa sai. ALTER COLUMN khi tiện. Ghi TD.
4 §4.3 trùng số Low Retrofit clause (§4.3) trùng với Hạ tầng HC (§4.3). Retrofit nên đổi thành §4.5. Lỗi từ Fix 24, ngoài scope Fix 29.
5 B2 Backfill description AI enrichment High 1,238 entity H11b WARNING. Chia batch ≤ 30, theo lớp Đ0-B.
6 B3 Project Identity trang bìa Low Sau B2.
7 B4 Architecture Annotation 4 lớp Medium Sau B2.
8 Đ43 Phase 4a build script High P3+ còn lại.
9 TD backlog Low TD-S178-31, TD-S178-32.

§6. BÀI HỌC

# Bài học
1 Cùng bệnh lặp lại: WHERE code = hardcode — vừa chữa trong template (Fix 28) mà 10 phút sau viết lại trong prompt auto-heal. Gốc: soạn prompt ở mức logic flow, quên rà từng token đối chiếu NT.
2 Deployment gap: Luật tách H11→H11a/H11b, KB docs tạo, nhưng PG chưa cập nhật. Assembly First vi phạm. Kiểm tra PG trước khi claim "done".
3 Agent đọc cache cũ: Patch luật nhiều lần chồng chéo → agent photo bản cũ trước khi patch cuối → implement theo spec cũ (tạo mới thay reopen). Luật phải sạch TRƯỚC khi giao prompt.
4 Sửa luật phải verify: Patch_document API dễ để rác (header chồng, section trùng). Sau MỖI patch → đọc lại toàn bộ file. Không bỏ qua.
5 "Không chắc đúng = sai" áp dụng cho Desktop: Thông tin có sẵn trên KB (báo cáo fix28-h11-split-deployment-gap.md) nhưng Desktop lười không đọc → tự phân tích lại mất thời gian → cùng kết luận. Search KB TRƯỚC khi suy đoán.
6 Luật thiếu logic = code tắc: §1.1 ban đầu nói "tái xuất → tạo MỚI" + "cùng source" matching → 48 issues rác/ngày + close nhầm. Phải tư duy NT14 (agent viết code) khi soạn luật.
7 Sửa chui có giá trị: Đ22 §1.1 sửa chui tiết kiệm 2-3 vòng Council. Nhưng sửa chui = Desktop phải tự rà kỹ hơn vì không có AI reviewer bổ sung.

§7. FILE THAY ĐỔI

VPS /opt/incomex/dot

Commit Nội dung
d2d2f16 H11 split + auto-heal handler
54d41a8 Auto-close phase 1
a85d148 Auto-close phase 2 (composite key + success gate)
6564795 Case C reopen + reopen_count (v1.5.0)

VPS /opt/incomex

Commit Nội dung
0dea298 H11 split + auto-heal
aadd5d3 Auto-close phase 1
d1c40f5 Auto-close phase 2
27010e3 Case C reopen + reopen_count

KB

Path Rev Nội dung
knowledge/dev/laws/law-22-self-healing.md 21 §1.1 Issue Lifecycle, dọn rác header

§8. ĐỌC PHIÊN SAU

search_knowledge("handoff fix29")
search_knowledge("H11 split deployment gap")
search_knowledge("Đ22 §1.1 vòng đời issue 5 trường hợp reopen")