Skip to content

fix: sort 异步比较器响亮报错,并清理评审遗留小项#2

Merged
rrbe merged 1 commit into
masterfrom
fix/shell-review-followups
Jun 11, 2026
Merged

fix: sort 异步比较器响亮报错,并清理评审遗留小项#2
rrbe merged 1 commit into
masterfrom
fix/shell-review-followups

Conversation

@rrbe

@rrbe rrbe commented Jun 11, 2026

Copy link
Copy Markdown
Owner

背景

PR #1 评审中列出的非阻塞遗留项,本 PR 全部补齐。

改动

  1. sort/toSorted 比较器守卫:碰 db 的比较器(被 async-rewriter2 重写后返回 promise)在原生路径下会被强转 NaN、"成功"排出垃圾顺序——典型静默错。现在检测到 thenable 直接抛明确 TypeError,提示先算 key 再排序(ADR-0003:响亮报错,绝不静默错)。toSorted 结果按血缘保持增强。被遗弃的 in-flight promise 预先挂上 catch,避免 client 先关闭时产生 unhandledRejection。
  2. 游标 forEach 幂等标记:从函数自身移到原型上(共享注册表 Symbol)。原先标记会被 tagPromiseMethods 的 wrapper 遮蔽,模块二次求值时白白重新替换。
  3. filter 长度捕获:pick 改用捕获的 flags 长度,与原生"迭代前捕获 length"语义对齐(回调中 push 的元素不参与)。
  4. CLAUDE.md:协作规则恢复编号列表(此前删除第 2 条后残留单项编号 + 游离段落)。

测试

  • 单测 +3:sort/toSorted 同步比较器原生行为与血缘、异步比较器抛错、filter 长度捕获——279 全过
  • 集成 +2:游标 forEach 同步回调返回 false 的 driver 早退回归项、sort 碰 db 比较器响亮报错——106 全过,无 unhandled error
  • pnpm typecheck 通过

🤖 Generated with Claude Code

- sort/toSorted 比较器返回 thenable 时抛出明确 TypeError(原生路径会把
  Promise 强转 NaN 静默乱序,违反 ADR-0003 "绝不静默错");被遗弃的
  in-flight promise 预先挂上 catch,避免 unhandledRejection
- 游标 forEach 幂等标记移到原型上(共享注册表 Symbol),不再被
  tagPromiseMethods 的 wrapper 遮蔽
- filter 的 pick 用捕获的 flags 长度,与原生 "迭代前捕获 length" 对齐
- CLAUDE.md 协作规则恢复编号列表
- 测试:单测 +3(sort 守卫/血缘、filter 长度捕获),集成 +2(游标
  forEach 同步 false 早退回归、sort 碰 db 比较器报错)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rrbe rrbe merged commit a417718 into master Jun 11, 2026
1 check passed
@rrbe rrbe deleted the fix/shell-review-followups branch June 11, 2026 16:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant