Skip to content

[architecture] config Project 经 service 外泄为跨切片契约——pr/review 应经 model.rs/注入解耦(#35 follow-up) #65

Description

@ghbvf

现状

src-tauri/src/config/service.rs:19 有 pub use super::model::Project;,把 config slice 的 domain model Project 经 service public surface 外泄为跨切片契约:src-tauri/src/pr/*、src-tauri/src/review/* 多处经 config::service 读取 Project 字段(Grep ~25 处)。

按治理章程(.claude/rules/prmonitor/ai-robust.md),跨切片契约应只走 src-tauri/src/model.rs(Candidate / PullRequestView)。config 的 domain model 经 service 传播绕开了该边界。

证据

  • config/service.rs:19:pub use super::model::Project;
  • pr/scheduler.rs:use crate::config::service::{self as config_service, Project};reconcile(&[Project])。
  • pr/commands.rs / review/*:经 config_service::project / project_validated 消费 Project 字段。

取舍 / 历史

修复方向(三级方案种子)

  • 最小:把 config::service::project() / project_validated() 的返回拆成 pr/review 各自所需的最小 DTO(只暴露字段子集),移除 Project re-export。
  • 彻底:把真正的跨切片 DTO 放进 src-tauri/src/model.rs,并禁止 slice 直接 import config 内部模块(含一并审视 [feat] 多项目并行监听 + 项目切换 UI(参考 codex app) #35 前就存在的 AppConfig 跨切片消费)。
  • 重构:由组装根 lib.rs / composition root 解析 config 后,向 pr/review 注入纯参数(repo/repo_root/labels/…),slice 不再触达任何 config 类型。

Files

  • src-tauri/src/config/service.rs:19(re-export 源)
  • src-tauri/src/pr/scheduler.rs、src-tauri/src/pr/commands.rs、src-tauri/src/review/commands.rs 等 ~25 处消费点

Source

PR #63 finding F1(Discovered via /pr-review #63 → /fix #63)。

验收

  • pr / review 切片不再依赖任何 config domain 类型(Project / AppConfig),跨切片契约只走 model.rs 或由 composition root 注入纯参数。
  • 选定方案落地,slice-boundary 约束在测试/lint 层可判定(升 Medium/Hard)。

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions