Files
CASAN/docs/plans/CASAN_APPLY_REALESTATE_MATCHING.md
T
thanhnvandClaude Opus 4.8 4918012199 docs(plans): sync roadmap status + paths to post-restructure state
- Plan-01 marked ✅ DONE (INDEX table + P3 tier + BACKLOG row + plan header).
- Plan-06 / Plan-12 dependency on 01 satisfied → 🔓 unblocked (headers + BACKLOG rows).
- Repoint command/path refs in all plans (except Plan-01's migration narrative):
  .specify/{scripts,tests,security,config,templates,governance} -> packages/casan-harness/...;
  golden-runs/traceability-map/docs-input -> apps/okr/domain/...; `cd AINative_OKR_CASAN5`
  -> `cd $(git rev-parse --show-toplevel)`; fix relative links + Plan-13 control-plane location.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 14:57:01 +09:00

269 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CASAN APPLY — Runbook: Dự án BĐS "Match người mua ↔ bất động sản"
> **Mục đích:** mô tả **cụ thể một luồng/phiên làm việc** áp dụng CASAN harness cho bài
> toán match người mua với BĐS phù hợp — *chuẩn bị gì, môi trường ra sao, các bước nào,
> ai chịu trách nhiệm, gate ở đâu, xuất ra bằng chứng gì*.
> **Đối tượng đọc:** Harness/Context Engineer, BA, môi giới (domain expert), pháp chế/DPO, lãnh đạo.
> **Bối cảnh:** BĐS là domain **rủi ro cao** (tiền lớn, PII tài chính, pháp lý, công bằng)
> → harness là **điều kiện dùng được**, không phải trang trí.
>
> **Trạng thái script:** ✅ đã có trong harness · 🟡 có 1 phần · 📋 trong plan (chưa implement).
> Đánh dấu ngay tại chỗ dùng. Runbook này **mô tả luồng**; chưa phải lệnh chạy production.
---
## 0. Nguyên tắc bất di (đọc trước)
1. **Match score của model là phần dễ.** Giá trị nằm ở **pipeline có gate**: hard-filter → rank → verify → fairness → audit.
2. **Ràng buộc cứng (ngân sách, pháp lý, eligibility, deal-breaker) nằm NGOÀI model** — luật deterministic, model không được "linh hoạt" bỏ qua.
3. **Delegation L1–L2:** AI *xếp hạng + giải thích + gợi ý*; **người quyết định cuối**. Không tự chốt giao dịch.
4. **PII tài chính không lên cloud model nếu chưa duyệt/consent.**
5. **Mọi gợi ý có evidence click được** + **audit ai-được-gợi-ý-gì-vì-sao**.
6. **Fairness:** cấm match/loại theo thuộc tính được bảo vệ (dân tộc, tôn giáo, giới, tình trạng hôn nhân…).
---
## PHẦN A — CHUẨN BỊ (trước phiên làm việc)
### A1. Con người & vai trò (RACI)
| Vai trò | Trách nhiệm chính |
|---|---|
| **Product Owner / BA** | Chốt mục tiêu match, success-criteria, KPI |
| **Domain expert (môi giới trưởng)** | Định nghĩa "phù hợp", deal-breaker, trọng số sở thích |
| **Pháp chế / DPO** | Duyệt fairness rules, PII policy, quy định sở hữu (vd người nước ngoài) |
| **Harness Engineer** | Dựng pipeline gate, cấu hình harness, loop policy |
| **Context Engineer** | Thiết kế context assembly + must-keep + nén |
| **Validator (kiểm định)** | Định nghĩa verify-gate H3, bộ test đối kháng |
| **Approver (cấp quản lý)** | Duyệt nới delegation / giao dịch giá trị lớn |
### A2. Dữ liệu & nguồn phải sẵn sàng
- **Listing DB** (BĐS): giá, vị trí, loại, diện tích, **trạng thái pháp lý** (sổ, tranh chấp), tiện ích, hướng/tầng, ROI, ngày bàn giao, trạng thái bán.
- **CRM / hồ sơ người mua**: ngân sách, mục đích, khu vực, must-have/deal-breaker, lịch sử tương tác.
- **Tool bên ngoài**: mortgage calculator (khả năng vay), **legal-check API** (sổ/tranh chấp), comparable-price API (giá so sánh).
- **Chất lượng dữ liệu**: mỗi nguồn có chủ sở hữu + độ tươi (freshness) — dữ liệu cũ → badge stale, không tô xanh.
### A3. Chính sách phải CHỐT trước khi chạy (không vừa chạy vừa định)
| Artifact | Nội dung | Ai duyệt |
|---|---|---|
| `hard-constraints.yaml` | Luật cứng: budget cap, eligibility pháp lý, deal-breaker → **REJECT bất kể score** | BA + Pháp chế |
| `fairness-rules.yaml` | Danh sách thuộc tính bảo vệ **cấm dùng** để match/loại | Pháp chế/DPO |
| `data-classification.yaml` ✅ | Nhãn PII/confidential/internal/public (Plan-15) | DPO |
| `loop-policy.yaml` 📋 | Budget: max_steps/tokens/thời gian; ngưỡng convergence (Plan-17) | Harness Eng |
| `delegation.yaml` | Mức L1–L2, action nào cần approval | Approver |
| `success-criteria.yaml` | "Match tốt" = gì (đo được), Top-N, ngưỡng chất lượng | PO/BA |
---
## PHẦN B — MÔI TRƯỜNG
### B1. Tách 3 môi trường
- **dev/pilot** — dữ liệu **giả lập/ẩn danh**, model local, gate bật, không PII thật.
- **staging** — dữ liệu thật đã mask, chạy full gate + audit, chưa phục vụ khách.
- **prod** — dữ liệu thật, **secure-by-default** (mọi gate bật, opt-out phải audit).
### B2. Model routing (quan trọng cho PII)
- **PII/confidential (tài chính người mua)** → **model local** (không rời hạ tầng).
- **Cloud model** chỉ cho dữ liệu **public/internal** hoặc khi có **consent + approval**.
- Enforce bằng `harness-preflight.sh` ✅ (check-cloud TRƯỚC model-call) + `rai-guard.py check-cloud` ✅.
### B3. Cấu trúc thư mục dự án (mẫu)
```
realestate-match/
config/
hard-constraints.yaml
fairness-rules.yaml
data-classification.yaml # ✅ mẫu có sẵn trong harness
loop-policy.yaml # 📋 Plan-17
delegation.yaml
success-criteria.yaml
app/ # logic dự án (hard-filter, rank, explain)
hard_filter.py # luật cứng — deterministic, NGOÀI model
ranker.py # gọi model qua model-router
explainer.py # trích thuộc tính thật → evidence
harness/ -> (dùng packages/casan-harness/scripts/bash của CASAN)
artifacts/ # output + audit + evidence (append-only)
```
### B4. Verify môi trường trước phiên (pre-flight)
```bash
# (minh hoạ) kiểm tra harness + policy sẵn sàng
rai-guard.py model-card --check # ✅ model có card/không pinned → chặn
security-check --selftest # ✅ action-gate fail-closed
# đọc được policy? thiếu policy → deny-by-default (fail-closed)
test -f config/hard-constraints.yaml && test -f config/fairness-rules.yaml
```
---
## PHẦN C — INPUT SCHEMA (cụ thể)
### C1. Yêu cầu match (request)
```json
{
"request_id": "MATCH-2026-07-06-001",
"mode": "buyer_to_properties", // hoặc property_to_buyers
"buyer_ref": "BUYER-8891",
"top_n": 5,
"delegation_level": "L2",
"requested_by": "agent_id:human",
"purpose": "own_use" // own_use | investment
}
```
### C2. Người mua (buyer) — PII, ưu tiên model local
```json
{
"buyer_ref": "BUYER-8891",
"budget": { "max_price": 5200000000, "loan_preapproved": 3000000000, "currency": "VND" },
"location_pref": ["Q7", "Nhà Bè"],
"property_type": ["apartment"],
"size": { "min_bedrooms": 2, "min_area_m2": 65 },
"must_have": ["so_hong", "ban_giao_truoc:2027-06"],
"deal_breaker": ["tranh_chap_phap_ly", "khong_so"],
"purpose": "own_use",
"risk_appetite": "low",
"timeline_months": 6
}
```
> **Không** đưa thuộc tính bảo vệ (dân tộc/tôn giáo/giới…) vào tín hiệu match. Nếu có trong CRM → **strip** trước khi vào context.
### C3. Bất động sản (property)
```json
{
"property_id": "PROP-4471",
"price": 4900000000,
"location": "Q7",
"type": "apartment",
"area_m2": 72, "bedrooms": 2,
"legal_status": "so_hong",
"dispute": false,
"handover_date": "2026-12-01",
"direction": "DongNam", "floor": 12,
"rental_yield_pct": 4.8,
"status": "available",
"source_freshness": "2026-07-05T10:00:00Z"
}
```
---
## PHẦN D — LUỒNG MỘT PHIÊN LÀM VIỆC (step-by-step)
> Mỗi bước ghi: **input → hành động (H nào) → output artifact → gate → ai chịu trách nhiệm.**
```mermaid
flowchart TD
S0["S0 Pre-flight<br/>classify PII + check-cloud"] --> S1["S1 Context assembly (H1)"]
S1 --> S2["S2 Retrieve (H2)"]
S2 --> S3["S3 Hard-filter<br/>(deterministic, NGOÀI model)"]
S3 --> S4["S4 Rank (model, L1-L2)"]
S4 --> S5["S5 Explain<br/>trích thuộc tính thật"]
S5 --> G["S6 Verify-gate (H3)<br/>+ Fairness (H5)"]
G -- fail --> S3
G -- pass --> S7["S7 Loop control<br/>budget/convergence"]
S7 --> S8["S8 Human review / approval"]
S8 --> S9["S9 Present + Audit"]
```
### S0 — Pre-flight (H4/RAI) ✅
- **Input:** buyer PII, request.
- **Hành động:** `rai-guard.py classify` gắn nhãn; `harness-preflight.sh` chặn PII→cloud nếu chưa duyệt → route model local.
- **Output:** `artifacts/preflight.json` (verdict + envelope provenance).
- **Gate:** PII lên cloud không consent → **HALT**.
- **Ai:** Harness Engineer (tự động).
### S1 — Context assembly (H1) ✅ (nén)
- **Hành động:** gom buyer + catalog slice + market; `context-compress.py --respect-policy` nén nhưng **must-keep = budget/legal/deal-breaker**.
- **Output:** `artifacts/context.json`.
- **Gate:** must-keep bị rớt → FAIL (không cho qua).
- **Ai:** Context Engineer.
### S2 — Retrieve (H2)
- **Hành động:** query listing DB + legal-check API + mortgage calculator (khả năng vay thực).
- **Output:** `candidates_raw.json` (kèm `source_freshness`).
- **Gate:** dữ liệu stale quá ngưỡng → badge stale, không tính là "verified".
- **Ai:** app (`app/…`) qua tool đã đăng ký (H2 allowlist).
### S3 — Hard-filter (deterministic, NGOÀI model) ⭐
- **Hành động:** `hard_filter.py` loại ứng viên **vi phạm** `hard-constraints.yaml`: vượt budget/khả năng vay, sai eligibility pháp lý, dính deal-breaker, không sổ/tranh chấp.
- **Output:** `candidates_eligible.json` + `rejected_with_reason.json`.
- **Gate:** **đây là luật cứng** — model không được đụng vào.
- **Ai:** Harness/BA (luật do BA+Pháp chế chốt).
### S4 — Rank (model, L1–L2)
- **Hành động:** `ranker.py` gọi `model-router.sh` ✅ chấm điểm **khớp sở thích mềm** (vị trí, hướng, tiện ích, ROI) trên tập **đã eligible**.
- **Output:** `ranked.json` (score + feature contributions).
- **Gate:** model chỉ xếp hạng, **không** thêm ứng viên ngoài eligible.
- **Ai:** Harness Engineer.
### S5 — Explain (evidence)
- **Hành động:** `explainer.py` sinh lý do **trích thuộc tính THẬT** từ DB: *"khớp vì budget ✔ (đã check vay), sổ hồng ✔, 3/4 must-have; loại PROP-X vì vượt budget"*.
- **Output:** `explained.json` (mỗi match ↔ evidence_ref tới bản ghi nguồn).
- **Gate:** giải thích chứa thuộc tính không có trong DB → **FAIL** (chống bịa).
- **Ai:** Validator kiểm mẫu.
### S6 — Verify-gate (H3) + Fairness (H5) ⭐
- **Hành động:**
- **H3:** re-check top-N vẫn thoả hard-constraints (double-check sau rank); faithfulness (evidence khớp nguồn).
- **H5 fairness:** quét tín hiệu match — **không** dùng thuộc tính bảo vệ (`fairness-rules.yaml`); kiểm phân bố kết quả không lệch theo nhóm bảo vệ.
- **Output:** `gate_verdict.json` (PASS/FAIL + lý do).
- **Gate:** vi phạm → quay lại S3 / loại; **fail-closed** (gate lỗi = FAIL).
- **Ai:** Validator + (Pháp chế cho fairness).
### S7 — Loop control (Plan-17) 📋
- **Hành động:** `loop-governor.py` giới hạn số vòng/tokens; `loop-convergence.py` dừng khi Top-N ổn định / phát hiện oscillation; ghi `loop-trace`.
- **Output:** `loop_trace.json`.
- **Gate:** vượt budget → HALT; kẹt → escalate. Người có **loop-breaker**.
- **Ai:** Harness Engineer.
### S8 — Human review / approval (HITL)
- **Hành động:** môi giới xem Top-N + evidence; chỉnh/loại; giao dịch giá trị lớn → **approval** (`control-plane-settings.py` ✅, JWT thật + SoD 📋 sau Plan-16).
- **Output:** `human_decision.json` (ai duyệt/từ chối + lý do).
- **Gate:** L1–L2 → **bắt buộc người quyết**.
- **Ai:** Môi giới / Approver.
### S9 — Present + Audit
- **Hành động:** trả Top-N cho người mua; ghi **audit hash-chain** (ai được gợi ý gì, vì sao, ai duyệt).
- **Output:** `audit/…` (append-only) + record cho `governance-report.py` ✅.
- **Gate:** thiếu audit → không được present (accountability).
- **Ai:** Harness (tự động).
---
## PHẦN E — Delegation ladder (khi nào nâng L)
| Mức | Cho phép | Điều kiện nâng |
|---|---|---|
| **L1** | AI nháp gợi ý, người duyệt **toàn bộ** | Khởi động — luôn bắt đầu ở đây |
| **L2** | AI xếp hạng + giải thích, người quyết chọn | Gate H3/H5 xanh ổn định + AgentOps đạt KPI |
| **L3** | Tự lọc/gợi ý rủi ro thấp trong scope hẹp (vd chỉ shortlist tự động) | **Cần:** Plan-16 (enforce), audit WORM (Plan-07 T2), fairness đo liên tục, **approval cấp cao** |
> Nâng L = **security-sensitive** → phải duyệt. Không tự nâng.
---
## PHẦN F — Cái gì hiện cho lãnh đạo (Command Center §8.6 Plan-13) 📋
- **Match quality** (conversion, độ hài lòng) · **Fairness = 0 vi phạm** · **PII zero-leak** · **audit đầy đủ** · token→$ tiết kiệm.
- **Click bất kỳ match → Evidence drawer**: xem lý do + bản ghi nguồn + ai duyệt.
- Thông điệp: *"vừa hiệu quả, vừa an toàn pháp lý — không tin thì bấm xem tận gốc."*
---
## PHẦN G — Checklist đi vào PRODUCTION
- [ ] `hard-constraints.yaml` + `fairness-rules.yaml` **được Pháp chế/DPO ký**.
- [ ] PII→cloud bị chặn (preflight test xanh); model local cho tài chính.
- [ ] Verify-gate H3 + fairness H5 **fail-closed** (test đối kháng xanh).
- [ ] Audit hash-chain bật; `verify-chain` phát hiện tamper.
- [ ] **Plan-16 P0** đã vá (approval JWT thật, không bypass) — *bắt buộc trước L2 thật*.
- [ ] AgentOps đo bias + hallucination + cost, có ngưỡng cảnh báo.
- [ ] Loop budget/convergence (Plan-17) cấu hình — có loop-breaker.
- [ ] Delegation khoá ở L1–L2; nâng L cần approval.
---
## PHẦN H — Ghi chú trung thực
- **Chạy pilot L1–L2 được sớm:** context/hard-filter/rank/explain + gate deterministic dùng script đã có (✅) + logic app dự án.
- **Chưa "thật" cho tới khi:** Plan-16 (fail-closed/approval thật), Plan-15 enforce (PII/RAI), Plan-07 T2 (audit WORM/KMS) — nếu không, rủi ro **rò PII tài chính** hoặc **gợi ý phân biệt đối xử lọt lưới** = rủi ro **pháp lý + thương hiệu** cho dự án BĐS.
- **Script 📋 (loop-*, Command Center)** thuộc Plan-17/Plan-13 — **chưa implement**; runbook mô tả cách chúng vào luồng để chuẩn bị trước.
- **Ranh giới cứng:** hard-filter (budget/pháp lý/deal-breaker) và fairness **là luật ngoài model** — tuyệt đối không giao cho model tự giác.
---
_Liên quan: `CASAN_PLAN_13_CONTROL_PLANE.md` (§3.4 HITL, §8.6 Command Center) · `CASAN_PLAN_15_RESPONSIBLE_AI_DATA_GOV.md` (PII/RAI/model-card) · `CASAN_PLAN_16_SECURITY_AUDIT_REMEDIATION.md` (fail-closed/approval thật) · `CASAN_PLAN_17_LOOP_ENGINEERING.md` (budget/convergence/loop-trace) · `CASAN_PLAN_10_TRACEABILITY_EVAL.md` (H3 eval) · `FPT_CASAN_Full.md` (§4.3 Human-led, §4.4 delegation L0–L5)._