mirror of
https://github.com/ZhuLinsen/daily_stock_analysis
synced 2026-09-20 10:53:33 +08:00
* feat: 修复 reviewer blocker 问题 - 同步 agent 路径(executor.py, decision_agent.py) - 添加 SignalAttribution 字段验证器(自动转换、归零、归一化) - 更新 docs/CHANGELOG.md - 添加回归测试(tests/test_signal_attribution.py) - 修复 notification.py 和模板的 None 值显示问题 Closes #1742 * fix: 修复 signal_attribution 完整契约 Reviewer feedback 指出的完整契约收敛: ## 1. [Correctness] 归一化接入真实 parse 路径 - 问题:Pydantic validator 没有进入主分析路径(dashboard 是 raw dict) - 修复:将归一化函数移到 src/utils/data_processing.py, 在 _parse_response() 和 agent runner.py 的 parse_dashboard_json() 中调用 - 确保 LLM 返回的字符串/负数/总和≠100 被正确处理 ## 2. [Correctness] 同步 HistoryService 路径 - 问题:_generate_single_stock_markdown() 不读取 signal_attribution - 修复:在 history_service.py 中添加信号归因展示代码 ## 3. [Process] 修复 CHANGELOG.md 格式 - 问题:两行 [Unreleased] 条目拼在同一行 - 修复:分割成独立行 ## 4. [验证] 添加真实路径回归测试 - tests/test_signal_attribution_real_paths.py: - 归一化函数测试(9个) - _parse_response 集成测试(1个) - HistoryService 展示测试(2个) ## 5. [Process] 修复 executor.py prompt 模板格式 - 问题:signal_attribution JSON 例子没转义花括号,导致 .format() 报错 - 修复:将 { 转成 {{,} 转成 }} Co-authored-by: qyj <jiangqiyuan@tencent.com> * fix: remove trailing whitespace in notification.py and report_schema.py * fix: converge signal_attribution contract across all paths - Add signal_attribution to check_content_integrity() as recommended field - Normalize signal_attribution in _parse_response() and parse_dashboard_json() - Sync HistoryService._generate_single_stock_markdown() to render signal_attribution - Update CHANGELOG.md to reflect actual implementation (explicit normalization, not schema-level) - Add end-to-end tests covering all paths: _parse_response, notification, Jinja2, HistoryService - Fix tests to accept signal_attribution as recommended field (missing does not fail integrity check) * fix: address all reviewer blockers - Fix generate_single_stock_report() to render signal_attribution - Fix normalization: clamp values to [0, 100], keep all-zero as 0 (not 25) - Update docs/full-guide.md and docs/full-guide_EN.md with signal_attribution description - Add supplement tests covering generate_single_stock_report, normalization edge cases, and _parse_response integration * fix: 修复 CI 静态检查失败和文档表述不一致 - 修复 tests/test_signal_attribution_supplement.py 的 flake8 错误(F821 undefined name 'AnalysisResult') - 将 AnalysisResult import 移到文件顶部 - 更新 docs/CHANGELOG.md 表述,反映实际行为(all-zero 保留为 0,有效贡献度归一化到 100) - 所有 40 个 signal_attribution 测试通过 * fix: converge signal attribution runtime contract * fix: hide empty signal attribution blocks * fix: reject non-finite signal attribution weights --------- Co-authored-by: qiyuanjiang <qiyuanjiang@tencent.com> Co-authored-by: qyj <jiangqiyuan@tencent.com> Co-authored-by: hsms4710-pixel <228664208+hsms4710-pixel@users.noreply.github.com> Co-authored-by: zhulinsen <zhuls97@163.com>