intentpatch 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.ko.md +28 -22
  2. package/README.md +24 -20
  3. package/dist/application/ports/analysis-rule.d.ts +2 -0
  4. package/dist/application/ports/analysis-rule.d.ts.map +1 -1
  5. package/dist/application/ports/code-structure-extractor.d.ts +2 -0
  6. package/dist/application/ports/code-structure-extractor.d.ts.map +1 -1
  7. package/dist/application/rules/duplicate-implementation-rule.d.ts +1 -1
  8. package/dist/application/rules/duplicate-implementation-rule.d.ts.map +1 -1
  9. package/dist/application/rules/duplicate-implementation-rule.js +6 -3
  10. package/dist/application/rules/duplicate-implementation-rule.js.map +1 -1
  11. package/dist/application/rules/missing-test-change-rule.js +2 -2
  12. package/dist/application/rules/missing-test-change-rule.js.map +1 -1
  13. package/dist/application/rules/public-api-compatibility-rule.d.ts +1 -1
  14. package/dist/application/rules/public-api-compatibility-rule.d.ts.map +1 -1
  15. package/dist/application/rules/public-api-compatibility-rule.js +8 -4
  16. package/dist/application/rules/public-api-compatibility-rule.js.map +1 -1
  17. package/dist/application/services/analyze-code-structure.d.ts.map +1 -1
  18. package/dist/application/services/analyze-code-structure.js +18 -4
  19. package/dist/application/services/analyze-code-structure.js.map +1 -1
  20. package/dist/application/services/analyze-test-changes.d.ts +1 -1
  21. package/dist/application/services/analyze-test-changes.d.ts.map +1 -1
  22. package/dist/application/services/analyze-test-changes.js +28 -2
  23. package/dist/application/services/analyze-test-changes.js.map +1 -1
  24. package/dist/application/services/trace-intent-to-files.d.ts +10 -0
  25. package/dist/application/services/trace-intent-to-files.d.ts.map +1 -0
  26. package/dist/application/services/trace-intent-to-files.js +20 -0
  27. package/dist/application/services/trace-intent-to-files.js.map +1 -0
  28. package/dist/application/use-cases/analyze-changes.js +6 -6
  29. package/dist/application/use-cases/analyze-changes.js.map +1 -1
  30. package/dist/domain/code-structure.d.ts +2 -0
  31. package/dist/domain/code-structure.d.ts.map +1 -1
  32. package/dist/domain/code-structure.js +2 -0
  33. package/dist/domain/code-structure.js.map +1 -1
  34. package/dist/infrastructure/typescript/typescript-code-structure-extractor.d.ts.map +1 -1
  35. package/dist/infrastructure/typescript/typescript-code-structure-extractor.js +79 -4
  36. package/dist/infrastructure/typescript/typescript-code-structure-extractor.js.map +1 -1
  37. package/dist/infrastructure/typescript/typescript-symbol-extractor.js +19 -7
  38. package/dist/infrastructure/typescript/typescript-symbol-extractor.js.map +1 -1
  39. package/dist/presentation/html/html-report.d.ts.map +1 -1
  40. package/dist/presentation/html/html-report.js +59 -2
  41. package/dist/presentation/html/html-report.js.map +1 -1
  42. package/package.json +1 -1
package/README.ko.md CHANGED
@@ -26,17 +26,18 @@ LLM 없이도 재현 가능한 분석을 제공하고, AI 설명 기능은 선
26
26
  ```bash
27
27
  git clone https://github.com/xx2xxjaeil/intent-patch.git
28
28
  cd intent-patch
29
- npx --yes intentpatch@0.9.2 analyze --base '1cc489b^' --head 1cc489b --format html --output intentpatch-report.html
29
+ npx --yes intentpatch@0.10.0 analyze --base '1cc489b^' --head 1cc489b --format html --output intentpatch-report.html
30
30
  ```
31
31
 
32
32
  생성된 `intentpatch-report.html`을 로컬 브라우저에서 여세요. 이 변경에서는 나중에 수정된
33
33
  공개 API 위험과 중복 코드 후보가 보고됩니다. 판단 근거는 [실제 변경 사례](./docs/real-world-evaluation.md)에
34
34
  정리했고, [저장된 HTML 보고서](./docs/examples/intent-input-change.html)도 확인할 수 있습니다.
35
+ [계약 경로를 연결한 예시](./docs/examples/intent-trace.html)에서는 요청-변경 파일 화면을 볼 수 있습니다.
35
36
  GitHub에서는 HTML 화면 대신 소스가 보일 수 있습니다.
36
37
 
37
38
  ## 빠른 시작
38
39
 
39
- Node.js 20 이상과 Git이 설치되어 있어야 합니다. 분석할 저장소에서 npm에 공개된 v0.9.2를
40
+ Node.js 20 이상과 Git이 설치되어 있어야 합니다. 분석할 저장소에서 npm에 공개된 v0.10.0을
40
41
  전역 설치 없이 실행할 수 있습니다.
41
42
 
42
43
  ```bash
@@ -87,7 +88,7 @@ jobs:
87
88
 
88
89
  - name: Analyze pull request
89
90
  id: intentpatch
90
- uses: xx2xxjaeil/intent-patch@v0.9.2
91
+ uses: xx2xxjaeil/intent-patch@v0.10.0
91
92
  with:
92
93
  fail-on: high
93
94
 
@@ -99,7 +100,9 @@ jobs:
99
100
  path: intentpatch-report
100
101
  ```
101
102
 
102
- Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.9.2에는 해석 가능한
103
+ Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.10.0에는 HTML 보고서의
104
+ 요청-변경 파일 연결, 공개 클래스 메서드 호환성 검사, 정적 import로 연결된 변경 테스트 표시,
105
+ 메서드와 지역 변수 이름만 다른 중복 구현 탐지가 추가됐습니다. v0.9.2에는 해석 가능한
103
106
  lockfile의 루트 의존성 귀속, enum·클래스 메서드 분석, 정적 CommonJS 객체 export 추적,
104
107
  그래프 필터·탐색, 외부 평가 사례 확장이 포함됩니다. v0.9.1에는 HTML diff
105
108
  미리보기, 확대된 외부 평가와 정적 CommonJS 이름 export 삭제 탐지가 포함됩니다. v0.9.0에는 Yarn
@@ -183,7 +186,7 @@ lockfile 변경, 최상위 TypeScript·JavaScript 심볼과 공개 export, 기
183
186
  - working tree 분석 시 untracked 파일 포함
184
187
  - 터미널용 텍스트 보고서
185
188
  - 후속 도구 연동을 위한 JSON 보고서
186
- - 요약 카드, 경로·심각도 필터, finding, 테스트 신호와 탐색 가능한 영향 그래프를 담은 단일 HTML 보고서
189
+ - 요약 카드, 경로·심각도 필터, finding, 테스트 신호, 요청-변경 파일 연결 화면과 탐색 가능한 영향 그래프를 담은 단일 HTML 보고서
187
190
  - 외부 CDN이나 JavaScript dependency가 필요 없는 인라인 CSS·SVG 시각화
188
191
  - production·development dependency 추가 탐지
189
192
  - dependency 삭제, 버전 변경, 섹션 이동 탐지
@@ -207,10 +210,10 @@ lockfile 변경, 최상위 TypeScript·JavaScript 심볼과 공개 export, 기
207
210
  - 심볼 추가·수정·삭제 탐지와 소스 위치 표시
208
211
  - 직접 `export`된 선언, 로컬 export 목록과 외부 re-export를 공개 심볼 근거에 보존
209
212
  - 공개 심볼 삭제와 `export` 해제를 호환성 위험 `high` finding으로 탐지
210
- - 공개 함수의 기존 호출 시그니처 제거, 공개 인터페이스의 호환성 파괴, 해석 가능한 공개 객체 타입 별칭의 구성원 삭제를 `high` finding으로 탐지
211
- - TypeScript가 현재 함수 타입으로 기존 호출을 수용할 수 있다고 확인한 경우 시그니처 변경 경고를 제외
213
+ - 공개 함수·클래스 메서드의 기존 호출 시그니처 제거, 공개 인터페이스의 호환성 파괴, 해석 가능한 공개 객체 타입 별칭의 구성원 삭제를 `high` finding으로 탐지
214
+ - TypeScript가 현재 함수·메서드 타입으로 기존 호출을 수용할 수 있다고 확인한 경우 시그니처 변경 경고를 제외
212
215
  - 구현이 추가된 기존 overload는 제외하고 기존 overload가 사라진 경우만 함수 계약 변경으로 판정
213
- - 공백과 주석을 제외한 구현 토큰이 같은 신규 함수와 기존 함수를 재사용 후보 `medium` finding으로 탐지
216
+ - 신규 TypeScript·JavaScript 함수와 TypeScript 클래스 메서드의 동일 구현을 재사용 후보 `medium` finding으로 탐지. 단순 지역 식별자 이름 변경도 비교
214
217
  - 신규 인터페이스를 명시적으로 구현하는 클래스가 하나뿐이면 추상화 검토 `low` finding으로 탐지
215
218
  - rename 전후 파일 경로를 사용한 심볼 비교
216
219
  - 구문 오류가 있는 파일을 누락시키지 않고 분석 불가 근거로 보고
@@ -223,18 +226,19 @@ lockfile 변경, 최상위 TypeScript·JavaScript 심볼과 공개 export, 기
223
226
  - 해결하지 못한 상대 import와 읽기·파싱 실패를 분석 근거로 보존
224
227
  - working tree의 tracked·untracked 파일 또는 지정한 head ref를 동일한 결과점에서 분석
225
228
  - `.intentpatch.json`에 요청 의도, 예상 경로, 허용 경로와 변경량 예산 선언
229
+ - HTML에서 변경 파일을 계약의 예상·허용 경로와 연결하고 범위 밖 파일을 구분
226
230
  - CLI 요청 문서 또는 선택적으로 GitHub PR 본문에서 요청 의도를 입력
227
231
  - 예상·허용 패턴을 벗어난 변경 파일을 파일별 `medium` finding으로 탐지
228
232
  - 변경 파일 수와 측정 라인 예산 초과를 수치 근거가 있는 `low` finding으로 탐지
229
- - Contract가 지정한 소스·테스트 경로를 분류하고 파일명 또는 명시적 매핑으로 관련 변경 연결
233
+ - Contract가 지정한 소스·테스트 경로를 분류하고 명시적 매핑, 정적 import 관계 또는 파일명으로 관련 변경 연결
230
234
  - 테스트 변경 수와 추가·삭제 수를 별도의 분석 사실로 집계
231
235
  - 관련 테스트 변경이 없는 소스 파일을 `medium` finding으로 탐지
232
236
  - `*`, `**`, `?` 기반의 저장소 상대 경로 패턴 지원
233
237
  - Pull Request·push commit 범위를 자동 판별하는 GitHub Action
234
238
  - GitHub Job Summary, workflow annotation, JSON·HTML artifact용 보고서 생성
235
239
 
236
- lockfile 귀속은 해석 가능한 루트 dependency 경로로 제한됩니다. JavaScript 중복 구현 분석,
237
- 메서드 시그니처 호환성 검사와 AI 리뷰 기능은 아직 구현되지 않았습니다.
240
+ lockfile 귀속은 해석 가능한 루트 dependency 경로로 제한됩니다. 프로젝트 전체 TypeScript
241
+ 호환성 검사와 선택형 AI 리뷰 기능은 아직 구현되지 않았습니다.
238
242
 
239
243
  ## 상세 사용법
240
244
 
@@ -334,11 +338,11 @@ intentpatch init \
334
338
  - `tests.related`: 소스 파일의 정확한 경로와 관련 테스트 경로 패턴의 명시적 연결.
335
339
  해당 소스에는 파일명 기반 자동 연결 대신 이 설정을 적용합니다.
336
340
 
337
- 명시적 연결이 없으면 테스트 연결은 결정적인 결과를 위해 파일명을 사용합니다. 예를 들어 `src/user.ts`는
341
+ 명시적 연결이 없으면 테스트 연결에 정적 import 관계와 파일명을 사용합니다. 예를 들어 `src/user.ts`는
338
342
  `tests/user.test.ts`, `user.spec.ts`, `user.integration.test.ts` 같은 변경과 연결됩니다.
339
343
  이름이 다른 통합 테스트는 `tests` 객체 안에
340
344
  `"related": { "src/user.ts": ["tests/account-deletion*.test.ts"] }`처럼 지정할 수 있습니다.
341
- `tests.include`에 속한 변경 테스트만 인정합니다.
345
+ `tests.include`에 속한 변경 테스트만 인정합니다. import 관계는 관련성의 근거이며 실제 테스트 커버리지를 증명하지는 않습니다.
342
346
 
343
347
  기본 파일 대신 별도 계약을 사용하려면 `--config`를 지정합니다. 상대 경로는 `--cwd`를 기준으로
344
348
  해석합니다.
@@ -408,7 +412,7 @@ MEDIUM Change outside expected scope
408
412
 
409
413
  MEDIUM Source change without matching test change
410
414
  src/payment/billing.ts · tests/missing-related-change
411
- src/payment/billing.ts changed without a changed test sharing the same basename.
415
+ src/payment/billing.ts changed without a changed test sharing its basename or statically importing it.
412
416
 
413
417
  MEDIUM New function duplicates existing implementation
414
418
  src/user/service.ts · structure/duplicate-implementation
@@ -486,7 +490,7 @@ npm pack --dry-run
486
490
 
487
491
  ## 릴리스
488
492
 
489
- `v0.9.2`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
493
+ `v0.10.0`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
490
494
  워크플로가 다음 작업을 순서대로 수행합니다.
491
495
 
492
496
  1. 태그·버전·기본 브랜치 포함 여부 검증
@@ -584,13 +588,13 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
584
588
  - 인터페이스 속성 타입은 기존 타입이 같거나 지원하는 객체 리터럴 안에 선택 필드만 추가된
585
589
  경우(`Readonly` 포함)에만 호환된다고 판단합니다. 다른 중첩 타입 변경은 호환을 단정하지
586
590
  않고 검토 경고를 유지합니다.
587
- - 중복 구현 후보는 새로 추가된 최상위 함수와 기존 최상위 함수의 토큰이 공백·주석을 제외하고
588
- 완전히 같으며 본문이 12토큰 이상일 때만 보고합니다. 식별자 이름이 바뀐 유사 코드, 메서드,
589
- 의미적으로만 같은 구현은 탐지하지 않습니다.
591
+ - 중복 구현 후보는 새 최상위 함수 또는 이름 있는 TypeScript 클래스 메서드와 기존 함수·메서드의
592
+ 본문이 12토큰 이상일 때 비교합니다. 공백·주석을 뺀 토큰 일치와 단순 매개변수·지역 변수 이름
593
+ 정규화를 지원합니다. 중첩 스코프·구조 분해·다른 외부 호출과 의미만 같은 별도 구현은 추정하지 않습니다.
590
594
  - 단일 구현 추상화는 새 인터페이스를 `implements`로 명시한 이름 있는 클래스가 정확히 하나일 때만
591
595
  보고합니다. TypeScript의 구조적 구현, factory 반환 타입과 런타임 등록은 계산하지 않습니다.
592
596
  - 계산된 이름의 메서드, TypeScript 변수 선언과 중첩 선언은 아직 심볼 분석 대상이 아닙니다.
593
- 공개 메서드 삭제는 보고하지만 메서드 시그니처 호환성은 검사하지 않습니다.
597
+ 이름 있는 공개 메서드는 공개 함수와 같은 보수적인 시그니처 호환성 검사를 사용합니다.
594
598
  - 선언 내부의 포맷이나 주석 변경도 심볼 수정으로 집계될 수 있습니다.
595
599
  - 영향 분석은 JS/TS 소스의 정적 `import`, side-effect import, `export ... from`,
596
600
  `import = require()` 및 문자열 `require()`·`import()`를 대상으로 합니다. 로컬 별칭은 가장 가까운 `tsconfig.json` 또는
@@ -613,9 +617,11 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
613
617
  0줄이라고 간주하지 않지만, 해당 파일의 크기를 라인 예산에 포함하지도 않습니다.
614
618
  - 테스트 분석은 실행 결과나 코드 커버리지를 측정하지 않고 Contract에 지정된 변경 파일만
615
619
  비교합니다.
