Files
sys-analysis-design/.claude/skills/ba-pipeline/SKILL.md
2026-09-11 23:01:18 +07:00

53 lines
8.1 KiB
Markdown

---
name: ba-pipeline
description: Điều phối quy trình BA (ba-1…ba-5) theo từng bước có con người verify & approve, dùng workflow ba-pipeline.js — mỗi bước gồm chốt input với người dùng, chạy đúng một stage/activity, trình kết quả tự chấm + OQ, người dùng Duyệt/Sửa/Trả lời, ghi chữ ký vào header qua stage sign, chấm gate độc lập qua audit trước khi ký gate. Dùng khi người dùng nói "chạy quy trình BA", "làm discovery/analysis/SRS có duyệt", "ký gate G1/G2/G3", "kiểm tra gate BA", "BA đang ở đâu".
---
# BA pipeline — từng bước, con người duyệt
Bạn (main assistant) là **gatekeeper**: không viết artifact (`ba-stage-runner` viết), không chấm gate (`ba-gate-auditor` chấm), không ký (con người ký — bạn chỉ ghi lại qua stage `sign`). Skill gốc `ba-*` **không bị sửa**; runner đọc và làm theo chúng ở chế độ `go`.
Engine: `Workflow({ scriptPath: "<abs>/.claude/workflows/ba-pipeline.js", args })` — **một stage/activity mỗi lần gọi**, không có chế độ chạy liền.
## `args`
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
| `project`, `date` | luôn | tên project (1 project/lần), ngày hôm nay `YYYY-MM-DD` (header) |
| `stage` | luôn | `init` · `audit` · `discovery` · `analysis` · `specification` · `design` · `delivery` · `post-release` · `sign` · `sync` |
| `activity` | nên dùng | 1 hoạt động của stage (mặc định cả stage): discovery `stakeholder|elicitation|requirements|goals-scope|risks` · analysis `process|backlog|rules|rbac|impact` · specification `uiconv|srs|part2|ac|errors|nfr|api|wf` (`uiconv`/`wf` chỉ khi `PRODUCT = screen`; `uiconv` chạy một lần đầu project) · design `ds|hifi|proto|figma|dspec` (chỉ `screen`, sau `wf` của cùng US; `ds` chạy một lần đầu project; thứ tự `ds → hifi → proto → figma → dspec`) · delivery `clarification|cr|testcase-review|uat` · post-release `release-note|manual|feedback|benefit` |
| `scope` | specification/design/delivery | `US-012,US-013` (≤3 US) · `CR-004` · câu hỏi cụ thể |
| `profile` | init | `{product, lifecycle, rigor}` đã được người dùng xác nhận |
| `proto` | specification (screen) | Prototype tham chiếu: đường dẫn thư mục/file/URL hoặc mục SAD (`docs/sections/07-giao-dien.md`). Không có ⇒ runner tự tìm; vẫn không có ⇒ WF chạy chế độ ✏️ (đề xuất BA, cần Designer ký) |
| `brand` | design (screen) | Brand guideline / design system tham chiếu (đường dẫn, URL). Không có ⇒ runner tự tìm; vẫn không có ⇒ `DS` dùng token trung tính, độ tin cậy 🔴 + OQ |
| `inputs[]`, `answers`, `notes`, `override` | tuỳ | file người dùng đưa · trả lời OQ · ghi chú sửa · khẳng định chạy dù gate trước chưa qua |
| `approvals[]`, `gate`, `decisions[]` | sign | `{artifact, decision: approve|baseline|revise, approver, role, note}` · gate được ký · DEC-nn |
## Bước 0 — chốt với người dùng (thay cho Bước 0 của từng skill)
Hỏi bằng `AskUserQuestion` (≤4 câu/lượt), không hỏi lại điều đã có trong `ba-output/<PROJECT>/00-index/`:
1. Project & phạm vi lần này (cả module hay US nào).
2. Profile: `PRODUCT` (screen | api-service | data-pipeline | ml-model | batch-job | process-only) · `LIFECYCLE` (greenfield | brownfield | enhancement) · `RIGOR` (light | standard | strict). Chưa có PROFILE ⇒ suy đoán từ tài liệu, nêu rõ là suy đoán, hỏi xác nhận.
3. Thư mục output: mặc định `ba-output/<PROJECT>/`; nếu repo đã có thư mục BA khác ⇒ hỏi dùng cái nào, **không tạo cấu trúc song song**.
4. Input đã tìm thấy (Glob `docs/`, `ba-output/`, `sa-output/`, `design/`, `prototype/`, file người dùng đưa) — trình bảng `File | Vai trò | Giai đoạn`. Với `screen` trước stage `specification`: hỏi **prototype/design system tham chiếu** là gì (→ `proto`) và **dự án có Designer không** (không có ⇒ PO ký thay `UICONV`/`WF`/`DS`/`HIFI`/`DSPEC`, ghi DEC). Trước stage `design`: hỏi **brand guideline** (→ `brand`) và nói rõ ngay: gói Figma là SVG + token + PNG + HTML nhập được, **không có file `.fig`**.
Lấy ngày hôm nay từ ngữ cảnh → `date`.
## Vòng lặp chuẩn cho mỗi bước
1. **Vị trí:** chưa có `ba-output/<PROJECT>` ⇒ `init` (cần profile xác nhận). Có ⇒ `audit` → trình ① bảng gate (Profile ở dòng đầu) ② đang ở đâu ③ ≤3 việc tiếp ④ cảnh báo.
2. **Chạy một activity** của stage kế tiếp (mặc định một activity = một gate nhỏ; người dùng có thể yêu cầu cả stage). Trình trung thực từ `result`: `filesWritten`, `blocked`/`gateWarning`, `gateSelfCheck` (nêu các ☐), `openQuestions` (ai trả lời, chặn gì), `humanInputNeeded`, `tbdCount`/`ambiguousCount`, `confidence`, `summary`.
3. **Hỏi người dùng:** **Duyệt nội dung** / **Sửa (ghi chú)** / **Trả lời OQ rồi chạy lại** / **Dừng**.
- Duyệt ⇒ hỏi **tên + vai trò người duyệt** ⇒ `sign` với `decision: approve` cho từng artifact. Không có tên người ⇒ không sign.
- Sửa ⇒ `notes` → chạy lại đúng activity. Trả lời ⇒ gom `answers` (`OQ-012: …`) → chạy lại.
- `blocked` ⇒ trình `gateWarning`; hỏi có **khẳng định chạy ngoại lệ** không; có ⇒ chạy lại với `override: true` và ghi `decisions: ["DEC: chạy <stage> khi <gate> chưa qua vì …"]` ở lần `sign` kế.
4. **Ký gate** khi mọi artifact của stage đã 🔵 Approved: `audit` ⇒ gate 🟠 chỉ còn thiếu chữ ký và coverage đạt ⇒ hỏi **ai ký** đúng vai trò (G1 PO · G2 PO + Tech Lead · G3 PO + Tech Lead + QA, `screen` thêm Designer cho `UICONV`/`WF`/`DS`/`HIFI`/`DSPEC` · G4 PO · G5 PO + BA Lead; `strict` thêm Bảo mật/Pháp chế) ⇒ `sign` với `gate` + `decision: baseline` ⇒ `sync` ⇒ `audit` xác nhận ✅. Coverage fail / còn TBD / `refused[]` không rỗng ⇒ **không ký**, quay lại bước 2.
5. Kết thúc mỗi lượt: tóm tắt gate ✅/🟠/☐, OQ mở (ai, quá hạn?), việc kế tiếp.
## Đặc thù
- `specification`: ≤3 US mỗi lần; QA phải xác nhận "mọi AC test được" trước G3 (`standard`+). Với `screen`: lần đầu của project chạy `uiconv` trước; `wf` chạy sau `part2` + `errors` của cùng US, truyền `proto`; trình riêng **bảng lệch WF §5** (Tồn tại/Hành vi chưa quyết = blocker) và chế độ 🎨/✏️ để người dùng biết cần Designer ký hay không.
- `design` (chỉ `screen`): chạy sau `wf` của cùng US, `≤3 US`; lần đầu project chạy `ds` trước. **Sau mỗi activity bạn (gatekeeper, có Bash) chạy phép kiểm máy** và trình kết quả nguyên văn cùng `summary`:
`node .claude/skills/ba-design/scripts/design-check.mjs --tokens <ds/tokens.json> --css <ds/tokens.css> --components <ds/components.html> --html <HIFI> --srs <SRS> --wf <WF> --svg-dir <FIGMA/>` (bỏ tham số của artifact chưa có). Sau `figma` chạy thêm `.claude/skills/ba-design/scripts/render-figma.sh <HIFI> <FIGMA>/png` để có PNG. Còn 🔴 ⇒ chạy lại activity với `notes` trích đúng dòng lỗi, không ký. Trình riêng: **độ tin cậy visual** (`DS` §0), **bảng lệch `DSPEC` §6**, và Designer có cần ký không.
- `delivery`: chạy theo từng câu hỏi/CR; CR phải qua 6 bước của ba-4, không sửa artifact Baselined trực tiếp.
- `post-release`: `benefit` cần KPI baseline từ G1 — không có ⇒ ghi bài học, không lấp liếm.
- **Liên kết SA:** G2 cần `AG1` của `sa-pipeline` (Tech Lead ký "khả thi" dựa trên OPT/ARISK). SA báo lệch `NFR↔QAS`, `API↔ICD`, `RBAC↔SEC` ⇒ chạy lại `specification` activity liên quan với `notes` (QAS/ICD thắng).
## Không được
Chạy nhiều stage một lượt · tự sửa artifact · điền ✅/🔵 khi chưa có tên người duyệt · trả lời OQ thay stakeholder · bỏ gate mà không ghi DEC.