6818538c(base)→ 7399a47c(head)codescan.issues_diff 修复 2 条 / 新增 0 条| 文件 | 变更性质 | 摘要 |
|---|---|---|
internal/agent/format_pick.go | 重构 + 行为收敛 | 删除 dataFormatShape 结构体,pickDataFormat(shape dataFormatShape) → pickDataFormat(periods int);判据只剩「期数」 |
internal/agent/format_pick_test.go | 测试重写 | 用例由 11 条形态组合收敛为 5 条期数用例(30/2/1/0/-1) |
internal/agent/tools.go | 调用点收敛 | 3 处调用(价格/指数/指标元素构造)由传结构体改为直接传 r.DataPoints;注释同步 |
internal/agent/tools_test.go | 断言更新 | TestBuildMetricElement_EightSegments 带条件用例期望由 …:chart_bar 改为 …:chart |
AGENTS.md | 文档同步 | 「样式由工具层按数据形态确定性选择」改为「按期数确定性选择」,并补充不可达值说明 |
旧:Periods<=0 → chart
Metric && HasClass → chart_bar
Metric && Periods==1 → metric_card
Price/Index && Periods==1 → metric_card
else → chart
新:Periods == 1 → metric_card
其余(>=2 / 0 / 负数) → chart
最实质的语义变化:带分类维度的指标(ClassCode 非空)不再产出 chart_bar(柱状图),改为 chart(折线图)。代码与测试、AGENTS.md 三处已同步,未发现遗漏的运行时消费者。
| 严重度 | 类型 | 位置 | 说明 |
|---|---|---|---|
| Low | Maintainability / 重复代码块 | internal/agent/format_pick.go:43(旧版) | 旧 switch shape.DataKind 中三个 case 各自重复 Periods==1 → metric_card / else chart 的判断块;新版删掉分支后消除 |
| Low | Maintainability / 重复代码块 | internal/agent/format_pick_test.go:46(旧版) | 旧测试用例列表中大量同构 shape dataFormatShape{...} 字面量重复;新版收敛为 periods 单字段 |
两处均属同一次重构的直接产物,修复结论可信。
codescan.issues_diff 结论:0 条新增问题。
经人工复核新增代码,未发现内存/并发/空指针/资源泄漏类缺陷。pickDataFormat 现在是一个纯函数(单入参、无副作用、无外部依赖),异常入参(0 / 负数)有明确安全默认,健壮性良好。
新注释提出「三个工具返回的都是单对象时间序列,故 chart_bar/table_* 不可达」的论断,逐条核验如下:
| 断言 | 核验结果 | 证据 |
|---|---|---|
DataPoints = 本次取到的记录条数/期数 | ✅ 成立 | tools.go:707 DataPoints: len(prices);tools.go:865 len(indices);tools.go:998 len(values) |
价格工具 len(prices) < 2 直接报「数据不足」→ 价格恒 ≥2 期 | ✅ 成立 | tools.go:700-702 返回 Error;另有 tools.go:715 len(values) < 2 二次防御 |
指标未配条件取全国聚合(attr_value_code IS NULL) | ✅ 成立 | internal/database/repository.go:822 |
指标配条件取「命中的那一个」分类值(attr_value_code IN (…)) | ✅ 成立 | repository.go:159/172 metricAttrValueClause 生成 IN (...) |
| 已无任何残留引用 |
结论:注释与代码、文档三者自洽,重构未引入事实性错误。
chart_bar 变为 chart。本仓内已无 chart_bar 产出路径,若 C 端存在「按 chart_bar 分支渲染类目对比」的既有代码,将落入折线图分支——属预期收敛,但建议与 C 端同步一次(变更理由已写入 AGENTS.md 与函数注释)。FormatChartBar / "chart_bar" 仍保留在 pkg/placeholder 的常量与 FormatLabel 映射中,TestDataFormatLabel 仍断言其标签。这是「占位符第 8 段 7 项取值」的完整契约,属有意保留,不构成死代码,无需清理。pickDataFormat 未采用 >=2 显式分支而是 ==1 取反,与注释「其余 → chart」的语义等价,可读性可接受。| 维度 | 结论 |
|---|---|
| 新增缺陷 | 无 |
| 修复缺陷 | 2 条 Low/可维护性(重复代码),修复真实有效 |
| 变更性质 | 纯重构 + 有意的行为收敛(chart_bar 出局),无逻辑副作用 |
| 风险等级 | 低 |
| 建议 | 合入。合入前建议完成 §五.1 的 C 端契约同步确认 |
报告数据来源:
codescan.git_diff(6818538c→7399a47c)、codescan.issues_diff(修复 2 / 新增 0)、codescan.source_read及针对性仓库检索。所有文件路径与行号均经源码核验。
dataFormatShape| ✅ 成立 |
| 全仓检索该标识符 0 命中 |
FormatChartBar 常量为死代码 | ⚠️ 否(但已无 AI 侧产出) | pkg/placeholder/placeholder.go:69 定义、:160 在 FormatLabel 映射中仍被使用,属公共契约常量,不应删除 |