616
- - 관련 테스트는 기본적으로 파일명으로 연결하지만 정확한 소스 경로에 `tests.related`를
617
- 선언하면 이름이 다른 테스트도 지정할 수 있습니다. 이는 테스트 실행이나 실제 커버리지 측정이
618
- 아니라 사용자가 선언한 연결입니다.
620
+ - 관련 변경 테스트는 정적 import 경로 또는 파일명으로 연결하지만 정확한 소스 경로에
621
+ `tests.related`를 선언하면 그 매핑을 우선합니다. 삭제된 소스는 현재 import 그래프에 없으므로
622
+ 명시적 매핑이나 파일명을 사용합니다. 이는 테스트 실행이나 실제 커버리지 측정이 아닙니다.
623
+ - HTML 요청-변경 연결 화면은 명시된 Change Contract 경로와 변경 파일의 관계만 보여줍니다.
624
+ 자연어 요청만으로 예상 경로나 기능 영역을 추론하지 않습니다.
619
625
  - HTML 영향 그래프는 결정적인 두 열 레이아웃이며 노드를 누르면 보고서의 관련 행으로 이동합니다.
620
626
  경로·심각도 필터는 그래프의 노드와 연결선에도 적용됩니다. 버튼·키보드로 확대·이동하고 드래그로
621
627
  이동할 수 있습니다. 필터는 노드를 숨길 뿐 레이아웃을 재배치하지 않습니다.
package/README.md CHANGED
@@ -23,18 +23,19 @@ Clone the repository, then run one analysis command against a real change in its
23
23
  ```bash
24
24
  git clone https://github.com/xx2xxjaeil/intent-patch.git
25
25
  cd intent-patch
26
- npx --yes intentpatch@0.9.2 analyze --base '1cc489b^' --head 1cc489b --format html --output intentpatch-report.html
26
+ npx --yes intentpatch@0.10.0 analyze --base '1cc489b^' --head 1cc489b --format html --output intentpatch-report.html
27
27
  ```
28
28
 
29
29
  Open `intentpatch-report.html` locally. This case reports a public-API risk and a duplicate-code
30
30
  candidate that were later fixed; [the case study](./docs/real-world-evaluation.md) explains the
31
31
  review decisions. The [checked-in HTML report](./docs/examples/intent-input-change.html) is the
32
- same real-change example, not a mockup. GitHub may show the HTML source rather than render it.
32
+ same real-change example, not a mockup. A [contract-based example](./docs/examples/intent-trace.html)
33
+ shows the request-to-changed-files map. GitHub may show the HTML source rather than render it.
33
34
 
34
35
  ## Quick start
35
36
 
36
37
  IntentPatch requires Node.js 20 or later and Git. From the repository you want to review, run
37
- the published v0.9.2 CLI without installing it globally:
38
+ the published v0.10.0 CLI without installing it globally:
38
39
 
39
40
  ```bash
40
41
  cd /path/to/repository
@@ -81,7 +82,7 @@ jobs:
81
82
 
82
83
  - name: Analyze pull request
83
84
  id: intentpatch
84
- uses: xx2xxjaeil/intent-patch@v0.9.2
85
+ uses: xx2xxjaeil/intent-patch@v0.10.0
85
86
  with:
86
87
  fail-on: high
87
88
 
@@ -93,7 +94,9 @@ jobs:
93
94
  path: intentpatch-report
94
95
  ```
95
96
 
96
- Pin the action to a released version or an immutable commit SHA. v0.9.2 adds root dependency
97
+ Pin the action to a released version or an immutable commit SHA. v0.10.0 adds a request-to-files
98
+ map in HTML reports, exported class method compatibility checks, static import links to changed
99
+ tests, and duplicate detection for methods and renamed local identifiers. v0.9.2 added root dependency
97
100
  attribution for resolvable lockfile entries, enum and class-method analysis, static CommonJS
98
101
  object exports, graph filtering and navigation, and more external evaluation cases. v0.9.1 added HTML diff previews,
99
102
  expanded external evaluation, and static CommonJS named-export removal checks. v0.9.0 added Yarn workspace
@@ -178,7 +181,7 @@ implementations, single-implementation abstractions, import-graph impact, and re
178
181
  - Distinguish binary files.
179
182
  - Include untracked files in working-tree analysis.
180
183
  - Render terminal-friendly text and machine-readable JSON reports.
181
- - Generate a standalone HTML report containing summary cards, path/severity filters, findings, test signals, and a navigable impact graph.
184
+ - Generate a standalone HTML report containing summary cards, path/severity filters, findings, test signals, a request-to-changed-files map, and a navigable impact graph.
182
185
  - Render the visualization with inline CSS and SVG, without a CDN or runtime JavaScript dependency.
183
186
  - Aggregate findings by `high`, `medium`, and `low` severity.
184
187
  - Return a CI-friendly exit code through `--fail-on`.
@@ -206,10 +209,10 @@ implementations, single-implementation abstractions, import-graph impact, and re
206
209
  - Preserve direct exports, local export lists, and external re-exports as public-symbol evidence.
207
210
  - When the previous package `exports` resolve to maintained source files, limit public API warnings to those entrypoints and their re-exported modules.
208
211
  - Report removed public symbols and removed exports as high-severity compatibility risks.
209
- - Detect removed public function call signatures, incompatible public interface changes, and removed members of resolvable public object type aliases.
210
- - Suppress a public function signature warning when TypeScript confirms that the current callable type still accepts the previous calls.
212
+ - Detect removed public function and class-method call signatures, incompatible public interface changes, and removed members of resolvable public object type aliases.
213
+ - Suppress a public function or method signature warning when TypeScript confirms that the current callable type still accepts the previous calls.
211
214
  - Exclude overloads that only gain an implementation while reporting previously available overloads that disappear.
212
- - Find newly added functions whose normalized implementation matches an existing function.
215
+ - Find newly added TypeScript/JavaScript functions and TypeScript class methods whose implementation matches an existing callable, including safe local-identifier renames.
213
216
  - Report a newly added interface when exactly one class explicitly implements it.
214
217
  - Compare symbols correctly across renamed files.
215
218
  - Preserve syntax errors as analysis evidence instead of silently dropping a file.
