# KẾ HOẠCH 12 — CASAN Domain Pack SDK > Onboard dự án mới **không copy folder thủ công** — chỉ khai báo một **Domain Pack** (YAML) là CASAN tự hiểu golden/corpus/threshold/quality-rules của domain đó. Chuẩn hoá "harness reusable, domain data tách khỏi core". Task-level, chưa thực thi. > > Status 2026-07-08: **🔓 điều kiện tiên quyết 01 đã xong** — `apps//domain` + `CASAN_DOMAIN_ROOT` > per-project đã có (Plan-01 ✅). Còn chờ 06 (bản chạy tay) trước khi chuẩn hoá thành SDK khai báo. > > Nhãn: [có]/[demo]/[mới]. Phụ thuộc: **01** ✅ (tách `config`/`apps//domain` — DONE) · **06** (onboard thủ công là bản chạy tay của cái này) · **07/10** (rules tham chiếu). ## 1. Vì sao đáng làm - Plan-06 onboard dự án 2 **thủ công**; Domain Pack biến việc đó thành **khai báo** → reuse thật ở tầm platform. - Đúng tư tưởng CASAN: **gate (khung) không đổi; domain data khai báo bên ngoài.** ## 2. Hình dạng Domain Pack ```yaml # apps//domain/domain-pack.yaml domain: okr language: [vi, ja, en] artifact_types: [srs, bd, spec, code, test] golden_runs: path: apps/okr/domain/golden-runs redteam_corpus: path: apps/okr/domain/redteam-corpus benign_corpus: path: apps/okr/domain/benign-corpus thresholds: # đè mặc định package cost_absolute_max: 800 fp_budget: 0.03 drift_similarity_min: 0.7 quality_rules: - requirement_coverage - no_security_regression - no_unapproved_dependency harness_package: fpt-casan-sdd-harness harness_version: 1.0.0 ``` ## 3. Tasks ### Track 1 — Loader & schema | Task | Việc | Verify | Done | |---|---|---|---| | 1.1 | Định schema `domain-pack.yaml` + validate | pack sai field → báo lỗi rõ | schema chốt | | 1.2 | Loader: đọc pack → nạp golden/corpus/threshold/rules vào harness | chạy với pack → dùng đúng data domain | loader chạy | | 1.3 | Cơ chế **override**: pack đè default package; thiếu field → dùng default | field trống → default; có → đè | override đúng | | 1.4 | `casan init-domain `: scaffold pack + thư mục domain rỗng | sinh khung pack | init chạy | ### Track 2 — Tích hợp & kiểm chứng | Task | Việc | Verify | Done | |---|---|---|---| | 2.1 | Pipeline đọc domain-pack thay vì hard-code (bỏ `feature-id` cứng) | đổi pack → đổi domain, không sửa gate | tách domain | | 2.2 | `casan register` đọc pack → ghi `project-registry.json` | registry có entry đúng version | đăng ký tự động | | 2.3 | `verify-harness-reuse` với 2 domain pack thật | `HARNESS_REUSE_VALID project_count=2` | reuse thật | | 2.4 | Quality rules trong pack map sang gate (coverage→H3, dependency→C2…) | rule bật/tắt đúng gate | rule-driven | ### Track 3 — Chất lượng pack | Task | Việc | Verify | Done | |---|---|---|---| | 3.1 | Lint pack: golden/corpus tối thiểu N mẫu; rule hợp lệ | pack thiếu corpus → cảnh báo | lint pack | | 3.2 | `casan doctor `: kiểm pack sẵn sàng chạy chưa | thiếu gì → liệt kê | health-check | ## 4. Rủi ro | Rủi ro | Giảm thiểu | |---|---| | Phải sửa gate cho domain mới | nếu xảy ra → nợ kỹ thuật đẩy về Plan-01 (tách chưa đủ) | | Pack sơ sài → gate vô nghĩa | 3.1 lint tối thiểu corpus/golden | | Reuse "giả" (chỉ copy) | cùng `harness_version` + verify script | ## 5. Tiêu chí HOÀN THÀNH - [ ] Onboard dự án mới = tạo `domain-pack.yaml` + domain data, **không sửa `src/gates`**. - [ ] Override threshold/rule theo pack hoạt động. - [ ] `casan init-domain` / `register` / `doctor` chạy. - [ ] `verify-harness-reuse` = 2 domain pack thật → VALID. ## 6. Ghi chú trung thực Cần **Plan-01 (tách config/domain) xong trước**; nếu chưa, Domain Pack chỉ là lớp mỏng trên cấu trúc phẳng. Reuse thật chỉ được tuyên bố khi có **≥2 domain pack chạy được**, không tính entry demo. --- _Liên quan: `CASAN_PLAN_01_RESTRUCTURE.md` · `CASAN_PLAN_06_ONBOARD.md` · `CASAN_PLAN_07/10` (quality rules)._