Skip to content

[Priority: Med] [DX] 重构 doctor.sh 的自动修复与严格校验分层 #440

@liujuanjuan1984

Description

@liujuanjuan1984

🔍 发现的问题 / 原始需求描述

  • 审查结论:需求仍然有效。当前 scripts/doctor.sh 仍把 uv syncuv pip checkpre-commitmypypytest、coverage、build、smoke test 串成一条线性流程,失败反馈对“自动修复后需重跑”与“真实行为失败”的区分仍不够清晰。
  • 但当前仓库已有明确约束:./scripts/doctor.sh 必须继续作为主验证入口,因此优化方向应是“分层与提示更清楚”,而不是引入替代性的主脚本。

🛠️ 详细实施方案

  • scripts/doctor.sh 内部拆分 fix / verify / package 三个阶段,并保留单一入口 ./scripts/doctor.sh。如果 pre-commit 自动修改文件,则脚本应以明确提示退出,提醒先审查改动再重跑,而不是继续混入类型/测试/build 失败。
  • 将公共阶段函数下沉到 scripts/health_common.shdoctor.sh 内部函数,统一输出阶段标题与失败建议,降低“看到失败但不知道该先修什么”的摩擦。
  • 如确有必要,可新增可选参数或环境变量控制阶段(例如 --quick / DOCTOR_PHASE=verify),但不得替代默认全量基线,也不得绕开 ./scripts/doctor.sh 作为标准入口的地位。
  • 核心逻辑/伪代码:
run_prerequisites
run_fix_phase
if fix_phase_changed_files:
    print "pre-commit auto-fixed files; review changes and rerun doctor"
    exit 1
run_verify_phase   # mypy + pytest + coverage
run_package_phase  # build + smoke test
  • 涉及文件:scripts/doctor.shscripts/health_common.sh、必要时新增 tests/scripts/test_doctor_contract.py 或扩充 tests/scripts/test_script_health_contract.py

🧪 回归测试建议

  • 先做 bash -n scripts/doctor.sh scripts/health_common.sh
  • 为脚本文本契约与阶段输出补测试,确认主入口、阶段提示、失败消息未漂移。
  • 执行 bash ./scripts/doctor.sh,验证默认基线仍保持原强度。

Metadata

Metadata

Assignees

No one assigned

    Labels

    status:todoPlanned but not started

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions