Skip to content

fix(cli/checkers): dead-code Fail branch in configRequiredChecker + silent ReadDir error in agentConfigDirChecker #533

@hrygo

Description

@hrygo

Background

internal/cli/checkers 实现 hotplex doctor 诊断检查器。configRequiredChecker.Check 声明了 missing 切片用于收集缺失的必填字段,但从未 append 任何元素,导致 Fail 分支(行 181-190)为死代码。agentConfigDirChecker.checkSubdiros.ReadDir 失败时静默返回,用户无法知道检查被跳过。

Scope: error-handling — cycle 190 (模块分析通过 2)
Key files: config.go, agentconfig.go


Finding Summary

Category Critical High Medium Low
Error-handling 0 0 2 0
合计 0 0 2 0

Findings

configRequiredChecker dead-code Fail branch

Severity: Medium | Confidence: High | ROI: Medium
Location: config.go:167-190

Problem: missing 切片被声明(行 167)但从未被 append 任何元素。行 170 的 early return 意味着只有消息平台启用时才能到达行 181 的 len(missing) > 0 分支,但即使到达,missing 也始终为空。行 181-190 的 Fail 分支永远不会执行 — 此检查器只会产生 Pass 或 Warn,永远不会 Fail。

Current Pattern:

// config.go:167-190
missing := []string{} // declared but never appended to
if !messagingEnabled {
    return cli.Diagnostic{Status: cli.StatusPass, ...}
}
// ... checks that produce Warn but never populate missing ...
if len(missing) > 0 { // always false — dead code
    return cli.Diagnostic{Status: cli.StatusFail, ...}
}

Proposed Fix: 补充 append 调用收集真正缺失的必填字段(如 admin token、DB path),或移除死代码分支如果验证已由其他检查器覆盖。

Estimated Impact: ~10 行变更,使 configRequiredChecker 能正确报告 Fail 状态


agentConfigDirChecker silent ReadDir error

Severity: Medium | Confidence: High | ROI: Medium
Location: agentconfig.go:161-164

Problem: checkSubdiros.ReadDir(platformDir) 失败时静默返回,无日志、无报告。用户在遇到权限拒绝或 I/O 错误时获得 Pass 结果,不知道验证不完整。

Current Pattern:

// agentconfig.go:161-164
func checkSubdir(...) {
    entries, err := os.ReadDir(platformDir)
    if err != nil {
        return // silently swallowed
    }

Proposed Fix:

func checkSubdir(...) {
    entries, err := os.ReadDir(platformDir)
    if err != nil {
        *warnings = append(*warnings, fmt.Sprintf("cannot read %s config dir: %v", platformName, err))
        return
    }

Estimated Impact: ~3 行变更,使诊断检查器能报告被跳过的扫描

Acceptance Criteria:

  • config.go:configRequiredChecker.Checkmissing 切片被正确填充,或死代码分支被移除
  • agentconfig.go:checkSubdiros.ReadDir 失败时向 warnings 追加条目
  • 添加测试验证两种修复行为
  • go test ./internal/cli/checkers/... 通过

Implementation Priority

Finding Priority Effort Risk Impact
configRequiredChecker dead code P2 Small Low 使 doctor 能正确报告配置缺失
silent ReadDir error P2 Small Low 使 doctor 不隐藏扫描失败

Recommended starting point: 两个修复都很简单,可一起完成。


Out of Scope

  • configPath 无同步保护和冗余 config.Load 调用:已在 issue 507 中跟踪

Verification

  • go test ./internal/cli/checkers/... 通过
  • make lint 无新警告

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Medium: tech debt, refactoring, improvementsarchitectureDomain: design patterns, coupling, separation of concerns

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions