Mengapa (falsifiable — diverifikasi 2026-07-17)
Gate CI CodeLens mati total, dan sudah mati berhari-hari. Tak ada yang menyadarinya karena kegagalannya diam.
gh run list --workflow "CodeLens CI" --limit 60 → NOL sukses. Semua cancelled, mundur setidaknya sampai 2026-07-14.
cancelled itu menyesatkan — tak ada manusia yang membatalkannya. Buktinya durasi:
run 29502899082: created=2026-07-16T13:36:17Z updated=2026-07-16T19:36:35Z conclusion=cancelled
6 jam 0 menit 18 detik — itu batas keras job GitHub. Job-nya hang sampai dibunuh platform, lalu ditandai cancelled.
Di mana hang-nya (run 29555933312, PR #298, diperiksa saat masih hidup):
| Step |
Status |
| 1. Set up job |
✅ 04:53:23Z |
| 2. Checkout repository |
✅ 04:53:24Z |
| 3. Set up Python 3.11 |
✅ 04:53:25Z |
| 4. Install dependencies |
✅ 04:53:25Z |
| 5. Run test suite |
in_progress sejak 04:53:30Z — 64+ menit dan terus |
Runner nyata ter-assign (GitHub Actions 1000009177), bukan antri. Suite yang sama selesai 346 detik di Windows lokal, dan daftar kegagalannya stabil (19, identik dengan main).
Diperparah: grep -rn "timeout-minutes" .github/workflows/ → kosong. Tak satu pun workflow punya timeout. Jadi setiap hang membakar 6 jam penuh menit Actions sebelum mati, dikali CodeLens CI + CodeLens Quality Gate (4 matriks Python) + CodeLens SARIF per push.
Konteks
Tujuan
CI gagal cepat dan terbaca, bukan hang 6 jam lalu diam — sehingga hang-nya bisa didiagnosis dan gate merge kembali berarti.
Constraint
timeout-minutes BUKAN fix root cause — ia guard yang membuat hang terlihat dan murah. Jangan tutup issue ini hanya karena timeout ditambahkan; hang-nya harus diketahui penyebabnya.
- Ambil batas dari fakta terukur: suite lokal 346 detik. Batas job yang longgar tapi waras (mis. 20-30 menit) mengubah kebakaran 6 jam jadi kegagalan cepat berlog.
- Jangan mask hang dengan menghapus/skip test sampai penyebabnya diketahui — itu menukar gate palsu dengan gate palsu yang lain.
pytest-timeout tidak terpasang (--timeout → unrecognized arguments). Kalau dipakai untuk melokalisasi test yang hang, tambahkan sebagai dev-dep secara eksplisit.
Definition of Done
Mengapa (falsifiable — diverifikasi 2026-07-17)
Gate CI CodeLens mati total, dan sudah mati berhari-hari. Tak ada yang menyadarinya karena kegagalannya diam.
gh run list --workflow "CodeLens CI" --limit 60→ NOL sukses. Semuacancelled, mundur setidaknya sampai 2026-07-14.cancelleditu menyesatkan — tak ada manusia yang membatalkannya. Buktinya durasi:6 jam 0 menit 18 detik — itu batas keras job GitHub. Job-nya hang sampai dibunuh platform, lalu ditandai
cancelled.Di mana hang-nya (run 29555933312, PR #298, diperiksa saat masih hidup):
Runner nyata ter-assign (
GitHub Actions 1000009177), bukan antri. Suite yang sama selesai 346 detik di Windows lokal, dan daftar kegagalannya stabil (19, identik denganmain).Diperparah:
grep -rn "timeout-minutes" .github/workflows/→ kosong. Tak satu pun workflow punya timeout. Jadi setiap hang membakar 6 jam penuh menit Actions sebelum mati, dikaliCodeLens CI+CodeLens Quality Gate(4 matriks Python) +CodeLens SARIFper push.Konteks
BlobNotFound) dan saat job dibunuh di 6 jam log-nya juga tak berguna — tanpatimeout-minutestak ada cara mendiagnosis hang-nya. Ini yang bikin masalahnya awet: setiap investigasi butuh nunggu 6 jam untuk log yang lalu hilang.CodeLens SARIFgagal terpisah di setiap runmaintermasuk61d70a8(tipmainsekarang) — bug lain, jangan dicampur.<0.26karena segfault, dan fix(parser): make python_parser.py keep_alive strategy tree-sitter 0.26-safe #267).Tujuan
CI gagal cepat dan terbaca, bukan hang 6 jam lalu diam — sehingga hang-nya bisa didiagnosis dan gate merge kembali berarti.
Constraint
timeout-minutesBUKAN fix root cause — ia guard yang membuat hang terlihat dan murah. Jangan tutup issue ini hanya karena timeout ditambahkan; hang-nya harus diketahui penyebabnya.pytest-timeouttidak terpasang (--timeout→unrecognized arguments). Kalau dipakai untuk melokalisasi test yang hang, tambahkan sebagai dev-dep secara eksplisit.Definition of Done
timeout-minutes; run yang hang mati dalam menit, bukan 6 jam, dan log-nya terbacaCodeLens CImenyelesaikan satu run sampai conclusion nyata (success/failure) — bukancancelled