Validate on Linux Node 22 and PostgreSQL 17: 3894 frontend tests and 64 database tests pass, with no removed test names or new failures. Preserve static Home, bounded gzip, assertion-change records and manual acceptance gaps. Co-Authored-By: Claude Code <noreply@anthropic.com>
75 lines
9.0 KiB
Markdown
75 lines
9.0 KiB
Markdown
# PROGRESS · 读者版年运与投影修复(2026-09-25)
|
||
|
||
## 最终整合复验补记
|
||
|
||
组合快照 `final-r4b` 已在 Linux Node22.23.2 / PostgreSQL17 验证:前端3894/3894、DB64/64,fail/skip/cancel/todo均0;tsc/lint/build各exit0,lint0error/127既有warning,首页Static。相对开工基线无旧测试名消失、无新增失败;完整首屏/入口增量/专属JS gzip分别+0.1612%/−0.4536%/−0.7984%。完整证据与环境失败历史见 `PROGRESS-three-fixes-integration-20260925.md` final-r4b节。
|
||
|
||
下文为本单执行期记录;Python/隐私最终快照补验另记,受控登录与部署缺口不由自动化替代,BUG状态不提前升级。
|
||
|
||
## 状态与基线
|
||
|
||
本地实现与定向回归已完成,等待协调方对组合代码独立审查、Linux Node 22 全量及构建验收。未提交、未推送、未部署;BUG-1026 / 1028 不提前写 resolved。
|
||
|
||
- 任务:`TASK-report-reader-main-fix-20260925.md`,本树 `codex/report-reader-main-fix-20260925`。
|
||
- 开工远端基线:`48fe4daf519dab2a5c6bf4b01dd513067de1647b`;任务所列 `fabe0114` 之后为任务文档更新。
|
||
- 已检索并完整核对 BUG-1026 / 1028 及关联 BUG-999 / 1027;旧防复发测试存在,但只锁表头、泄漏词或同键合成字典,未检查实际可见单元格和 Bhava Bala 整表。
|
||
- 已读 AGENTS、frontend/AGENTS、DESIGN、VOICE、CONTEXT 与预检台账。开工预检 `python scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`:remote verified,fragment scan / adapter diagnostics 已执行;focused 因既有 `.workbuddy` mirror 路径断言失败,未伪造环境。
|
||
- 用户硬门槛:必须 Node 22 + Linux 全量,按名称逐项对照,新增失败为 0 才能推;每个既有断言改动记录原值 / 新值 / 原因。本执行方没有推送权限。
|
||
|
||
## T1–T3 实现
|
||
|
||
1. `annual_tajika_pack._annual_comparable_value`:年主仅比较实际行星,Tajika 缺少 `year_lord_sign` 不再导致假冲突。代码注明 BUG-1028 与上游差异。真实不同年主仍 conflict;参考版提示也不再无条件宣称分歧,且保留外部验证未完成说明。
|
||
2. `pl9_reader_export`:年主、Muntha、年度上升各从独立字段取值;真实冲突以「太阳返照:…;Tajika:…(两者不同)」并列,不强行取一侧。选取依据仅解释现有本地 Muntha 守护星口径,不冒充 Panchadhikari。`_annual_series_surface` 补保留 `solar_return`,未来年返照时刻从对应年度真实数据读取。
|
||
3. `report-public-projection`:共享安全规则与 PL9 报告专用规则分离;聊天导出、安全 chart fence / SVG 不使用新长英文段规则。明确内部字段、密钥、危险 URL、脚本仍拦截。Score / Weight 不单独让报告领域表消失,provider / attempt / job / model 仍拦截。删内部表只连紧邻说明段,不连标题。
|
||
4. 五要素只显示中文「综合性质 / 吉性要素数量 / 要素总数」,删除原始评分键;缺姓名不输出空姓名行。
|
||
5. 未改 API 主文件、Ayanamsa、宫制、大运、依赖、迁移、workflow、人物档案或西洋盘代码;未改 Skill 包,版本不 bump。
|
||
|
||
## 上游 Panchadhikari 同步决定(D2 允许让步)
|
||
|
||
查证上游提交 `23b9609e330dbee70a4725bdc222b125d9b0e39f` 的 `scripts/tajika.py::calc_panchadhikari_year_lord` 及其力量计算闭包:会在产品进程导入 `jhora`,外部不可用时退到本仓已 blocked 的 Panchavargiya native_proxy;且其 Muntha 从年度上升推算,与本轮恢复本命上升的既有口径不一致。完整同步会跨越许可证隔离与算法治理边界,不能为了补表格解除 blocked。
|
||
|
||
因此按 D2 使用本地既有真实字段,不引入此选择器、不改算法、不宣称 oracle / 多引擎精度闭环。查证源码只留本地 `artifacts/report-reader-fix/upstream-tajika-inspect.py`,不并入运行包。
|
||
|
||
## Golden 与测试证据
|
||
|
||
Golden 使用原有明确虚构测试输入,通过 `cmd_full_reading → build_professional_report_reference_packet → _pl9_export_markdown_for_edition(reader_main)` 真实重算,1832 行;provenance 增加生成链和任务名。未手写领域响应。
|
||
|
||
末尾重算脚本再次覆盖 golden 被工具拒绝,未换工具绕过,也未转交覆盖。改用**只读**完整引擎重算对照,确认最终代码输出与先前已成功重算的 golden **逐字相等**,故不需要第二次覆盖。证据 `fixture-final-verification.log`。这仅证明**该次重算逐字相等,不承诺全引擎跨次字节确定性**。协调方独立多次重跑观察到 Shadbala Mercury / Venus 的 Drik / Total 有 0.01 漂移,年运与章节无差;保留本次成功记录及独立限制,不改算法、golden 或容差消除漂移。本单字段回归以真实年运来源和明确单元格断言为准,不能由一次全报告相等推断所有引擎输出确定性。
|
||
|
||
新增 Python 4 项测试覆盖:真实不同键字典一致、三年非空且变化、未来真实返照时刻、真实两侧值冲突故障注入、缺名与五要素清理。前端新增2项并增强 golden:Bhava Bala 标题+十二行表原样存在、后续表不丢标题、聊天英文保留、安全规则不退步、年运可见格不为空。没有删除既有测试。
|
||
|
||
| 验证 | 结果 | 证据(本地 artifacts/report-reader-fix/) |
|
||
| --- | --- | --- |
|
||
| Python 开工两文件基线 | 17 通过 | report-baseline-tests.log |
|
||
| Python 修改后两文件 | 21 通过 | python-targeted.log |
|
||
| Python 最终扩展7文件(含API增长、隐私、parity) | 124 通过,0 失败 | python-expanded-final.log |
|
||
| 前端三文件首次 | 38 通过 / 2 个旧 SHA 不符;逐行检查后按 D3 修正 | frontend-targeted.log、projection-diff.txt |
|
||
| 前端三文件最终,Node 22.23.2 | 40 通过 / 0 失败 / 0 跳过 | frontend-targeted-final.log |
|
||
| 最终 tsc --noEmit | exit 0,0 错 | tsc-final.log |
|
||
| 最终 npm run lint | exit 0,0 error / 127 warning | lint-final.log |
|
||
| Python quick,UTF-8,skip-frontend-runtime | 首跑与最终重跑均 exit 0;最终 948 passed / 1 skipped | python-quick.log、python-quick-final.log |
|
||
| 最终真实引擎与 golden 对照 | 1832 行逐字相等,未覆盖 | fixture-final-verification.log |
|
||
|
||
环境:Windows、Node 22.23.2 / npm 10.8.1、Python 3.11.7。quick 使用 `PYTHONUTF8=1 PYTHONIOENCODING=utf-8`,与协调方 UTF-8 基线同环境;前端单独跑,不把 Windows 定向当 Linux 全量。
|
||
|
||
协调方通报的 **Linux Node 22 基线**:3863/3863、fail0、skip0、DB61/61、tsc0、lint0error/127warning、build0 首页 Static;证据主仓 `artifacts/three-fixes-baseline-20260925-u2mvj0n4/linux-logs/`。最终组合必须 fail0、原测试名称无消失、新增失败0,构建/gzip由协调方独立验收,不能引用旧 Node20 失败豁免。
|
||
|
||
## 所有既有断言改动三栏
|
||
|
||
| 断言位置 | 原值 | 新值 | 原因 |
|
||
| --- | --- | --- | --- |
|
||
| test_annual_tajika_pack:executive_summary.status | in {blocked, parameter_sensitive} | == partial_verified | 两侧真实相同年主不再误报冲突;只是本地可读状态,外部 replay 边界未升级 |
|
||
| test_annual_tajika_pack:unified.status | in {blocked, parameter_sensitive} | == partial_verified | 同上,统一报告摘要同步真实本地状态 |
|
||
| report-public-projection:KP 原始表标题 | doesNotMatch | match ### KP 原始表 | D3 只删内部表及说明段,不删标题;防后续正常表归错章节 |
|
||
| personal-report-density-retry:投影 SHA | f3aeb8f4b09ba0a78af4ab5e7aee4db32d7499b8e6b1488f2925b35fd91750b9 | 3d16948c52d97adbdcfee45441336f8cd1ae242e3c0c99f766cb8aa0bc964067 | 固定旧 density golden 未改,旧/新投影逐行差异仅增加标题与空行,符合 D3;不是为消红放宽泄漏 |
|
||
| report-export-blocks:LF 下载 SHA | b7f6947f6ae6f82e4a972be3c1f2bc50260ed0c5f029847264f40a5ee6ba7b88 | 4295165c4ed6e13b03e8c3c25fd54ad3ef5a2ca1732e9f0783d0ada0c2bbfef2 | 同一投影恢复标题后普通下载同步;22 个安全 SVG、去围栏、逐字节组合、泄漏零命中断言未弱化 |
|
||
|
||
只有上述5处改变既有预期。新增断言不替代原有泄漏、安全或图盘断言;参考版年运提示回归也使用真实完整引擎结果。
|
||
|
||
## T4 记录与未完成验收
|
||
|
||
- 沿用 BUG-1026 / 1028 补根因、旧测试为何未拦住、修复与回归;更新 testing、CHANGELOG、DESIGN、任务索引、BLOCKED。
|
||
- 无受控登录,未读取或借用凭据。浏览器清单未执行,不写已验收;无提交/推送/部署/health 声明。
|
||
- quick 在 Windows 把5个既有 pending_packets 文件改为 CRLF;逐字核验确为纯换行后,恢复操作被工具拒绝覆盖。未绕过或转交代执行,保留本树脏态;这5个文件不在交付白名单,不修改 oracle 内容。整体 `git diff --check` 会因此报 CRLF whitespace;仅交付范围 `scripts frontend tests docs CHANGELOG.md BLOCKED.md` 的 diff --check 为0。清理需用户另行批准,见 BLOCKED。
|
||
- 本单是纯代码维护,不输出运势解读;MEVG/三引擎精度未在本轮关闭,不能把自动化绿当作领域真值验证。
|