Compare commits

...
@@ -0,0 +1,98 @@
# TASK:全站用户可见文字去掉「·」(UI 规则 8,2026-11-13)
- Gitea:#234
- 分支:`codex/remove-middle-dot-20261113`,从 staging `e5d6c99d` 切出(#220 已合入)。
- Bug 编号:BUG-1870。开工时核对 `docs/BUG_HISTORY.md` 末尾;若已被占用就顺延,并在 PROGRESS 写明。
- 负责验收:Claude(jyotisha-de)
任务书没写的取舍,不得写成"产品决定"或"裁定",一律标「需拍板」。
不得修改或删除既有断言来让测试通过。确需修改,在 PROGRESS 里逐条写明原值、新值和原因。只因「·」改成新写法而改断言的,算正常改动,也要列出。
## 背景
- 产品负责人 UI 规则 8(2026-11-06):不用中间点「·」。
- 产品负责人 2026-11-13 同意了按场景替换的规则,原型见 https://claude.ai/artifact/7nq8yt22n8L3KXiAFQXk4z,「全站去掉「·」」那一张。
- staging 实测:前端约 300 处、60 多个文件。后台导出文本里也有,主要在 `scripts/pl9_full_data_export.py`、`pl9_reader_export.py`、`pl9_reader_english.py`、`pl9_language_terms.py`、`scripts/report_render/audit_chapters.py`、`upstream_coverage.py`。
## 替换规则(已定)
| 场景 | 现在 | 改成 |
|---|---|---|
| 浏览器标签标题 | `星盘 · Jyotisha` | `星盘 - Jyotisha` |
| 中文的两段信息(日期、进度、来源等) | `生日年 · 2026-03-14 到 2027-03-14` | `生日年,2026-03-14 到 2027-03-14` |
| 宫位加星座 | `第 1 宫 · 白羊:太阳` | `第 1 宫(白羊):太阳` |
| 英文同类 | `House 1 · Aries` | `House 1 (Aries)` |
| 并列名称 | `金星 · 土星 · 月亮` | `金星、土星、月亮`;英文用 `, ` |
| 卡片里并排的小字参数 | `D9 · 整宫 · Lahiri` | 拆成并排的元素,靠间距分开,不加任何符号。间距用现有 gap 变量 |
- 不在上表里的情况,选最接近的一行,并在 PROGRESS 写明理由。
- 拿不准的,列进 PROGRESS 的「需拍板」小节,先不改。
- 不得改成其他点状符号,例如 `•` `・` `‧` `∙`,也不得改成 `|` `/`。
## 范围
**要改:用户看得到的文字**
- 网页:页面、组件、metadata title。
- 导出的 .md:个人报告、合盘、年运。
- 报告正文与附录,包括后台渲染出来给用户看的文本。
- `frontend/src/lib/personal-report-reading-contract.ts` 的 basisAuditLine(`${claim} · 上限 …`),来自 #218、#219。
- `frontend/src/components/annual/annual-report-page.tsx` 的头部和进度两处。
**只列清单、不改**
- 后台管理页:`components/admin/**`、`app/admin/**`、`app/(admin)/**`。
- 代码注释。
- 给模型的提示词和写作要求,例如 `consultation-methodology.ts`、`report-interpretation-packs/**`。改提示词会影响模型输出,要另评估。
- 其中有的文本既进提示词又直接显示给用户。这种列进「需拍板」,不改。
- `docs/**`、`references/**`、法律文本 `legal-documents.ts`(法律文本改动要单独过)。
**不要碰**
- 冻结文件:`scripts/jyotish_engine.py`、`jyotish_api_server.py`、`yoga_engine.py`、`consultation_native_layers.py`、`tajika_mudda.py`、`shadbala*.py`、`narayana_*.py`、`functional_benefics.py`、`special_lagnas.py`。其中有「·」的,列进清单。
- `frontend/src/lib/consult-preset-prompts.ts`
## 防复发
新增一个测试 `frontend/tests/no-middle-dot-20261113.test.ts`:
- 扫描 `frontend/src/**/*.{ts,tsx}`,排除上面「只列清单」的路径和注释;
- 字符串里出现「·」就失败,并报出文件和行号;
- 允许清单写在测试文件里,每条注明原因。清单只能放「只列清单」那几类。
后台加一个同样作用的 Python 测试 `tests/test_no_middle_dot_20261113.py`,只覆盖本单改过的后台渲染文件。
## 要改的文件
- 上述范围内的前端和后台文件,以及 CSS(卡片小字拆成并排元素时用)。
- 两个新测试
- `docs/BUG_HISTORY.md`:只在末尾追加一条。
- `docs/tasks/PROGRESS-remove-middle-dot-20261113.md`
## 验收标准
1. 新的两个测试通过,允许清单里只有「只列清单」那几类。
2. 抽查以下页面,没有「·」,文字没有挤压或截断:
- 星盘页
- 个人报告页和它导出的 .md
- 合盘报告
- 年运页
- 报告中心
- 侧栏
3. 卡片小字拆开后,在 390px 宽度下不换行错位;必要时可以换行,但不截断。
4. 现有测试全部通过(基线失败除外,在 PROGRESS 写明)。
5. tsc、eslint(0 错)、quick gate 通过。
## 自测命令
```
cd frontend && npx tsc --noEmit -p . && npx eslint . && npm test
PATH=<venv>/bin:$PATH PYTHONHASHSEED=0 python scripts/run_quality_gate.py --profile quick --skip-frontend-runtime
```
## 进度记录
写在 `docs/tasks/PROGRESS-remove-middle-dot-20261113.md`,包括:
- 每个文件改了几处、用了哪条规则;
- 「只列清单」的完整清单;
- 「需拍板」小节;
- 改过的断言;
- 测试结果。