Skip to content

Bẫy đã gặp thật ​

Mỗi bẫy dưới đây đã xảy ra thật và phải có máy chặn, không chỉ một dòng nhắc. Loại nguy hiểm nhất là loại hỏng mà hệ vẫn trông như đang chạy.

Bẫy 1: test dựng repo tạm bên trong git hook ​

Hook xuất GIT_DIR, GIT_INDEX_FILE. Test gọi git init trong thư mục tạm, nhưng git đọc các biến đó và ghi vào repo thật: core.bare=true, mọi lệnh git sau đó hỏng.

  • Chặn: bộ chạy gate xoá mọi GIT_* cho mọi node --test; test tự xoá ở đầu file.
  • Gặp rồi thì sửa ngay: git config --file .git/config core.bare false, kiểm reflog không có commit lạ.

Bẫy 2: node_modules cũ sau git pull ​

Gate báo lỗi lạc đề ("Could not resolve @scope/pkg") vì phiên khác vừa đổi lockfile.

  • Chặn: check-node-modules.mjs ở bước 2 của pre-commit.

Bẫy 3: lỗi bị try/catch nuốt trông giống "không có gì" ​

  • Chặn: in lỗi rõ ràng và để bước đó đỏ. Hook được phép nuốt lỗi để không làm hỏng tool, nhưng đường lỗi phải được thử bằng tay một lần.

Bẫy 4: $? sau $(...) luôn ra 0 ​

echo "$(date) (exit $?)" luôn in 0, vì $(...) đặt lại $?.

  • Chặn: rc=$? ngay sau lệnh, trước mọi $(...). Log của lượt hằng tuần đọc rc.

Bẫy 5: danh sách trỏ tới file đã chuyển chỗ ​

Tách app, đổi tên spec: danh sách spec hay đường dẫn trỏ vào chỗ trống, bộ kiểm thu nhỏ lặng lẽ và vẫn xanh.

  • Chặn: kiểm sự tồn tại của từng đường dẫn, thiếu thì đỏ to.

Bẫy 6: gate local đọc cả file chưa commit ​

Gate ở máy đọc cây làm việc, gồm cả file dở của phiên khác, nên xanh hoặc đỏ oan.

  • Chặn: CI mới là cổng thật. Ở máy, chế độ --staged chỉ xét file đã stage.

Bẫy 7: script tự đánh số đọc rồi +1 ​

Hai phiên cùng đọc số lớn nhất rồi cùng +1: hai yêu cầu hay hai migration trùng số.

  • Chặn: giành số trên remote (một ref riêng) trước khi ghi; cấm tự đọc rồi +1. Cùng tinh thần với luật "tính duy nhất nằm ở ràng buộc CSDL" của các vòng chạy tự động ở Conan.

Bẫy riêng của Conan ​

Sổ đầy đủ ở known-risks. Các bẫy thuộc harness:

BẫyNgàyChặn bằng
Token CI thiếu D1 Edit: migration không áp, api đóng băng hai ngày trong khi frontend vẫn ship02-03.09.2026Migration chạy trước deploy cùng job; so sổ theo tên
CI chạy mọi job cho PR chỉ thêm JSON: 1.803/2.000 phút trong 4 ngày04.09.2026scripts/ci/select-jobs.mjs (29 mẫu tự kiểm), sparse checkout
Gác ở máy và ở CI nhìn hai tập file khác nhau09.09.2026scripts/lib/git-ignored.mjs; bộ chạy từ chối cây sparse
startup_failure nuốt lượt deploy, không chạy lại được26-27.09.2026workflow_dispatch ở mọi deploy; kiểm deploy theo SHA merge
Actions bị tắt vì chi phí, mọi merge không deploy mà không gì đỏ28.09.2026timeout-minutes mọi job. Chưa có cảnh báo tự động.
Merge khi CI đỏ27.09, 11.10.2026Quy ước --match-head-commit. Không có máy chặn (gói Free).
13/23 lượt CI đỏ là lỗi gác có sẵn bắt được ở máy12.10.2026Hook PostToolUse, Stop, trước push
Đọc nhầm mã thoát vì | tail12.10.2026Hook trước push chạy gác, đỏ là chặn
Gác đỏ đầu tiên làm skip mọi job build; ba danh sách gác lệch nhau14.10.2026run-guards.mjs: một danh sách, chạy hết rồi báo
Hook đổi tên thì tắt im lặng14.10.2026Gác hooks
Tách repo: gác soi thư mục đã dời vẫn xanh vì không còn gì để soi16.10.2026Gác thoát 2 khi thư mục khai báo vắng mặt
Bản clone cũ sau khi viết lại lịch sử kéo 400 MB quay lại17.10.2026Gác history-root. Clone cũ vẫn được mở làm thư mục phiên.
archived-migrations đỏ giả khi cây tụt sau origin/main (bẫy 6)18.10.2026So với merge-base
Luật "không bao giờ" chỉ nằm trong chữ bị vượt hàng trăm lần trong 14 ngày18.10.2026Hook danger-guard
Workflow deploy mới không vào sổ lỗi (aimaster, webai, harness)18.10.2026error-ledger --self-test