프로젝트 소개
RecurSpec은 명령줄 도구의 복구 경로를 테스트하는 초기 단계의 MIT 라이선스 Node.js 패키지입니다. 일반적인 테스트가 단순히 에러 메시지 출력 여부만 확인하는 것과 달리, RecurSpec은 메시지가 제안하는 명령어가 실제로 문제를 해결하는지 검증하여 사용자가 실제로 문제를 해결할 수 있도록 돕습니다.
작동 방식
테스트 케이스는 recurspec.yml 파일에 선언적으로 기술됩니다. 각 케이스는 실행할 명령어, 예상되는 실패(예: 0이 아닌 종료 코드 및 stderr 하위 문자열), 복구 지침의 출처, 그리고 검증 단계를 선언합니다. 검증 단계에서는 원래 명령어를 다시 실행하여 종료 코드가 0인지 확인함으로써, 단순히 조언이 존재하는 것이 아니라 복구 루프가 실제로 닫히는지를 확인합니다.
시작하기
이 프로젝트는 Node.js 22 이상과 pnpm이 필요합니다. 개발 의존성으로 설치한 후 세 가지 핵심 명령어를 통해 사용합니다. 실행 가능한 Node.js 예제가 포함된 시작 구성 파일을 작성하는 init 단계, validate 단계, 그리고 test 단계입니다. 번들된 데모에는 성공하는 복구 경로와 실패하는 복구 경로가 의도적으로 섞여 있습니다.
명령줄 인터페이스
CLI는 test, validate, init, explain, discover 명령어를 제공합니다. test 명령어는 케이스나 태그 선택, 리포트 형식(human, json, junit, markdown) 선택, 상세 출력, fail-fast 동작, 시드 값, 드라이 런 옵션을 지원합니다. 종료 코드는 모두 통과 시 0, 계약 실패 시 1, 구성 또는 사용 오류 시 2로 정의됩니다. JSON, JUnit, Markdown 리포터는 CI 파이프라인과 풀 리퀘스트 댓글용으로 설계되었습니다. runRecurSpec을 통해 프로그래밍 방식의 API도 사용할 수 있습니다.
탐지 대상
이 도구는 에러 메시지와 지침 사이의 불일치를 타겟팅합니다. 더 이상 존재하지 않는 제안 명령어, 불완전한 복구 단계, 원래 문제는 해결하지 못한 채 성공하는 명령어, 추가 에러로 이어지는 조언, 지침 루프, 그리고 모호하거나 안전하지 않은 지침 등이 포함됩니다.
재시도 및 목표 복구
두 가지 복구 형태를 지원합니다. 재시도(retry) 스타일 복구에서는 차단 요소를 제거함으로써 두 번째 시도에서 원래 명령어가 성공하게 합니다. 목표(goal) 복구에서는 제안된 명령어가 실패한 작업을 완전히 대체하여, 원래 명령어를 다시 실행하면 여전히 실패하더라도 사용자의 목표가 달성되도록 합니다. README에 따르면 Cargo 케이스 작업 과정에서 이러한 구분이 드러났으며, 이는 목표 기반 검증으로 이어졌습니다.
실제 환경 호환성
호환성 스위트에는 Git, Cargo, npm에서 추출한 케이스들이 포함되어 있습니다. Git identity 누락, 브랜치 삭제, 발산하는 풀 조언, 기존 Cargo 프로젝트 디렉토리, 누락된 npm 스크립트 등의 상황을 다룹니다. 결과에는 모호한 조언(상호 배타적이거나 필수적인 여러 명령어), 목표 복구, 그리고 올바르게 무시된 정보성 메시지 등이 포함됩니다. 스위트 실행 시 누락된 도구는 건너뜁니다.
안전 모델
복구 명령어는 실행 전 파싱 및 검사 과정을 거칩니다. 쉘 체이닝, 리다이렉션, 명령어 치환 및 알려진 파괴적 명령어는 기본적으로 차단되며, 각 케이스는 격리된 임시 작업 공간에서 실행됩니다. README에서는 로컬 백엔드가 OS 수준의 네트워크 샌드박싱을 강제하지 않으므로, 컨테이너 백엔드가 구현되기 전까지 deny-network 설정은 권고 사항으로 남는다고 명시하고 있습니다.
제한 사항 및 상태
문서에는 세 가지 제한 사항이 나열되어 있습니다. 로컬 백엔드의 OS 수준 네트워크 격리 부재, 대화형 TTY 프로그램 테스트 시 스크립트된 표준 입력의 필요성(전체 PTY 지원은 향후 과제), 그리고 grep 가능한 조언을 출력하는 도구에 대한 의존성(모호하거나 누락된 조언은 추측하지 않고 보고함)입니다. RecurSpec은 초기 단계로 설명되며, 1.0 릴리스 전까지 구성 및 공개 API가 변경될 수 있습니다. 구성, 추출, 안전, 리포터 및 검색에 대한 별도의 문서가 제공됩니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.