Skip to content

feat: add local analysis orchestration#53

Merged
seonghobae merged 6 commits into
developfrom
feat/issue-32-analysis-orchestration-v5
Mar 12, 2026
Merged

feat: add local analysis orchestration#53
seonghobae merged 6 commits into
developfrom
feat/issue-32-analysis-orchestration-v5

Conversation

@seonghobae
Copy link
Copy Markdown
Owner

Summary

  • add typed analysis job request and status contracts across shared types, the desktop shell, Tauri commands, and the Python engine CLI
  • expose a narrow allowlisted Tauri IPC boundary for starting and polling local analysis jobs without opening a loopback HTTP listener
  • harden the orchestration boundary with runtime engine discovery, strict schema validation, localized UI states, in-flight limiting, timeout handling, and pinned SBOM tooling

Verification

  • ./scripts/harness/quickcheck.sh
  • cargo check --manifest-path apps/desktop/src-tauri/Cargo.toml

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 12, 2026

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 분석 작업 시스템 추가: 사용자가 "분석 시작" 버튼으로 분석을 시작하고 진행 상황을 실시간으로 모니터링할 수 있습니다.
    • 분석 결과 표시: 완료된 분석의 상세 결과를 섹션, 역할, 화성 정보와 함께 표시합니다.
  • 다국어 지원

    • 분석 상태 메시지에 한국어 및 영어 지원 추가: 대기 중, 진행 중, 완료, 실패 상태 메시지가 지역화되었습니다.
  • 테스트

    • 분석 기능에 대한 포괄적인 테스트 추가로 안정성 강화.

Walkthrough

분석 오케스트레이션 시스템을 구현하여 React 프론트엔드, Tauri IPC 기반 백엔드, Python 분석 엔진을 연결합니다. 공유 타입, 데스크톱 앱 상태 관리, 분석 엔진 CLI 및 API, 테스트, 문서 및 국제화 지원을 추가합니다.

Changes

Cohort / File(s) Summary
빌드 및 워크플로우
.github/workflows/sbom.yml
SBOM 생성 방식을 Anchore 액션에서 직접 Syft v1.20.0 바이너리 설치 및 호출로 변경
공유 타입 정의
packages/shared-types/src/index.ts, packages/shared-types/test/index.test.ts
분석 작업 관련 타입 (AnalysisJobRequest, AnalysisJobStatus, AnalysisJobState 등) 및 팩토리 함수 추가, 광범위한 검증 테스트 포함
Python 분석 엔진 API
services/analysis-engine/src/bandscope_analysis/api.py, services/analysis-engine/tests/test_api.py
분석 요청 검증, 데모 리허설 곡 생성, 분석 작업 실행 함수 추가, TypedDict 기반 페이로드 스키마 정의
Python 분석 엔진 CLI
services/analysis-engine/src/bandscope_analysis/cli.py, services/analysis-engine/tests/test_cli.py
stdin에서 JSON 읽고 stdout으로 응답하는 CLI 진입점 추가, JSON 유효성 검사 및 오류 처리
Tauri 백엔드 설정
apps/desktop/src-tauri/Cargo.toml, apps/desktop/src-tauri/build.rs, apps/desktop/src-tauri/tauri.conf.json, apps/desktop/src-tauri/capabilities/main.json, apps/desktop/src-tauri/permissions/autogenerated/*
serde 및 time 종속성 추가, Tauri 매니페스트 및 빌드 설정 업데이트, IPC 명령 권한 정의
Tauri 백엔드 구현
apps/desktop/src-tauri/src/main.rs
start_analysis_jobget_analysis_job_status Tauri 명령, 앱 상태 관리, Python 부프로세스 오케스트레이션, 작업 큐 및 병렬 처리 제어 추가
데스크톱 앱 의존성
apps/desktop/package.json
Tauri API 라이브러리 v2.8.0 추가
분석 브리지 모듈
apps/desktop/src/lib/analysis.ts
Tauri IPC 호출 및 브라우저 폴백을 통한 분석 작업 시작 및 상태 조회 함수 추가
데스크톱 UI 구현
apps/desktop/src/App.tsx, apps/desktop/src/App.test.tsx
비동기 분석 워크플로우, 상태 폴링, 결과 렌더링, 오류 처리 추가, 포괄적인 통합 테스트 추가
번역 지원
apps/desktop/src/i18n/index.ts, apps/desktop/src/locales/en/common.json, apps/desktop/src/locales/ko/common.json
TranslationKey 타입 추가, 분석 관련 문자열 (6개) 영어 및 한국어로 추가
문서 업데이트
ARCHITECTURE.md, docs/architecture/overview.md, docs/security/app-security.md, docs/plans/2026-03-12-issue-32-analysis-*.md
Tauri IPC 기반 오케스트레이션 설계 및 구현 계획 문서 추가, 보안 가이드라인 업데이트

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant React as React Frontend
    participant Bridge as Analysis Bridge
    participant TauriIPC as Tauri IPC
    participant Rust as Rust Orchestrator
    participant Python as Python Engine
    
    User->>React: 분석 시작 클릭
    React->>Bridge: startAnalysisJob(request)
    Bridge->>TauriIPC: invoke("start_analysis_job", {request})
    TauriIPC->>Rust: start_analysis_job(jobId, request)
    Rust->>Rust: 작업을 큐에 추가 및 상태 저장
    Rust->>Python: Python subprocess 시작<br/>(stdin으로 요청 전송)
    Rust-->>TauriIPC: AnalysisJobStatus{state: "queued"}
    TauriIPC-->>Bridge: {jobId, state: "queued"}
    Bridge-->>React: {jobId, state: "queued"}
    React->>React: 상태 업데이트<br/>(250ms 폴링 시작)
    
    Python->>Python: 분석 실행
    Python-->>Rust: stdout으로 응답<br/>(JSON result)
    Rust->>Rust: 결과 파싱 및 저장<br/>상태를 "succeeded"로 변경
    
    React->>Bridge: getAnalysisJobStatus(jobId)
    Bridge->>TauriIPC: invoke("get_analysis_job_status", {jobId})
    TauriIPC->>Rust: get_analysis_job_status(jobId)
    Rust-->>TauriIPC: AnalysisJobStatus{state: "succeeded", result}
    TauriIPC-->>Bridge: {jobId, state: "succeeded", result}
    Bridge-->>React: {jobId, state: "succeeded", result}
    React->>React: 폴링 중단 및 결과 렌더링
    React-->>User: 분석 결과 표시
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • PR #1: Tauri 백엔드 설정 및 데스크톱 앱 구조화에 관련된 동일 파일 수정 (Cargo.toml, build.rs, main.rs)
  • PR #37: 공유 타입 리허설 곡 계약 및 데스크톱 앱 렌더링/테스트 수정으로 연관 (RehearsalSong 팩토리 및 검증 추가)
  • PR #5: 부트스트랩 PR에서 도입된 여러 파일 확장 (데스크톱 Tauri 진입점, 분석 엔진 CLI/API, 공유 타입, SBOM 워크플로우)

Poem

🐰 Tauri로 떠나는 분석 여정,
타입 정의하고 IPC를 잇고,
Python이 노래하면 결과 받고,
폴링으로 기다려 왔네요!
오케스트레이션의 우아한 춤! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 31.82% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 PR의 주요 변경사항을 명확하고 간결하게 설명합니다. 로컬 분석 오케스트레이션 추가라는 핵심 기능을 잘 전달합니다.
Description check ✅ Passed 설명은 PR의 변경사항과 관련이 있으며, 계약 추가, IPC 경계 노출, 오케스트레이션 강화 등의 주요 목표를 명확하게 제시합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/issue-32-analysis-orchestration-v5

Comment @coderabbitai help to get the list of available commands and usage tips.

@seonghobae
Copy link
Copy Markdown
Owner Author

@coderabbitai review

@seonghobae seonghobae enabled auto-merge (squash) March 12, 2026 05:25
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 12, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant