diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 2fe4ac94..d7ded71d 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -15315,3 +15315,19 @@ - 相关记录:BUG-1115~1117、BUG-1131。 - 复发自:无 - 修复版本:`codex/staging-publish-fix-20261001`。 + +## BUG-1141 | 生时校正缺少度数级时间信号(角度类技法研究) + +- 状态:closed_by_design(2026-10-01 离线研究:9 项预先登记检验 0 项显著,见下) +- 首次发现 / 最近更新:2026-10-01 / 2026-10-01 +- 影响面:生时校正计分只有「大运 + 宫位 / 分盘宫位」类规则(`scripts/active_rectification_event_engine.py`),灵敏度约 1 分钟 ≈ 大运边界 3.8 天;产品追问能否用度数级技法进一步缩小范围。 +- 用户现象:答完选择题后分盘与分钟仍分不开(盘型口径已诚实呈现,BUG-1105 / 1115~1117)。 +- 触发条件:无(研究项)。 +- 根因(研究结论):在 77 例公开 AA 传记事件上,行运压角(TR)、次限推运角(SP)、太阳弧角(SA)三类度数级技法,真实日期下真值分钟的排位与乱序日期无差别:主窗口 ±30 真实日期胜过乱序 31% / 58% / 45%(TR 1° / 2° / 3°)、38% / 37% / 56%(SP)、8.5% / 1.0% / 29%(SA),Bonferroni 门槛 99.44%;年龄结构保持对照同样无信号;按精度、年代拆分 45 格无一达到 95%。SA 1° / 2° 反向偏差校正后不显著、机制未解释。 +- 修复:不改代码;产品口径(盘型 + 可信度、不承诺分钟)不变。 +- 验证:`scripts/research/angle_timing_research.py`,结果 `docs/research/angle_timing_{a1,jitter,subsets}_2026_10_01.json` 两次复跑逐字节一致;`tests/test_angle_timing_research.py` 11 passed;生产代码零改动。 +- 防复发:再提「换某种时间技法就能定到分钟」前,先按本研究的乱序 / 年龄保持双对照在 v5 上预先登记检验;不得在本轮结果上事后挑选容许度、角点或领域映射。 +- 相关记录:BUG-1091、BUG-1105、BUG-1115~1117。 +- 复发自:无 +- 修复版本:研究分支 `codex/rectification-angle-timing-research-20261001`。 + diff --git a/docs/research/ACTIVE_FRONTS.md b/docs/research/ACTIVE_FRONTS.md index 1be1d57e..3976e443 100644 --- a/docs/research/ACTIVE_FRONTS.md +++ b/docs/research/ACTIVE_FRONTS.md @@ -130,3 +130,4 @@ Do not open new product surfaces before at least one of these four lanes is clos - 2026-09-29 打分方法研究(脚手架,判定待 v5):`/docs/research/rectification_scoring_research_2026_09_29.md`——似然比校准权重 / 缺席证据 / 精度追问三条流水线已在 v4 上跑通,所有判定 `pending_v5`;任务书 `docs/tasks/TASK-rectification-scoring-research-20260929.md`,前置 `TASK-rectification-holdout-expansion-20260929.md`。 - 2026-09-29 起评价集换 **v5**(77 例公开 AA,`references/real_case_calibration/minute_rectification_holdout_v5.json`):协议 `holdout_v5_protocol_2026_09_29.md`、构建与基线成绩单 `holdout_v5_build_2026_09_29.md`。后续打分判定以 v5 为准,v4 数字只作历史对照。 - 2026-09-30 盘型口径研究(BUG-1105):`/docs/research/rectification_varga_resolution_2026_09_30.md`——目标从分钟改为分盘上升段。v5 六题后 ±10 D9 / D10 头段 = 真值 88% / 86%,占比 ≥ 0.6 留一法 92% / 90%;±30 约 1/4–1/3 用户可给可信分盘;±60 分盘 blocked。按段选题 ≤ ±30 有 +3~+7 例;提前停不过红线;「不用校正」只对只需 D1 的问题成立。**建议立实现单**(§7)。 +- 2026-10-01 角度类时间技法研究(BUG-1141):`/docs/research/rectification_angle_timing_2026_10_01.md`——行运压上升 / 天顶、次限推运角、太阳弧(1° ≈ 4 分钟),77 例 v5 真实日期对乱序日期 9 项预登记检验 0 项显著(最高胜过 58%,门槛 99.44%);年龄结构保持对照同样无信号;`closed_by_design`。 diff --git a/docs/research/rectification_angle_timing_2026_10_01.md b/docs/research/rectification_angle_timing_2026_10_01.md new file mode 100644 index 00000000..ff3b4146 --- /dev/null +++ b/docs/research/rectification_angle_timing_2026_10_01.md @@ -0,0 +1,102 @@ +# 生时校正「角度类时间技法」研究:行运压角 / 次限推运 / 太阳弧(2026-10-01,BUG-1141) + +> 任务书 `docs/tasks/TASK-rectification-angle-timing-research-20261001.md`。离线研究,生产代码零改动。 +> 数据:`references/real_case_calibration/minute_rectification_holdout_v5.json`(77 例公开 Rodden-AA,开放集,非盲测)。 +> 脚本:`scripts/research/angle_timing_lib.py`、`scripts/research/angle_timing_research.py`;测试 `tests/test_angle_timing_research.py`。 +> 结果:`angle_timing_a1_2026_10_01.json`(主检验)、`angle_timing_jitter_2026_10_01.json`(年龄结构保持的第二对照)、`angle_timing_subsets_2026_10_01.json`(按精度 / 年代拆分)。三份各两次复跑逐字节一致(`PYTHONHASHSEED=0`)。 + +## 1. 结论 + +| 技法 | 一句话结论 | 是否建议进产品 | +| --- | --- | --- | +| TR 行运土星 / 木星 / 罗睺(日精度加火星)压本命上升或天顶 | **无信号**:9 项预先登记检验中,主窗口(±30)真实日期只胜过 31% / 58% / 45% 的乱序日期(容许度 1° / 2° / 3°),年龄结构保持的对照下 62% / 70% / 52% | 否 | +| SP 次限推运上升 / 天顶对本命行星 | **无信号**:主窗口真实日期胜过 38% / 37% / 56% 的乱序;对照二 7% / 30% / 60% | 否 | +| SA 太阳弧上升 / 天顶对本命行星 | **无正向信号**;1° / 2° 容许度下真实日期反而**更差**(胜过乱序 8.5% / 1.0%,对照二 0% / 0%),多重比较校正后不显著,原因未解释,方向相反不能当正向信号用 | 否 | + +- 显著门槛:9 项检验 Bonferroni 校正后需胜过 ≥ 99.44% 的乱序(200 次);任务书原定未校正 95% 也一并报出——**没有任何一格达到 95%**。 +- A2(叠加到六题后验)按任务书只对 A1 显著技法做,本轮**未做**。 +- 与打分层研究(BUG-1091)结论一致的方向:现有 77 例公开传记事件里,找不到能把出生时间定到分钟级的星盘时间信号。区别在于本轮检验的是物理灵敏度足够(1° ≈ 4 分钟)的一类技法,排除的是「灵敏度不够」这个解释。 + +## 2. 方法 + +### 2.1 特征 + +对每例每个候选分钟(真值 ±60,步长 1 分钟)、每件带日期事件,算下列三类接触的最小离度(0° / 90° / 180°): + +| 代号 | 动点 | 被接触点 | 事件精度处理 | +| --- | --- | --- | --- | +| TR | 事件日行运土星、木星、平均罗睺 / 计都;日精度另加火星 | 本命上升、天顶 | 日:当天;月:该月逐日取最近;年:不用(土星一年走约 12°,远宽于容许度) | +| SP | 次限推运(一天一年,同地点)上升、天顶 | 本命日、月、水、金、火、木、土 | 日:当天;月:月中;年:全年 5 点取最近 | +| SA | 太阳弧推进的上升、天顶(弧 = 推运太阳 − 本命太阳) | 同上 | 同 SP | + +- 黄道:回归黄道;行星与角点在同一黄道下的相位与黄道选择无关。交点:平均交点。 +- 推运角点每 5 个候选分钟精算一次、中间线性插值(误差 < 0.05°)。 +- 每例可用事件数中位:TR 5、SP 13、SA 13。 + +### 2.2 检验(预先登记,未事后调参) + +- 候选分数 = 容许度内有接触的事件数;真值排位 = 窗口内其他分钟分数高于真值的比例(并列算半);0 = 真值最好,0.5 = 随机。 +- 主检验:77 例平均真值排位,真实日期 vs 乱序日期(每例每件事按原精度在其生存年份内均匀重抽日期,200 次);9 项 = 3 技法 × 容许度 1° / 2° / 3°;主窗口 ±30,±10 / ±60 一并报。 +- 第二对照(敏感性):每件事前后挪 1~3 年(精度、月日保留),保持真实传记的年龄结构,50 次。 +- 稳健性拆分:按事件精度(日 / 月 / 年)与年代(1900 年前 7 例 / 其余 70 例),每格 50 次乱序。 +- A1 特征无可拟合参数,主检验不需要留一法;A2 才涉及权重拟合(未触发)。 + +## 3. 主检验(A1,200 次乱序) + +真值平均排位(越小越好;0.5 = 随机)与真实日期胜过的乱序比例: + +| 技法 | 容许度 | ±10 真实 / 乱序均值 / 胜过 | ±30 真实 / 乱序均值 / 胜过 | ±60 真实 / 乱序均值 / 胜过 | +| --- | --- | --- | --- | --- | +| TR | 1° | 0.517 / 0.501 / 26.5% | 0.514 / 0.500 / 30.8% | 0.521 / 0.502 / 24.2% | +| TR | 2° | 0.494 / 0.499 / 57.8% | 0.493 / 0.498 / 57.5% | 0.504 / 0.501 / 46.0% | +| TR | 3° | 0.512 / 0.499 / 23.5% | 0.500 / 0.499 / 45.0% | 0.507 / 0.500 / 41.5% | +| SP | 1° | 0.521 / 0.503 / 27.8% | 0.511 / 0.503 / 38.0% | 0.518 / 0.504 / 31.0% | +| SP | 2° | 0.512 / 0.502 / 36.5% | 0.512 / 0.502 / 36.5% | 0.526 / 0.501 / 18.0% | +| SP | 3° | 0.485 / 0.497 / 69.2% | 0.495 / 0.499 / 56.0% | 0.512 / 0.498 / 30.5% | +| SA | 1° | 0.532 / 0.508 / 21.0% | 0.556 / 0.509 / 8.5% | 0.585 / 0.518 / 1.5% | +| SA | 2° | 0.547 / 0.499 / 4.0% | 0.575 / 0.505 / 1.0% | 0.592 / 0.514 / 0.0% | +| SA | 3° | 0.492 / 0.501 / 64.8% | 0.526 / 0.507 / 29.0% | 0.549 / 0.516 / 13.5% | + +乱序均值的标准差约 0.02~0.03;真实值都在乱序分布之内或偏向更差一侧。 + +## 4. 第二对照:年龄结构保持(50 次,每件事挪 1~3 年) + +| 技法 | 容许度 | ±30 真实 / 挪动均值 / 胜过 | +| --- | --- | --- | +| TR | 1° / 2° / 3° | 0.514 / 0.521 / 62% · 0.493 / 0.506 / 70% · 0.500 / 0.502 / 52% | +| SP | 1° / 2° / 3° | 0.511 / 0.477 / 7% · 0.512 / 0.500 / 30% · 0.495 / 0.502 / 60% | +| SA | 1° / 2° / 3° | 0.556 / 0.506 / 0% · 0.575 / 0.509 / 0% · 0.526 / 0.538 / 66% | + +**SA 反向偏差的更正**:A1 中 SA 1° / 2° 真实日期反而更差,研究中一度推测是乱序对照改变了年龄分布(太阳弧 ≈ 年龄)。第二对照保持了年龄结构,偏差仍在,所以该推测**不成立**。它是「真值分钟在真实事件日期上更少出现太阳弧接触」,校正后不显著,机制未解释;即便为真也是事后发现、方向相反,按任务书不得据此建正向特征。 + +## 5. 稳健性拆分(±30,每格 50 次乱序) + +| 子集 | 例数 | TR 1° / 2° / 3° 胜过 | SP 1° / 2° / 3° 胜过 | SA 1° / 2° / 3° 胜过 | +| --- | --- | --- | --- | --- | +| 日精度事件 | 77 | 54% / 69% / 44% | 4% / 16% / 14% | 12% / 10% / 44% | +| 月精度事件 | 77 | 8% / 16% / 50% | 60% / 64% / 22% | 16% / 12% / 94% | +| 年精度事件(TR 不适用) | 77 | 50% / 50% / 50% | 80% / 62% / 62% | 20% / 2% / 10% | +| 1900 年前(LMT 时代) | 7 | 2% / 19% / 0% | 24% / 0% / 6% | 2% / 20% / 60% | +| 1900 年及以后 | 70 | 60% / 74% / 74% | 44% / 54% / 66% | 16% / 2% / 30% | + +45 格里没有一格达到 95%;最高 94%(月精度 · SA 3°)在 45 格中出现一次,符合随机波动。1900 年前 7 例普遍更差,与这批记录可能存在历史时区误差一致。事件日期 ±7 天 / ±1 月偏移的稳健性只用于检验已存在的信号,本轮无信号,未做(写明,不算通过)。 + +## 6. 局限 + +- 只测了「接触计数」这一种组合方式;把事件领域映射到特定角点(如事业 → 天顶)、只用相合等更窄的预设未测。它们是更多的检验,需要新的预先登记与多重比较校正,不能在本轮结果上事后挑选。 +- 开放集非盲测;事件来自公开传记,记录到「月 / 日」的事件仅占 40%。 +- 只用了上升 / 天顶两个角点与七颗本命行星;主限向运(primary directions)、Naibod 弧未测。 + +## 7. 给产品的话 + +这一轮把「是不是因为我们用的规则灵敏度不够」这个最后的解释也排除了:灵敏度够的角度类技法,在 77 例真实传记上同样拿不出比随机日期更好的分钟信号。现有产品口径(盘型 + 可信度、不承诺分钟)保持不变;BUG-1141 按 `closed_by_design` 关闭。 + +## 附:复跑命令 + +```bash +export PYTHONHASHSEED=0 +python3 -m scripts.research.angle_timing_research --stages a1 --shuffles 200 --json-out docs/research/angle_timing_a1_2026_10_01.json +python3 -m scripts.research.angle_timing_research --stages jitter --subset-shuffles 50 --json-out docs/research/angle_timing_jitter_2026_10_01.json +python3 -m scripts.research.angle_timing_research --stages subsets --subset-shuffles 50 --json-out docs/research/angle_timing_subsets_2026_10_01.json +python3 -m pytest -q tests/test_angle_timing_research.py +``` diff --git a/docs/research/rectification_minute_resolution_closure_2026_09_14.md b/docs/research/rectification_minute_resolution_closure_2026_09_14.md index a74f92bf..3524f5fd 100644 --- a/docs/research/rectification_minute_resolution_closure_2026_09_14.md +++ b/docs/research/rectification_minute_resolution_closure_2026_09_14.md @@ -113,3 +113,9 @@ - 按段重排同一题库:≤ ±30 头段命中 +3~+7 例、宽度 −2 分钟、真值段保留不降;±60 更差。提前停(占比 0.7 / 0.8)少问 1–2 题但丢 1 例真值段,不过红线。 - 「不用校正」出口对婚恋 / 事业 / 综合三种取盘策略都是 0/77——D9 / D10 在 ±10 里总会换至少一次;只对只需 D1 的问题成立(±10 64/77)。 - 全文与实现要点:`docs/research/rectification_varga_resolution_2026_09_30.md`。 + +## 11. 角度类时间技法(2026-10-01 研究单,BUG-1141) + +- 前几轮排除的都是「大运 + 宫位」类规则(1 分钟 ≈ 大运边界 3.8 天,灵敏度不够)。本轮测了灵敏度够的一类:行运土星 / 木星 / 罗睺压本命上升或天顶度数、次限推运上升 / 天顶、太阳弧上升 / 天顶对本命行星(1° ≈ 4 分钟出生时间)。 +- 77 例 v5:真实事件日期 vs 乱序日期(200 次)9 项预先登记检验 **0 项显著**(主窗口 ±30 真实日期最多胜过 58% 的乱序,Bonferroni 门槛 99.44%);保持年龄结构的第二对照(每件事挪 1~3 年)同样无信号。太阳弧 1° / 2° 在真实日期上反而更差,校正后不显著、机制未解释,不可作正向特征。 +- 结论:「灵敏度不够」这个解释也被排除;在公开传记事件上,找不到能把出生时间定到分钟级的星盘时间信号。全文 `docs/research/rectification_angle_timing_2026_10_01.md`。 diff --git a/docs/tasks/PROGRESS-rectification-angle-timing-research-20261001.md b/docs/tasks/PROGRESS-rectification-angle-timing-research-20261001.md new file mode 100644 index 00000000..14e6ad2c --- /dev/null +++ b/docs/tasks/PROGRESS-rectification-angle-timing-research-20261001.md @@ -0,0 +1,43 @@ +# PROGRESS · 生时校正「角度类时间技法」研究(2026-10-01,BUG-1141) + +任务书:`TASK-rectification-angle-timing-research-20261001.md`。执行:Claude fork 子代理。分支 `codex/rectification-angle-timing-research-20261001`,基线 `origin/staging` @ `a6f6f576`。只 commit 不 push。 + +## 一句话 + +三类度数级技法(行运压角 / 次限推运角 / 太阳弧角)在 77 例 v5 上,9 项预先登记检验 **0 项显著**;年龄结构保持对照同样无信号;A2 未触发;BUG-1141 `closed_by_design`。结论与数字见 `docs/research/rectification_angle_timing_2026_10_01.md`。 + +## 提交 + +| 提交 | 内容 | +| --- | --- | +| `c9533b69` | A0 特征库 `scripts/research/angle_timing_lib.py` + 测试 | +| `50924778` | A1 runner `scripts/research/angle_timing_research.py`(a1 / jitter / subsets 三阶段)+ 三份结果 JSON | +| 本提交 | 研究文档、ACTIVE_FRONTS、定论页 §11、BUG-1141、README、本 PROGRESS | + +## 硬红线逐条 + +| # | 要求 | 结果 | +| --- | --- | --- | +| 1 | 乱序对照 ≥ 50 次、百分位、≥ 95 才算显著 | 主检验 200 次;Bonferroni 门槛 99.44%,未校正 95% 也报;0 格达到 95% | +| 2 | 留一法 | A1 特征无可拟合参数(计数 + 预先登记的 3 档容许度),不需要;A2 未触发 | +| 3 | 不得挤出真值 | 未改任何后验 / 交付,不适用 | +| 4 | 稳健性 | 按事件精度(日 / 月 / 年)与年代(1900 年前 7 例 / 其余 70 例)拆分,每格 50 次乱序,45 格无一 ≥ 95%;另加年龄结构保持对照(每件事挪 1~3 年,50 次)。±7 天 / ±1 月偏移只用于检验已有信号,本轮无信号,**未做**(如实写,不算通过) | +| 5 | 口径 | 回归黄道(相位与黄道无关),平均交点,容许度 1° / 2° / 3° | +| 6 | 零改动、复跑一致、快速门、隐私、负结果 | `git diff --name-only` 只在 `scripts/research/`、`tests/`、`docs/`;三份 JSON 各两次复跑 `cmp` 一致(`PYTHONHASHSEED=0`);快速门 Python 1036 passed / 1 skipped(与今日 staging 基线 1036 / 1 相同),npm 步因本工作树无 `frontend/node_modules` exit 127(本单零前端改动,环境缺口);隐私守卫通过;SA 反向偏差与「年龄分布」推测被推翻都已写入 | + +## 测试 + +`tests/test_angle_timing_research.py` 11 passed:离度 / 相位、事件解析与精度跨度、取样规则、排位语义、乱序保持精度与种子确定性、本命角点每分钟约 0.25°、分离矩阵形状、A1 runner 确定性与 9 项完整。 + +## 耗时 + +全量 A1(77 例 × 3 技法 × 3 容许度 × 3 窗口,200 次乱序)一遍约 10 分钟;第二对照与拆分各约 5 分钟。 + +## 中途更正 + +A1 中太阳弧 1° / 2° 真实日期反而更差,执行中先推测为乱序对照改变了年龄分布;加做年龄结构保持对照后偏差仍在,推测作废,文档 §4 写明。 + +## 缺口 + +- 领域 → 角点映射、只用相合、主限向运、Naibod 弧未测(需新的预先登记)。 +- 开放集非盲测;事件精度到月 / 日的只占 40%。 diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 75f0a41d..77842793 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -264,6 +264,7 @@ | `TASK-rectification-angle-timing-research-20261001.md` | — | **角度类时间技法研究(离线)**:行运土木罗压本命上升 / 天顶度数、次限推运角、太阳弧角(1° ≈ 4 分钟出生时间),77 例 v5;乱序日期对照 ≥ 50 次必做、留一法、不得挤出真值;显著才叠加到六题后验比头段命中与区间宽度 | 待领取 | BUG-1141 | | `TASK-rectification-message-cleanup-20261001.md` | `PROGRESS-rectification-message-cleanup-20261001.md` | **校正消息清理**:题干两遍(作废旧焦点仍打印题干 + 独立问题块再打印一次)→ 一屏一题干;证据轮正文改为「记下了 N 件事」+ 服务端清单可展开;校正结算后不显示「已完成 N 步」与「1.」泄漏。推翻 BUG-917 作废题留题干、VOICE 逐条复述 | 已验收(Claude 10-01:全套门禁对 staging 209352eb 一致;「1.」来源为推断——收起的有序列表复制补号,结算后整块不渲染已消除;真机待产品) | BUG-1135~1137 | | `TASK-rectification-chart-tier-caveats-20261001.md` | — | **报告与聊天标注判断不了的分盘**:采用后读 `active_birth_provenance`(segment-v1)→ 结果 `segment_summary` 档位,blocked/indistinct 的 D9/D10 在聊天 answer_policy 与一句说明、报告章节顶部提示 + 主题降级;旧资料逐字节不变;不改库、不改 consult/route.ts | 待领取 | BUG-1138~1139 | +| `TASK-rectification-angle-timing-research-20261001.md` | `PROGRESS-rectification-angle-timing-research-20261001.md` | **角度类时间技法研究(离线)**:行运土木罗压本命上升 / 天顶度数、次限推运角、太阳弧角(1° ≈ 4 分钟出生时间),77 例 v5;乱序日期对照 ≥ 50 次必做、留一法、不得挤出真值;显著才叠加到六题后验比头段命中与区间宽度 | 已实现待验收(0/9 预登记检验显著,BUG-1141 closed_by_design;分支 codex/rectification-angle-timing-research-20261001,未推送) | BUG-1141 | | `TASK-rectification-typed-event-scoring-research-20260929.md` | `PROGRESS-rectification-typed-event-research-20260929.md` | **打字经历按选择题规则计分(离线研究,不上线)**:计分通道不对称 + 已入账年份挡题;R0 学业质量题措辞 / 年精度显示成 1 月(冻结文件,需重新冻结) | 已验收(Claude 2026-09-29 合并验收:全量前端 4302/24 与基线同 24 条环境失败、tsc 0、lint 0 error、`/` Static、gzip +0.16%、快速门 pytest 1001 passed、两份回放复跑一致),待部署核对 | BUG-1088、1089 | | `TASK-report-reader-polish-20260929.md` | `PROGRESS-report-reader-polish-20260929.md` | **报告页打磨**:生成入口挪进页面主体(删标题栏按钮)、详情页到底部按钮(懒渲染一次到底)、导出按钮带文字、目录一级/二级分层、去掉「字段」与 RL/NL 缩写表头、状态列同义重复去重、报告表格淡底色、分块导出显示真实文件大小 | Claude 直接执行并自验(tsc 0、lint 0 error、全量 fail 与基线同 24 条、`/` Static、gzip +7 B、快速门 Python 1000 passed),已部署 staging `d7772011`,真机欠 | BUG-1092~1094 | | `TASK-report-english-edition-20260929.md` | `PROGRESS-report-english-edition-20260929.md` | **报告中英两版**:同一次引擎计算渲染 zh/en 两遍(不用模型翻译),瑜伽库 477 条补英文、模板与前端表头英文化;中文逐字节不变、英文零汉字、两版数字序列一致;阅读页 `?lang=en` 切换,导出当前语言 + 「问 AI 建议导出英文版」提示;旧报告不补英文 | Claude 直接执行(含两个 fork 子代理)并自验(tsc 0、lint 0 error、全量 fail 与基线同 24 条、`/` Static、gzip +0.06%、Python 定向全绿),已部署 staging `d7772011`,真机欠 | — |