설계 원칙

왜 pccx-lab은 5개가 아닌 1개의 레포지토리인가?

초기 설계에서는 시뮬레이터, 프론트엔드, UVM 브릿지, AI, 공통 라이브러리 등 5개의 개별 레포지토리로 분리하는 구조를 고려했습니다. 하지만 다음과 같은 이유로 기각되었습니다:

  1. 개발 속도: 여러 레포지토리에 걸친 변경 사항을 동기화하고 버전을 관리하는 오버헤드가 매우 큽니다.

  2. 단일 목적성: 모든 모듈이 결국 ‘pccx 프로파일링’이라는 단일한 목적을 향해 긴밀하게 협력합니다.

모듈 경계 규칙

단일 레포지토리의 단점(스파게티 코드)을 막기 위해 엄격한 모듈 경계를 강제합니다. Phase 1 에서 원래 단일 덩어리였던 core/crates/ 하위의 9 개 집중형 crate 와 최상위 ui/ 로 분리했고, 의존 간선은 단방향이며 pccx-core 가 워크스페이스 그래프의 유일한 sink 입니다(전체 다이어그램은 docs/design/phase1_crate_split.md § 3 참조).

  • pccx-core (crates/core/): 순수 Rust 코어 — .pccx 포맷, 트레이스 파싱, 하드웨어 모델, 루프라인, 병목 탐지, VCD / chrome-trace writer, step-snapshot IPC, Vivado 타이밍 수집. 다른 워크스페이스 crate 에 의존하지 않으며 UI 프레임워크 import 를 엄격히 금지합니다.

  • pccx-reports (crates/reports/): Markdown / HTML / PDF 리포트 렌더링. pccx-core 의존.

  • pccx-verification (crates/verification/): CI 와 pccx-ide 가 쓰는 golden-diff + robust reader 게이트. pccx-core 의존.

  • pccx-authoring (crates/authoring/): ISA / API TOML 컴파일러. pccx-core 의존.

  • pccx-evolve (crates/evolve/): EAGLE 계열 투기 디코딩 프리미티브 및 Phase 5 DSE + surrogate + PRM 루프의 향후 거처. pccx-corepccx-verification 의존.

  • pccx-lsp (crates/lsp/): Phase 2 IntelliSense façade — sync / async provider trait, multiplexer, NoopBackend, BlockingBridge, LspSubprocess. pccx-core 의존.

  • pccx-remote (crates/remote/): Phase 3 백엔드 데몬 스캐폴드(WireGuard / OIDC / RBAC 는 이후 단계에서 착지). pccx-core 의존.

  • pccx-uvm-bridge (crates/uvm_bridge/): SystemVerilog/UVM 과 pccx-core 사이의 DPI-C / FFI 경계.

  • pccx-ai-copilot (crates/ai_copilot/): LLM 호출 래퍼. pccx-core 의 트레이스 표면(JSON 등)에만 의존.

  • pccx-ide (ui/src-tauri/): pccx-core, pccx-reports, pccx-ai-copilot 을 소비하는 Tauri 쉘.

  • ui/ (비-Cargo): React + Vite 프론트엔드. pccx-ide 와 Tauri IPC 만으로 통신합니다.

어느 crate 도 pccx-ide 또는 pccx-remote 에 의존하지 않습니다 — 둘 다 터미널 바이너리입니다. React 트리는 Cargo 워크스페이스 멤버가 아니며, 설계상 워크스페이스 그래프 바깥에 위치합니다.

향후 분리 조건

특정 crate(예: pccx-core 또는 pccx-verification)가 pccx-lab 외부에서도 독자적으로 쓸 수 있을 만큼 범용성을 갖추면 crates.io 에 퍼블리시하거나 별도 레포지토리로 추출합니다. Phase 1 분리는 바로 이 추출을 염두에 두고 단계화한 것이라, 각 비-core crate 는 이미 불안정 trait 표면(ReportFormat, VerificationGate, IsaCompiler, ApiCompiler, CompletionProvider 등)을 노출하고 있습니다. 즉 “뽑아내기” 는 아키텍처 리팩터가 아니라 릴리스 엔지니어링 작업으로 환원됩니다.