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