@@ -225,16 +228,17 @@ implementations, single-implementation abstractions, import-graph impact, and re
225
228
  - Build the graph at the same result point as the diff: the working tree or the selected head ref.
226
229
  - Include importers that depended on a deleted module in the previous revision, with a distinct previous-import marker.
227
230
  - Read intent, expected paths, allowed paths, and change budgets from `.intentpatch.json`.
231
+ - Show which changed files match expected or allowed contract patterns, and which fall outside them, in the HTML request map.
228
232
  - Accept a request text/Markdown file through the CLI, or opt in to using the PR body in the GitHub Action.
229
233
  - Report each file outside expected and allowed patterns as a medium-severity finding.
230
234
  - Report file-count and measurable-line budget overruns with numeric evidence.
231
- - Classify source and test paths declared by the contract and connect related changes by basename or an explicit mapping.
235
+ - Classify source and test paths declared by the contract and connect related changes by explicit mapping, static import reachability, or basename.
232
236
  - Report test file counts and added or deleted tests as separate facts.
233
237
  - Report source files without a related test change as medium-severity findings.
234
238
  - Support repository-relative `*`, `**`, and `?` path patterns.
235
239
 
236
- Lockfile attribution is limited to resolvable root dependency paths. JavaScript duplicate-implementation
237
- analysis, method signature compatibility checks, and optional AI review are not implemented yet.
240
+ Lockfile attribution is limited to resolvable root dependency paths. Full-project TypeScript
241
+ compatibility checking and optional AI review are not implemented yet.
238
242
 
239
243
  ## CLI usage
240
244
 
@@ -330,7 +334,7 @@ Create `.intentpatch.json` in the repository being analyzed and declare the expe
330
334
  - `tests.related`: optional exact source paths mapped to related test path patterns; an explicit
331
335
  mapping overrides basename matching for that source.
332
336
 
333
- Without an explicit mapping, test matching uses basenames for deterministic results. For example,
337
+ Without an explicit mapping, test matching uses the static import graph and basenames for deterministic results. For example,
334
338
  `src/user.ts` can match changed files such as `tests/user.test.ts`, `user.spec.ts`, or
335
339
  `user.integration.test.ts`. For a differently named integration test, add a mapping:
336
340
 
@@ -338,7 +342,7 @@ Without an explicit mapping, test matching uses basenames for deterministic resu
338
342
  "related": { "src/user.ts": ["tests/account-deletion*.test.ts"] }
