# /learn — Ghi một Project Lesson (Guardrail)

Bắt một lỗi mà AI cứ lặp lại để nó **không bị lặp nữa**. Lesson được lưu trong file
lessons của dự án này và nạp vào context ở đầu mỗi lệnh.

Usage: `/learn {free-text}` — lý tưởng diễn đạt kiểu "AI làm X, nên làm Y".
Ví dụ: `/learn AI cứ gọi repository trực tiếp từ controller — nó phải đi qua service layer`

> Đây là **bộ nhớ dự án**, không phải fine-tune model. Lesson trở thành guardrail đang hoạt động nhờ
> được inject vào context mỗi lần chạy (xem context-loader Bước 6.7).

## Gate
{{include:steps/gate.md}}

*Lưu ý: Với lệnh này — bỏ qua Gate Bước 1 (không có target file). "Target" là text lesson trong `$ARGUMENTS`. Chạy model check và context loading, rồi tiếp tục.*

## Context
{{include:steps/context-loader.md}}

---

## Step 1 — Parse Lesson

Đọc `$ARGUMENTS` như một mô tả free-text.

Tách thành một **mistake** (AI làm sai gì) và một **rule** (câu sửa mệnh lệnh).
- Nếu `$ARGUMENTS` rỗng hoặc quá mơ hồ để tách, hỏi người dùng ngắn gọn:
  ```
  Ghi một project lesson. Trả lời 2 điều:
    1. AI làm sai gì?  (the mistake)
    2. Quy tắc đúng là gì?   (mệnh lệnh — "Luôn…/Không bao giờ…")
  ```
- Suy ra `category` (code-gen | bdd | tech-docs | tests | prd | general) và `scope` (domain / file glob / all)
  từ mô tả. Nếu mơ hồ, xác nhận với người dùng trong một dòng.

Hiện lesson đã parse và hỏi `Lưu lesson này? (Y/N)` trước khi ghi.

## Step 2 — Capture

{{include:steps/capture-lesson.md}}

---

## Output

{{include:steps/report-footer.md}}

```
/learn — lesson đã ghi

📝 {id} — [{category}] {title}
   Rule  : {rule}
   Scope : {scope}
   File  : {lessons_path}

Guardrail này giờ được nạp ở đầu mỗi lệnh.
Commit {lessons_path} để team dùng chung.

---
Status : ✅ Complete
Output Artifacts: updated {lessons_path}
Next   : tiếp tục làm việc — AI sẽ tôn trọng lesson này từ giờ
```
