Files
Jyotisha/docs/tasks/PROGRESS-rectification-adopt-narration-fix2-20260904.md
T
Jesse_Chen 45bdb63eca
Independent Staging Quality Gate / validate (push) Successful in 9m16s
Independent Staging Quality Gate / publish (push) Successful in 1m52s
fix(rectification): keep adopt narration timeout on a clearable ref timer
AbortSignal.timeout() is unref'd, so a hanging generateText drained the test event loop and cancelled the rest of the file. Clear the timer after the model returns.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-04 15:23:13 +08:00

2.8 KiB
Raw Blame History

PROGRESS · 采用旁白超时改为可清理的 ref 计时器(2026-09-04

工作树:.worktrees/rectification-adopt-narration-fix2-20260904 分支:codex/rectification-adopt-narration-fix2-20260904 基线:任务书写 13dded9f;本工作树从当时 origin/staging 5c9e9879(修复单 2 文档提交)拉出。 任务书:docs/tasks/TASK-rectification-adopt-narration-fix2-20260904.md 未改决策逻辑、未改提示词、未改 Python、未 bump Skill。未提交、未 push。

任务 状态 BUG
5.1 超时改为可清理的 ref 计时器 完成 BUG-523

开工复现

本机 Node 24.15.0。tsx --test 因 IPC socket 撑住事件循环,超时用例看起来能过。独立脚本复现了 unref 计时器:

const s = AbortSignal.timeout(30);
await Promise.race([new Promise(() => {}), new Promise((_, rej) => s.addEventListener("abort", () => rej(s.reason)))]);
# abort 从未触发
exit=13

任务书在 Node 20.19 / CI Node 22 上的套件实测见 PROGRESS-rectification-adopt-narration-fix-20260904.md 更正节(pass 6 / cancelled 4 / exit 1)。

实现要点

  • composedAbortSignal 返回 { signal, dispose }setTimeout + AbortController(不 unref);外部 signal 的 abort 转发到 controllerdispose() clearTimeout 并移除外部监听。
  • whenAborted 同样返回 dispose,在 finally 里与 composed 一起清掉 abort 监听。
  • deliverAdoptNarrationPromise.race 包在 try / finally;超时仍走 template:model_error
  • 源码不再出现 AbortSignal.timeout

偏离

无。5.3 婚恋标签仍按修复单 1 推迟。

测试

npx/tsx --test tests/rectification-adopt-narration-20260904.test.ts

# tests 11
# pass 11
# fail 0
# cancelled 0
# skipped 0
# todo 0
exit=0

Node spec 报告器打印为 tests 等六行,含义相同。比修复前多 1 条「调用完不留活跃计时器」。)

tsc --noEmit0 错,exit=0。

npm run lint0 error74 warning(既有),exit=0。

定向套件 tests/rectification-*.test.ts tests/agentic-rectification-*.test.ts tests/birth-time-rectification-contract.test.ts

# tests 872
# pass 872
# fail 0
# cancelled 0
# skipped 0
# todo 0
exit=0

(基线任务书写 871;本单 +1 条计时器用例。)

npm test(全量 tests/*.test.ts;本机有 Docker,无 ENOENT 基线那 25 条):

# tests 2641
# pass 2641
# fail 0
# cancelled 0
# skipped 0
# todo 0
exit=0

改动文件

  • frontend/src/lib/rectification-agentic/v9/adopt-narration-agent.ts
  • frontend/tests/rectification-adopt-narration-20260904.test.ts
  • docs/BUG_HISTORY.mdBUG-523
  • docs/tasks/PROGRESS-rectification-adopt-narration-fix-20260904.md(更正)
  • docs/tasks/README.md
  • 本文件