feat: add production Core runtime modes

This commit is contained in:
thanhnv
2026-07-24 12:16:11 +07:00
parent e359989a74
commit eb3525456f
13 changed files with 659 additions and 397 deletions
+37 -18
View File
@@ -1,8 +1,14 @@
# Cài CASAN kiểu tool (global install + `casan init`) — Plan-21
# Cài CASAN production (managed hoặc vendored Core) — Plan-21
Mô hình **hybrid**: cài harness **một lần** vào máy (`$CASAN_HOME`), sau đó mỗi
dự án chỉ chạy `casan init` để ghi **config riêng của dự án** — harness KHÔNG bị
copy vào từng repo. Giống trải nghiệm codegraph.
CASAN cài CLI/DevKit **một lần** vào máy (`$CASAN_HOME`). Mỗi project chạy
`casan init` và chọn một runtime contract rõ ràng:
- `managed` (mặc định): Core nằm trong global install, project pin version/hash.
- `vendored`: Core production-only nằm tại `.casan/runtime/casan-core`, dành
cho offline, air-gapped hoặc repository cần self-contained.
Capability level và runtime placement là hai khái niệm độc lập. Project mặc
định dùng Level 1/Core dù global package phải là DevKit để có lệnh `init`.
## 1. Cài đặt (một lần cho mỗi máy)
@@ -63,10 +69,19 @@ casan init # mặc định project Level 1/core; interacti
casan init --level 1 --project my-app --client claude
casan init --level 2 --project my-app --client claude,codex
casan init --project my-app --client vscode-copilot --vscode-install yes
casan init --runtime vendored --project offline-app --client claude,codex
casan level show # xem level đã cài + level project
casan level set 2 # đổi level project (không cần init lại)
```
`init` và `level show` luôn in runtime mode/path. Project mới mặc định
`managed`; chạy lại init giữ nguyên mode đã chọn. Chuyển mode phải explicit:
```bash
casan init --runtime managed
casan init --runtime vendored
```
**Áp dụng cho dự án ĐÃ có vỏ (agents/skills/hook sẵn):** an toàn.
- Mặc định `casan init` áp dụng **Level 1/core**: governance config + hooks,
không thêm `.gitea` workflow hoặc domain-pack. Level cài global vẫn phải là
@@ -89,7 +104,7 @@ nguyên checksum, sau đó prune thư mục rỗng. Workflow của project và s
file đã chỉnh sửa được giữ lại. Thêm `--purge` để xóa cả runtime evidence
`.specify/logs` và `.specify/state`.
`casan init` chỉ ghi **config per-project** (không copy harness):
`casan init` luôn ghi config per-project:
| File | Vai trò |
|---|---|
@@ -101,6 +116,7 @@ file đã chỉnh sửa được giữ lại. Thêm `--purge` để xóa cả ru
| `.claude/settings.json` | hook Claude Code (Plan-20) |
| `.codex/hooks.json` | hook Codex theo schema hiện hành; cần review/trust bằng `/hooks` |
| `.vscode/extensions.json` | recommendations cho IDE đã chọn |
| `.casan/runtime/casan-core/` | Chỉ mode `vendored`: CLI + Core runtime production-only |
Tham số `--client` có thể lặp hoặc comma-separated:
`claude`, `codex`, `vscode-copilot`, `all`, `none`. Khi chạy `casan init` trực
@@ -154,7 +170,9 @@ Quy tắc migration:
- Codex vẫn cần `/hooks` trust; Copilot built-in vẫn cần explicit `@casan`.
Sau `init`, developer gõ prompt bình thường trong client — trace H1→H7 + H6 theo
Plan-20. Repo chỉ có mấy file config nhỏ; nâng cấp harness làm ở `$CASAN_HOME`.
Plan-20. Managed mode nâng cấp runtime ở `$CASAN_HOME`; vendored mode được nâng
cấp có chủ đích bằng cách chạy lại `casan init --runtime vendored` từ release
đã duyệt.
### Capability theo client
@@ -185,9 +203,10 @@ casan uninstall
Command này xóa CASAN project hooks, bootstrap và config nhưng giữ nguyên hook
người dùng, CI/domain files, `.casan-bak`, VS Code extension dùng chung và
`.specify` evidence. Dùng `--purge` nếu chủ động muốn xóa runtime logs/state;
dùng `--remove-vscode-extension` nếu chắc chắn không project nào khác trên máy
còn dùng route `@casan`.
`.specify` evidence. Nếu project dùng vendored mode, toàn bộ
`.casan/runtime/casan-core` cũng bị xóa. Dùng `--purge` nếu chủ động muốn xóa
runtime logs/state; dùng `--remove-vscode-extension` nếu chắc chắn không project
nào khác trên máy còn dùng route `@casan`.
## 3. Pin + Verify (giữ đảm bảo bảo mật khi harness ở ngoài repo)
@@ -209,18 +228,18 @@ khi tin bất kỳ trace nào là certified.
> Bước làm mạnh tiếp theo (chưa bật mặc định): ký `.harness-hash` bằng khóa tổ
> chức để verify cả *chữ ký* chứ không chỉ nội dung — dùng hạ tầng ký của Plan-16.
## 4. So sánh với mô hình vendored cũ
## 4. Chọn runtime mode
| | Vendored (`devkit/install.sh`) | Hybrid (`casan init`) |
| | Vendored (`casan init --runtime vendored`) | Managed (`casan init`) |
|---|---|---|
| Repo | Nặng (copy cả harness) | Nhẹ (chỉ config) |
| Nâng cấp | Mỗi repo tự drift | 1 chỗ (`$CASAN_HOME`) |
| Bảo mật | Gate commit + ký trong repo | Gate global + **pin+verify** trong repo |
| CI/offline | Tự chứa | Cần cài harness trên runner (hoặc verify pin) |
| Repo | Tự chứa Core production-only | Nhẹ, chỉ config/lock/hooks |
| Nâng cấp | Explicit theo từng repo | Tập trung ở `$CASAN_HOME` |
| Bảo mật | Core local + **pin/hash verify** | Core global + **pin/hash verify** |
| CI/offline | Phù hợp air-gapped | Runner phải cài đúng CASAN release |
| Khuyến nghị | Khách hàng offline/regulated | Mặc định cho workstation và managed CI |
Cả hai vẫn dùng chung lõi harness + `casan-paths.sh` (tách `CASAN_HARNESS_ROOT`
= code, `CASAN_STATE_ROOT` = state trong repo, `CASAN_DOMAIN_ROOT` = dữ liệu dự
án). Chọn mô hình theo nhu cầu triển khai.
Cả hai dùng đúng cùng production allowlist và lõi harness; không mode nào mang
theo tests, legacy `level5`, internal runners hay Platform-only helpers.
## 5. Kiểm thử