Files
Luong NGUYEN 4f3fa85d7e docs: follow-ups from the v2.1.220 accuracy review (#161)
* 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

Commit e76bbe4 swapped 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
since e76bbe4 moved 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 in e76bbe4. 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.
2026-08-06 07:58:46 +07:00

9.0 KiB
Raw Permalink Blame History

CLAUDE.md

Цей файл надає настанови для Claude Code (claude.ai/code) при роботі з кодом у цьому репозиторії.

Огляд проєкту

Claude How To — це навчальний репозиторій з функцій Claude Code. Це документація-як-код — основний продукт — markdown-файли, організовані в пронумеровані навчальні модулі, а не виконуваний додаток.

Архітектура: Кожен модуль (01-10) охоплює конкретну функцію Claude Code з готовими шаблонами для копіювання, Mermaid-діаграмами та прикладами. Система збірки валідує якість документації та генерує EPUB-книгу.

Типові команди

Перевірки якості pre-commit

Уся документація повинна пройти п'ять перевірок якості перед комітами (запускаються автоматично через pre-commit хуки):

# Install pre-commit hooks (runs on every commit)
pre-commit install

# Run all checks manually
pre-commit run --all-files

П'ять перевірок:

  1. markdown-lint — Структура та форматування Markdown через markdownlint
  2. cross-references — Внутрішні посилання, якорі, синтаксис блоків коду (Python-скрипт)
  3. mermaid-syntax — Валідація коректного парсингу всіх Mermaid-діаграм (Python-скрипт)
  4. link-check — Доступність зовнішніх URL (Python-скрипт)
  5. markdown-rendering — Markdown рендериться без помилок (Python-скрипт)

Збірка EPUB не є pre-commit хуком — вона виконується лише в CI (джоб build-epub у .github/workflows/test.yml), бо потребує локального бінарника mmdc, для якого немає робочої збірки під arm64.

Налаштування середовища розробки

# Install uv (Python package manager)
pip install uv

# Create virtual environment and install Python dependencies
uv venv
source .venv/bin/activate
uv pip install -r scripts/requirements-dev.txt

# Install Node.js tools (markdown linter and Mermaid validator)
npm install -g markdownlint-cli
npm install -g @mermaid-js/mermaid-cli

# Install pre-commit hooks
uv pip install pre-commit
pre-commit install

Тестування

Python-скрипти в scripts/ мають юніт-тести:

# Run all tests
pytest scripts/tests/ -v

# Run with coverage
pytest scripts/tests/ -v --cov=scripts --cov-report=html

# Run specific test
pytest scripts/tests/test_build_epub.py -v

Якість коду

# Lint and 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

Збірка EPUB

# Generate ebook (renders Mermaid diagrams with the local mmdc CLI — no network)
uv run scripts/build_epub.py

# With options
uv run scripts/build_epub.py --verbose --output custom-name.epub --mmdc-path ./node_modules/.bin/mmdc

Структура каталогів

├── 01-slash-commands/      # Ярлики, ініційовані користувачем
├── 02-memory/              # Приклади постійного контексту
├── 03-skills/              # Повторно використовувані можливості
├── 04-subagents/           # Спеціалізовані AI-асистенти
├── 05-mcp/                 # Приклади Model Context Protocol
├── 06-hooks/               # Автоматизація на основі подій
├── 07-plugins/             # Пакетні функції
├── 08-checkpoints/         # Знімки сесій
├── 09-advanced-features/   # Планування, мислення, фони
├── 10-cli/                 # Довідник CLI
├── scripts/
│   ├── build_epub.py           # Генератор EPUB (рендерить Mermaid через локальний mmdc)
│   ├── check_cross_references.py   # Валідація внутрішніх посилань
│   ├── check_links.py          # Перевірка зовнішніх URL
│   ├── check_mermaid.py        # Валідація синтаксису Mermaid
│   └── tests/                  # Юніт-тести для скриптів
├── .pre-commit-config.yaml    # Визначення перевірок якості
└── README.md               # Основний довідник (також індекс модулів)

Настанови щодо контенту

Структура модуля

Кожна пронумерована папка дотримується патерну:

  • README.md — Огляд функції з прикладами
  • Файли прикладів — Готові шаблони для копіювання (.md для команд, .json для конфігурацій, .sh для хуків)
  • Файли організовані за складністю функцій та залежностями

Mermaid-діаграми

  • Усі діаграми повинні успішно парситися (перевіряється pre-commit хуком)
  • Збірка EPUB рендерить діаграми через локальний mmdc CLI (інтернет не потрібен, але потрібен mmdc)
  • Використовуйте Mermaid для блок-схем, діаграм послідовностей та архітектурних візуалізацій

Перехресні посилання

  • Використовуйте відносні шляхи для внутрішніх посилань (напр., (01-slash-commands/README.md))
  • Блоки коду повинні вказувати мову (напр., ```bash, ```python)
  • Якірні посилання використовують формат #heading-name

Валідація посилань

  • Зовнішні URL повинні бути доступні (перевіряється pre-commit хуком)
  • Уникайте посилань на тимчасовий контент
  • Використовуйте пермалінки де можливо

Ключові архітектурні рішення

  1. Пронумеровані папки вказують порядок навчання — Префікс 01-10 відображає рекомендовану послідовність вивчення функцій Claude Code. Ця нумерація навмисна; не реорганізовуйте за алфавітом.

  2. Скрипти — утиліти, а не продукт — Python-скрипти в scripts/ підтримують якість документації та генерацію EPUB. Фактичний контент — у пронумерованих папках модулів.

  3. Pre-commit — привратник — Усі перевірки якості повинні пройти перед прийняттям PR. CI-конвеєр запускає ці ж перевірки як другий прохід.

  4. Рендеринг Mermaid потребує локального mmdc — Збірка EPUB викликає локальний mmdc CLI для рендерингу діаграм (мережа не потрібна). Помилки збірки тут зазвичай пов'язані з відсутнім mmdc або невалідним синтаксисом Mermaid. Сама збірка EPUB не виконується у pre-commit — лише в CI.

  5. Це туторіал, а не бібліотека — При додаванні контенту зосереджуйтесь на чітких поясненнях, готових прикладах та візуальних діаграмах. Цінність — у навчанні концепцій, а не у наданні повторно використовуваного коду.

Конвенції комітів

Дотримуйтесь формату conventional commits:

  • feat(slash-commands): Add API documentation generator
  • docs(memory): Improve personal preferences example
  • fix(README): Correct table of contents link
  • refactor(hooks): Simplify hook configuration examples

Скоуп повинен відповідати назві папки де можливо.