# PROGRESS · 降级交付路径补 Pass 4 与去重(2026-09-18) 工作树:`.worktrees/contract-degraded-pass4-20260918` 分支:`codex/contract-degraded-pass4-20260918` 基线:`origin/staging` @ `1061514f`(任务书写 `877128ce`,其后远端已快进) 任务书:`docs/tasks/TASK-contract-degraded-pass4-20260918.md` ## 结论 降级正文现在按句过 Pass 4:保证句整句丢掉,其余留下,服务端说明贴在末尾。两次 attempt 不再拼在一起。降级之后不再空跑 compose。合同门 `contractReady()` 没放宽。 ## 任务状态 | 任务 | 状态 | 说明 | | --- | --- | --- | | BUG-959 降级正文过 Pass 4 | 完成 | 复用 `releasePass4Sentences`;全丢时一般模式发拒绝句,其余模式仍 `runtime_contract_incomplete` | | BUG-960 每次 attempt 清空缓冲 | 完成 | 降级只交付最后一次 attempt | | BUG-961 降级后跳过 compose | 完成 | `composeAnswer` 零次调用,事件无 `phase.started{compose}` | | BUG-957 窗口预跑 | 本文件不覆盖 | 见 `PROGRESS-window-consult-precompute-20260918.md` | ## 断言三栏(既有测试) | 测试 | 原值 | 新值 | 原因 | | --- | --- | --- | --- | | BUG-956 有正文降级 | 未传 `pass4Mode` | `pass4Mode: "verified_chart"` | 任务书:e32ce624 之后的既有降级测试补上该参数;正文「不能保存」不含 reject 句,行为不变 | | BUG-956 无正文 | 未传 `pass4Mode` | 同上 | 同上,空正文仍走 `runtime_contract_incomplete` | ## 测试 | 项 | 结果 | | --- | --- | | `tsc --noEmit` | 0 错 | | `npm run lint` | 0 error(120 warning,与基线同量级,未顺手修) | | `consultation-agentic-runtime.test.ts` + `timing-output-guard.test.ts` | 88 pass / 1 fail。失败是本机 Windows `EPERM` 无法为 live skill 建 symlink(`personal Agent exposes the Jyotish Skill…`),与基线缺口同类,不是本单引入 | | 本单新增 | 降级+保证句不出现在任何 `answer.delta`,回执同时有 `contract-degraded` 与 `pass4-reject:guarantee`;全丢不发只有降级说明的空回答;两次 attempt 只留第二段;降级路径 `composeAnswer` 调用次数为 0 | Linux 门禁才是验收数字:目标 fail 回到 31,总数不低于基线 3501。本机无登录态、无 Chrome、Windows 无 symlink 权限,不写成通过。