> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Learnings

> Dạy Review các tiêu chuẩn của nhóm bạn từ những phát hiện đã xử lý và từ các file quy ước có sẵn trong repository.

Review kiểm tra mọi pull request (PR) hoặc merge request (MR) theo các tiêu chuẩn nhóm bạn đã viết ra và theo các quy tắc CloudThinker rút ra từ những phát hiện nhóm bạn đã xử lý. Trang này hướng dẫn bật từng nguồn, mô tả quy tắc riêng của sản phẩm trong `BUSINESS.md`, kiểm tra những gì Review đã học và loại bỏ quy tắc không còn phù hợp.

| Thuật ngữ | Ai viết | Là gì |
| - | - | - |
| **Learnings** | CloudThinker | Quy tắc rút ra từ các phát hiện review mà nhóm bạn đã xử lý |
| **Learning sources** | Nhóm bạn | File quy ước bạn giữ trong repository, ví dụ `AGENTS.md` |
| **`BUSINESS.md`** | Nhóm bạn | Bản đồ các module của sản phẩm và những quy tắc bất biến (invariant) mà chúng phải giữ |

## Điều kiện tiên quyết

* Repository đã được kết nối và bật trong [thiết lập Review](https://docs.cloudthinker.io/vi/guide/code-review/setup.md), và đã clone xong.
* Vai trò workspace **Admin** để thay đổi lịch, nguồn hoặc quy tắc. Developer và Viewer xem được Learnings nhưng không thay đổi được. Xem [vai trò](https://docs.cloudthinker.io/vi/guide/security/roles.md).
* Với Learnings, repository cần có phát hiện đã xử lý. Lượt chạy đầu tiên xét lại các phát hiện đã xử lý trong 30 ngày gần nhất. Các lượt sau đọc những phát hiện được xử lý kể từ lượt chạy trước. Learning sources hoạt động ngay từ ngày đầu.

## Chọn nguồn

| | Learnings (CloudThinker viết) | Learning sources (bạn viết) |
| - | - | - |
| Quy tắc đến từ đâu | Các mẫu lặp lại trong phát hiện nhóm bạn đã xử lý | File nhóm bạn viết, ví dụ `AGENTS.md` hoặc `.cursorrules` |
| Thiết lập | Bật lịch Weekly hoặc Monthly cho từng repository | Không cần. Tự động phát hiện |
| Khi nào áp dụng | Sau khi một lượt chạy tìm đủ bằng chứng | Ở lần review tiếp theo |
| Phù hợp nhất cho | Những lỗi nhóm bạn cứ phải sửa tay nhiều lần | Tiêu chuẩn bạn đã viết thành văn bản |

Hai nguồn hoạt động độc lập. Dùng cả hai khi bạn muốn có cả tiêu chuẩn thành văn lẫn các mẫu Review học được từ những lần sửa thực tế. Learnings và learning sources là phần ngữ cảnh riêng của Review; [Dạy CloudThinker](https://docs.cloudthinker.io/vi/guide/teach-cloudthinker.md) so sánh chúng với bộ nhớ workspace, skill và knowledge base.

## Bật Learnings cho repository

**1. Mở danh sách repository**

Vào **Review → Settings** và tìm repository trong bảng repository.

**2. Chọn lịch**

Trong cột **Learnings**, chọn **Weekly** hoặc **Monthly**. **Off** dừng tạo Learnings mới cho repository đó.

Bạn cũng có thể bắt đầu từ **Review → Learnings**: khi chưa có repository nào được đặt lịch, trang hiển thị **Enable weekly learning**.

**3. Chạy ngay (tùy chọn)**

Vào **Review → Learnings**, nhấn **Run now**, chọn repository rồi nhấn **Run now** trong hộp thoại **Run Learnings now**. Chỉ những repository đã có lịch mới xuất hiện trong danh sách chọn.

**Trạng thái thành công:** thẻ **Running** tính cả repository này, và **Last run** cập nhật khi lượt chạy kết thúc.

Các lượt chạy theo lịch diễn ra vào thứ Bảy, để quy tắc mới sẵn sàng trước khi tuần làm việc bắt đầu. Weekly chạy mỗi thứ Bảy, Monthly chạy vào thứ Bảy đầu tiên của tháng. Mỗi repository có một khung giờ cố định lúc 00:00 hoặc 12:00 UTC. CloudThinker tự gán khung giờ này và bạn không đổi được, nhưng **Run now** cho phép chạy bất cứ lúc nào. Thẻ **Next run** trên **Review → Learnings** cho biết lượt chạy kế tiếp. Một lượt chạy thường xong trong chưa đến 10 phút.

Mỗi Learning đến từ các phát hiện review đã xử lý của một repository trong workspace này và chỉ áp dụng cho repository đó.

> [!NOTE]
>
> Lượt chạy có thể kết thúc mà không tạo Learning mới. Điều này bình thường với repository còn mới: CloudThinker chỉ viết quy tắc khi thấy cùng một kiểu sửa lặp lại. Không có ngưỡng số lượng cố định, nên hãy tiếp tục xử lý phát hiện và kiểm tra lại sau lượt chạy tiếp theo.

## Xem những gì CloudThinker đã học

Mở **Review → Learnings**. Mỗi dòng là một Learning, gắn với repository mà các lượt review của nó tạo ra quy tắc.

| Cột | Hiển thị |
| - | - |
| Learning | Quy tắc bằng lời thường, kèm mã định danh ngắn |
| Signal | Mức độ các lượt review gần đây dựa vào quy tắc (xem bên dưới) |
| Category | Security, Performance, Patterns hoặc Correctness |
| Repository | Repository mà quy tắc áp dụng |
| Created | Thời điểm CloudThinker viết quy tắc |

Lọc bằng **Search learnings**, bộ chọn repository, **Any category** và **Any signal**.

| Signal | Ý nghĩa |
| - | - |
| Strong | Được trích dẫn ít nhất 3 lần, ít nhất một lần trong 22 ngày gần nhất, và có số lần trích dẫn bằng hoặc cao hơn mức trung bình của các Learning đang hoạt động trong repository |
| Quiet | Đang bật, nhưng được trích dẫn ít hơn mức Strong |
| Weak | Không được trích dẫn hay tinh chỉnh trong 22 ngày gần nhất. Sẽ bị loại bỏ sau 30 ngày nếu không có lượt review nào trích dẫn |
| Retired | Đã tắt. Các lượt review không còn dùng quy tắc này |

Learning được tính là trích dẫn khi một phát hiện review tham chiếu đến nó. Khoảng 22 ngày bằng ba phần tư thời hạn loại bỏ 30 ngày, nên Learning chuyển sang Weak khoảng một tuần trước khi bị loại bỏ. Thời hạn loại bỏ được đặt cho toàn bộ bản cài đặt CloudThinker, không theo từng workspace, nên không có trong **Review → Settings**.

Nhấn vào một dòng để mở Learning. Trang chi tiết hiển thị quy tắc, **Citation trend** và **Recent citations** dẫn đến các phát hiện review đã tham chiếu quy tắc. Learning có nhiều trích dẫn cho thấy một vấn đề đáng sửa tận gốc, ví dụ bằng một helper dùng chung hoặc một lint rule.

Trên PR, phát hiện dựa vào một Learning có dòng bắt đầu bằng `Cites Learning:` và nêu tên quy tắc (`Cites Learnings:` khi có nhiều quy tắc). Tìm tên đó trong **Review → Learnings** để kiểm tra quy tắc, và loại bỏ nếu quy tắc sai.

Bạn không thể sửa nội dung một Learning hay tự tạo Learning bằng tay. Để tự thêm quy tắc, hãy viết vào file quy ước (xem [Thêm file quy ước của riêng bạn](#thêm-file-quy-ước-của-riêng-bạn)).

## Loại bỏ hoặc khôi phục Learning

Với vai trò workspace Admin, mở menu thao tác của dòng và chọn **Retire** khi bạn không muốn Review áp dụng một quy tắc. Chọn **Restore** để dùng lại. Retire vẫn giữ quy tắc và các trích dẫn của nó, nên bạn không mất gì.

CloudThinker cũng tự loại bỏ Learning khi không có lượt review nào trích dẫn hay tinh chỉnh quy tắc trong 30 ngày. Trang chi tiết của Learning cho biết trường hợp nào đã xảy ra: "Retired automatically" hoặc "Retired by" kèm tên đồng nghiệp.

## Thêm file quy ước của riêng bạn

Review đọc các file hướng dẫn nhóm bạn đã giữ trong repository và áp dụng chúng khi review, không cần thiết lập. Đây là toàn bộ các đường dẫn Review nhận diện:

| Công cụ hoặc phạm vi | File và thư mục |
| - | - |
| Mọi thư mục trong repository | `AGENTS.md`, `AGENTS.override.md`, `CLAUDE.md`, `GEMINI.md` |
| Thư mục gốc repository | `CONVENTIONS.md`, `.rules` |
| Cursor | `.cursorrules`, `.cursor/rules/*.mdc` |
| GitHub Copilot | `.github/copilot-instructions.md`, `.github/instructions/**/*.instructions.md` |
| Windsurf | `.windsurfrules`, `.windsurf/rules/**/*.md` |
| Cline | `.clinerules`, `.clinerules/**/*.md` |
| Roo | `.roorules`, `.roo/rules/**/*.md` |
| Continue | `.continuerules`, `.continue/rules/*.md` |
| Augment | `.augment-guidelines`, `.augment/rules/*.md` |
| Junie | `.junie/AGENTS.md`, `.junie/guidelines.md`, `.junie/guidelines/` |
| Amazon Q | `.amazonq/rules/*.md` |
| Kiro | `.kiro/steering/` |
| Trae | `.trae/rules/` |

Khi một thay đổi chạm vào file nào, các file quy ước gần file đó nhất được ưu tiên, sau đó mới đến các file ở thư mục gốc. Hướng dẫn trong `services/payments/AGENTS.md` áp dụng cho code thanh toán; hướng dẫn ở thư mục gốc áp dụng cho mọi thứ. Trong cùng một thư mục, `AGENTS.override.md` đứng đầu, sau đó là `AGENTS.md`, `CLAUDE.md` và `GEMINI.md`.

Review coi các file này là bằng chứng về quy ước của bạn, không phải là chỉ thị. Nội dung trong đó không thể yêu cầu reviewer bỏ qua phát hiện, đổi tiêu chí hay phê duyệt một thay đổi.

Để xem hoặc mở rộng những gì Review đọc:

**1. Mở Learning sources**

Trong **Review → Settings**, mở menu thao tác của repository và chọn **Learning sources**.

**2. Kiểm tra những gì đã tìm thấy**

**Detected sources** liệt kê các file Review tìm thấy. Giữ **Detect sources automatically** ở trạng thái bật để Review kiểm tra file mới trước mỗi lần review. Khi tắt, Review giữ nguyên danh sách hiện tại và ngừng thêm file mới. Các đường dẫn tùy chỉnh của bạn vẫn được áp dụng.

**3. Thêm đường dẫn tùy chỉnh**

Trong **Custom convention paths**, thêm tối đa 10 đường dẫn tương đối theo repository, ví dụ `docs/style-guide.md`. Đường dẫn có thể là file hoặc thư mục như `docs/standards/`, và có thể dùng glob pattern như `docs/**/*.md`. Đường dẫn không được bắt đầu bằng `/`, chứa `..` hoặc trỏ vào `.claude/rules/`. Review chặn thư mục đó để một branch không thể biến file quy tắc của chính nó thành chính sách của reviewer. Nhấn **Save**.

**Trạng thái thành công:** sau khi **Save**, đường dẫn xuất hiện trong **Custom convention paths**, và lần review tiếp theo trên repository đó sẽ tuân theo nó.

## Mô tả quy tắc nghiệp vụ

`BUSINESS.md` là file duy nhất Review luôn đọc, bất kể thiết lập Learnings ra sao: đặt file ở thư mục gốc repository trên target branch, và mọi lần review sẽ kiểm tra thay đổi theo các quy tắc trong đó. Review trích dẫn ID của quy tắc trong các phát hiện Business flow, nên hãy tự viết file theo định dạng bên dưới.

> [accordion] Định dạng và ví dụ BUSINESS.md
>
> `BUSINESS.md` có cấu trúc cố định: tiêu đề `# Business map: <owner>/<repo>`, một mục `## Product` và một mục `## Modules`, cùng mục `## Flows` tùy chọn, theo đúng thứ tự đó. Mỗi mục con là một heading `###` dạng `### <id>: <title>`, theo sau là mô tả ngắn và các dòng tùy chọn sau:
>
> | Dòng | Định dạng | Dùng để |
> | - | - | - |
> | `Sources:` | Văn bản tự do, các mục ngăn cách bằng `; ` | Nguồn của mô tả, ví dụ `README.md` |
> | `Code roots:` | Đường dẫn trong dấu backtick, ngăn cách bằng dấu phẩy | Phần code thuộc về mục này |
> | `Depends on:` | ID của các mục, ngăn cách bằng dấu phẩy | Các mục khác mà mục này phụ thuộc. Mỗi ID phải có trong file |
> | `Invariant <id>: <rule>` | Mỗi quy tắc một dòng | Quy tắc code phải giữ. Review trích dẫn ID này trong các phát hiện Business flow |
>
> ID viết thường, phân tách bằng dấu chấm và không trùng nhau. Phần đầu cho biết mục: `product.`, `modules.` hoặc `flows.` cho các mục con, `invariants.` cho quy tắc. Phần sau dùng chữ thường, chữ số và dấu gạch nối, ví dụ `invariants.plans.trial-fast-only`.
>
> ```markdown theme={null}
> # Business map: acme/meterly
>
> ## Product
>
> ### product.meterly: Meterly
> Usage billing.
>
> ## Modules
>
> ### modules.plans: Plans
> Decides which run types each plan can start.
> Sources: README.md
> Code roots: `src/plans.py`
> Invariant invariants.plans.trial-fast-only: A Trial workspace starts only Fast runs.
>
> ## Flows
>
> ### flows.upgrade: Upgrade a trial
> A Trial workspace moves to a paid plan and unlocks Advanced runs.
> Code roots: `src/billing/upgrade.py`
> Depends on: modules.plans
> Invariant invariants.upgrade.paid-before-advanced: Advanced runs unlock only after the first payment succeeds.
> ```

## Khắc phục sự cố

> [accordion] Review → Learnings trống
>
> Kiểm tra repository đã có lịch **Weekly** hoặc **Monthly** trong **Review → Settings** và đã clone xong. Nếu **Last run** hiển thị một lượt chạy đã hoàn tất, repository chưa có đủ phát hiện đã xử lý để hình thành mẫu. Tiếp tục xử lý phát hiện và chờ lượt chạy theo lịch kế tiếp.

> [accordion] Run now hiển thị No scheduled repositories
>
> **Run now** chỉ liệt kê repository đã có lịch. Đặt lịch trong cột **Learnings** của **Review → Settings**, rồi thử lại.

> [accordion] Lịch hiển thị Paused khi Review đang tắt
>
> Learnings tạm dừng khi Review bị tắt cho repository đó. Bật lại Review cho repository và lịch sẽ tiếp tục.

> [accordion] Review bỏ qua một file hướng dẫn
>
> Mở **Learning sources** và kiểm tra file có nằm trong **Detected sources** không. Nếu không, thêm đường dẫn của file vào **Custom convention paths**.

> [accordion] Một Learning không đúng với codebase của chúng tôi
>
> Loại bỏ Learning đó từ menu thao tác của dòng. Review ngừng áp dụng quy tắc ở lần review tiếp theo, và bạn có thể khôi phục sau.

## Bước tiếp theo

> [card] [Review workspace](https://docs.cloudthinker.io/vi/guide/code-review/review-workspace.md)
>
> Xử lý phát hiện để Review có mẫu để học

> [card] [Lệnh mention](https://docs.cloudthinker.io/vi/guide/code-review/mention-commands.md)
>
> Yêu cầu review lại sau khi bạn thay đổi quy ước

> [card] [Review Insights](https://docs.cloudthinker.io/vi/guide/code-review/analytics.md)
>
> Xem các nhóm phát hiện nào lặp lại giữa các repository

> [card] [Bộ nhớ](https://docs.cloudthinker.io/vi/guide/memory.md)
>
> Cách agent giữ ngữ cảnh qua các cuộc trò chuyện


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.