Files
a-share-analysis/docs/features/FEAT-MO-001-market-overview/review/code-review.md
T

6.7 KiB
Raw Blame History

代码 Review

首轮独立 Review

  • 对比基线:8261948
  • 审查提交:ff8ada8
  • 结论:Ready to merge: No

首轮发现及处置:

  1. 畸形 UpHome/DownHome 被折算为零并误标 fresh:改为有限、非负且成对校验,无效市场整体排除并按有效市场数返回 fresh/partial/unavailable。
  2. 成交额缺市场或交易日错位仍误标三市实时数据:只汇总非负金额和一致交易日,公开 marketCount、tradeDate、previousTradeDate,缺市场返回 partial。
  3. 空板块目录误标 fresh:一级行业为空时直接返回 unavailable,且只保留存在相邻两日收盘价和有效涨跌幅的板块。
  4. 前端隐藏 partial/delayed 警告:宽度、板块和成交额面板均展示非 fresh 状态提示,并展示板块与成交额真实交易日期。
  5. PRD、发布说明和 Review 文档残留旧口径:已同步更正为真实 TDX 宽度、一级行业与成交额趋势口径,主力净流入和新闻仍明确延期。
  6. 异常分支测试不足:新增畸形宽度、部分市场、错位交易日、空行业目录、额外字段隔离、前端状态提示和零变化中性色回归测试。

次要问题也已同步处理:OpenAPI required + nullable 定义、板块 DTO 额外 price 字段泄露、成交额零变化上涨色和新增映射中文口径注释。

范围

覆盖 TDX 客户端、市场概览后端模块、OpenAPI/前端契约、Axios API 封装、Vue 首屏组件和对应测试。

检查结果

  • 通过:API 按模块拆分,前端请求集中在 web/src/api/market-overview/index.ts,Vue 不直连 TDX。
  • 通过:真实指数和摘要字段经过 DTO/映射;桥接层未提供的方法返回结构化 unavailable,没有模拟数据冒充。
  • 通过:模块并行加载且独立处理异常;TDX 请求有固定回环地址、超时、响应大小限制和错误脱敏。
  • 通过:未将密码、令牌、行情原始载荷或生产数据写入代码、文档和日志。
  • 通过:E2E 测试夹具显式声明回环 TDX 配置但不要求 TDX 可达,避免测试环境绕过正式配置校验。

安全与残余风险

  • TDX 只读边界固定为回环地址,客户端限制超时和响应大小并脱敏异常;未接入交易、AI 密钥、数据库写入或生产数据。
  • 残余风险是 TDX 桥接方法覆盖不全、市场数据授权和生产 7×24 稳定性尚未验证,已在需求和回退说明中标明。

GitNexus 与同步修改

开发前已保存 GitNexus 影响计划。早期提交曾映射 11 条执行流并标记 high;49f6be9 修复提交的 staged 检测映射 20 个文件、67 个符号、16 条执行流并标记 critical。critical 来自市场概览核心服务、TDX 映射和前端数据面板,不是未知跨业务扩散;未发现数据库、Redis、RocketMQ、Scheduler、Worker、认证或部署调用方。当前环境未暴露 GitNexus MCP 变更检测工具,已使用同版本 CLI 和 worktree 绝对路径保留证据。

性能与资源影响

  • 五个模块并行请求,单请求超时并限制 1 MiB 响应;市场宽度并行增加一次单指数、单日线日期参考请求,不引入 MySQL、Redis、RocketMQ 在线负载。
  • 未进行 7×24、断线重连和生产压测;主力净流入、盘中新闻、权威交易日历及详情页仍待独立功能。
  • ESLint 对 Vue 单文件组件仅保留 35 条既有风格 warning,无 error;格式、类型和构建门禁均通过。

二次独立 Review

  • 审查范围:ff8ada8..49f6be9
  • 结论:Ready to merge: No
  • Critical:无。
  • Important:宽度仍接受小数/十六进制等非计数值;成交额以首个市场日期为锚;板块跨交易日混排仍标 fresh;后端没有真实 delayed 路径。
  • Minor:GitNexus 风险/执行流和 TDX 已接入范围存在旧口径。

上述问题已按 TDD 增加失败用例后修复:宽度只接受十进制非负安全整数;指数/板块只保留最新交易日;成交额选择最新有效日期对;四个后端日行情路径均具备 delayed 判定,宽度使用同批指数日期参考。修复后等待再次独立 Review。

第三轮独立 Review

  • 审查范围:49f6be9..7e4dcd9
  • 结论:Ready to merge: No
  • Critical:无。
  • Important:8 位数字日期未验证真实公历语义,成交额未强制前一交易日早于当前日且未验证日期/金额数组对齐;服务测试固定使用 20260818 行情却没有统一冻结系统时间,会在自然日期变化后失败。
  • Minor:开发总结未包含 7e4dcd9,GitNexus 仍保留上一轮 16 条执行流口径。

处置:按 TDD 先得到 3 个预期失败,再增加真实公历日期、日期顺序和数组对齐校验;服务测试套件统一冻结上海日期,并由单个延迟用例显式切换。修复后后端 Vitest 63/63、启动器 2/2 和类型检查通过,等待再次独立 Review。

第四轮独立 Review

  • 审查范围:49f6be9..ae2a7e0
  • 结论:Ready to merge: No
  • Critical:无。
  • Important:指数和板块只校验当前 K 线日期,前一根日期非法、重复或倒序时仍计算涨跌;最终治理材料仍处于 pending,尚未执行 governance:finish。
  • Minor:无新增。

处置:按 TDD 先得到 4 个预期失败,再要求前一日期有效且严格早于当前日期;无可比前收盘时指数保留当前价但不生成涨跌,板块不进入强弱排序。后端 Vitest 增加至 67/67。治理状态保持 pending 是有意的门禁顺序:需本修复再次独立 Review 通过后,才能合法写入 passed 并运行 governance:finish。

第五轮最终独立 Review

  • 审查范围:ae2a7e0..c2fdfa6
  • 结论:Ready to merge: Yes
  • Critical:无。
  • Important:无;上一轮指数/板块前一根 K 线日期校验问题已关闭。
  • Minor:无。
  • 验证:指数非法、重复、倒序前一日期参数化用例和板块过滤用例齐全;后端 Vitest 67/67、启动器 2/2、服务端类型检查与 git diff --check 均通过。安全、性能及 PRD/设计/测试/QA 口径一致。

最终结论:passed

第六轮显示修复 Review

  • 审查范围:市场概览前端日期显示工具、结论组件、指数组件及回归测试。
  • 根因:API asOf 是带 Z 的标准 UTC 时间,前端原样展示并直接截取 UTC 时分秒。
  • 处置:新增 Asia/Shanghai 格式化工具;不修改后端时间契约,非法值统一显示占位符。
  • 安全与性能:仅使用原生 Intl.DateTimeFormat,无新依赖、无网络请求、无敏感数据处理;格式化开销只发生在两个展示节点。
  • 验证:前端 Vitest 9 个文件/28 个测试、typecheck、全量 pnpm verify 和桌面/移动浏览器实测通过。
  • 结论:passed