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

59 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`(内部项),未核对。