# PROGRESS · 报告与聊天标注判断不了的分盘(2026-10-01) 任务书:`TASK-rectification-chart-tier-caveats-20261001.md`(BUG-1138 / BUG-1139)。执行:Claude fork 子代理。分支 `codex/rectification-chart-tier-caveats-20261001`,基线 `origin/staging` @ `437dcecb`。只 commit,未 push。 ## 环境 Linux,Node 22.14(`/exec-daemon/node`),Python 3.13(系统 `python3`,本机无 `.venv`)。`frontend/node_modules` 用 `cp -al` 硬链主检出(同一 lockfile;Turbopack 不接受软链),未执行 `npm ci`。基线在独立 worktree `.worktrees/tier-caveats-base`(`437dcecb`)同机同依赖量。无 Docker:真库断言用 PostgreSQL 17.9 本地替身,正式证据待产品真 Docker。 ## 实现 | T | 内容 | 提交 | | --- | --- | --- | | T1 | `frontend/src/lib/rectification-adopted-chart-tiers.ts`:仅 `active_birth_provenance.contract === "segment-v1"` 时按 `case_id` 读 `get_agentic_rectification_case_dossier`(服务账号),解析 `latest_result.decision_receipt.inference_state.segment_summary`,`blocked` / `indistinct` → 不可判分盘;同 Case 有更新结果用更新的,跨 Case 拒绝;5 分钟缓存;失败记日志返回 null | `5f279214` | | T2 | 聊天:共用范围读取 `loadReportCandidateRange` 在 segment-v1 时附带 `unreliableVargas`(经服务账号读资料来源列,`20260927020000` 已授列权);`prepareConsultationRoute` 写入排盘工具输入 `unreliable_vargas`;`runConsultationWorkflow` 从引擎载荷剔除该字段,并经 `applyUnreliableVargasToWorkflowContext` 写 `answer_policy.unreliable_vargas` / `deterministic_claims_forbidden_for` 与一句 `user_facing_limitation`;`projectEvidenceContract` 把两项透传进模型数据包。**未改** `consult/route.ts`、`product-voice.ts`、`consultation-evidence-card.ts`、`consultation-thinking-plan.ts`(挂接点在路由已注入的范围读取函数) | `e68ac9b2` | | T3 | 报告:`frontend/src/lib/personal-report-chart-caveats.ts` 在不可判分盘的图盘标题与数值位置表标题下插一行提示;`generatePersonalReportLongform` 在计算快照哈希前对中英文正文各自应用;引擎载荷不变,不改 Python | `6372ad8a` | | 真库 | `tests/database-segment-adoption.test.ts` 追加:采用后服务账号读来源列 + 档案 RPC → `{ source: "segment-v1", resultMatch: "adopted", unreliable: [] }` | `da88c325` | | T4 | BUG-1138 / 1139、CHANGELOG、VOICE、DESIGN、真机清单、本记录、README | 末提交 | ## helper 五种输入(T1 测试) | 输入 | 输出 | | --- | --- | | segment-v1,结果 D9/D10 blocked(虚构 ±60 宽窗) | `{ source: "segment-v1", resultMatch: "adopted", unreliable: ["D9","D10"] }`,1 次 RPC | | 旧采用(`contract: "candidate-v2"`) | `null`,0 次 RPC | | 未校正(provenance 为 null) | `null`,0 次 RPC | | 结果缺失(RPC 报错 / 档案无 latest_result) | `null` + 警告 `P0001` / `invalid_segment_summary` | | 摘要损坏(档位与占比不一致) | `null` + 警告 `invalid_segment_summary` | 另:真实引擎扫描(公开 AA,31 分钟)窄窗 → D1 certain、D9/D10 credible,不标注。 ## 聊天 A/B - 工具输入:segment-v1 多 `unreliable_vargas: ["D9","D10"]`,其余字段与旧采用逐字节相同;旧采用工具输入字节快照锁在测试里。 - 引擎载荷:带 / 不带 `unreliable_vargas` 逐字节相同(字段不出站)。 - 上下文与模型数据包:segment-v1 多 `answer_policy.unreliable_vargas`、`deterministic_claims_forbidden_for`,`user_facing_limitation` 末尾追加「你的出生时间范围里,婚恋(D9)、事业(D10)的上升会变,这几张盘判断不了;涉及它们的部分只看本命盘和大运,不按它们下结论。」 - **旧资料逐字节不变(硬红线 1)**:基线 worktree 与本分支各跑同一脚本(`scratchpad/tier/peek2.ts`、`peek3.ts`):旧采用聊天工具输入 `cmp` 相同;真实工作流 golden 下「引擎请求 + 工作流上下文 + 模型数据包」226,949 字节 `cmp` 相同。 ## 报告 A/B - 引擎载荷:旧 / 新资料逐字节相同。 - 落库正文:旧资料 = 引擎原文逐字节;新资料(D9+D10)多 3 行(密度版真实输出:D9 两处、D10 一处图盘标题),删去这 3 行后与引擎原文相同;图盘数不变。 - 读者版真实输出(虚构出生)命中标题:`##### Navamsha`、`##### D9 九分盘`、`##### D10 Dasamsa`、`#### D9 九分盘 数值位置表`、`#### D10 Dasamsa 数值位置表`;英文版:`##### Navamsha`、`##### D9 Navamsa`、`#### D9 Navamsa Position Table`。 - 样例: ``` ##### D9 九分盘 提示:出生时间范围内这张盘的上升会变,这一节仅供参考。 (图盘) ``` - 图盘网格:卡片解析允许标题与图之间恰好一段,提示行成为图注;密度版卡片数前后相同,3 张卡带该图注。 ## 门禁(基线 `437dcecb` vs 本分支,同机同依赖) | 检查 | 基线 | 本分支 | | --- | --- | --- | | tsc | 0 | 0 | | lint | 0 error / 126 warning | 0 error / 126 warning | | npm test | 4809 / pass 4744 / fail 24 / cancel 0 / skip 41 | 4823 / pass 4758 / fail 24 / cancel 0 / skip 41;失败清单逐名相同,基线名 0 丢失,新增 14 | | `/` | Static | Static | | 首屏 gzip(`/` 预渲染 HTML 引用 JS + CSS,gzip -9) | JS 555,325 / CSS 68,764 | JS 555,325 / CSS 68,764(±0.00%) | | 快速门 Python | 1036 passed / 1 skipped | 1036 passed / 1 skipped / 0 failed | | 快速门 npm 步 | 24 环境失败(Docker / PG / 部署) | 同 24 条 | | 真库(替身)`database-segment-adoption.test.ts` | — | 2/2 | | 隐私守卫 | — | 通过 | ## 改动的既有断言 无。`tests/database-segment-adoption.test.ts` 只追加断言,未改既有断言。 ## 缺口 - 真 Docker 未跑(替身证据);真机与真实模型输出待部署 staging 后按 `docs/testing/rectification-chart-tier-caveats-20261001.md` 走。 - 写作模型报告路径(`PERSONAL_REPORT_WRITER_ENABLED = false`)未接 `demoteThemesMissingRequiredCharts`;该路径生产关闭,开启前需补。 - 只给图盘 / 数值位置表加提示,未给依赖 D9/D10 的主题段落(报告正文为引擎输出,无稳定的主题→分盘映射);若要按主题降级需引擎侧配合,另立单。 - 已生成的旧报告不回改(任务书 D3)。 ## Claude 验收修正(2026-10-01) | 项 | 原值 | 新值 | 原因 | | --- | --- | --- | --- | | 分盘可靠性判定 | 最新结果 `segment_summary` 中档位为 blocked / indistinct 即不可判 | 另加:非全窗唯一的分盘,存盘分钟(来源记录 `window_offset_minutes`)不在该盘头段,或偏移缺失,也不可判(`unreliableChartsForSavedMinute`) | 存盘分钟不随采用后的新结果变;D7 头段无交集时退回 D1 头段中点;只看档位会把存盘分钟读不到的星座标为较可信,放宽置信边界(AGENTS §8.4) | | `rectification-adopted-chart-tiers.test.ts` fixture | 来源记录无 `window_offset_minutes` | 补该字段(60 / summary.adoption_minute.offset) | 真实 segment-v1 来源恒含此字段 | | 新增测试 | — | 存盘分钟落在 D9 非头段 → 标注 D9;偏移缺失 → 窗内会变的盘全部标注 | 锁定上面的规则 | ## Claude 独立验收(2026-10-01,变基到 `origin/staging` @ `c304cf3a`) | 检查 | 基线 | 本分支 | | --- | --- | --- | | tsc / lint | 0 / 0 error、126 warning | 0 / 0 error、126 warning | | npm test | 4811 / fail 24 | 4827 / fail 24;失败清单逐名相同,基线名 0 丢失,新增 16 | | 按 `deploy/railway-web.Dockerfile` COPY 清单构建(ERR-113) | — | exit 0 | | `/` / 首屏 gzip | Static / JS 555,325、CSS 68,764 | Static / 完全相同 | | `database-segment-adoption.test.ts`(PostgreSQL 17 替身) | — | 2/2 | | 快速门 | — | Python 1036 passed / 1 skipped / 0 failed;npm 步同 24 条环境失败 | 结论:通过。缺口:真机与真实模型待部署后按 `docs/testing/rectification-chart-tier-caveats-20261001.md`;报告主题段降级未做(引擎读者版正文无稳定主题→分盘映射,需引擎侧配合另开单);写作模型报告路径(生产关闭)未接入。