Skip to content

Git hooks ​

Hooks nằm ở .githooks/, bật bằng git config core.hooksPath .githooks trong script prepare của npm (chạy tự động sau npm install, nên clone mới và worktree mới đều có hook mà không ai phải nhớ).

pre-commit ​

Mục tiêu dưới 5 giây.

  1. Kiểm ổ đĩa còn chỗ. Ổ đầy cho lỗi lạc đề (build hỏng giữa chừng, file cụt) mà không ai nghĩ tới ổ đĩa.
  2. node scripts/check-node-modules.mjs: so package-lock.json với node_modules/.package-lock.json (bỏ qua gói optional). Thiếu, lệch phiên bản, hay node_modules là symlink thì dừng và nói "chạy npm install". Khoảng 40 ms. Chặn bẫy 2.
  3. Tự sửa rồi stage: ngày last_reviewed của doc vừa sửa, file sinh tự động (trang tham chiếu, danh mục skill, trang danh sách module).
  4. eslint và typecheck trên đúng file hoặc workspace đã stage.
  5. run-checks docs --staged khi đụng docs; run-checks code --staged khi có file ngoài docs.
  6. Mã yêu cầu (ví dụ số SRC) trong dòng mới phải có trong sổ.

commit-msg ​

Mã yêu cầu trong message phải có thật trong sổ.

pre-push ​

Mục tiêu dưới 1 phút: đây là cổng cuối trước main.

  1. Chỉ xét ref refs/heads/* có nội dung; ref dùng để giành việc (claim) không cần kiểm.
  2. Typecheck toàn repo khi push có code: chạy MỘT lần, gom stdout + stderr vào file, đỏ thì in file. Đừng chạy lại lần hai chỉ để in lỗi.
  3. Unit test của mọi workspace bị đụng cộng workspace tiêu thụ chúng (scripts/test-affected.mjs), chạy song song; workspace đỏ in log của nó. File tạm dọn bằng trap ... EXIT.
  4. Không chạy E2E (quá chậm). Có biến môi trường để bỏ qua có chủ ý, và lượt bỏ qua được ghi lại.

Ở Conan hôm nay ​

Không có git hook nào: core.hooksPath rỗng, không .githooks/, không husky. Kiểm trước push nằm trong hook của Claude Code, nên ai push không qua Claude Code (chủ dự án, Codex) thì không qua gác nào.

Gốc repo không có dependency, nên không ai chạy npm install ở gốc và script prepare sẽ không bao giờ chạy. Muốn bật hook thì đặt core.hooksPath trong scripts/cloud-bootstrap.sh (SessionStart). Xem Audit, mục 3.