* fix(ci): move the EPUB build out of pre-commit into CI The build-epub hooks called scripts/build_epub.py, which raises when the mmdc binary is missing, while check_mermaid.py skips with a warning in the same situation. On arm64 — where @mermaid-js/mermaid-cli has no working build — that made 'pre-commit run --all-files' impossible to satisfy for a docs-only change without --no-verify. Remove the build-epub, vietnamese-build-epub and japanese-build-epub hooks and widen the CI build-epub job to a language matrix so PR-time coverage is not reduced: it previously built en only, and now builds en, vi, zh and ja. zh was covered by neither the hooks nor this job, so a broken zh diagram could only surface at release time. Closes #156 * docs: replace the stale Kroki narrative with local mmdc rendering Commite76bbe4swapped the Kroki HTTP dependency for local mmdc rendering but left the docs describing the old design. The claim appeared in seven live files, not the two originally reported: CLAUDE.md, scripts/README.md and their ja/uk/vi copies. Also corrects what the same staleness dragged along: - scripts/README.md documented --timeout and --max-concurrent, which no longer exist, and omitted --mmdc-path, --lang and --puppeteer-config - 'Async concurrent fetching' described a render_all() that is now a plain sequential loop with a dedupe cache - the network-error/rate-limiting troubleshooting entries are replaced with the failures that actually occur now (missing mmdc, Chromium sandbox) CHANGELOG entries recording the Kroki-to-mmdc switch are left alone; they describe the past accurately. Closes #157 * fix(scripts): make the ruff config match files that exist Ruff resolves include/per-file-ignores patterns relative to the directory holding pyproject.toml. Since the config lives in scripts/, the pattern "scripts/**/*.py" meant scripts/scripts/**/*.py, which matches nothing — 'ruff check scripts/' printed 'warning: No Python files found under the given path(s)' and then 'All checks passed!'. per-file-ignores had the same mistake. Both are now relative to scripts/, so ruff sees all 14 files. This silently disabled the pre-commit ruff hooks too, not just the documented command, and two test files had drifted out of format as a result. Reformatting them exposed a second problem: the pre-commit hook pinned ruff v0.8.2 while the CI lint job installs unpinned latest and this venv has 0.15.10. The versions disagree on formatting, so each reverted the other's output, and CI would have started failing on a file the local hook kept rewriting. Bump the hook pin and the requirements-dev floor to 0.15.10 so all three agree. Verified: 'pre-commit run --all-files' is stable across consecutive runs, 'ruff format --check scripts/' and 'ruff check scripts/' both pass, 92 tests pass. Closes #160 * docs: point localized module links at their own trees Files at the root of a language directory used ../NN-module/, which from uk/CATALOG.md resolves to the English 05-mcp/ at the repo root rather than uk/05-mcp/. Readers following a count stated about the localized tree landed in the English one. The link checker never caught it because the English target does exist. Files one level deeper (uk/04-subagents/README.md and friends) were already correct — ../06-hooks/ from there resolves to uk/06-hooks/ — so this is scoped to the 7 depth-1 files that actually escape: CATALOG.md in uk, vi, ja and zh, LEARNING-ROADMAP.md in uk and vi, and ja/claude_concepts_guide.md. 119 links in total. The ../NN- occurrences left in STYLE_GUIDE.md and TRANSLATION_NOTES.md are inside fenced examples showing what a module page should contain, where the ../ form is the correct convention. All 119 rewritten targets were verified to exist. Closes #158 * docs(hooks): stop conflating hook types with hook event categories '**Hook Types** (5 types, 31 events)' sat above four bullets, so the count read as wrong. It was not — the two numbers describe different axes that had been merged into one label. 06-hooks/README.md:126 documents five hook *types*: command, http, prompt, mcp_tool and agent. Those describe how a hook runs. The four bullets are event *categories* — Tool, Session, Task, Lifecycle — holding 31 events (6+7+6+12), and describe when it runs. Split the label so each number belongs to the axis it counts, in all nine affected files: README.md and INDEX.md plus the ja, uk, vi and zh copies. QUICK_REFERENCE.md and LEARNING-ROADMAP.md already stated '5 types' with the handler names attached and needed no change. Closes #159 * chore(scripts): drop the unused httpx dependency httpx was the HTTP client for Kroki rendering. Nothing has imported it sincee76bbe4moved diagram rendering to a local mmdc subprocess — check_links.py, the only other network caller, uses stdlib urllib.request. The PEP 723 blocks in build_epub.py and build_website.py had already dropped it; only the manifests and docs still declared it. Removes it from requirements.txt, pyproject.toml dependencies, the dependency tables and uv --with lines in scripts/README.md and its ja/uk copies, and the .cspell.json word list. Also drops the B113 bandit suppression, which existed solely for an httpx timeout false positive — bandit reports no issues without it. Also corrects two Requirements lines missed in the previous pass: the ja and uk script READMEs still listed an internet connection rather than mmdc. Note: tenacity is now dead for the same reason and is left in place. * chore(scripts): drop the unused tenacity dependency Nothing imports tenacity — the retry logic it was added for went away with the Kroki HTTP fetching ine76bbe4. It was still declared in requirements.txt, pyproject.toml, both `uv run --with` lines and all three dependency tables. * docs(i18n): sync the localized pre-commit check lists The ja/uk/vi CLAUDE.md files still listed build-epub as pre-commit check #5, stale since 6da8184 moved the EPUB build to CI. They also omitted markdown-rendering, and the ja/uk stated counts disagreed with their own lists. Now matches the English CLAUDE.md. * fix(scripts): silence PLR0917 now stable in ruff 0.16 CI installs the latest ruff (uv pip install ruff, unpinned), and 0.16.1 promoted too-many-positional-arguments from preview to stable, hard-failing the Code Quality check on build_epub.py's long-signature draw/helper functions. These sit in the same family as PLR0913, which is already ignored. Add PLR0917 so the local 0.15.10 pin and unpinned CI lint agree again.
7.1 KiB
CLAUDE.md
File này cung cấp hướng dẫn cho Claude Code (claude.ai/code) khi làm việc với code trong repository này.
Tổng Quan Dự Án
Claude How To là một repository tutorial về các tính năng của Claude Code. Đây là documentation-as-code — sản phẩm chính là các file markdown được tổ chức thành các module học tập đánh số (01-10), không phải một ứng dụng thực thi.
Kiến trúc: Mỗi module (01-10) bao phủ một tính năng cụ thể của Claude Code với các template copy-paste, sơ đồ Mermaid, và ví dụ. Hệ thống build xác thực chất lượng documentation và tạo ebook EPUB.
Các Lệnh Thường Dùng
Kiểm Tra Chất Lượng Pre-commit
Tất cả documentation phải vượt qua năm kiểm tra chất lượng trước khi commit (các kiểm tra này chạy tự động qua pre-commit hooks):
# Cài đặt pre-commit hooks (chạy trên mỗi commit)
pre-commit install
# Chạy tất cả các kiểm tra thủ công
pre-commit run --all-files
Năm kiểm tra là:
- markdown-lint — Cấu trúc và định dạng Markdown qua
markdownlint - cross-references — Liên kết nội bộ, anchors, cú pháp code fence (Python script)
- mermaid-syntax — Xác thực tất cả sơ đồ Mermaid parse đúng (Python script)
- link-check — Các URL bên ngoài có thể truy cập được (Python script)
- markdown-rendering — Markdown render không lỗi (Python script)
Việc build EPUB không phải là một pre-commit hook — nó chỉ chạy trong CI (job build-epub trong .github/workflows/test.yml), vì nó cần binary mmdc cục bộ, vốn không có bản build hoạt động trên arm64.
Thiết Lập Môi Trường Phát Triển
# Cài đặt uv (Python package manager)
pip install uv
# Tạo virtual environment và cài đặt Python dependencies
uv venv
source .venv/bin/activate
uv pip install -r scripts/requirements-dev.txt
# Cài đặt Node.js tools (markdown linter và Mermaid validator)
npm install -g markdownlint-cli
npm install -g @mermaid-js/mermaid-cli
# Cài đặt pre-commit hooks
uv pip install pre-commit
pre-commit install
Testing
Các script Python trong scripts/ có unit tests:
# Chạy tất cả tests
pytest scripts/tests/ -v
# Chạy với coverage
pytest scripts/tests/ -v --cov=scripts --cov-report=html
# Chạy test cụ thể
pytest scripts/tests/test_build_epub.py -v
Chất Lượng Code
# Lint và format Python code
ruff check scripts/
ruff format scripts/
# Security scan
bandit -c scripts/pyproject.toml -r scripts/ --exclude scripts/tests/
# Type checking
mypy scripts/ --ignore-missing-imports
Build EPUB
# Tạo ebook (render Mermaid diagrams bằng mmdc CLI cục bộ — không cần mạng)
uv run scripts/build_epub.py
# Với các tùy chọn
uv run scripts/build_epub.py --verbose --output custom-name.epub --lang vi
Cấu Trúc Thư Mục
├── 01-slash-commands/ # Các lối tắt do người dùng gọi
├── 02-memory/ # Ví dụ về bối cảnh liên tục
├── 03-skills/ # Các khả năng có thể tái sử dụng
├── 04-subagents/ # Các tác nhân AI chuyên dụng
├── 05-mcp/ # Ví dụ Model Context Protocol
├── 06-hooks/ # Tự động hóa dựa trên sự kiện
├── 07-plugins/ # Các tính năng được đóng gói
├── 08-checkpoints/ # Các snapshot của phiên
├── 09-advanced-features/ # Lập kế hoạch, suy nghĩ, background tasks
├── 10-cli/ # Tham chiếu CLI
├── scripts/
│ ├── build_epub.py # EPUB generator (render Mermaid bằng mmdc cục bộ)
│ ├── check_cross_references.py # Xác thực liên kết nội bộ
│ ├── check_links.py # Kiểm tra các URL bên ngoài
│ ├── check_mermaid.py # Xác thực cú pháp Mermaid
│ └── tests/ # Unit tests cho scripts
├── .pre-commit-config.yaml # Định nghĩa các kiểm tra chất lượng
└── README.md # Hướng dẫn chính (cũng là index của module)
Hướng Dẫn Nội Dung
Cấu Trúc Module
Mỗi thư mục đánh số tuân theo pattern:
- README.md — Tổng quan về tính năng với các ví dụ
- Các file ví dụ — Template copy-paste (
.mdcho commands,.jsoncho configs,.shcho hooks) - Các file được tổ chức theo độ phức tạp của tính năng và dependencies
Sơ Đồ Mermaid
- Tất cả sơ đồ phải parse thành công (được kiểm tra bởi pre-commit hook)
- EPUB build render sơ đồ bằng
mmdcCLI cục bộ (không cần internet, nhưng cần càimmdc) - Sử dụng Mermaid cho flowcharts, sequence diagrams, và architecture visuals
Cross-References
- Sử dụng relative paths cho internal links (ví dụ:
(01-slash-commands/README.md)) - Code fences phải chỉ định ngôn ngữ (ví dụ:
```bash,```python) - Anchor links sử dụng format
#heading-name
Link Validation
- Các URL bên ngoài phải có thể truy cập được (được kiểm tra bởi pre-commit hook)
- Tránh link đến nội dung tạm thời
- Sử dụng permalinks nếu có thể
Các Điểm Kiến Trúc Quan Trọng
-
Các thư mục đánh số thể hiện thứ tự học tập — Prefix 01-10 thể hiện thứ tự được khuyến nghị để học các tính năng của Claude Code. Đánh số này có chủ đích; không tổ chức lại theo bảng chữ cái.
-
Scripts là các tiện ích, không phải sản phẩm — Các script Python trong
scripts/hỗ trợ chất lượng documentation và tạo EPUB. Nội dung thực tế nằm trong các thư mục module đánh số. -
Pre-commit là người gác cổng — Tất cả năm kiểm tra chất lượng phải pass trước khi PR được chấp nhận. CI pipeline chạy các kiểm tra tương tự như lần thứ hai.
-
Mermaid rendering cần
mmdccục bộ — EPUB build gọimmdcCLI cục bộ để render diagrams (không cần network). Các lỗi build ở đây thường là do chưa càimmdchoặc cú pháp Mermaid không hợp lệ. Bản thân EPUB build không chạy trong pre-commit — nó chỉ chạy trong CI. -
Đây là tutorial, không phải thư viện — Khi thêm nội dung, tập trung vào giải thích rõ ràng, ví dụ copy-paste, và sơ đồ trực quan. Giá trị nằm ở việc dạy các khái niệm, không cung cấp code có thể tái sử dụng.
Commit Conventions
Tuân theo format conventional commit:
feat(slash-commands): Add API documentation generatordocs(memory): Improve personal preferences examplefix(README): Correct table of contents linkrefactor(hooks): Simplify hook configuration examples
Scope nên khớp với tên thư mục khi áp dụng.