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.
- 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.
node scripts/check-node-modules.mjs: sopackage-lock.jsonvớinode_modules/.package-lock.json(bỏ qua gói optional). Thiếu, lệch phiên bản, haynode_moduleslà symlink thì dừng và nói "chạynpm install". Khoảng 40 ms. Chặn bẫy 2.- Tự sửa rồi stage: ngày
last_reviewedcủa doc vừa sửa, file sinh tự động (trang tham chiếu, danh mục skill, trang danh sách module). - eslint và typecheck trên đúng file hoặc workspace đã stage.
run-checks docs --stagedkhi đụng docs;run-checks code --stagedkhi có file ngoài docs.- 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.
- Chỉ xét ref
refs/heads/*có nội dung; ref dùng để giành việc (claim) không cần kiểm. - 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.
- 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ằngtrap ... EXIT. - 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.