The plan set (Plan-00..18, backlog/hardening/QA status, team allocation) is the ONGOING roadmap, not a finished competition artifact — restored from history into docs/plans/. Plan-01 (restructure) marked ✅ done; the rest remain to do. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
80 lines
5.2 KiB
Markdown
80 lines
5.2 KiB
Markdown
# KẾ HOẠCH 01 — Tái cấu trúc thư mục (Phase 0→6) & tách package harness
|
||
|
||
> Status 2026-07-08: **✅ HOÀN TẤT (merged to `main`).** Harness code → `packages/casan-harness/`,
|
||
> domain OKR → `apps/okr/domain/`, runtime state ở `.specify/`; app đã promote lên git root
|
||
> (hết wrapper `AINative_OKR_CASAN5/`); facade `.specify` symlink đã gỡ sạch (hard cutoff).
|
||
> Path resolve qua `casan-paths.sh` (marker walk-up, không dùng git-root). Full gate
|
||
> `PASS=64 FAIL=0 SKIP=3`. Nền cho Plan-06/12 sẵn sàng (`project-registry.json` có `domain_root`).
|
||
>
|
||
> Status 2026-07-06 (gốc): **📋 chưa bắt đầu (task-level).** Đây là nền cho Plan-06
|
||
> (onboard dự án 2) và Plan-12 (Domain Pack SDK): chỉ khi core harness được tách
|
||
> thành package độc lập, không lẫn domain OKR, thì mới chứng minh được "reuse
|
||
> thật". Rủi ro cao (đụng nhiều path) → **làm trên nhánh riêng, giữ 218/0 core
|
||
> harness xuyên suốt**.
|
||
>
|
||
> Nhãn trạng thái dùng chung: xem legend ở `CASAN_BACKLOG_STATUS.md`.
|
||
> Phụ thuộc: không phụ thuộc plan khác để bắt đầu; **chặn** 06 và 12.
|
||
|
||
## Bối cảnh code hiện tại
|
||
- Core harness (gate H1→H7) nằm ở `.specify/scripts/bash/`, `.specify/security/`,
|
||
`.specify/governance/`, `.specify/agentops/`, `.specify/level5/`; tests ở
|
||
`.specify/tests/`.
|
||
- Domain OKR (golden-runs, redteam-corpus, input, requirement/architecture) hiện
|
||
**lẫn** trong cùng cây thư mục dự án, chưa tách rõ `packages/` (harness) vs
|
||
`apps/<project>/domain/` (dữ liệu domain).
|
||
- `project-registry.json` đã có khái niệm project, nhưng ranh giới "package vs
|
||
app" chưa được phản ánh ở tầng thư mục.
|
||
|
||
## Nguyên tắc
|
||
- **Không đổi hành vi gate:** tái cấu trúc là dời path + cập nhật tham chiếu,
|
||
**không** sửa logic H1→H7. Sau mỗi bước: full harness vẫn **218/0**.
|
||
- **Tách package vs domain:** `packages/casan-harness/` (gate, script, test khung)
|
||
tuyệt đối không chứa dữ liệu domain; `apps/<project>/domain/` chứa
|
||
golden/corpus/input theo dự án.
|
||
- **Một biến gốc đường dẫn:** mọi script trỏ tới harness qua một biến/entrypoint
|
||
duy nhất (ví dụ `CASAN_HARNESS_ROOT`) thay vì hardcode `.specify/...` rải rác.
|
||
- **Làm trên nhánh riêng + freeze bản demo:** không để restructure làm vỡ bản
|
||
đang trình bày.
|
||
- **Đổi từng Phase, chạy test giữa mỗi Phase**, không dời tất cả một lần.
|
||
|
||
## Cấu trúc đích (Phase 0→6)
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
ROOT["repo root"]
|
||
ROOT --> PKG["packages/casan-harness/<br/>(gate H1→H7 + tests khung)"]
|
||
ROOT --> APPS["apps/"]
|
||
APPS --> OKR["apps/okr/<br/>domain OKR (golden/corpus/input)"]
|
||
APPS --> X["apps/<project-2>/<br/>domain khác (Plan-06)"]
|
||
ROOT --> REG["project-registry.json"]
|
||
PKG --> REG
|
||
OKR --> REG
|
||
X --> REG
|
||
style PKG fill:#d0e8ff,stroke:#2c3e91,stroke-width:2px
|
||
style REG fill:#fff3cd,stroke:#8a6d3b,stroke-width:2px
|
||
```
|
||
|
||
## Tasks
|
||
|
||
| Task | Việc | File/Đối tượng | Verify | Done khi |
|
||
|---|---|---|---|---|
|
||
| 1.1 | Kiểm kê mọi tham chiếu hardcode `.specify/...` trong script/test | toàn repo | có danh sách đầy đủ path phụ thuộc | inventory xong |
|
||
| 1.2 | Định nghĩa biến gốc `CASAN_HARNESS_ROOT` + entrypoint duy nhất | `bin/casan`, `model-router.sh` | script trỏ qua biến, không hardcode | biến áp dụng |
|
||
| 1.3 | Phase 0: tạo `packages/casan-harness/` (skeleton), chưa dời | mới | thư mục tồn tại, chưa đổi hành vi | skeleton sẵn |
|
||
| 1.4 | Phase 1–2: dời gate H1→H4 (security/context/tool/validation) sang package | `.specify/**` → `packages/**` | full harness 218/0 sau khi dời | H1–H4 đã dời |
|
||
| 1.5 | Phase 3–4: dời H5/H6/H7 (governance/agentops/orchestration) | `.specify/**` → `packages/**` | full harness 218/0 | H5–H7 đã dời |
|
||
| 1.6 | Phase 5: tách domain OKR sang `apps/okr/domain/` | golden/corpus/input | pipeline OKR chạy trọn, drift/H3 hoạt động | domain tách bạch |
|
||
| 1.7 | Phase 6: cập nhật `project-registry.json` + `verify-harness-reuse.sh` theo cấu trúc mới | registry, script | registry hợp lệ, reuse-check chạy | registry đồng bộ |
|
||
| 1.8 | Cập nhật CI/CD (Plan-05) & Docker infra lab theo path mới | `.gitea/**`, `infra/**` | CI gate xanh với path mới | CI thích ứng |
|
||
| 1.9 | Ghi "nợ kỹ thuật phải sửa gate" (nếu buộc phải) làm đầu vào cho Plan-06/12 | mới notes | có danh sách gap | rút kinh nghiệm |
|
||
|
||
## Tiêu chí HOÀN THÀNH
|
||
- [ ] `packages/casan-harness/` không chứa dữ liệu domain; `apps/okr/domain/` chứa toàn bộ golden/corpus/input OKR.
|
||
- [ ] Mọi script trỏ harness qua `CASAN_HARNESS_ROOT`/entrypoint, không còn hardcode `.specify/...` rải rác.
|
||
- [ ] Full harness **218/0** giữ nguyên sau mỗi Phase; local-prod infra lab vẫn 2/0.
|
||
- [ ] CI/CD (Plan-05) xanh trên cấu trúc mới.
|
||
- [ ] `verify-harness-reuse.sh` chạy đúng trên cấu trúc mới → sẵn sàng cho Plan-06.
|
||
|
||
---
|
||
_Liên quan: `CASAN_PLAN_00_INDEX.md` (mục lục) · Plan-05 (CI phải thích ứng path) · Plan-06/12 (phụ thuộc plan này)._
|