Skip to content

[Epic] Kratos scan 결과의 actionability와 신뢰 근거 개선 #71

Description

@JeremyDev87

배경

Orbit Dashboard에서 npx @jeremyfellaz/kratos scan .를 실행했을 때 삭제 후보 5개, unused export 165개, route entrypoint 440개가 보고되었다. 결과 자체는 유용하지만 현재 CLI 출력은 자동 정리 후보와 수동 검토 대상을 한데 묶어 조치할 항목 170개처럼 보여주고, dead export 근거가 file#export 수준에 머물며, clean dry-run도 이미 존재하는 preview excerpt 로직을 CLI에 노출하지 않는다.

이 epic은 실제 대형 Next.js repo에서 scan, clean, report 결과를 더 믿고 실행할 수 있도록 actionability, preview, evidence, write-control UX를 개선한다.

목표

Before:

  • scan summary가 삭제 후보와 수동 검토 export를 같은 action bucket으로 보여준다.
  • deletion candidate와 orphan file 목록이 중복 출력될 수 있다.
  • route entrypoint 목록이 기본 output에서 노이즈가 된다.
  • dead export finding은 file + exportName만 제공한다.
  • clean dry-run은 core의 clean_preview excerpt를 사용하지 않는다.
  • 기본 scan output이 .kratos/latest-report.json을 생성해 checkout을 더럽힐 수 있다.

After:

  • scan/report human output이 자동 조치 가능 항목과 수동 검토 대상을 분리한다.
  • clean dry-run이 삭제 전 파일 excerpt, threshold skipped, unavailable target을 보여준다.
  • dead export finding에 kind, reason, confidence, importer/use evidence가 포함된다.
  • scan에 no-write 경로 또는 명확한 write-control 안내가 생긴다.

실행 순서

Wave 1: 동시 진행 가능

Hard blocker 없음. 단 두 issue 모두 crates/kratos-cli/tests/cli_smoke.rs assertion을 수정할 수 있어 merge 시 테스트 파일 conflict 가능성을 확인한다.

Wave 2: schema-heavy 단독 작업

Blocked by #72 권장. Hard dependency는 아니지만 report_format/fixture output 정책과 schema evidence rendering이 충돌할 수 있어 #72 merge 후 진행하는 것이 안전하다.

Wave 3: output wording 안정화 후 진행

Blocked by #72 권장. crates/kratos-core/src/report_format.rs, crates/kratos-cli/tests/cli_smoke.rs overlap 가능성이 있어 분리한다.

Sub-issues

Wave 1: 동시 진행 가능

Wave 2: 지정된 blocker 이후

Wave 3: 지정된 blocker 이후

완료 기준

  • 모든 sub-issue merge
  • cargo test -p kratos-core
  • cargo test -p kratos-cli
  • cargo test --workspace
  • npm run verify
  • temp copy 기반 scan, clean, report --format md smoke 통과

병렬 실행 메모

multi-issue-executor로 Wave 1부터 실행 가능하다. Parent epic은 tracker 전용이며 코드 파일을 소유하지 않는다. Wave 2와 Wave 3는 tracker 순서가 아니라 실제 파일 overlap과 schema/output 충돌 가능성 때문에 분리한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions