diff --git a/docs/tasks/PROGRESS-rectification-latent-audit-20260910.md b/docs/tasks/PROGRESS-rectification-latent-audit-20260910.md index 24f29005..37bd8fee 100644 --- a/docs/tasks/PROGRESS-rectification-latent-audit-20260910.md +++ b/docs/tasks/PROGRESS-rectification-latent-audit-20260910.md @@ -49,3 +49,18 @@ Python 按 **argmax 映射到所在簇** 比较,不改成代表分钟列表。 - 观察项 §5 未立产品单。 - 未提升 `main`。Skill 未升版。 + +## 验收结论(Claude,2026-09-10,基线 `origin/staging` @ `8f9eb587`,staging 已部署同 SHA) + +| 项 | 结论 | +| --- | --- | +| BUG-637 账本 `domain.year` 键只拦存在性探针,三处判定点(`inspectDiscriminatorProbes` / `renderableEventProbe` / `remainingReverseVerifyProbes`)均经 `askedKeysForSameYearDedup`;已答质量键仍丢;BUG-389 记「复发自 BUG-592」 | 通过(`rectification-probe-year-dedupe-20260906.test.ts` 两条新用例) | +| BUG-638 Python `dasha_agreement(clusters=)` 按簇比较、`decision_policy` 传 `candidate_decisions`;TS `dashaAgreementAmongActive(..., clusters)`;`dasha_agreement_pre_inference` 真实存在;BUG-593 记录补正;确认门不因 agree 打开 | 通过(Python 4 条新用例 + `test_same_cluster_dasha_peaks_agree_without_opening_confirmation`;既有冲突用例改成跨簇并写明原值/新值/原因) | +| BUG-639 宽度 = `max(cluster_end)-min(cluster_start)+1`,Python 与 TS 同改;`clusterStart/End` 进确认门解析与 `decideFromDossier` | 通过(`test_indistinguishable_width_uses_cluster_span_not_representatives` + 3 条 TS 用例) | +| BUG-640 公开 `house_table` / `natal_recast` 跟推断代表分钟;引擎原值 `*_pre_inference`;Agent 可见投影剥掉 | 通过(`public house table follows the inference representative minute`) | +| Python 定向 | `test_rectification_refinement_packet.py` + `test_rectification_confirmation_and.py` 23/23 | +| `run_quality_gate.py --profile quick` | 729 过 / 1 失败:`test_shadbala_endpoint_returns_ranked_planet_strength`「timezone inference dependency unavailable」,基线 `d96b24c2` 同环境同样失败,环境缺口,与本轮无关 | +| 前端门禁 | 与 BUG-635/636 单同一次运行:tsc 0 错、lint 0 error、全套失败 27 条均为环境项(见那份进度记录) | +| 部署 | `/api/health` `deployment.gitCommit` = `8f9eb587` | + +环境缺口:未跑 `next build`;无登录态未做真人走查。观察项 §5 未立单,维持原状。 diff --git a/docs/tasks/PROGRESS-rectification-unwritten-evidence-claim-20260910.md b/docs/tasks/PROGRESS-rectification-unwritten-evidence-claim-20260910.md index 57fb5f14..d718df89 100644 --- a/docs/tasks/PROGRESS-rectification-unwritten-evidence-claim-20260910.md +++ b/docs/tasks/PROGRESS-rectification-unwritten-evidence-claim-20260910.md @@ -74,3 +74,24 @@ - 未提升 `main`。Skill 未升版。 - 观察项与 BUG-641~643 未做。 + +## 验收结论(Claude,2026-09-10,基线 `origin/staging` @ `8f9eb587`,staging 已部署同 SHA) + +| 项 | 结论 | +| --- | --- | +| T1 路由 `expectedWrite` → 运行器;无焦点 message 也跑分类器;分类器失败重试一次后 `unknown` fail-open;无年份正则 | 通过(`grep 'd{4}'` 四个文件为空) | +| T2 收尾守卫:无写入的「记下了」/`expectedWrite=evidence` → 收回、`evidence_not_written` 重试一次;第二次主持人正文、`answer.host_fallback`、不结算(`billing.release`) | 通过(`rectification-unwritten-evidence.test.ts` 5 条运行器用例) | +| T3 重试约束句只对 `evidence_not_written` | 通过 | +| T4 客户端只认最后一条 settled 助手消息;`DESIGN.md` 已补 | 通过 | +| T5 Mastra 拒绝信封 → `tool.activity failed code=tool_call_rejected`,batch recap / phase 不认信封 | 通过 | +| T6 BUG-635/636、CHANGELOG、`docs/testing` 第 15 条 | 通过;Bug 历史无个人资料 | +| `tsc --noEmit` | 0 错 | +| `npm run lint` | 0 error / 110 warning(既有债) | +| 前端全套 | 3083 条:3042 过、14 跳过、27 失败;18 条 `spawnSync docker ENOENT`,其余 9 条在基线 `d96b24c2` 同环境下逐条同样失败(`@/` 别名 eval 解析、部署/环境断言),非本轮引入 | +| 静态测试数 | 3045 → 3066(+21) | +| 既有断言改动 | 两处均写明原值 / 新值 / 原因,理由成立 | +| 部署 | `/api/health` `deployment.gitCommit` = `8f9eb587` | + +**口径缺口(P2,已并入 `TASK-rectification-collect-semantics-20260910.md` T3)**:`expectedWriteFromCollectIntent` 只把 `provide_new_evidence` 与 `answer_current_focus + has_new_dated_event` 判为需要写入;按分类器提示词,用户**直接用一件带年月的事回答采集题**会被标成 `answer_current_focus + yes` 且 `has_new_dated_event=false`(该字段定义为「除了回答当前问题之外」),于是 `expectedWrite="none"`,守卫只剩「记下了」文字判定兜着。这是任务书决策 4 自身的漏写,不是执行方偏差。 + +环境缺口:未跑 `next build`(worktree 下 Turbopack 拒外部软链),`/` 是否仍 Static 与首屏 gzip 未核;无登录态,第 15 条真人走查未做。 diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 6d7a8d55..87b03d7c 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -95,8 +95,8 @@ | `TASK-rectification-yearless-probe-downgrade-20260909.md` | `PROGRESS-rectification-yearless-probe-downgrade-20260909.md` | 产品拍板:无年月性格题(D9/D10 风格、月宿边界)降级为平局裁决——带年月题问完且候选仍分不开才问,分值减半(±1)、不计淘汰,报告标「参考」;三列卡性格描述不动;新增离线命中率测量脚本 + 导出 SQL(有出生证用户,聚合);Skill 10.0.21 | 已验收通过 | `fef54b6e`(BUG-629,Skill 10.0.21) | | `TASK-rectification-followups-20260909.md` | `PROGRESS-rectification-followups-20260909.md` | 验收补漏:申报时段拦截只看钟点样式,带钟点的经历(『20:00 左右分手』『3 点到 5 点被车撞』)会被吞(BUG-631);by_time 只算引擎前 9 个候选,一小时窗 17 个候选时卡片列写『还没对照』(BUG-632) | 待验收 | `codex/rectification-followups-20260909`(BUG-631~632) | | `TASK-rectification-evidence-turn-empty-answer-20260910.md` | `PROGRESS-rectification-evidence-turn-empty-answer-20260910.md` | 证据轮模型无正文被判整轮失败:证据、评分、下一问都已落库却只剩『没有拿到下一个问题』(BUG-633);答题旁白只说『范围没变』、时间线写死『还在收窄』(BUG-634) | 待验收 | -| `TASK-rectification-unwritten-evidence-claim-20260910.md` | `PROGRESS-rectification-unwritten-evidence-claim-20260910.md` | 证据轮模型只说『记下了』却没调 batch、没设下一问,财务一件静默丢失、流程停在原题且照常扣点(BUG-635);校正流不识别 Mastra schema 拒绝信封,会把被拒的 batch 报成 completed(BUG-636) | 待验收 | `codex/rectification-unwritten-evidence-claim-20260910` | -| `TASK-rectification-latent-audit-20260910.md` | `PROGRESS-rectification-latent-audit-20260910.md` | 顺带审计:账本派生同年键误杀 `known_event_quality`(BUG-637,BUG-389 复发);双轨一致性按 31 分钟逐分判冲突并降置信度、与报告两套口径(BUG-638);不可分宽度按簇代表分钟少算(BUG-639);引擎与推断层两套代表分钟、回执宫位表不是卡片那一分钟(BUG-640);另 8 条观察项 | 待验收 | `codex/rectification-unwritten-evidence-claim-20260910` | +| `TASK-rectification-unwritten-evidence-claim-20260910.md` | `PROGRESS-rectification-unwritten-evidence-claim-20260910.md` | 证据轮模型只说『记下了』却没调 batch、没设下一问,财务一件静默丢失、流程停在原题且照常扣点(BUG-635);校正流不识别 Mastra schema 拒绝信封,会把被拒的 batch 报成 completed(BUG-636) | 已验收通过(2026-09-10,Claude;环境缺口:`next build` / 真人走查) | `codex/rectification-unwritten-evidence-claim-20260910` | +| `TASK-rectification-latent-audit-20260910.md` | `PROGRESS-rectification-latent-audit-20260910.md` | 顺带审计:账本派生同年键误杀 `known_event_quality`(BUG-637,BUG-389 复发);双轨一致性按 31 分钟逐分判冲突并降置信度、与报告两套口径(BUG-638);不可分宽度按簇代表分钟少算(BUG-639);引擎与推断层两套代表分钟、回执宫位表不是卡片那一分钟(BUG-640);另 8 条观察项 | 已验收通过(2026-09-10,Claude;环境缺口:`next build` / 真人走查) | `codex/rectification-unwritten-evidence-claim-20260910` | | `TASK-rectification-collect-semantics-20260910.md` | `PROGRESS-rectification-collect-semantics-20260910.md` | 产品决策三改:Skill 去掉「财务/健康只有主动说才问」并清空 Python `VOLUNTEER_ONLY`,升 10.0.22(BUG-641);带年份线索的采集题优先、题干带线索不矛盾,推翻 BUG-539 的整句去前缀(BUG-642);删掉「没有/记不清」原字匹配,分类器分 no/unsure 两类(BUG-643) | 待执行 | `codex/rectification-collect-semantics-20260910` | | `TASK-rectification-superseded-focus-duplicate-20260910.md` | `PROGRESS-rectification-superseded-focus-duplicate-20260910.md` | P0:一轮两次 batch 让感情采集题被顶替成 superseded 行;题号唯一约束含已结束行、汇总只聚合 declined/skipped,计划层看不见→撞号 `duplicate_focus` 被当「已问过」→出口误走交付旁白无卡(BUG-644);交付口吻与 `can_adopt=false` 矛盾(BUG-645) | 待执行 | `codex/rectification-superseded-focus-duplicate-20260910` | diff --git a/docs/tasks/TASK-rectification-collect-semantics-20260910.md b/docs/tasks/TASK-rectification-collect-semantics-20260910.md index fc7dfaa2..ad0d8dea 100644 --- a/docs/tasks/TASK-rectification-collect-semantics-20260910.md +++ b/docs/tasks/TASK-rectification-collect-semantics-20260910.md @@ -43,6 +43,7 @@ - 采集题分类器提示词(`turn-intent-classifier.ts` 的 collect 分支)加两条明确口径:「没有、没发生过、这方面没什么」→ `answer_current_focus` + `answer_class=no`(该方面没有事,本次不再问);「记不清、不记得、忘了、想不起来、以后再说」→ `answer_current_focus` + `answer_class=unsure`(先放着,以后可补)。带年月的新经历仍按现有规则进 `provide_new_evidence` / `has_new_dated_event`。`weak_yes` / `yes` 对采集题无意义,返回即视为 `unclear` 走 Agent。 - 路由:`shouldDeclineCollectFocus` 改为 `collectFocusCloseStatus(classified): "declined" | "skipped" | null`,`no`→declined、`unsure`→skipped,两者都走 `applyCollectFocusDenial`(ack 文案沿用 `collectDeclinedAck` / `collectSkippedAck`);`has_new_dated_event` 为 true 时仍 `deferFollowup` 并进 Agent。分类器抛错或返回 null:**不做关键词兜底**,按现状进 Agent(Agent 可调 `resolve-focus`),并在 `RectificationRunDiagnostic` 记 `collectIntent=unclassified`。 - 多说一句:分类器对每条采集回答都已在跑,本改动不增加模型调用次数,只是删掉两条捷径。 +- **补(2026-09-10 验收 BUG-635 时发现,P2)**:`expectedWriteFromCollectIntent` 漏掉了最常见的一种——用户直接用一件带年月的事回答采集题。按分类器提示词它会是 `answer_current_focus + yes/weak_yes` 且 `has_new_dated_event=false`,于是 `expectedWrite="none"`,BUG-635 守卫只剩「记下了」文字判定。本单改口径:**collect 焦点**下 `answer_current_focus` 且 `answer_class ∈ {yes, weak_yes}` → `expectedWrite="evidence"`(choice 焦点不变)。验收:`rectification-turn-intent-classifier.test.ts` 加该映射用例;`rectification-unwritten-evidence.test.ts` 加「collect 焦点 + yes + 无写入 → 重试」用例。 - 验收:`rectification-turn-intent-classifier.test.ts`:「没有」→no、「不记得了」「记不得」「忘了」→unsure、「2021 年搬过家」→provide_new_evidence、「没有,不过 2019 年换过工作」→no + has_new_dated_event;`rectification-spoken-collect.test.ts` L442「没有 and 记不清 short-circuit without a model run」改为「由分类器判定 no / unsure 后走 denial」,原值/新值/原因写进进度记录;BUG-626(skipped 健康不进 holdout)回归仍过;源码合同测试断言 `route.ts` 与 `turn-intent-classifier.ts` 不再导出/引用这两个原字匹配函数。 ### T4 · 记录