update skill ba

This commit is contained in:
Canhchimlac
2026-09-11 23:01:18 +07:00
parent 2c7bcde741
commit d169c85dd4
51 changed files with 4111 additions and 30 deletions

View File

@@ -7,7 +7,8 @@ export const meta = {
{ title: 'Audit', detail: 'ba-gate-auditor: chấm G1–G5 + coverage RTM (chỉ đọc)' },
{ title: 'Discovery', detail: 'ba-1: stakeholder, elicitation, RQ, BRIEF, risk' },
{ title: 'Analysis', detail: 'ba-2: process, backlog US, BR, RBAC, impact' },
{ title: 'Specification', detail: 'ba-3: SRS, PART 2, AC, mã lỗi, NFR, API (≤3 US)' },
{ title: 'Specification', detail: 'ba-3: SRS, PART 2, AC, mã lỗi, NFR, API, UICONV, WF (≤3 US)' },
{ title: 'Design', detail: 'ba-design (screen, sau wf): DS, HIFI, proto, FIGMA, DSPEC (≤3 US)' },
{ title: 'Delivery', detail: 'ba-4: clarification, CR, review test case, UAT' },
{ title: 'Post-release', detail: 'ba-5: release note, manual, feedback, benefit' },
{ title: 'Sign', detail: 'Ghi quyết định duyệt/baseline/revise của con người' },
@@ -30,13 +31,17 @@ const TRACK = {
activities: ['process', 'backlog', 'rules', 'rbac', 'impact'] },
specification: { phase: 'Specification', skill: 'ba-3-specification', dir: '03-specification', gate: 'G3', prevGate: 'G2',
activities: ['uiconv', 'srs', 'part2', 'ac', 'errors', 'nfr', 'api', 'wf'], scopeHint: 'danh sách US (tối đa 3); uiconv/wf chỉ khi PRODUCT=screen, kèm args.proto nếu có prototype' },
design: { phase: 'Design', skill: 'ba-design', dir: '03-specification/design', gate: 'G3', prevGate: 'G2',
activities: ['ds', 'hifi', 'proto', 'figma', 'dspec'], orderedPrefix: ['ds', 'hifi'],
externalPrereq: 'PRODUCT = screen và đã có SRS + WF (+ UICONV) của US từ stage specification; activity ds ghi vào 00-index/ (DS_*.md + ds/), các activity khác ghi vào 03-specification/design/',
scopeHint: 'danh sách US (tối đa 3); kèm args.brand nếu có brand guideline/design system tham chiếu' },
delivery: { phase: 'Delivery', skill: 'ba-4-delivery-support', dir: '04-delivery', gate: 'G4', prevGate: 'G3',
activities: ['clarification', 'cr', 'testcase-review', 'uat'], scopeHint: 'US / câu hỏi / CR-nnn cụ thể' },
'post-release': { phase: 'Post-release', skill: 'ba-5-post-release', dir: '05-post-release', gate: 'G5', prevGate: 'G4',
activities: ['release-note', 'manual', 'feedback', 'benefit'] },
},
gates: {
G1: 'PO', G2: 'PO + Tech Lead', G3: 'PO + Tech Lead + QA (+ Designer khi PRODUCT=screen: UICONV, WF)', G4: 'PO', G5: 'PO + BA Lead',
G1: 'PO', G2: 'PO + Tech Lead', G3: 'PO + Tech Lead + QA (+ Designer khi PRODUCT=screen: UICONV, WF, DS, HIFI, DSPEC — hoặc PO ký thay kèm DEC khi không có Designer)', G4: 'PO', G5: 'PO + BA Lead',
},
profileFields: ['product', 'lifecycle', 'rigor'],
}
@@ -48,6 +53,7 @@ const TRACK = {
// scope : phạm vi (VD US-012,US-013 · CR-004 · --focus)
// inputs[] : file/nguồn người dùng cung cấp (ưu tiên cao nhất)
// proto : (specification, PRODUCT=screen) prototype/design system tham chiếu cho uiconv/wf — đường dẫn, URL, hoặc mục SAD
// brand : (design, PRODUCT=screen) brand guideline / design system tham chiếu cho ba-design (token, font, component) — đường dẫn hoặc URL
// answers : trả lời của người dùng cho OQ / humanInputNeeded
// notes : ghi chú người duyệt (Revise)
// override : true = người dùng khẳng định chạy dù gate trước chưa qua
@@ -135,6 +141,11 @@ else if (TRACK.profileFields.length) lines.push(`Profile: đọc ${root}/${TRACK
if (Array.isArray(a.inputs) && a.inputs.length) lines.push(`Input bổ sung do người dùng cung cấp (ưu tiên cao nhất):\n${a.inputs.map((i) => `- ${i}`).join('\n')}`)
if (a.proto) lines.push(`## Prototype / design system tham chiếu (cho UICONV và WF, PRODUCT=screen)\n${a.proto}\nĐây là nguồn sự thật về BỐ CỤC: WF chạy chế độ 🎨 (ghi lại + đối chiếu với SRS, ghi mọi lệch vào WF §5). Thành phần có trong prototype mà SRS không có ⇒ KHÔNG tự thêm vào SRS, ghi lệch loại Tồn tại cho PO quyết.`)
else lines.push(`Prototype tham chiếu: không được cung cấp. Với PRODUCT=screen, tự tìm theo thứ tự design/, prototype/, docs/sections/07-*.md, docs/SAD.md §7; vẫn không có ⇒ WF chạy chế độ ✏️ (đề xuất của BA, cần Designer ký) và nói rõ trong summary.`)
if (stage === 'design') {
if (a.brand) lines.push(`## Brand guideline / design system tham chiếu (cho ba-design)\n${a.brand}\nĐây là nguồn sự thật về VISUAL (token màu/chữ/khoảng cách, component). Trích token từ đây, ghi độ tin cậy 🟢 ở DS §0.`)
else lines.push(`Brand guideline: không được cung cấp. Tự tìm theo thứ tự design/, brand/, prototype/, UICONV §0, SAD §7, DEC của Tech Lead về design system; vẫn không có ⇒ dùng token trung tính của template, ghi độ tin cậy 🔴 ở DS §0 + OQ, và nói rõ trong summary. Không tự chọn màu brand.`)
lines.push(`Công cụ: runner không có Bash — tokens.css viết tay theo quy tắc --ds-<đường dẫn nối '-'>; phép kiểm design-check.mjs và chụp PNG (render-figma.sh) do người điều phối chạy sau, ghi vào humanInputNeeded nếu cần.`)
}
if (a.answers) lines.push(`## Câu trả lời của người dùng cho OQ / humanInputNeeded vòng trước\n${a.answers}`)
if (a.notes) lines.push(`## Ghi chú từ người duyệt (bắt buộc xử lý trước, version +0.1 và Change Log)\n${a.notes}`)
if (a.override) lines.push(`## Ngoại lệ gate\nNgười dùng đã được cảnh báo gate trước chưa ✅ Baselined và KHẲNG ĐỊNH LẠI muốn tiếp tục. Làm tiếp, ghi ngoại lệ vào Open Questions + DEC-nn của artifact.`)