import asyncio
import json
import sys
from simulate_all import PureVectorEmbedder, qdrant_score
from inspect_mem0 import inspect_live_mem0

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

BOOSTED_27_FACTS = [
    # Area 1: Root Standards (5 facts)
    {
        "code": "RULE-ROOT-01",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Root Standards & 7 Core Laws | DSCons Rule Immutable Directives | Seven Core Laws Bảy Điều Luật Cốt Lõi DSCons Rule | MCP Tools Protocol Ecosystem] DSCons ERP tuân thủ tuyệt đối Bảy Điều luật cốt lõi bất biến (DSCons rule core laws): (1) Nghiêm cấm 100% dữ liệu ảo/mock synthetic data của Công ty TNHH Xây Dựng Định Sơn MST 0202111150; (2) Hàng rào kiểm thử hồi quy pytest 100% Passed; (3) Kiểm thử giao diện trên trình duyệt thực tế browser testing; (4) Vòng đời máy chủ Uvicorn luôn chạy --reload; (5) Chống hội chứng Bus Factor bằng tài liệu hóa giải thích rõ ràng; (6) Tuân thủ kiến trúc lục giác Hexagonal Architecture và DDD; (7) Bắt buộc khai thác tối đa hệ sinh thái MCP Server theo đúng MCP tools protocol (lsp-mcp, chrome-devtools-mcp, markitdown, memory, StitchMCP).""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-01", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-02",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Zero Synthetic Data & Source of Truth | Strict Zero-Mock Policy | Nguồn Sự Thật Thực Tế MST 0202111150 | DSCons Rule Core Standards] Trong DSCons ERP, nghiêm cấm tuyệt đối mọi hành vi tạo dữ liệu giả, mock script hoặc seed ảo (Zero-tolerance synthetic data policy). Mọi hóa đơn, dự toán, nhà cung cấp, vật tư phải được trích xuất 100% từ nguồn sự thật thực tế: Cổng Thuế điện tử Tổng cục Thuế (GDT), Odoo database dump, và hồ sơ hợp đồng HĐ-2026 của Công ty TNHH Xây Dựng Định Sơn (MST: 0202111150).""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-02", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-03",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Hexagonal Architecture & Boundary Enforcement | Ports and Adapters Boundary Gate | Ranh Giới Kiến Trúc Lục Giác DDD | DSCons Rule Core Directives] Hệ thống DSCons ERP áp dụng kiến trúc lục giác Hexagonal Architecture và DDD (Ports and Adapters). CẤM TUYỆT ĐỐI viết raw SQL, câu lệnh DDL hoặc mở DB connection trực tiếp trong Routers/Presentation layer. CẤM TUYỆT ĐỐI import các HTTP client (httpx, requests) hoặc gọi API LLM ngoài trực tiếp trong Application và Domain layer. Mọi kết nối mạng phải qua Outbound Infrastructure Adapters hoặc EnterpriseAiGateway.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-03", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-04",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Mandatory MCP Tools Protocol | MCP Tools Protocol Ecosystem Architecture | CAD Takeoff Geometry & Document Extraction | Ma Trận Khai Thác MCP Tools Protocol] Agent làm việc tại DSCons ERP bắt buộc tuân thủ giao thức MCP tools protocol, ưu tiên 100% sử dụng các công cụ chuyên trách từ MCP server có sẵn: lsp-mcp (lsp_definition, lsp_references, lsp_diagnostics) cho duyệt code và refactor symbol; chrome-devtools-mcp cho nghiệm thu trình duyệt thực tế và bắt lỗi console/network; markitdown cho đọc bóc tách tài liệu dự toán và CAD takeoff geometry PDF/Excel; memory cho Knowledge Graph kiến trúc; StitchMCP cho thiết kế UI; gemini-api-docs cho tra cứu SDK.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-04", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-05",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Sub-Agent Coordination & Definition of Done | Sub-Agent Roles & DoD Quality Standards | Điều Phối Sub-Agents & Nghiệm Thu Kỹ Thuật | DSCons Rule Management] Giám đốc Kỹ thuật DSCons điều phối các Sub-Agents chuyên trách: Architect-DB, Dev-Backend, Dev-Frontend, Domain-AEC-Auditor, QA-SecOps. Mọi tác vụ nghiệm thu (Definition of Done - DoD) bắt buộc phải có đầy đủ: Bối cảnh, Ràng buộc kỹ thuật, Input/Output Schema rõ ràng, không vi phạm ranh giới kiến trúc, đạt 100% pytest passed và dọn dẹp sạch sẽ dữ liệu kiểm thử test teardown.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-05", "area": "Area 1"}
    },

    # Area 2: Backend & DB (5 facts)
    {
        "code": "RULE-BACKEND-01",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: 4-Layer Clean Architecture & DDD | Backend Architecture Database Infrastructure | Kiến Trúc Backend Lục Giác kien truc backend luc giac] Backend architecture DSCons cấu trúc 4 tầng nghiêm ngặt (4-Layer Clean Architecture & DDD): (1) Presentation (FastAPI Routers chỉ validate Pydantic schema và ủy quyền); (2) Application (Use Cases, Command/Query Handlers giao tiếp qua Domain Ports); (3) Domain Core (Entities, Value Objects, Protocols hoàn toàn độc lập 0% phụ thuộc framework/DB/database); (4) Infrastructure (Repositories, Adapters đóng gói SQL database precision, persistence Decimal NUMERIC(18, 4) và external HTTP clients). Code phải vượt qua pytest test_architecture_boundary_enforcement.py.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-01", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-02",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: Database Precision & Financial Ledgers | Database Precision Decimal Arithmetic | PostgreSQL NUMERIC(18, 4) & Double-Entry Ledger | CSDL Độ Chính Xác Số Thực Database Precision] Trong CSDL PostgreSQL database precision và mã nguồn Python của DSCons ERP, TUYỆT ĐỐI CẤM sử dụng kiểu số thực FLOAT hoặc kiểu DOUBLE khi lưu trữ tiền tệ VNĐ và khối lượng bóc tách BoQ. Bắt buộc sử dụng kiểu NUMERIC(18, 4) hoặc BIGINT trong PostgreSQL và kiểu Decimal trong Python đảm bảo database precision tuyệt đối. Mọi biến động tài chính, hạn mức ngân sách và kho vật tư áp dụng cơ chế Sổ kép (Double-entry ledger) bất biến kèm khóa Optimistic/Pessimistic Locking.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-02", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-03",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: FastAPI Server Lifecycle & Hot-Reload | Backend Architecture Uvicorn Runtime Lifecycle | Vòng Đời Máy Chủ Backend Uvicorn] Backend architecture DSCons ERP: Máy chủ backend Uvicorn của DSCons ERP luôn được vận hành với cờ --reload (python -m uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload). Trước khi nghiệm thu bất kỳ API endpoint hoặc module mới nào, Agent bắt buộc phải xác nhận tiến trình máy chủ đang chạy đã nạp nóng (hot-reloaded) mã nguồn mới nhất, tránh tình trạng kiểm thử trên phiên bản code cũ.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-03", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-04",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: Strict Automated Test Teardown | Database Fixture Cleanup Policy | Dọn Dẹp Dữ Liệu Kiểm Thử Tự Động] Toàn bộ các kiểm thử tự động trong pytest tests/ khi chèn dữ liệu vào CSDL PostgreSQL (users, dự án, dữ liệu kiểm thử, chat messages, quy tắc) bắt buộc phải có cơ chế dọn dẹp sạch sẽ 100% (Teardown via pytest fixture yield hoặc khối finally). Tuyệt đối không để sót các bản ghi rác mang tiền tố TEST-%, API_TEST%, SAMPLE_TEST% trong database sau khi test hoàn thành.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-04", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-05",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: API Gateway Routing Prefix /v1/erp | Backend Architecture Reverse Proxy Routing | Tiền Tố Định Tuyến API Gateway] Backend architecture DSCons ERP: Mọi API Endpoints và UI Dashboards mới trong hệ thống DSCons ERP bắt buộc phải tuân thủ tiền tố định tuyến /v1/erp (Ví dụ: @router.get("/v1/erp/dashboard/..."), /v1/erp/takeoff/...). Tuyệt đối không mount routes ở root level (/) vì API Gateway (Nginx/Cloudflare Tunnel) sẽ chặn và trả về lỗi 404 (Lỗi quên V1 vào endpoint).""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-05", "area": "Area 2"}
    },

    # Area 3: Frontend (5 facts)
    {
        "code": "RULE-FRONTEND-01",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Dark Slate Design System & Palette | Frontend Theme & Color Palette | Bảng Màu Giao Diện ERP Frontend Theme] Giao diện frontend theme DSCons ERP áp dụng chuẩn thiết kế Enterprise Dark Slate Theme: Màu nền chính #0b0f19 / #080d1a, thẻ/panel #111827, đường viền #1e293b. Bảng màu (color palette) frontend theme chuẩn dark slate. Mọi màn hình bắt buộc import stylesheet dùng chung /static/css/erp_enterprise.css và thanh điều hướng thống nhất <header class="erp-navbar"> với logo DSCons, menu phân hệ và trạng thái tài khoản.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-01", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-02",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Typography Standards & Font Hierarchy | Frontend Theme Fonts Inter & JetBrains Mono | Kiểu Chữ Chuẩn Hóa Frontend] Giao diện frontend theme DSCons chuẩn hóa kiểu chữ: Google Fonts Inter hỗ trợ đầy đủ tiếng Việt cho toàn bộ tiêu đề và nội dung; Font JetBrains Mono cho toàn bộ số liệu tài chính VNĐ, đơn giá ca máy, mã thiết bị, và tọa độ CAD. Phân cấp cỡ chữ chặt chẽ: Tiêu đề trang 15px-17px (bold), Thẻ 13px-14px, Nội dung 12px-13px, Nhãn phụ Meta 10.5px-11.5px uppercase tracking.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-02", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-03",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: High-Density Bloomberg Layout & Zero Sidebar Occlusion | Frontend Theme Layout Density | Mật Độ Thông Tin Cao Bloomberg] Frontend theme DSCons tối ưu mật độ thông tin cao (Bloomberg/Palantir density): Paddings/gaps gọn gàng 8px-14px cho cards và 6px-10px cho hàng dữ liệu, chia cột Multi-Column Split-View. Chống đè menu (Zero Occlusion): Toàn bộ bố cục chính .erp-main-layout bao bọc nội dung với margin-left: var(--sidebar-width) (260px desktop, 72px collapsed), cấm để sidebar cố định che khuất nội dung.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-03", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-04",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Unidirectional Data Flow & Idempotent Locks | Pure State Renderers | Luồng Dữ Liệu Đơn Chiều & Khóa Chống Trùng] Giao diện frontend DSCons tuân thủ luồng dữ liệu đơn chiều: Các hàm chuyển tab switchTab hoặc switchBoqViewMode là Pure State Renderers, tuyệt đối không gọi ngược lại Action Creators gây đệ quy vô tận. Mọi thao tác submit biểu mẫu và gọi API phải có cờ khóa chống trùng bất đồng bộ (Idempotent locks: if (isSubmitting) return; hoặc debounce) để ngăn chặn gửi nhiều request trùng lặp.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-04", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-05",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Toast Anti-Flood & Static Asset Cache Buster | Notification Rate Guard | Chống Tràn Toast & Cache Buster] Hệ thống thông báo frontend DSCons có hàng rào Toast Anti-Flood tự động chặn các thông báo trùng lặp đang hiển thị và giới hạn tối đa 3 Toast cùng lúc trên màn hình. Mọi lệnh gán img.src hình ảnh bản vẽ CAD phải gắn ?v=${Date.now()}. Khi cập nhật file JS/CSS cốt lõi, bắt buộc tăng phiên bản Cache Buster (?v=x.x.x) trên toàn bộ các file .html để trình duyệt người dùng hiển thị đúng UI mới.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-05", "area": "Area 3"}
    },

    # Area 4: AEC Business (7 facts)
    {
        "code": "RULE-AEC-01",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: 4 Business Pillars of Dinh Son MST 0202111150 | Construction Logistics & Equipment Rental | Bốn Trụ Cột Kinh Doanh Định Sơn] Công ty TNHH Xây Dựng Định Sơn (MST: 0202111150) có 4 Trụ cột kinh doanh độc lập: (1) Thi công Xây lắp & Thủy lợi (Đa Độ, Cống Bến Kem, Kiến Minh...); (2) Dịch vụ Vận tải Xe Ben & Logistics Cơ Giới (Thoát Nước Hải Phòng 0200149705 vận chuyển bùn đất); (3) Cho thuê Máy móc Ca máy (Loan Khải 0201889988); (4) Mua bán Vật tư & San lấp (Trung Kiên 0201805660). Tuyệt đối KHÔNG gộp các trụ cột 2, 3, 4 thành Dự án Thi công Xây dựng.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-01", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-02",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: AEC Pricing Norms | Construction Cost Estimation & BoQ Budgeting | Circular 38 Larsen Pile Norms & Material Cost VL=0 | Định Mức Dự Toán AEC Pricing Norms] Căn cứ Luật Xây dựng 2025/2026 và Thông tư 38 về định mức dự toán xây dựng (AEC pricing norms): Công tác Thuê, Ép, Nhổ cừ thép Larsen IV hoặc thuê tôn chống lầy cấu thành 100% từ Chi phí Nhân công (NC) và Chi phí Ca máy (M). Tuyệt đối KHÔNG sinh ra chi phí mua vật liệu thô mới (Bắt buộc VL = 0 VNĐ) trong Bảng Tổng Hợp Nhu Cầu Vật Tư (MR) và BoQ Budgeting. Nghiêm cấm gán nhầm đơn giá mua cừ mới làm sai lệch định mức và dự toán thi công.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-02", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-03",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Material Budget Ratio Sanity Gate MR/T | AEC Pricing Norms Budget Sanity Check | Hàng Rào Kiểm Toán Tỷ Trọng Vật Tư MR/T] Hệ thống kiểm toán dự toán và AEC pricing norms DSCons áp dụng Hàng rào kiểm soát tỷ trọng vật tư (Sanity Check Gate): Tổng chi phí vật tư (MR) bắt buộc nằm trong khoảng 40% - 65% của Chi phí trực tiếp (T = VL + NC + M). Nếu tỷ lệ MR / T vượt quá 75%, hệ thống phải tự động kích hoạt Cảnh báo Bất thường (Anomaly Alert) nhằm chặn đứng lỗi nhân đôi khối lượng hoặc áp nhầm giá mua mới cho thiết bị thuê.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-03", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-04",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: AEC Pricing Norms & 4-Tier Budgeting | Construction Pricing Norms & THKP Markup Matrix | Dự Toán Xây Dựng & Định Mức Chi Phí G_XD] Dự toán và AEC pricing norms DSCons phân cấp 4 tầng chi phí: Cấp 1 Chi phí trực tiếp (T = VL + NC + M); Cấp 2 Dự toán XD sau thuế (G_XD = (T + GT + TL) * 1.08 VAT, dùng chào thầu BoQ); Cấp 3 Dự toán Gói thầu (G_GTXD = G_XD + Dự phòng); Cấp 4 Tổng mức đầu tư (G_TMĐT). Hệ số tổng hợp kinh phí (G_XD / T) phải tra cứu đúng loại công trình: Dân dụng ~1.2636; Nông nghiệp Thủy lợi cống đê ~1.2419-1.2543; Giao thông đường cầu ~1.2505; tuyệt đối không áp dụng đồng nhất một công thức.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-04", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-05",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Anti-Inflation Steel Pricing & Strict Unit Guard | Steel Procurement Pricing Rules | Kiểm Soát Đơn Giá Thép Tấn BoQ] Đơn giá thép mua mới (16.15 - 16.45 tr/tấn) CHỈ ĐƯỢC PHÉP áp dụng cho cốt thép chịu lực kết cấu bê tông theo đúng ĐVT (tấn, 100kg, kg). CẤM TUYỆT ĐỐI áp giá thép tấn cho ĐVT m, m2, tấm, ca, chuyến. Tự động loại trừ 100% khi khớp giá thép với các từ khóa: cừ thép, thuê cừ, cừ larsen, thuê ván thép, ván khuôn thép, khung xương thép, bốc xếp vận chuyển thép, dây chống sét D10, dàn giáo.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-05", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-06",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Direct-to-Site Accounting & BoQ-Driven Allocation | Site Delivery Material Costing | Hạch Toán Xuất Thẳng Chân Công Trình TK 621] DSCons tuyệt đối không dùng TK 152 tạo Kho Ảo cho vật tư thi công. Vật tư (thép, xi măng, cát, đá, cọc) giao thẳng về chân công trình được hạch toán trực tiếp: Nợ TK 621_Chi_tiết_Dự_án (hoặc TK 154) / Nợ TK 1331 / Có TK 331. Hệ thống tự động đọc định mức dự toán BoQ của các dự án đang thi công và hạn mức vật tư còn lại (Remaining Quota) để tự động phân rã chi phí và gán đúng mã dự án matched_project_id.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-06", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-07",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: CAD Takeoff Geometry | CAD Takeoff Engine TCVN3 Decoding & Bounding Box | CAD Takeoff Geometry Vector Extraction & Model Space | Bóc Tách Bản Vẽ Hình Học CAD Takeoff Geometry] Engine bóc tách hình học CAD (CAD takeoff geometry) DSCons giải mã chính xác byte font TCVN3/.VnTime/VNI, cố định stroke-width: 1px non-scaling-stroke trên vector graphics. Tự động quét Model Space thực tế để cắt Bounding Box sạch (Zero-Void CAD takeoff geometry), loại bỏ khoảng trống rác >100m. Phân định chặt chẽ Xây mới (NEW_BUILD_ENGINE) vs Cải tạo (RENOVATION_ENGINE áp dụng định mức Chương SA/AA, vật liệu VL = 0 VNĐ, cấm tự sinh khối lượng đúc mới kết cấu hiện trạng).""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-07", "area": "Area 4"}
    },

    # Area 5: Testing & Workflow (5 facts)
    {
        "code": "RULE-WORKFLOW-01",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Testing Workflow & Deep Matrix D1-D6 on task.md | Refactoring Planning Workflow | Quy Trình Lập Kế Hoạch Testing Workflow Deep Matrix] Mọi đợt tái cấu trúc lớn (Mass Refactoring) hoặc tính năng trên 10 files tại DSCons bắt buộc áp dụng quy trình testing workflow Deep Matrix trên task.md từ D1 đến D6: [D1] Module/Epic, [D2] Business Flow, [D3] Domain Logic, [D4] State & Transitions, [D5] Event Bus Dependencies, [D6] File-level Execution. Thực thi từng phần từ D6 ngược lên; nghiêm cấm commit mã giả không hoàn chỉnh hoặc TODO chưa triển khai; cập nhật timestamp và checkbox sau mỗi khối logic.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-01", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-02",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Testing Workflow & Autonomous Closed-Loop TDD | Regression Gate & Self-Healing | Quy Trình Kiểm Thử TDD Testing Workflow] Mọi phát triển phần mềm DSCons tuân thủ testing workflow Test-Driven Development (TDD): Viết test trước khi sửa mã nguồn; xác nhận test FAIL (negative baseline); triển khai mã tối thiểu; tự hành sửa lỗi qua traceback tối đa 5 vòng lặp (zero human hand-holding) cho đến khi 100% test PASS; độ bao phủ coverage >= 80% (unit + integration + E2E). Hàng rào pytest tests -v đạt 100% Passed là điều kiện bắt buộc trước khi commit.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-02", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-03",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Testing Workflow & 6-Phase Verification Quality Gate | Verification Loop Pipeline | Chu Trình Nghiệm Thu 6 Pha Testing Workflow] Trước khi tạo Pull Request hoặc bàn giao tính năng, testing workflow bắt buộc vượt qua chu trình kiểm chứng 6 pha Verification Loop: Pha 1 Build Verification (npm run build / uvicorn reload); Pha 2 Type Check (pyright / tsc); Pha 3 Lint Check (ruff / eslint); Pha 4 Test Suite (pytest --cov >= 80%); Pha 5 Security Scan (quét secret/SQLi); Pha 6 Diff Review (đối soát git diff không dư thừa).""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-03", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-04",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Eval-Driven Development EDD & Grader Harness | AI Development Evals as Unit Tests | Khung Đánh Giá Độc Lập EDD] DSCons ERP áp dụng triết lý Eval-Driven Development (EDD) xem evals là unit tests của AI development: Thiết lập tiêu chí thành công trước khi triển khai; theo dõi hồi quy (Regression Evals) với độ tin cậy pass@k; sử dụng Code-Based Grader mang tính tất định (deterministic checks) kiểm tra file patterns, test pass, build success thay vì chấm điểm cảm tính.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-04", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-05",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Real Browser Automation Gate & AST Boundary | CAD Takeoff Geometry & 3D BIM Model Space | Chrome DevTools MCP Tools Protocol | Kiểm Thử Trình Duyệt Thực Tế] Toàn bộ tính năng UI/UX và mô hình bản vẽ/BIM CAD takeoff geometry bắt buộc kiểm thử trực tiếp trên trình duyệt thực tế qua giao thức MCP tools protocol (Real Browser Gate qua Chrome DevTools MCP hoặc Playwright), xác nhận 0 lỗi console JavaScript, FPS > 30 và chụp ảnh nghiệm thu. Đồng thời mọi thay đổi backend bắt buộc vượt qua bộ kiểm tra ranh giới AST tự động: pytest tests/test_architecture_boundary_enforcement.py đạt 100% Passed.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-05", "area": "Area 5"}
    }
]

