Files
Jyotisha/docs/tasks/PROGRESS-report-english-edition-20260929.md
T

6.1 KiB
Raw Blame History

PROGRESS · 报告中英两版 · 2026-09-29

任务书:docs/tasks/TASK-report-english-edition-20260929.md。执行:Claude(直接执行模式)+ 两个 fork 子代理(词典 E3、引擎 E1/E2),由 Claude 合并与复验。 分支 codex/report-english-edition-20260929,基于 reader-polish 合入后的 origin/staging = 5f84637e。

交付对照

编号 结论 说明
E1 引擎两种语言 完成 /api/professional_report_reference 接受 languages: ["zh","en"];只算一次 packet,中文照旧渲染,英文由深拷贝 + report_language='en' 渲染;英文含汉字或渲染出错时不给 markdown_en,改给 english_unavailable。不传 languages 时响应与改前逐字节相同
E2 英文渲染 完成 新模块 scripts/pl9_reader_english.py + pl9_reader_english_terms.py(固定英文词表);pl9_reader_export 只在 reader_main 入口按语言分派,中文路径不变;_dignity_label 英文取括号里的英文
E3 词典 完成 references/yoga_rules.json 477 条规则补 effects_en / combo_template_en / strength_en / source_en / accuracy_note_en(去掉 _en 键后与原文件相同);yoga_engine.py 带出 combination_en 等孪生字段,含约 20 处写死的中文默认模板;reader_dasha_applicability 加 language 参数,中文输出用 201 个合成 packet 逐字节比对不变
E4 生成链 完成 新模块 personal-report-english-edition.ts::acceptEnglishEdition:英文必须零汉字、原文不含公开投影要删的词、英文核对表零汉字,否则只记原因码。快照升 version: 2(english 与 englishUnavailable 二选一),v1 旧快照照常读。不动数据库:英文版放在原有的 personal_report_sections 快照 payload 里(该表 payload 无大小约束)
E5 路由 完成 GET /api/reports/:id 多给 englishEdition(ready / unavailable / legacy)、longformMarkdownEn、factTablesEn;读英文出错一律视为 unavailable,不影响中文
E6 阅读页 完成 ?lang=en(服务端页面读取,history.replaceState 写回);切换只在 englishEdition === "ready" 时出现;正文 / 目录 / 核对表 / 分盘核对 / 图例随语言;应用外壳保持中文;buildLongformOutline 的导航与摘要正则补英文对应
E7 导出 完成 导出当前语言,英文文件名 Personal-Report-<日期>[-excerpt]-EN;AI 提示 + 「切到 English」;旧报告 / 英文失败各一句说明;文件大小按当前语言计算
E8 文档 完成 DESIGN.md、VOICE.md、CONTEXT.md(报告语言版本)、CHANGELOG.md、真机清单

三条红线的证据

红线 证据
中文逐字节不变 tests/test_report_english_edition.py:3 个虚构盘,中文与参照提交渲染逐字节相同;不传 languages 的 API 响应相同;前端 assembleReportFactTables(engine, "zh") 与默认输出 deepEqual、projectOrdinaryReportMarkdown(x) 与 (x,"zh") 相同
英文零汉字 Python:子代理用 75 个虚构盘验证零汉字;golden report-reader-main-fictional-en.json 汉字数 0;前端再验一遍(生成链与阅读页各一次)
数字一致 golden 中英两版行对齐(各 1,834 行),逐行数字序列相同,唯一例外是一行瑜伽名称:英文名「Kalatra Dosha (7th Lord in 6/8/12)」写出了宫位,中文名「婚姻障碍(7宫主在凶宫)」没有——这是标签,不是计算值,已在测试里点名固定

既有断言改动(原值 / 新值 / 原因)

文件 原值 新值 原因
frontend/tests/personal-report-view.test.ts「the report TOC is a persistent right-hand rail…」 <ReportToc headings={outline.headings} /> <ReportToc headings={outline.headings} language={language} /> E6:目录标签随语言;目录仍只从同一 outline 构建

验证(Claude 实跑,Linux,Node 22.14 / Python 3.11)

项 结果
tsc --noEmit 0 错
npm run lint 0 error,126 warning(与基线相同)
npm test 全量 基线 5f84637e:4,381 / fail 24;本分支:4,391 / fail 24。失败名单逐条相同(无 Docker 的数据库 / 部署套件),新增 10 条、消失 0 条
next build / 仍 ○ Static
首屏 gzip-9 644,033 B → 644,398 B(+365 B,+0.06%)
Python 定向 test_report_english_edition.py、test_report_english_dictionary.py、test_report_reader_main.py、test_professional_report_reference_api.py 全部通过
Python 快速门 Python 步 1000 passed / 2 skipped;门内 npm test 步用系统 Node 20,67 条失败属环境(Node 22 结果见上)
真实引擎链路 引擎产出的英文 golden 经前端 acceptEnglishEdition 整份通过:原文无泄漏词、公开投影不删一字、导出块零汉字、6 个一级章节与中文一致

过程记录

  • 引擎子代理在最后一次复核与快速门之前因额度中断;其提交 122114ae 工作区干净,复核与快速门由 Claude 补跑(见上表)。
  • 合并时与另一会话的 64aa0ec2(星盘符号说明,改 vedic-chart-svg.tsx)在 VedicChartSvgDrawing 参数处冲突,合并为同时保留 interactive 与 language;报告阅读页不开 interactive,不会出现中文说明浮层。

环境缺口

  • 浏览器级真机与「生成一份新报告」的真实链路:无登录态与 Chrome,清单见 docs/testing/report-english-edition-20260929.md。部署后 staging 生成的第一份报告是英文版的首次真实运行。
  • 数据库套件:无 Docker;本单不改表结构(英文版放在既有快照 payload 里)。

部署核对(2026-09-29 Claude)

Gitea 门禁 validate → publish → migrate → deploy 全部 success;https://staging.jyotisha.chat/api/health 的 deployment.gitCommit = d7772011(含本单的最近一次门禁提交),status: ok;/login 200,未登录 /api/account 401。公开 health 不暴露 swisseph_available(内部项),未核对。