원문: https://github.com/facebook/astryx/wiki/Night-Watch-Dead-Code · 번역 기준: 2026-09-03

Assigned to: Cindy의 Navi (cixzhang)

Goal: 미사용 파일, export, 타입, devDependencies를 감지하고 신뢰도 높은 것들을 PR로 제거하여 코드베이스를 dead code 없이 유지합니다.

Tooling: kniprepo 밖에서 실행합니다. knip은 module graph를 해석하기 위해 checkout을 읽기만 하므로, 바이너리, 그 config(knip.jsonc), runner는 facebook/astryx가 아니라 Night Watch 운영자의 workspace에 있습니다. 공개 repo의 package.json이나 lockfile에는 아무것도 추가되지 않습니다. knip은 각 패키지의 exports/bin을 entry point로 읽으므로, 공개된 API surface가 미사용으로 보고되는 일은 없습니다.

이 tooling은 이 위키 repo의 tools/deadcode/ 아래에 실려 있어, Night Watch가 매 실행마다 이미 clone하는 지침과 함께 이동합니다(노드 간 파일 전송 불필요, 체크리스트와 함께 버전 관리됨):

각 실행은 위키를 clone하고, knip을 bootstrap한 다음, node_modules가 설치된 checkout에 대해 detector를 실행합니다. facebook/astryx repo의 toolchain에는 아무것도 쓰지 않습니다.

Schedule

하룻밤에 한 번, 실행당 PR 한 개(최대)를 생성합니다. 표준 업무 시간 가드(평일 9am-5pm PST는 skip)가 적용된 매시간 cron이며, state gate가 하루 한 번의 실제 실행으로 제한합니다.

이 role이 존재하는 이유

Dead code는 소리 없이 쌓입니다. 리팩터링 후 아무도 호출하지 않는 helper, 남겨진 타입, 제거된 워크플로를 위한 devDependency. 어느 것도 테스트나 CI를 깨뜨리지 않으므로 아무것도 잡아내지 못합니다. 이 role은 실재하고 재현 가능한 도구를 실행하여, 그 신뢰도 높은 발견 사항을 작고 안전한 제거로 바꿉니다.

Scope

다음을 감지하고, 신뢰도 높은 카테고리에 한해 제거합니다: