Skip to content

打磨阶段一:可靠性诊断与日常工作流闭环 #40

Description

@AptS-1547

背景

当前 gcop-rs 已经具备 commit、review、stats、hook、alias、project config、fallback provider 等核心能力。下一步不应继续单纯堆命令,而是优先把用户日常路径里的可靠性、可诊断性和自动化集成补齐。

建议先完成公开重构 issue #39,再推进本阶段。#39 可以先降低核心模块维护成本,避免后续继续在大文件里堆功能。

目标

让用户在以下场景里更少猜、更容易排障、更适合接入脚本或 CI:

  • provider / 配置 / hook / alias 出问题时,可以一条命令定位。
  • review 结果可以作为 CI 质量门禁。
  • commit 生成结果由程序做基础校验,而不是完全相信 LLM。
  • 配置默认开启 split 时,用户仍能临时回到普通 commit 流程。

建议范围

1. 新增 gcop-rs doctor

诊断内容建议包括:

  • 当前仓库信息:是否在 Git repo 内、repo root、当前分支、是否有 staged changes。
  • 配置来源:用户配置、项目配置、环境变量覆盖后的有效配置摘要。
  • provider chain:default provider 和 fallback providers 的存在性、可实例化性、可连接性。
  • API key 状态:只显示存在/缺失和脱敏信息,不能泄漏密钥。
  • network 信息:endpoint、proxy、timeout/retry 配置摘要。
  • hook 状态:是否安装 prepare-commit-msg、是否为 gcop-rs 管理、是否存在冲突。
  • alias 状态:常用 alias 是否安装、是否被其他命令占用。
  • 环境变量影响:GCOP_SKIP_HOOK、CI、GCOP_CI_*、GCOP__* 等。

建议输出:

  • 默认 text 输出,面向人类排障。
  • --json 输出,方便 issue / CI 收集。
  • 不打印敏感值。

2. 增强 review 自动化能力

建议新增:

  • review --min-severity <info|warning|critical>:CLI 临时覆盖 [review].min_severity。
  • review --fail-on <warning|critical>:当存在达到阈值的问题时以非 0 退出,方便 CI 使用。
  • review --output <path>:把 text / markdown / json 写入文件。
  • review --changed-since <ref>:快捷 review ref..HEAD,减少用户手写 range。
  • review -v:补齐当前 TODO,输出 provider、prompt 截断、review target、format 等调试信息。

3. 增强 commit 结果校验和可控性

建议新增:

  • gcop-rs commit --no-split:当 [commit].split = true 时允许临时关闭 split。
  • 本地 commit message validator:
    • subject 长度检查。
    • conventional commit 基础格式检查。
    • configured commit.convention.types 检查。
    • 可配置为 warning 或 hard error。
  • amend 模式输出更清楚的 diff 来源:HEAD diff、staged diff 是否合并。
  • commit --dry-run --json 增加元信息:是否截断、summary-only 文件、provider、suggested scope。

非目标

本阶段暂不做:

  • 不重写 CLI dispatch。
  • 不改变现有配置格式。
  • 不引入 provider plugin 架构。
  • 不大规模重构 split resume 机制;这放到后续阶段。
  • 不改变现有默认行为,除非是明显 bugfix。

验收标准

  • gcop-rs doctor 在无配置、错误配置、正常配置、Git repo / 非 Git repo 场景都有测试覆盖。
  • review --fail-on 在 text/json/markdown 输出下退出码行为明确且有测试。
  • review --output 不污染 stdout 的 machine-readable 输出语义。
  • commit --no-split 能覆盖 [commit].split = true。
  • commit validator 对正常 conventional commit、非法 type、过长 subject 有测试。
  • 所有新增错误消息和用户可见文本补齐 en / zh-CN i18n。

建议验证命令:

cargo fmt --all -- --check
cargo test config
cargo test review
cargo test commit
cargo test hook
cargo clippy --all-targets --all-features -- -D warnings

风险

  • doctor 容易变成信息泄漏点,必须严格脱敏。
  • review --fail-on 会被 CI 依赖,退出码和 JSON 错误格式要稳定。
  • commit validator 不能太激进,否则会误杀用户的 custom convention。
  • --no-split 和 config 默认值合并逻辑要保持清楚,避免 CLI 行为反直觉。

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

    enhancementNew feature or requestrustPull requests that update rust code

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions