Skip to content

[AI Generated][FIX] 落地标准审查十项整改:口径契约、测试标准与文档对账(#521 至 #531) - #532

Merged
ouyangjiahong26 merged 11 commits into
masterfrom
fix/standard-audit-521-531
Oct 5, 2026
Merged

ouyangjiahong26 merged 11 commits into
masterfrom
fix/standard-audit-521-531

Conversation

@ouyangjiahong26

Copy link
Copy Markdown
Collaborator

本 PR 由 AI 生成(ZCode,GLM)。

Closes #521
Closes #522
Closes #523
Closes #524
Closes #525
Closes #526
Closes #527
Closes #528
Closes #530
Closes #531

解决什么问题

#521 至 #531 十个 issue(治理拍板项 #529 除外)来自一轮按 AGENTS.md 标准的全仓审查,其中两个是 BUG 级(旋转口径被破坏、硬契约 1 缺内核注入),其余八项是测试、脚本与文档的标准符合度整改。本 PR 把十项一次落地,每项一个主题提交。

为什么这样做

各 issue 的方案在开单时已给出并带代码行证据,本 PR 按 issue 落地。与 issue 方案存在落法差异的三处单独交代。#521 的待拍板项(修函数还是删函数)取修:函数被 frontend/trajectoryParsing.ts 第 138 行的同口径注释引用,删除要动前端注释,修复则让该声明重新成立,改动面更小。#523 的待拍板项(结论行保留 print 还是入 logging)取一并入 logging,与标准字面一致,发布闸只依赖退出码不受影响。#527 的待拍板项(存量补齐还是只约束增量)取补齐存量,但 issue 号采用文件级考古口径:顶层 describe 标各自追溯到的号,it 级不强求逐条带号(与既有合规样本 picking、sidecarApi 一致),追溯不到的不编造(ParamsPanel.test 等 4 个文件保持无号)。

做了什么

按协作者阅读顺序讲脉络,细节见各提交与 issue。

  1. 口径与契约(742763a、ac6cc9b):viz_adapter 的 synodic_to_gcrs_km 改先平移后旋转并对齐前端 idealizedInertialGeometry,补三例对照测试;export_tool_schemas 与 import_baseline 在 import e2m2e 前按 conftest 缺省链注入 SPICE_KERNEL_DIR。
  2. 观测与脚本(67b02fe、cf5e152):viz_adapter 与 facade_bridge 三处静默降级各补一行日志;两个 smoke 脚本 20 处 print 改 logging,三处 CLI help 补默认值。
  3. 测试标准(82c6abf、f2f64d8、4ab06f8):Python 浮点断言改 pytest.approx 与显式 rtol/atol,Rust 新增 assert_close_f32 改容差断言;补 test_units 与 test_constants,test_integration 改名收编 facade_bridge 测试族;37 个前端测试文件描述中文化并补来源 issue 号。
  4. 文档与界面(f0e05c8、230eb25、f0e9749):src/model 两模块补模块级 docstring;AGENTS.md 对账 command 数(23)、旋转实现处数(两处)与 TU 口径(375190.26)并补 assistant_cmd.rs 头注释;RecordDetailPanel 两处 bodyStyle 换 styles.body。

如何验证

只报事实。uv run pytest tests/ -m "not spice":170 通过、17 跳过,含新增 11 个用例。npm --prefix frontend run test:39 个文件 398 个通过,bodyStyle 弃用警告消失。cargo test:全部通过。ruff check、ruff format --check、pyright、tsc -b:零告警。tools/export_tool_schemas.py 真跑:21 个 schema 重导零漂移。smoke_mcp_serve 的完整真链路(design_orbit 收敛)未跑,本 PR 对它的改动仅涉输出通道,退出码语义不变。

协作者从哪里继续读

旋转口径看 src/engine/viz_adapter.py 与 tests/engine/test_viz_adapter.py 的 TestSynodicToGcrs。TU 口径的来龙去脉(units.py 实际值 375190.26,paramOverlay 注释声称的出处与事实矛盾)见 #528,paramOverlay 是否保留 375676.97 待维护者确认。#529(写作要求治理)是拍板项,不在本 PR 范围。

viz_adapter 的月球 SPICE 查询失败与 et2utc 不可用、facade_bridge 的工具清单自省失败,三处 except Exception 降级原本完全静默,坏数据与编程错误不可区分。各补一行日志,降级语义与返回值不变,级别按影响取 warning 或 debug。
synodic_to_gcrs_km 的实现先旋转后加 (μ,0,0),与自身 docstring(R(θ)·(r_syn+(μ,0,0))·DU)、e2m2e 参考实现及前端 idealizedInertialGeometry 均不一致,θ 转过半圈时最大偏差约 9350 km(2μ·DU)。实现改为先平移后旋转,并在 test_viz_adapter 补三例对照:与前端公式逐点一致、月球特例 (1-μ,0,0) 落在 approx_moon_gcrs_km 正圆轨道、标量 theta 广播。修正后 frontend/trajectoryParsing.ts 中“完全同口径”的注释声明重新成立。该函数此前在仓内无调用方,属硬契约 4(#477)口径被破坏的潜在问题。
export_tool_schemas 与 import_baseline 两处入口在 import e2m2e 前未设 SPICE_KERNEL_DIR,违反硬契约 1(e2m2e 在 import 期读该变量搜闰秒内核)。比照 tests/conftest.py 的缺省链(detect_kernel_dir 探测后 setdefault)补齐,import_baseline 原“本脚本不写环境变量”的注释收窄为只覆盖 catalog 变量。真跑 export_tool_schemas 验证:21 个 schema 全部重导、与库存零漂移。
smoke_pi_rpc 与 smoke_mcp_serve 共 20 处 print(过程进度、FAIL 诊断与最终结论行)全部改走 logging,两脚本补 basicConfig(stderr);download_kernels 的 --kernel-dir 补 help,smoke_mcp_serve 的 --cwd 与 smoke_pi_rpc 的 --app 在 help 写明默认值,三问口径对齐。发布闸只依赖退出码,输出通道变化不影响流水线。
src/ 十个生产模块中仅有的两处缺模块级 docstring(AGENTS.md 要求 Google style)。按仓库双语惯例补:Artifact 讲产物描述与懒填充数组的边界,Project 讲清单持有与谱系判定语义。
Python 侧 test_facade_bridge_family 的八处浮点直接 == 改 pytest.approx(member_parameters 结构改逐键断言),test_catalog_service 的 mu 断言同步;assert_allclose 两处显式写 rtol/atol,保持既有 1e-7/1e-8 严格度并注释说明严于标准的原因。Rust 侧 cmd.rs 测试新增 assert_close_f32 辅助(绝对 1e-6 按量值放缩以覆盖 km 级大数,其 f32 ULP 大于绝对 1e-6),jacobi、period、delta_v 与转移段帧值共 11 处改容差断言;frames.rs 的 f64 帧与 host_tools.rs 的 playback 数值字段同理。
units.py 是硬契约 2 的唯一换算来源却没有直接单测:补 test_units(常量取自 e2m2e 模板、换算往返闭合、TU 字面值 375190.26 防口径漂移)与 test_constants(硬编码常量可用、惰性 CR3BP 常量与 units 对齐,其中 TU 以天计,乘 86400 后与 TU_SECONDS 同源)。test_integration.py 不镜像任何模块,改名 test_facade_bridge_integration.py 并入 facade_bridge 测试族。写测试时发现 units.py 行内注释与 docstring 的 TU 与 CHAR_PERIOD 值过期(实际 375190.26 s / 2357389.9 s),一并修正,AGENTS.md 引用值随 #528 对账。
目录表的 22 个 Tauri command 实为 23(cmd.rs 11、assistant_cmd.rs 9、update.rs 3,与 invoke_handler 注册一致);硬契约 4 的旋转三处实际只剩 viz_adapter 与 trajectoryParsing 两处(cr3bp.ts 已不含旋转实现,随 #521 修函数拍板改两处)。硬契约 2 引用的 TU_SECONDS≈375676.97 是过期值,units.py 实际算出 375190.26(即 cr3bp.ts 口径;paramOverlay 的 375676.97 是 BCR4BP 27.32 天口径)。assistant_cmd.rs 文件头的命令面枚举补上 open_pi_setup。
RecordDetailPanel 两处 Card 的 bodyStyle 是 antd 6 弃用属性(vitest 渲染链有弃用警告),改 styles={{ body: ... }},内边距不变,tsc 与 vitest 全绿。
按 AGENTS.md 标准(describe 与 it 用中文并带 issue 号)治理全部 37 个前端测试文件:纯英文的 describe 与 it 按断言语义译为中文,顶层 describe 经 git log 逐文件考古补来源 issue 号,双号 commit 经 gh 核实取 issue 号;无法追溯的(如 ParamsPanel.test、filterByRole 一族)不编造号。it 级不强求逐条带号,与既有合规样本(picking、sidecarApi)口径一致。测试逻辑、断言、导入零改动。
评审发现两处非阻塞问题。其一,assert_allclose 的既有默认是 rtol 1e-7、atol 0(纯相对比较),此前注释写“既有默认 atol 1e-8”失实,改为如实说明显式阈值的用意(防近零元素误报)。其二,host_tools 的 playback 整体比较改逐字段容差后丢了“无多余键”的结构检查,两处补键集合恰为三键的断言。
@ouyangjiahong26
ouyangjiahong26 merged commit f3c9ca3 into master Oct 5, 2026
2 checks passed
@ouyangjiahong26
ouyangjiahong26 deleted the fix/standard-audit-521-531 branch October 5, 2026 12:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment