변경 사항 단순화하기
변경 사항 작성자가 수행하는 편집 과정입니다: PR을 열기 전에 자신의 브랜치에서 실행하고, 대규모 수정 사항을 푸시하기 전에 다시 실행하세요. 이 과정은 리뷰보다 선행하며 결코 리뷰를 대체하지 않습니다. 태스크의 범위와 수정 권한을 상속받습니다. 리뷰 전용 요청의 경우 수정 사항 대신 분석 결과를 생성합니다. 선택된 유지 관리자 워크플로우가 게시, 리뷰 및 병합을 담당합니다.
Diff는 제안 사항입니다. 통과하는 테스트는 동작한다는 것을 보여줄 뿐, 아키텍처나 모든 추가된 테스트가 필요하다는 것을 의미하지는 않습니다.
규칙: 루트 AGENTS.md의 "설계 우선순위", "단일 소유자, 완전한 전환", "런타임 및 코드 보호 장치", "제품 및 검증" 섹션과 가장 가까운 범위의 AGENTS.md를 따릅니다. 2단계와 3단계는 모든 규칙을 모든 변경된 파일에 적용합니다.
1. 가장 작은 완전한 수정 도출하기
사용자의 결과와 최신 범위, 대상 병합 기준선 대비 전체 Diff, 그리고 보존된 증거를 읽습니다. 이미 수집된 세션 컨텍스트를 재사용합니다. 그런 다음 질문합니다:
기준선에서 시작하여, 이미 존재하는 소유자를 사용한 가장 작은 완전한 수정은 무엇인가요? 이 아키텍처를 여전히 도입하고 싶을까요?
가장 큰 추가된 모듈, 상태, 어댑터 및 테스트 scaffolding을 먼저 검사합니다. 직접 호출자와 관련 기록을 읽습니다: 겉보기에 중복된 동작은 배포된 구성이나 이전 회귀를 보호할 수 있습니다. 범위는 변경된 시스템과 그것이 대체하는 경로입니다.
모든 변경된 코드 조각을 명시된 결과로 추적합니다. 다른 목표를 제공하는 코드 조각은 이 변경에서 제외합니다: 삭제하거나 별도의 PR로 이동합니다.
비기계적인 변경 라인 수를 셉니다. 약 800라인 이상이거나 복잡한 로직의 경우 약 500라인 이상이면, 먼저 배포할 수 있는 가장 작은 일관된 단계를 명명하고 변경 사항을 해당 단계로 축소합니다.
다음을 각각 한 문장으로 진술할 수 있고, 모든 남은 코드 조각이 그 수정을 제공할 때 완료됩니다: 결함, 필요한 불변 조건, 가장 작은 완전한 수정.
2. 불필요한 아키텍처 제거하기
Diff에서 지원되는 각 단순화를 적용합니다:
- 단일 결정 소유자. 반복되는 호출자 측 정책을 해당 결정을 소유하는 연산으로 이동합니다. 영향을 받는 호출자를 마이그레이션하고 이전 구현, 내보내기 및 수정 브랜치를 제거합니다. 서로 다른 전송 방식은 자체 전달 계약을 유지하면서 결정을 공유할 수 있습니다.
- 기존 상태 우선. 새로운 스키마, 관리자, 캐시 및 결합된 표현에 대해 이의를 제기합니다. 수명, 권한, 원자성 및 정리가 적합할 때 기존 소유자를 재사용합니다. 진정으로 불필요한 경우에만 제안된 마이그레이션을 제거합니다. 업데이트 후에도 기존 구성과 상태가 계속 작동하도록 하는 마이그레이션은 유지합니다. 새로운 상태는 그것을 의미하는 필드에 속합니다.
- 중복 경로 삭제. 병렬 렌더러, 중복 파서, 결과를 얻기 위해서만 사용되는 가짜 수명주기 연산, 호출자가 이미 얻을 수 있는 파생 상태, 그리고 단순히 전달하거나 이름을 바꾸는 래퍼를 제거합니다. 이전 경로 주변의 폴백 모드보다는 하나의 더 간단한 표현을 선호합니다.
- 마지막에 다듬기. 모든 변경된 코드 조각에서, 주변 파일의 유지 관리자가 작성할 내용만 유지합니다:
- 소유권, 수명주기, 순서 또는 제약 조건을 설명하는 주석;
- 주변 모듈과 일치하고 실제 상태를 보호하는 검사 및
try/catch블록; - 캐스트를 세탁하지 않는 실제 타입 (
as any,as unknown as T, 확장 후 단언); - 도메인 의미를 추가하거나, 중복을 제거하거나, 제어 흐름을 단순화하는 변수 및 헬퍼;
- 명명된 출하 계약 및 제거 계획에 의해 뒷받침되는 shim, 별칭, 재시도 및 폴백;
- 주변 파일과 일치하는 명명, 제어 흐름, 가져오기 및 서식.
제안의 우연한 설계가 아닌 요청된 수정 및 지원되는 동작을 보존합니다. 실제 도메인 차이점과 정당화된 공개 호환성은 유지합니다. 기록(git log -p -S <symbol>)이 경로의 목적을 불분명하게 남겨두면, 그것을 유지하고 보고합니다. 새로운 제품 결정, 계약 위반, 관련 없는 정리 및 파괴적인 브랜치 교체를 소유자를 위한 분석 결과로 보고합니다.
3. 실패를 위한 테스트 유지하기
추가되거나 변경된 각 테스트 그룹과 설정 헬퍼에 대해, 그것이 포착하는 구별 가능한 관찰 가능한 실패를 명명합니다.
실제 결함 및 뚜렷한 경계에 대한 회귀 테스트를 유지합니다: 순서, 취소, 오래된 권한, 재시작, 거부, 실제 오류 및 영향을 받는 소비자 차이점. 실제 경계를 독립적으로 보호하는 정적 계약 가드는 유지합니다. 동일한 경로의 중복 케이스, 모조 에코, 우연한 필드 복사 또는 표현 어설션, 정적으로 정의된 값에 대한 어설션, 제거된 로직이 사라졌음을 증명하는 테스트, 쓸모없는 구현에 대한 테스트, 그리고 테스트 전용 프로덕션 훅을 제거합니다. 유용한 케이스를 기존 소유자 스위트에 통합합니다.
테스트를 제거해도 남아 있는 어설션, 실제 경계의 커버리지 또는 기준선이 약화되지 않습니다.
남아 있는 모든 테스트 그룹에 명명된 실패가 있을 때 완료됩니다.
4. 더 작은 변경 사항 증명 및 전달하기
편집 내용을 일괄 적용한 다음, 변경된 계약 및 영향을 받는 소비자에 대한 재현 및 집중 검사를 다시 실행합니다. 입력이 변경되지 않은 증거는 재사용합니다. 보존된 재시작, 업그레이드 또는 전송 주장은 적용 가능한 증거가 필요합니다. 기존 워크플로우가 더 광범위한 검사를 선택합니다.
전체 Diff가 검사되고, 모든 규칙이 각 변경된 파일에 대한 판정을 내리고, 지원되는 단순화가 적용되고, 대체된 경로에 도달할 수 없으며, 영향을 받는 동작에 여전히 증거가 있을 때 완료됩니다. 기존 형태가 정당화될 때 변경 사항 없음도 유효한 결과입니다. 삭제 할당량이 아닌 순 코드 감소를 목표로 합니다.
PR 본문 또는 기존 태스크 증거에 보고합니다: 사라진 책임 또는 메커니즘, 여전히 보호되는 동작, 병합 기준선 대비 생산/테스트 델타. 이전 개정판 대비 축소는 전체 변경 델타와 별도로 표시합니다. 필요한 경우 남은 성장 또는 미해결 결정을 명명합니다.
그런 다음 PR을 열거나 업데이트합니다. 이후 수정 후에는 새 변경 사항과 그것이 다루는 소유자만 단순화한 후 푸시합니다.