339
343
  ```
340
344
 
341
- Place `related` inside the `tests` object. Only changed test files matching `tests.include` count.
345
+ Place `related` inside the `tests` object. Only changed test files matching `tests.include` count. Static import reachability is evidence of a relationship, not proof of test coverage.
342
346
 
343
347
  Use `--config` to select another contract. Relative paths are resolved from `--cwd`:
344
348
 
@@ -407,7 +411,7 @@ MEDIUM Change outside expected scope
407
411
 
408
412
  MEDIUM Source change without matching test change
409
413
  src/payment/billing.ts · tests/missing-related-change
410
- src/payment/billing.ts changed without a changed test sharing the same basename.
414
+ src/payment/billing.ts changed without a changed test sharing its basename or statically importing it.
411
415
 
412
416
  MEDIUM New function duplicates existing implementation
413
417
  src/user/service.ts · structure/duplicate-implementation
@@ -484,7 +488,7 @@ npm pack --dry-run
484
488
 
485
489
  ## Release process
486
490
 
487
- Pushing a tag such as `v0.9.2`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
491
+ Pushing a tag such as `v0.10.0`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
488
492
 
489
493
  1. Validate the tag, package version, and default-branch ancestry.
490
494
  2. Run the full quality suite and inspect the npm package with a dry run.
@@ -545,9 +549,9 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
545
549
  - Interface property compatibility recognizes unchanged types and optional fields added inside
546
550
  supported object literals, including `Readonly` wrappers. Other nested type transformations
547
551
  remain unverified rather than being treated as compatible.
548
- - Duplicate candidates require a newly added top-level function and an existing top-level function to have exactly the same normalized tokens after comments and whitespace are removed, with at least 12 body tokens. Renamed identifiers, methods, and semantically equivalent implementations are not detected.
552
+ - Duplicate candidates require a newly added top-level function or named TypeScript class method and an existing function or method with at least 12 body tokens. Exact tokens match after comments and whitespace are removed; a second comparison normalizes simple parameter and local-variable names. Nested scopes, destructuring, different external calls or property names, and semantically equivalent but structurally different implementations are not inferred.
549
553
  - A single-implementation abstraction is reported only when exactly one named class explicitly uses `implements` for a new interface. Structural implementation, factory return types, and runtime registration are not calculated.
550
- - Computed class methods, TypeScript variable declarations, and nested declarations are not included in symbol analysis. Named public method removal is reported, but method signature compatibility is not checked.
554
+ - Computed class methods, TypeScript variable declarations, and nested declarations are not included in symbol analysis. Named public method signatures use the same conservative, self-contained compatibility check as public functions.
551
555
  - Formatting or comment changes inside a declaration can be counted as symbol modifications.
552
556
  - Impact analysis covers static `import`, side-effect imports, `export ... from`, `import = require()`, and string-literal `require()` and `import()` in JS/TS source files. Local aliases use the nearest `tsconfig.json` or
553
557
  `jsconfig.json`, with relative `extends` support.
@@ -560,8 +564,8 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
560
564
  - Path patterns support only repository-relative `*`, `**`, and `?`; negation and brace expansion are not supported.
561
565
  - `maxLines` sums only measurable added and deleted lines in text files. Binary or unmeasurable files are not treated as zero lines, but their size is not included in the budget.
562
566
  - Test analysis compares only the changed paths declared in the contract; it does not execute tests or measure coverage.
563
- - Related tests are matched by basename unless an exact source path has a `tests.related`
564
- mapping. This is a declared relationship, not inferred test coverage; tests are not executed.
567
+ - Related changed tests are matched by static import reachability or basename unless an exact source path has a `tests.related` mapping. Deleted modules rely on explicit mappings or basenames because the test graph describes the current snapshot. This is a relationship signal, not measured coverage; tests are not executed.
568
+ - The HTML request map connects changed paths to explicit Change Contract patterns. It does not infer feature areas or expected paths from natural-language intent.
565
569
  - The HTML impact graph uses a deterministic two-column layout. Nodes link to report rows; path
566
570
  search and severity filters also narrow graph nodes and edges. Buttons and keyboard controls zoom
567
571
  and pan the view, and pointer dragging pans it. Filtering hides nodes without changing the layout.
@@ -2,6 +2,7 @@ import type { ChangeSet } from "../../domain/change.js";
2
2
  import type { ChangeContract } from "../../domain/change-contract.js";
3
3
  import type { CodeStructureAnalysis } from "../../domain/code-structure.js";
4
4
  import type { Finding } from "../../domain/finding.js";
5
+ import type { ImpactAnalysis } from "../../domain/impact.js";
5
6
  import type { AnalysisTarget } from "../../domain/report.js";
6
7
  import type { SymbolChangeSet } from "../../domain/symbol-change.js";
7
8
  import type { TestChangeAnalysis } from "../../domain/test-change.js";
@@ -11,6 +12,7 @@ export interface AnalysisContext {
11
12
  readonly contract?: ChangeContract;
12
13
  readonly testChanges?: TestChangeAnalysis;
13
14
  readonly symbolChanges?: SymbolChangeSet;
15
+ readonly impact?: ImpactAnalysis;
14
16
  readonly codeStructure?: CodeStructureAnalysis;
15
17
  }
16
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-rule.d.ts","sourceRoot":"","sources":["../../../src/application/ports/analysis-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;CAChE"}
1
+ {"version":3,"file":"analysis-rule.d.ts","sourceRoot":"","sources":["../../../src/application/ports/analysis-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;CAChE"}
@@ -2,7 +2,9 @@ export interface FunctionImplementationFact {
2
2
  readonly name: string;
3
3
  readonly line: number;
4
4
  readonly implementationFingerprint: string;
5
+ readonly structuralFingerprint?: string;
5
6
  readonly tokenCount: number;
7
+ readonly symbolKind?: "method";
6
8
  }
7
9
  export interface InterfaceDeclarationFact {
8
10
  readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"code-structure-extractor.d.ts","sourceRoot":"","sources":["../../../src/application/ports/code-structure-extractor.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC1D,QAAQ,CAAC,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACtD;AAED,MAAM,MAAM,6BAA6B,GACrC,QAAQ,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,CAAC,GACxD,QAAQ,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtD,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,6BAA6B,CAAC;CACtE"}
1
+ {"version":3,"file":"code-structure-extractor.d.ts","sourceRoot":"","sources":["../../../src/application/ports/code-structure-extractor.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC1D,QAAQ,CAAC,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACtD;AAED,MAAM,MAAM,6BAA6B,GACrC,QAAQ,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,CAAC,GACxD,QAAQ,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtD,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,6BAA6B,CAAC;CACtE"}
@@ -1,6 +1,6 @@
1
1
  import type { Finding } from "../../domain/finding.js";
2
2
  import type { AnalysisContext, AnalysisRule } from "../ports/analysis-rule.js";
3
- /** 새 함수의 구현이 기존 함수와 같을 때 재사용 가능성을 검토하도록 알린다. */
3
+ /** 새 함수·메서드의 확인 가능한 동일 구현을 재사용 후보로 보고한다. */
4
4
  export declare class DuplicateImplementationRule implements AnalysisRule {
5
5
  analyze(context: AnalysisContext): Promise<readonly Finding[]>;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate-implementation-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/duplicate-implementation-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,gDAAgD;AAChD,qBAAa,2BAA4B,YAAW,YAAY;IACjD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAgB5E"}
1
+ {"version":3,"file":"duplicate-implementation-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/duplicate-implementation-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE/E,4CAA4C;AAC5C,qBAAa,2BAA4B,YAAW,YAAY;IACjD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAoB5E"}
@@ -1,11 +1,13 @@
1
- /** 새 함수의 구현이 기존 함수와 같을 때 재사용 가능성을 검토하도록 알린다. */
1
+ /** 새 함수·메서드의 확인 가능한 동일 구현을 재사용 후보로 보고한다. */
2
2
  export class DuplicateImplementationRule {
3
3
  async analyze(context) {
4
4
  return (context.codeStructure?.duplicateCandidates ?? []).map((candidate) => ({
5
5
  ruleId: "structure/duplicate-implementation",
6
6
  severity: "medium",
7
- title: "New function duplicates existing implementation",
8
- description: `The new function ${candidate.added.name} has the same normalized implementation as ${candidate.existing.name}.`,
7
+ title: candidate.addedKind === "method"
8
+ ? "New method duplicates existing implementation"
9
+ : "New function duplicates existing implementation",
10
+ description: `The new ${candidate.addedKind === "method" ? "method" : "function"} ${candidate.added.name} has the same ${candidate.matchKind === "renamed-locals" ? "structure after local-name normalization" : "normalized implementation"} as ${candidate.existing.name}.`,
9
11
  file: candidate.added.path,
10
12
  evidence: {
11
13
  addedFunction: candidate.added.name,
@@ -13,6 +15,7 @@ export class DuplicateImplementationRule {
13
15
  existingFunction: candidate.existing.name,
14
16
  existingFile: candidate.existing.path,
15
17
  existingLine: candidate.existing.line,
18
+ ...(candidate.matchKind === undefined ? {} : { matchKind: candidate.matchKind }),
16
19
  },
17
20
  }));
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"duplicate-implementation-rule.js","sourceRoot":"","sources":["../../../src/application/rules/duplicate-implementation-rule.ts"],"names":[],"mappings":"AAGA,gDAAgD;AAChD,MAAM,OAAO,2BAA2B;IAC/B,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,oCAAoC;YAC5C,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,iDAAiD;YACxD,WAAW,EAAE,oBAAoB,SAAS,CAAC,KAAK,CAAC,IAAI,8CAA8C,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG;YAC7H,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;YAC1B,QAAQ,EAAE;gBACR,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;gBACnC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;gBAC/B,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACzC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACrC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;aACtC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
1
+ {"version":3,"file":"duplicate-implementation-rule.js","sourceRoot":"","sources":["../../../src/application/rules/duplicate-implementation-rule.ts"],"names":[],"mappings":"AAGA,4CAA4C;AAC5C,MAAM,OAAO,2BAA2B;IAC/B,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,oCAAoC;YAC5C,QAAQ,EAAE,QAAQ;YAClB,KAAK,EACH,SAAS,CAAC,SAAS,KAAK,QAAQ;gBAC9B,CAAC,CAAC,+CAA+C;gBACjD,CAAC,CAAC,iDAAiD;YACvD,WAAW,EAAE,WAAW,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,iBAAiB,SAAS,CAAC,SAAS,KAAK,gBAAgB,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,2BAA2B,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG;YAC7Q,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;YAC1B,QAAQ,EAAE;gBACR,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;gBACnC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI;gBAC/B,gBAAgB,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACzC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACrC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACrC,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;aACjF;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -16,11 +16,11 @@ export class MissingTestChangeRule {
16
16
  title: "Source change without matching test change",
17
17
  description: explicit
18
18
  ? `${coverage.sourcePath} changed without a changed test from its explicit related-test mapping.`
19
- : `${coverage.sourcePath} changed without a changed test sharing the same basename.`,
19
+ : `${coverage.sourcePath} changed without a changed test sharing its basename or statically importing it.`,
20
20
  file: coverage.sourcePath,
21
21
  evidence: {
22
22
  sourceChangeKind: coverage.sourceChangeKind,
23
- matchingStrategy: explicit ? "explicit" : "basename",
23
+ matchingStrategy: explicit ? "explicit" : "basename-or-import-graph",
24
24
  testPatterns,
25
25
  },
26
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"missing-test-change-rule.js","sourceRoot":"","sources":["../../../src/application/rules/missing-test-change-rule.ts"],"names":[],"mappings":"AAGA,oDAAoD;AACpD,MAAM,OAAO,qBAAqB;IACzB,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,WAAW,CAAC,cAAc;aAC9B,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;aACzD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC5F,OAAO;gBACL,MAAM,EAAE,8BAA8B;gBACtC,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,4CAA4C;gBACnD,WAAW,EAAE,QAAQ;oBACnB,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,yEAAyE;oBACjG,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,4DAA4D;gBACtF,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,QAAQ,EAAE;oBACR,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;oBAC3C,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;oBACpD,YAAY;iBACb;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC;CACF"}
1
+ {"version":3,"file":"missing-test-change-rule.js","sourceRoot":"","sources":["../../../src/application/rules/missing-test-change-rule.ts"],"names":[],"mappings":"AAGA,oDAAoD;AACpD,MAAM,OAAO,qBAAqB;IACzB,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO,WAAW,CAAC,cAAc;aAC9B,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;aACzD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC5F,OAAO;gBACL,MAAM,EAAE,8BAA8B;gBACtC,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,4CAA4C;gBACnD,WAAW,EAAE,QAAQ;oBACnB,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,yEAAyE;oBACjG,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,kFAAkF;gBAC5G,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,QAAQ,EAAE;oBACR,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;oBAC3C,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B;oBACpE,YAAY;iBACb;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC;CACF"}
@@ -2,7 +2,7 @@ import type { Finding } from "../../domain/finding.js";
2
2
  import type { AnalysisContext, AnalysisRule } from "../ports/analysis-rule.js";
3
3
  import type { FunctionSignatureCompatibility } from "../ports/function-signature-compatibility.js";
4
4
  import type { PropertyTypeCompatibility } from "../ports/property-type-compatibility.js";
5
- /** 공개 함수·인터페이스 계약과 공개 객체 타입의 구성원 삭제를 찾는다. */
5
+ /** 공개 함수·메서드·인터페이스 계약과 공개 객체 타입의 구성원 삭제를 찾는다. */
6
6
  export declare class PublicApiCompatibilityRule implements AnalysisRule {
7
7
  private readonly signatureCompatibility;
8
8
  private readonly propertyTypeCompatibility;
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-compatibility-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAQvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AACnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAEzF,6CAA6C;AAC7C,qBAAa,0BAA2B,YAAW,YAAY;IAE3D,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;gBADzB,sBAAsB,EAAE,8BAA8B,EACtD,yBAAyB,EAAE,yBAAyB;IAG1D,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAK5E"}
1
+ {"version":3,"file":"public-api-compatibility-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAQvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AACnG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAEzF,iDAAiD;AACjD,qBAAa,0BAA2B,YAAW,YAAY;IAE3D,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;gBADzB,sBAAsB,EAAE,8BAA8B,EACtD,yBAAyB,EAAE,yBAAyB;IAG1D,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CAK5E"}
@@ -1,4 +1,4 @@
1
- /** 공개 함수·인터페이스 계약과 공개 객체 타입의 구성원 삭제를 찾는다. */
1
+ /** 공개 함수·메서드·인터페이스 계약과 공개 객체 타입의 구성원 삭제를 찾는다. */
2
2
  export class PublicApiCompatibilityRule {
3
3
  signatureCompatibility;
4
4
  propertyTypeCompatibility;
@@ -64,10 +64,14 @@ function functionFinding(change, before, after, signatureCompatibility) {
64
64
  }
65
65
  return [
66
66
  {
67
- ruleId: "api/public-signature-changed",
67
+ ruleId: change.symbolKind === "method"
68
+ ? "api/public-method-signature-changed"
69
+ : "api/public-signature-changed",
68
70
  severity: "high",
69
- title: "Public function contract changed",
70
- description: `The exported function ${change.name} no longer provides every previous call signature.`,
71
+ title: change.symbolKind === "method"
72
+ ? "Public method contract changed"
73
+ : "Public function contract changed",
74
+ description: `The exported ${change.symbolKind === "method" ? "method" : "function"} ${change.name} no longer provides every previous call signature.`,
71
75
  file: change.path,
72
76
  evidence: {
73
77
  symbolName: change.name,
@@ -1 +1 @@
1
- {"version":3,"file":"public-api-compatibility-rule.js","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public-api-compatibility-rule.js","sourceRoot":"","sources":["../../../src/application/rules/public-api-compatibility-rule.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-code-structure.d.ts","sourceRoot":"","sources":["../../../src/application/services/analyze-code-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAM3B,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAEV,sBAAsB,EAGvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAgBzE,iDAAiD;AACjD,qBAAa,oBAAqB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,SAAS,sBAAsB,EAAE;IAGnD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmD9E,OAAO,CAAC,YAAY;CAGrB"}
1
+ {"version":3,"file":"analyze-code-structure.d.ts","sourceRoot":"","sources":["../../../src/application/services/analyze-code-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAM3B,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAEV,sBAAsB,EAGvB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAgBzE,iDAAiD;AACjD,qBAAa,oBAAqB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,SAAS,sBAAsB,EAAE;IAGnD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuD9E,OAAO,CAAC,YAAY;CAGrB"}
@@ -9,7 +9,8 @@ export class AnalyzeCodeStructure {
9
9
  this.extractors = extractors;
10
10
  }
11
11
  async analyze(context) {
12
- const addedFunctions = addedSymbols(context, "function");
12
+ const addedFunctions = (context.symbolChanges?.changes ?? []).filter((change) => change.changeKind === "added" &&
13
+ (change.symbolKind === "function" || change.symbolKind === "method"));
13
14
  const addedInterfaces = addedSymbols(context, "interface");
14
15
  if (addedFunctions.length === 0 && addedInterfaces.length === 0) {
15
16
  return emptyAnalysis();
@@ -74,10 +75,23 @@ function findDuplicateCandidates(addedChanges, functions) {
74
75
  continue;
75
76
  }
76
77
  const existing = existingFunctions
77
- .filter((candidate) => candidate.implementationFingerprint === added.implementationFingerprint)
78
- .sort(compareLocatedSymbols)[0];
78
+ .filter((candidate) => candidate.tokenCount >= minimumImplementationTokens &&
79
+ (candidate.implementationFingerprint === added.implementationFingerprint ||
80
+ (added.structuralFingerprint !== undefined &&
81
+ candidate.structuralFingerprint === added.structuralFingerprint &&
82
+ candidate.tokenCount === added.tokenCount)))
83
+ .sort((left, right) => Number(right.implementationFingerprint === added.implementationFingerprint) -
84
+ Number(left.implementationFingerprint === added.implementationFingerprint) ||
85
+ compareLocatedSymbols(left, right))[0];
79
86
  if (existing !== undefined) {
80
- candidates.push({ added: toLocation(added), existing: toLocation(existing) });
87
+ candidates.push({
88
+ added: toLocation(added),
89
+ existing: toLocation(existing),
90
+ ...(change.symbolKind === "method" ? { addedKind: "method" } : {}),
91
+ ...(existing.implementationFingerprint === added.implementationFingerprint
92
+ ? {}
93
+ : { matchKind: "renamed-locals" }),
94
+ });
81
95
  }
82
96
  }
83
97
  return candidates;
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-code-structure.js","sourceRoot":"","sources":["../../../src/application/services/analyze-code-structure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze-code-structure.js","sourceRoot":"","sources":["../../../src/application/services/analyze-code-structure.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type TestChangeAnalysis } from "../../domain/test-change.js";
2
2
  import type { AnalysisContext } from "../ports/analysis-rule.js";
3
3
  import type { TestChangeAnalyzer } from "../ports/test-change-analyzer.js";
4
- /** 변경 파일을 테스트 정책으로 분류하고 파일명 기반 관련 테스트를 연결한다. */
4
+ /** 변경 파일을 테스트 정책으로 분류하고 명시적 매핑·정적 import·파일명 근거로 연결한다. */
5
5
  export declare class AnalyzeTestChanges implements TestChangeAnalyzer {
6
6
  analyze(context: AnalysisContext): Promise<TestChangeAnalysis>;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-test-changes.d.ts","sourceRoot":"","sources":["../../../src/application/services/analyze-test-changes.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3E,gDAAgD;AAChD,qBAAa,kBAAmB,YAAW,kBAAkB;IAC9C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAmC5E"}
1
+ {"version":3,"file":"analyze-test-changes.d.ts","sourceRoot":"","sources":["../../../src/application/services/analyze-test-changes.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3E,0DAA0D;AAC1D,qBAAa,kBAAmB,YAAW,kBAAkB;IAC9C,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA8C5E"}