입력 하나가 실패했는데 프로젝트 전체를 다시 읽으면 정보가 많아져도 원인은 더 흐려질 수 있다. 북극성의 과거 부분 수리에서는 오류가 난 위치와 직접 호출부부터 읽고 근거가 부족할 때 범위를 넓혔다. 그 자동수리 경로는 지금 제거돼 있지만 조사를 좁히는 계약은 제작 기록으로 남길 수 있다.
오류 코드는 길잡이이지 원인 확정이 아니다
repairContext는 오류 코드·cause·tool·message와 명시된 source 위치에서 관련 후보를 찾는다. 입력·프레임·파일·이동 같은 경로 표는 시작점을 좁히는 힌트다. 같은 ELEMENT_OBSCURED라도 실제 덮개, 화면 갱신, 오래된 문서가 다를 수 있으므로 그 함수가 원인이라고 곧바로 결정하지 않는다.
후보는 실제 manifest에 있는 파일만 남기고 제한된 수를 고른다. 실패 검사 피드백에 적힌 위치와 이미 바뀐 파일도 우선한다. 후보가 비어 있으면 정확한 symbol이나 좁은 문자열 검색부터 시작할 수 있다. 첫 조사가 틀렸다면 직접 관련된 모듈을 한 단계씩 넓혀야 한다. 모든 파일을 한 번에 보내는 것과 처음 후보 안에서만 무조건 고치는 것은 둘 다 피하려 한 선택이었다.
조각에는 현재 파일의 해시를 함께 남긴다
초기 설명은 anchor 주변의 줄과 현재 전체 파일 해시를 묶는다. 조각은 함수 전체가 아닐 수도 있다. 일반 경로와 오래된 번들 템플릿 같은 특수 경로의 줄 수·문자 제한도 다르다. 작은 창을 읽었다는 사실을 파일 전체 의미를 이해했다는 말로 바꾸지 않는다.
추가 조회는 정확한 경로와 symbol 또는 line을 요청하고 제한된 앞뒤 범위를 돌려준다. 해시는 이후 수정안이 어느 원본을 기준으로 했는지 확인하는 용도다. 해시가 있다고 조각이 충분하거나 원인을 맞췄다는 증거가 생기는 것은 아니다. 부족한 호출 조건이나 예외 흐름은 그다음 좁은 조회로 보완해야 한다.
전체를 적게 보내는 것과 검사를 적게 하는 것은 다르다
조사 입력을 줄여도 원본 보관과 독립 검사는 전체 변경 범위를 확인해야 한다. 당시 설계는 모델의 조각 수정안과 호스트의 검사·빌드·설치·되돌림을 나눴다. 한 문장을 고쳤다고 그 문장만 시험하고 나머지는 안전하다고 추정하지 않았다.
applyFocusedPatch는 경로·기준 해시·고유 before 조각을 검증한 뒤 쓰기를 시작한다. 여러 파일을 쓰는 전체가 하나의 장애 원자 트랜잭션이라는 보장은 아니다. 순차 쓰기 실패와 복구는 호스트의 다른 책임이다. 작은 변경이라는 말이 검증 기준을 낮추거나 실제 저장 실패를 숨기는 수식어가 되면 안 된다.
실패한 검사가 새로운 조사 근거가 됐다
과거 부분 수리 기록에는 새 소스 사본에서 출력 폴더나 정식 fixture가 없어 검사가 실패한 경우가 있다. 관련 테스트 함수를 읽는 권한과 테스트를 바꾸는 권한을 구별해 문제를 조사했다. 검사를 통과시키려고 기존 기대 조건을 지우는 방식으로 설명하지 않았다.
안내 한 문장 수정의 성공도 남아 있지만 실제 편집기 오류의 난도와 같은 표본으로 합쳐 일반 절감률을 만들지 않았다. 소스 조사와 브라우저 재개·최종 답변의 사용량도 각 범위로 기록했다. 실패가 어디서 났는지 보존해야 다음 작업이 전체 코드부터 같은 조사를 반복하지 않을 수 있다.
현재 외부 Codex 작업에도 조사 원칙만 가져온다
내장 CLI와 자동수리 런타임은 제거된 상태다. 이 글을 쓰며 과거 수리 모델을 호출하거나 설치를 다시 수행하지 않았다. 현재의 국소 코드 조사에 적용할 수 있는 것은 정확한 실패 조건부터 읽고 관련 근거를 넓히며 독립 검증을 유지하는 순서다. 과거 기능이 지금 자동 실행된다고 소개하지 않는다.
공유 모듈은 오류 단계와 구조를 작은 합성 보고서로 묶을 뿐 소스를 고치지 않는다. 실제 원고와 계정 정보를 통째로 보내야 좋은 진단이 되는 것도 아니다. 나는 조사에 필요한 정보와 결과를 확정할 검증을 서로 다른 책임으로 공개해 독자가 자기 프로그램의 오류를 더 정확하게 설명할 수 있게 하고 싶었다.