Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
6.1 KiB
6.1 KiB
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(内部项),未核对。