async def run_final_simulation():
    dscons_mems, non_dscons_mems = await inspect_live_mem0()
    embedder = PureVectorEmbedder()
    
    embedded_non_dscons = []
    for m in non_dscons_mems:
        v = embedder.embed(m.get("memory", ""))
        embedded_non_dscons.append((m, v))
        
    embedded_facts = []
    for f in BOOSTED_27_FACTS:
        v = embedder.embed(f["text"])
        embedded_facts.append((f, v))
        
    queries = [
        ("Q1", "DSCons rule", ["Bảy Điều luật", "cốt lõi", "synthetic data", "Định Sơn", "0202111150", "lục giác", "Hexagonal"]),
        ("Q2", "frontend theme", ["Dark Slate", "#0b0f19", "#080d1a", "Inter", "JetBrains Mono", "Bloomberg", "erp_enterprise.css"]),
        ("Q3", "backend architecture", ["Clean Architecture", "DDD", "NUMERIC(18, 4)", "Decimal", "Ports", "4-Layer", "4 tầng"]),
        ("Q4", "AEC pricing norms", ["Thông tư 38", "cừ Larsen", "VL = 0", "MR / T", "MR/T", "G_XD", "Định mức"]),
        ("Q5", "CAD takeoff geometry", ["TCVN3", "stroke-width: 1px", "Bounding Box", "Chương SA", ".VnTime", "Zero-Void"]),
        ("Q6", "database precision", ["NUMERIC(18, 4)", "Decimal", "Sổ kép", "Double-entry", "18, 4"]),
        ("Q7", "testing workflow", ["Deep Matrix", "D1-D6", "D1 Đến D6", "TDD", "task.md", "Verification", "80%"]),
        ("Q8", "MCP tools protocol", ["lsp-mcp", "chrome-devtools-mcp", "markitdown", "memory", "StitchMCP"]),
        ("VN-04", "bảng màu frontend", ["Dark Slate", "bảng màu", "palette"]),
        ("EN-04", "frontend color palette", ["Dark Slate", "color palette"]),
        ("VN-06", "độ chính xác số thực database", ["NUMERIC(18, 4)", "Decimal"]),
        ("EDGE-03", "kien truc backend luc giac", ["Clean Architecture", "DDD"]),
    ]
    
    print("\n=================== TESTING REFINED BOOSTED 27-FACT CATALOG ===================")
    all_pass = True
    for q_id, q_text, expected_kws in queries:
        qv = embedder.embed(q_text)
        
        scored = []
        for f, fv in embedded_facts:
            sim = qdrant_score(qv, fv)
            scored.append((sim, True, f["code"], f["text"]))
        for m, mv in embedded_non_dscons:
            sim = qdrant_score(qv, mv)
            text = m.get("memory", "")
            scored.append((sim, False, m.get("id"), text))
            
        scored.sort(key=lambda x: x[0], reverse=True)
        
        top1 = scored[0]
        top3 = scored[:3]
        dscons_in_top3 = sum(1 for x in top3 if x[1])
        is_top1_dscons = top1[1]
        
        kw_match = False
        matched = ""
        for kw in expected_kws:
            if kw.lower() in top1[3].lower():
                kw_match = True
                matched = kw
                break
                
        status = "PASS" if (is_top1_dscons and top1[0] >= 0.55 and dscons_in_top3 >= 2 and (kw_match or not expected_kws)) else "FAIL"
        if status == "FAIL":
            all_pass = False
        print(f"[{status}] {q_id:<8} | Top1: {top1[0]:.4f} ({'DSCons' if is_top1_dscons else 'NON-DSC'} - {top1[2]}) | Top3 DSC: {dscons_in_top3}/3 | KwMatch: {kw_match} ({matched})")
        if dscons_in_top3 < 3:
            for rank, hit in enumerate(top3, 1):
                code_or_id = hit[2] if hit[1] else f"FOREIGN({hit[2][:8]})"
                print(f"       #{rank}: {hit[0]:.4f} | {'DSCons' if hit[1] else 'FOREIGN'} | {code_or_id} | {hit[3][:75]}")

    print(f"\nFinal refined candidate verdict: {'ALL PASSED 100%' if all_pass else 'SOME FAILED'}")

if __name__ == "__main__":
    asyncio.run(run_final_simulation())
