Background
internal/cli/checkers 实现 hotplex doctor 诊断检查器。configRequiredChecker.Check 声明了 missing 切片用于收集缺失的必填字段,但从未 append 任何元素,导致 Fail 分支(行 181-190)为死代码。agentConfigDirChecker.checkSubdir 在 os.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: checkSubdir 在 os.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:
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
Background
internal/cli/checkers实现hotplex doctor诊断检查器。configRequiredChecker.Check声明了missing切片用于收集缺失的必填字段,但从未 append 任何元素,导致 Fail 分支(行 181-190)为死代码。agentConfigDirChecker.checkSubdir在os.ReadDir失败时静默返回,用户无法知道检查被跳过。Scope: error-handling — cycle 190 (模块分析通过 2)
Key files:
config.go,agentconfig.goFinding Summary
Findings
configRequiredChecker dead-code Fail branch
Severity: Medium | Confidence: High | ROI: Medium
Location:
config.go:167-190Problem:
missing切片被声明(行 167)但从未被 append 任何元素。行 170 的 early return 意味着只有消息平台启用时才能到达行 181 的len(missing) > 0分支,但即使到达,missing也始终为空。行 181-190 的 Fail 分支永远不会执行 — 此检查器只会产生 Pass 或 Warn,永远不会 Fail。Current Pattern:
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-164Problem:
checkSubdir在os.ReadDir(platformDir)失败时静默返回,无日志、无报告。用户在遇到权限拒绝或 I/O 错误时获得 Pass 结果,不知道验证不完整。Current Pattern:
Proposed Fix:
Estimated Impact: ~3 行变更,使诊断检查器能报告被跳过的扫描
Acceptance Criteria:
config.go:configRequiredChecker.Check的missing切片被正确填充,或死代码分支被移除agentconfig.go:checkSubdir在os.ReadDir失败时向 warnings 追加条目go test ./internal/cli/checkers/...通过Implementation Priority
Recommended starting point: 两个修复都很简单,可一起完成。
Out of Scope
configPath无同步保护和冗余 config.Load 调用:已在 issue 507 中跟踪Verification
go test ./internal/cli/checkers/...通过make lint无新警告