fix(qizheng): pass school options into the vendored chart and stabilize gates
BUG-710: call getSevenGovernorsChart with ketuMode/siderealMode so calculation.ketu_mode is the engine school, not the request echo. BUG-711: stop forbidding /ephemeris in the sidebar contract. BUG-712: compare ephemeris event longitudes at 6 decimals and fail closed when the golden is missing.
This commit is contained in:
@@ -11029,3 +11029,51 @@
|
||||
- 相关记录:BUG-706、BUG-686
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-710 | 七政 `ketu_mode` / `sidereal_mode` 收了请求却不传给引擎
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-15
|
||||
- 最近更新:2026-09-16
|
||||
- 影响面:`scripts/qizheng_chart_engine.py`、`POST /api/qizheng`、星盘页七政 Tab 的计都派别文案
|
||||
- 用户现象:请求 `ketu_mode: "descending-node"` 仍得到月孛派计都位置,响应 `calculation.ketu_mode` 却写成 descending-node,没有 warning。
|
||||
- 触发条件:`POST /api/qizheng` 带非默认 `ketu_mode` 或 `sidereal_mode`。
|
||||
- 根因:vendored CLI 的 `getSevenGovernorsChart(date, location)` 不传 options。适配器只调 CLI 旗标,旗标里没有派别。`_normalize` 把请求值写进 `calculation.ketu_mode`,把 CLI 实际值另放 `engine_ketu_mode`。
|
||||
- 修复:走任务书方案 A。`scripts/qizheng_seven_governors.js` 在内存里取出库函数 `getSevenGovernorsChart` 并传入 `ketuMode` / `siderealMode`。`calculation.ketu_mode` 与 `engine_ketu_mode` 都只表示实际生效派别。前端 `chart-view-mapper` 读 `calculation.engine_ketu_mode`。
|
||||
- 验证:`tests/test_qizheng_chart_engine.py` 新增非默认派别 / 岁差用例;`frontend/tests/chart-view-route.test.ts` 锁 mapper 用引擎字段。
|
||||
- 防复发:成功响应里 `calculation.ketu_mode` 必须等于 `engine_ketu_mode`。不得再把请求值回写成已生效派别。
|
||||
- 相关记录:BUG-701、TASK-qizheng-native-chart-20260915、TASK-readonly-pages-fix-20260916
|
||||
- 复发自:BUG-701(当时只把默认值暴露成参数,没有把参数送进引擎)
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-711 | 星历页合同断言禁止 sidebar 出现 ephemeris,与星盘页入口冲突
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-15
|
||||
- 最近更新:2026-09-16
|
||||
- 影响面:`frontend/tests/ephemeris-page.test.tsx`、`frontend/src/components/app-sidebar.tsx`
|
||||
- 用户现象:两份只读页单合入后 `npx tsx --test tests/ephemeris-page.test.tsx` 1 红,staging 门禁红。
|
||||
- 触发条件:chart-page 单按任务书在 sidebar 同时加「星盘」「星历」入口;星历单合同断言 `doesNotMatch(app-sidebar.tsx, /ephemeris/)`。
|
||||
- 根因:星历单把「本单不改 sidebar」写成了「sidebar 里不得出现 ephemeris」。前者是文件归属,后者不是产品事实。
|
||||
- 修复:删掉对 sidebar 的禁止断言,改为只约束本单文件归属(独立 `/ephemeris` route、不碰 `page.tsx`)。**不删** sidebar 星历入口。
|
||||
- 验证:`npx tsx --test tests/ephemeris-page.test.tsx` 全绿。
|
||||
- 防复发:文件归属断言不得写成产品入口禁止。改既有断言必须写原值 / 新值 / 原因。
|
||||
- 相关记录:TASK-chart-page-20260915、TASK-ephemeris-page-20260915、TASK-readonly-pages-fix-20260916
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
## BUG-712 | `ephemeris_events` golden 存全精度浮点且缺失时自动重建
|
||||
|
||||
- 状态:resolved
|
||||
- 首次发现:2026-09-15
|
||||
- 最近更新:2026-09-16
|
||||
- 影响面:`tests/test_ephemeris_events.py`、`tests/golden/ephemeris_events_raman_20260915_90d.json`
|
||||
- 用户现象:同一窗口、同一岁差,事件种类 / 日期 / 星体 / 星座一致,只有 `speed_longitude` 尾数差一位,验收机红。
|
||||
- 触发条件:golden 在 Windows / Anaconda 3.11.7 生成,Linux / Python 3.13 / 仓库 `.venv` 上 `assert result["events"] == golden`。
|
||||
- 根因:全精度浮点整体相等跨 pyswisseph / 星历数据会抖。golden 不存在时测试自己写出文件,等于没有 golden。
|
||||
- 修复:`longitude` / `speed_longitude` 量化到 6 位再比;`kind` / `date` / `body` / 星座字段保持严格相等。缺失 golden 失败,并提示用 `scripts/generate_ephemeris_events_golden.py` 重建。
|
||||
- 验证:`pytest tests/test_ephemeris_events.py`;缺失 golden 的定向用例确认不会写文件。
|
||||
- 防复发:不得对全精度浮点做整体 `==`。测试不得写 golden。
|
||||
- 相关记录:TASK-ephemeris-page-20260915、TASK-readonly-pages-fix-20260916
|
||||
- 复发自:无
|
||||
- 修复版本:待发布
|
||||
|
||||
Reference in New Issue
Block a user