From 487fed40defdf28ed01e0036e3cfca7fd3af15b4 Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Thu, 3 Sep 2026 08:15:45 +0000 Subject: [PATCH] =?UTF-8?q?docs(tasks):=20upstream=20sync=20brief=20?= =?UTF-8?q?=E2=80=94=20lift=20rectification=20freeze=20for=20three=20scope?= =?UTF-8?q?d=20items=20(task=207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VawU7Xfd5jS9wUEXz1XYmS --- docs/tasks/README.md | 2 +- docs/tasks/TASK-upstream-sync-20260903.md | 46 ++++++++++++++++++++--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 93bd4ce6..fb2b31ab 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -97,7 +97,7 @@ | 任务书 | 进度 | 主题 | 状态 | 落点 | | --- | --- | --- | --- | --- | -| `TASK-upstream-sync-20260903.md` | — | 上游快照推进到 `a6f47abd`、引擎三方合并、health 三窗 / VedAstro REST 桥 / 专业报告导出 / 新字段接聊天与报告;校正本轮冻结不同步 | 待领取 | — | +| `TASK-upstream-sync-20260903.md` | — | 上游快照推进到 `a6f47abd`、引擎三方合并、health 三窗 / VedAstro REST 桥 / 专业报告导出 / 新字段接聊天与报告 / 校正解冻三项(自适应选题、岁差按请求、报告敏感度节) | 待领取 | — | ## 命名与归档 diff --git a/docs/tasks/TASK-upstream-sync-20260903.md b/docs/tasks/TASK-upstream-sync-20260903.md index a601f786..b18a392c 100644 --- a/docs/tasks/TASK-upstream-sync-20260903.md +++ b/docs/tasks/TASK-upstream-sync-20260903.md @@ -50,6 +50,7 @@ - **(a)** 推进上游快照到 `a6f47abd`,按策略 v2 镜像 SKILL.md、语义合并六个文件、整体接收 116 项注册表并由商业覆盖层定状态。 - **(b)** 引擎代码做三方合并(基线 `5db72537`),商业改动优先,只取对产品路径有意义或纯新增的上游改动。 - **(c)** 三项新能力**全部要做**:health 路由对齐上游三窗合同并进入个人报告主题;VedAstro 外部对标切到 REST 桥;`pl9-export` 专业报告导出接进个人报告产品。 +- **(d) 校正解冻(2026-09-03 用户决定)**:撤销"校正冻结新行为直到走查清零"对本任务书的限制,但只解冻到任务 7 列出的三项(自适应选题、岁差/交点模式按请求传递、不确定出生时间的报告敏感度节)。校正打分算法(V5 score service、POLICY v3、matrix-scoring-7)、采用/停止规则(BUG-463 / BUG-503 口径)、会话面交互本轮**仍不动**。解冻后欠着的浏览器走查(`docs/testing/`)必须在任务 7 合入后重新跑一遍。 - **授权不包括**:接收上游约 640 个研究脚本、150 万行证据台账、750 个研究测试、两份 PDF、`skills/financial-astrology`、上游版校正 skill;修改岁差默认值(保持 Raman,见 `TASK-repo-hygiene-20260903.md`);放松写作 agent 输入隔离;改数据库结构;改 `.gitea/workflows/**`。 - **注册表新增 25 项的商业状态默认规则**:凡网页路径(`/api/consultation_workflow`)没有实际执行的,覆盖层一律 `research_only_blocked`;只有 `scripts/full_technique_invocation_matrix.py` 证明会执行的才可写 `partial` 或 `reference_only`。不得因上游写 `covered` 就进确定性结论。 @@ -58,15 +59,20 @@ | 产品面 | 上游相关变化 | 本任务书落点 | | --- | --- | --- | | 普通聊天(`/api/consultation_workflow` → 折叠技法审计表) | finance 别名、health 三窗、Ashtottari 状态、`_build_technique_audit_table` / `_build_module_execution_audit`、叙事种子 `timing_narrative`、`planetary_friendship` 模块 | 任务 1(覆盖层与路由文档)、任务 2(引擎合并)、任务 3(health)、**任务 6(把新字段接到响应与前端)** | -| 生时校正(`/api/rectification/*`、`/api/active_rectification_events`) | `3bb90620` 分钟收窄、`d5b83c71` `compare_candidate_minutes` + 事件域注册表、`dbb9804a` 弹性流程、上游便携版校正 skill v2.0.0 | **本轮不同步**,理由见硬红线 3 的补充说明;解冻后另开任务书评估 `compare_candidate_minutes` 与事件域注册表 | +| 生时校正(`/api/rectification/*`、`/api/active_rectification_events*`、前端 birth-time-journey) | `3bb90620` 自适应选题器(含答案泄漏)、`dbb9804a` 亲属事件域 + 岁差/交点按请求传递、`d5b83c71` `compare_candidate_minutes` + 事件域注册表、`_build_birth_time_sensitivity` + 四个 `flexible_birth_time_*` 模块、便携版 skill v2.0.0 | **任务 7**(只取选题器、岁差/交点传递、报告敏感度节三项);其余不取,理由见硬红线 3 | | 报告生成(个人报告管线、报告中心) | health 主题、`pl9-export`、解读模板注册表 +145 行、`timing_narrative` / `pratyantar_dasha_timeline` / `planetary_friendship` 可作解读性事实 | 任务 1(模板注册表)、任务 3(health 主题)、任务 5(专业导出)、任务 6(新字段进 bundle) | ## 硬红线 1. **方向单向。** 只从 `/workspace/yinduzhanxing` 读,不得向其写入、提交或推送;不得改 `sync_policy.v2.json` 的方向、受保护路径与最小保护集。 2. **受保护路径不接收上游内容**:`skills/jyotish-birth-time-rectification/**`、`skills/jyotish-vedic-astrology/**`(只能新增版本目录,不能改既有版本)、根 `SKILL.md`(只允许语义合并本任务书列出的三段)、`frontend/**`、`deploy/**`、`.gitea/**`、`references/oracle/commercial_skill_truth_overlay.v1.json`(只允许按决策记录新增条目)。 -3. **校正冻结。** `scripts/active_rectification_questions.py`、`scripts/active_rectification_events.py`、`scripts/active_rectification_event_engine.py`、`scripts/birth_time_rectifier.py`、`scripts/candidate_time_sensitivity_scan.py` 及一切 `minute_rectification_*` / `dynamic_rectification_*`:**本轮不合并上游改动**,在 PROGRESS 记录"跳过、上游改了什么"即可。 - 补充说明(2026-09-03 核实):上游自快照以来对校正的改动只有四个提交。`3bb90620`(08-31 "improve rectification minute narrowing")新增 `_known_case_regression_hint`,对 `1993-04-17` 出生时间直接读作者本人的已知案例标定文件并把 `14:49` 当作回归目标,**这就是 `docs/tasks/TASK-rectification-*` 与 BUG 历史里定性过的答案泄漏**,产品仓已核实干净,绝不能合回来。`a9058663` 的便携版校正 skill 是 v2.0.0 独立谱系,与本仓 v10.0.14 服务器权威 Case 模型不同源,属受保护路径。`d5b83c71` 的 `compare_candidate_minutes` 与 `references/rectification_evidence_contract_v1.json`(事件域注册表)和 `dbb9804a` 的弹性流程是**可能有价值的候选**,但本仓校正正处于"冻结新行为直到浏览器走查清零"期(2026-09-03 产品决定),本轮只在 PROGRESS 记录其内容,解冻后另开任务书评估。 +3. **校正只按任务 7 的范围动。** 上游自快照以来对校正的改动共四个提交,逐个核过: + - `3bb90620`(08-31)新增 `_known_case_regression_hint`:对 `1993-04-17` 出生时间读作者本人的已知案例标定文件,把 `14:49` 当回归目标并在分钟排名里 +5 分。**这就是已定性的答案泄漏,一行都不得进入本仓**;同一提交里按 `sensitivity_count` 排分钟的 `minute_rankings` 也不取(比本仓 V5 打分弱)。该提交里的 `active_rectification_selector.py`、`factual_reliability`、把 `scan_candidate_times` 挂进 `_candidate_scan` 是可取部分,见任务 7a。 + - `dbb9804a`(08-18)亲属事件域(parent / sibling / spouse_family)与分盘扩到 D3/D7/D12:本仓 `family` 域已含 D12/D7/D3,分盘列表 `[2,3,4,5,7,9,10,12,24,30]` 是超集,不取;该提交里 `ayanamsa` / `node_mode` 从请求读取的模式取,见任务 7b。 + - `d5b83c71`(08-27)`compare_candidate_minutes` 固定分钟微比较:本仓 V5 score service、`minute_rectification_pairwise_v3.py`、`minute_candidate_discriminability.py`、`build_stability_diagnostics` 已覆盖且更强,不取。`references/rectification_evidence_contract_v1.json` 事件域注册表是治理数据,本仓 `rectification_technique_contract.py` 已是代码化合同且不含 D60/D40/D45,规则等价,不取,PROGRESS 记一句。 + - `a9058663`(08-31)便携版校正 skill v2.0.0:与本仓 v10.0.14 服务器权威 Case 模型不同源,受保护路径,不取。 + - `_build_birth_time_sensitivity` + `flexible_birth_time_profile / report_support / full_report_projection / report_section`(四模块 761 行,测试 440 行,除被守护的 1993 分段表外无数据文件依赖):取,见任务 7c,但窗口来源必须改为本仓校正案例的可信区间,不用上游固定 ±1 分钟。 + 校正的打分算法、阈值、采用/停止规则、`frontend/src/lib/rectification-agentic/v9/**` 的会话状态机本轮不动;`minute_rectification_*` / `dynamic_rectification_*` 不合并上游(上游没有对应文件)。 4. **咨询响应契约不得变形。** `/api/consultation_workflow` 响应里前端已读取的键路径与类型(任务 0 的 golden 快照)改后必须逐一存在且类型一致;上游改动只允许**新增**键,不得改名、删键、改形状。`frontend/tests` 里的契约测试与 `tests/test_api_server_growth_contract.py` 等 Python 契约测试必须绿,不得改断言来迁就(除非断言锁的就是本轮要改的注册表计数或 README 徽章,改动处注明原值原因并在 PROGRESS 单列)。 5. **合并冲突的裁决规则**:商业侧函数体优先;上游改动仅在(i)纯新增函数/子命令且其 import 在本仓可解析,或(ii)修的是计算正确性且本仓同函数无商业改动时才取。任何 import 了本仓不存在模块的上游代码块一律不取,不得为了让它跑而顺手拖入研究脚本。每处冲突的取舍写进 PROGRESS 的冲突表。 6. **隐私与体积**:不得引入 `.pdf`、私有出生资料、PL9 参考报告原文、`review-only` 全量 payload;`scripts/public_release_privacy_scan.py` 与 `scripts/commercial_privacy_artifact_scan.py` 必须过。fixture 一律用虚构 smoke 出生数据。 @@ -100,7 +106,7 @@ git -C /workspace/yinduzhanxing rev-parse HEAD - `frontend/src/lib/personal-report-generation.ts`、`report-theme-evidence-plan.ts`、`personal-report-route-core.ts`、`consultation-methodology.ts` - 上游:`docs/architecture/professional_report_reference_contract_v1.md`、`docs/research/vedastro_rest_bridge_default_decision_2026_09_01.md`、`docs/research/ashtottari_primary_text_verification_2026_09_01.md`、`references/strict-workflow-router.md` §7 -**串行顺序**:任务 0 → 1 → 2 在分支 `codex/upstream-sync-20260903` 上完成并验收后合入 staging;任务 3 / 4 / 5 / 6 在其上另开 `codex/upstream-capabilities-20260903`,任务 6 先于任务 3 做(任务 3 的 health 种子沿用任务 6 打通的透传路径),其余可并行但推送串行。任务 4 不依赖任务 2,如需提前可单独分支。 +**串行顺序**:任务 0 → 1 → 2 在分支 `codex/upstream-sync-20260903` 上完成并验收后合入 staging;任务 3 / 4 / 5 / 6 / 7 在其上另开 `codex/upstream-capabilities-20260903`,任务 6 先于任务 3 与 7c 做(两者都沿用任务 6 打通的透传路径),7b 排在 `TASK-repo-hygiene-20260903.md` 之后,其余可并行但推送串行。任务 4 不依赖任务 2,如需提前可单独分支。 --- @@ -246,10 +252,40 @@ git -C /workspace/yinduzhanxing rev-parse HEAD --- +## 任务 7(P1)· 校正:自适应选题、岁差按请求传递、报告出生时间敏感度节 + +### 7a · 自适应选题器(P1) + +- 引入上游 `scripts/active_rectification_selector.py`(`select_next_questions`:按可区分答案跨度、事实可靠度、作答成本、域多样性、剩余候选数、**分钟相关度**打分选题)与其测试 `tests/test_active_rectification_selector.py`。分钟相关度是核心价值:只优先问"其敏感层在剩余候选分钟窗口内真的会变"的题,直接针对本仓已知的"题库分不开相邻 top-2"问题。 +- `scripts/active_rectification_questions.py`:按上游给题库加 `factual_reliability`、`positive_cluster` / `negative_cluster`,`_candidate_scan` 挂 `scan_candidate_times` 的 `minute_scan`,`build_questionnaire` / `score_answers` 返回 `selection` / `next_round_selection`(**新增键**,`next_round_questions` 等旧键保留)。**不引入** `_known_case_regression_hint`、`regression_hint`、`minute_rankings`、`minute_focus`。 +- 本仓 `scan_candidate_times` 只返回各分盘上升星座;选题器的 `_minute_feature_value` 需要更细特征。按上游改法给扫描行**新增** `d1_longitude` 与完整上升对象(旧字段不动),并把分盘列表里的 D1 去掉。 +- 前端 `birth-time-journey-engine-model.ts` / `birth-time-journey-turn.ts`:自适应轮的 `nextQuestion` 改为优先取服务端 `next_round_selection.selected_questions[0]`,服务端没给时回退现有逻辑。基线轮不变。 +- 验收:`tests/test_active_rectification_questions.py`(按上游 +64 行的断言更新,但删掉与 regression_hint 相关的用例)与选题器测试绿;`npx tsx --test tests/rectification-*.test.ts` fail=0 且用例数不少于基线 62 个文件;用本仓虚构 smoke 案例跑一次完整问答,PROGRESS 附"每轮所选题 + 其分钟相关度"表,证明选题确实随候选窗口变化;V5 打分输出对同一答案集逐字节不变(选题只改顺序,不改分数)。 + +### 7b · 岁差与交点模式按请求传递(P1,与 `TASK-repo-hygiene-20260903.md` 串行) + +- `scripts/active_rectification_event_engine.py`(`AYANAMSA` / `NODE_MODE` 全局常量三处)、`active_rectification_questions.py`、`candidate_time_sensitivity_scan.py`(本仓签名无 `ayanamsa`):改为 `request.get("ayanamsa", DEFAULT_AYANAMSA_NAME)` / `request.get("node_mode", ...)`,默认值不变(Raman)。`/api/rectification/*` 与 `/api/active_rectification_*` 的请求体接受这两个键并写进回执。 +- 顺序:仓库整备任务书的任务 0 已规定"校正引擎按 Raman 校准的阈值与 golden 本轮不动,只确认 lahiri 下不崩"。本项在其之后做:整备任务书交付 `resolveAyanamsa(profile)` 后,校正前端把它传给 Python。若整备任务书尚未合入,本项只做 Python 侧并保持默认值,前端传参留到整备任务书合入后补一个小提交。 +- 验收:默认请求(不带 ayanamsa)的 V5 输出逐字节不变;带 `ayanamsa=lahiri` 的请求回执里 `ayanamsa` 为 `lahiri` 且计算确实按 Lahiri(用 smoke 案例对比上升度数);`tests/test_active_rectification_api.py` 及本仓 38 个 Python 校正测试绿。 + +### 7c · 不确定出生时间的报告敏感度节(P2,依赖任务 2 与任务 6) + +- 引入上游四个 `flexible_birth_time_*` 模块与测试;`_build_birth_time_sensitivity` 里读 1993 分段表的 `_load_1993_candidate_segment_table` 与 `candidate_segment_table` 一并删掉,`candidate_micro_compare` 段不要。窗口来源改为:报告请求带的出生时间精度真值(`BIRTH_TIME_ACCURACY`,`TASK-consultation-birth-accuracy-20260901.md` 已贯通)为 `confirmed` 时**不生成**本节;为 `provisional` / `approximate` 时窗口取校正案例已采用的可信区间(案例不存在时用精度等级对应的固定宽度,宽度表写进代码常量并在 PROGRESS 说明),上限 15 个候选分钟,超出则只取区间两端与代表分钟。 +- 产物:`consultation_workflow` 响应新增 `birth_time_sensitivity`(schema 沿用上游 `jyotish.report_birth_time_sensitivity.v1`,`status ∈ {not_applicable, candidate_window_only}`),个人报告 bundle 新增对应的解读性事实(哪些主题结论在窗口内稳定、哪些敏感),报告附录多一节"出生时间敏感度",正文各章在该主题被标为敏感时加一句边界提示。writer 输入隔离与 schema 规则沿用。 +- 验收:`confirmed` 案例的报告与改前逐字节一致(bundle hash 不变);`provisional` 案例的报告附录出现敏感度节,且每个"敏感"判断能追溯到窗口内至少一个分钟的层变化;引擎侧 `python scripts/jyotish_engine.py full-reading` 带窗口参数不依赖任何 references 数据文件;前端 `tsc` 0 错,报告测试绿。 + +### 任务 7 通用红线 + +- 仓库内不得出现任何真实出生案例;任务 7 全部 fixture 用虚构 smoke 数据。合并前 `grep -rn "1993-04-17\|14:49" scripts tests frontend/src` 必须为空(或只命中与该日期无关的既有测试数据,逐条说明)。 +- `ALGORITHM_VERSION` / `POLICY` 常量不变;若任何 golden 变化,说明是新增键还是数值变化,数值变化即视为越界。 +- 合入后重跑 `docs/testing/` 里校正的浏览器走查清单,结果写 PROGRESS;走不了的写环境缺口。 + +--- + ## BUG 编号起点 开工时核对 `docs/BUG_HISTORY.md` 最大号;截至本任务书为 **BUG-510**,新条目从 **BUG-511** 起。 ## 回报格式 -`docs/tasks/PROGRESS-upstream-sync-20260903.md`(任务 0–2)与 `docs/tasks/PROGRESS-upstream-capabilities-20260903.md`(任务 3–6):每个任务写做了什么、测试数字、冲突表、偏离与原因、环境缺口;并在 `docs/tasks/README.md` 状态板改状态。 +`docs/tasks/PROGRESS-upstream-sync-20260903.md`(任务 0–2)与 `docs/tasks/PROGRESS-upstream-capabilities-20260903.md`(任务 3–7):每个任务写做了什么、测试数字、冲突表、偏离与原因、环境缺口;并在 `docs/tasks/README.md` 状态板改状态。