cross-tab-worker-databus 0.20.93 → 0.20.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,22 @@
1
1
  # 路线图
2
2
 
3
- 0.20.93 已于 2026 年 9 月 19 日进入发布冻结。项目会先持续完成可靠性发布,再进入 1.0.0 稳定性冻结。
3
+ 0.20.95 已于 2026 年 9 月 22 日发布。项目会先持续完成可靠性发布,再进入 1.0.0 稳定性冻结。
4
4
 
5
- ## 0.20.93 冻结范围
5
+ ## 0.20.95 已完成范围
6
+
7
+ - 删掉只用来抬高覆盖率的不可达防御分支:存储写入器"重试已排程"守卫、两处有界映射淘汰循环里的 `undefined` 判断,以及 Centrifuge 传输层的三个 Worker/port generation 检查——后者即使可达也无法分辨是哪个 Worker 报的错。
8
+ - 移除 React 适配层的 lifecycle generation ref(React 的 effect 顺序永远不会走到它的任一分支),并修正配置文档中描述该机制的说法。Vue 适配层的守卫确实起作用(其函数体会 await 一次 stop),保持不变。
9
+ - 堵上 Vitest 断言漏洞:`rejects.toThrow('message')` 在 reject 原因为 `null` 或 `undefined` 时同样通过,这使 IndexedDB 回放测试里所有 `reason ?? new Error(...)` 兜底消息断言形同虚设。新增 `expectRejectionMessage()` 同时校验 Error 实例与消息,并把该约定写入 `AGENTS.md`。
10
+ - 再有六个行为获得经变异验证的回归用例:存储事件通道的畸形载荷守卫、入门指南中描述的无 BroadcastChannel 回退接线、存储写入器的键枚举、去重清扫的过期保留、迟到的凭据失败路径,以及 React hook 在依赖变化后交出最新 bus。`environment.ts`、`storage-batch.ts`、`dedup-manager.ts`、`hooks.ts` 四项指标均已达 100%。
11
+
12
+ ## 0.20.94 已完成范围
13
+
14
+ - 修复 Vue 订阅 composable 对自身 `handler` 参数注册的永久空转 watcher,并钉住同一目标重绑守卫:bus 与 topic 在同一 tick 变化时不再拆掉刚建立的订阅再重建。
15
+ - CI 单元门禁不再被 runner 负载拖垮:为反复拉起子进程的 package/compat 门禁设 15s 上限,为已在覆盖率插桩下逼近自身 30s 预算的生命周期压测器保留显式 120s 预算。
16
+ - 覆盖率下限从"装饰性"改为真正生效:此前下限 85/80/90/85 与实测 98.13/94.59/98.17/99.19 相差十余个点,现为 96/92/96/97。
17
+ - 为九个此前没有有效测试的行为补上经变异验证的回归用例,其中包括一条在删掉淘汰循环后仍能通过的路由 owner 缓存断言、下一次 `start()` 的重水合、远端批量解包中无 metadata 的条目,以及被替换 client 的状态隔离。
18
+
19
+ ## 0.20.93 已完成范围
6
20
 
7
21
  - 强化 package 元数据、无条件与 fallback array target、递归嵌套及自定义 export condition 的兼容性门禁。
8
22
  - storage 能力探测必须完成可读的写入-读取-删除往返;channel 构造失败时安全降级;sessionStorage 不可用时保持稳定的内存 tab identity。
@@ -534,14 +548,14 @@ DataBus 生命周期审计还固定了 initial `transport.start()` 被 `stop()`
534
548
  1. ~~增加 peer 能力矩阵,并在 diagnostics 暴露 SDK、后端与 transport 身份。~~ 已交付:`getDiagnostics()` 携带协议版本、未知消息统计、peer 协议版本与 transport 身份;`getHealthSummary()`/`getMetrics()` 现在也会随单一对象输出实时 trace 指标与 sink 状态。
535
549
  2. ~~统一 replay、dedup、trace、recovery 与 cluster 健康指标。~~ 已交付:`getDiagnostics()` + `getMetrics()` + `getHealthSummary()` 在单一快照中覆盖生命周期、恢复、dedup、replay、持久化、协议、transport、cluster、trace 指标与 sink 背压。
536
550
  3. ~~优化 IndexedDB 并发 append 与清理路径。~~ 已交付:相邻 `appendBatch` 变更合并为单事务;`clear`/`clearTopic`/`clearBefore` 顺序保持。
537
- 4. ~~增加 adaptive dedup、async trace、prune 和长时多 Tab 性能基线。~~ 部分交付:bench 覆盖负载加权评分、`getMetrics`、publishBatch 批次敏感性,以及既有 dedup/async-sink/persistence 用例。
551
+ 4. ~~增加 adaptive dedup、async trace、prune 和长时多 Tab 性能基线。~~ 已交付:bench 覆盖负载加权评分、`getMetrics`、publishBatch 批次敏感性、adaptive dedup TTL、age 策略 replay prune、双 worker 跨 Tab fan-out,以及既有 dedup/async-sink/persistence 用例。
538
552
 
539
553
  ## 0.13.0 候选
540
554
 
541
- 1. 冻结公共导出面与 transport 无关的 publication 信封。
555
+ 1. ~~冻结公共导出面与 transport 无关的 publication 信封。~~ 已交付:根导出面由回归测试与 tag 间 `verify:compat` 门禁固定,transport 无关的 publication 信封(含 legacy/nested 帧兼容)已有文档与协议 fixture 覆盖。
542
556
  2. ~~精确记录 at-least-once 投递与去重保证。~~ 已交付:architecture/API/capability 文档现在明确区分「每条已接受 transport publication 的本地至多一次扇出」与端到端投递,记录 transport/服务端的丢失与重复投递,并说明有界、可选 `messageId` 去重的边界,不再宣称 at-least-once 或 exactly-once。
543
- 3. 增加长时浏览器浸泡覆盖:replay 留存、重连、BFCache 与 owner 迁移。
544
- 4. 为 1.0 前的协议别名发布迁移指南与弃用策略。
557
+ 3. ~~增加长时浏览器浸泡覆盖:replay 留存、重连、BFCache 与 owner 迁移。~~ 已交付:真实 Chromium 多 Tab 浸泡与重复 BFCache/reload/owner-handoff 场景在完整生命周期上连续运行。
558
+ 4. ~~为 1.0 前的协议别名发布迁移指南与弃用策略。~~ 已交付:弃用策略位于发布清单,「Upgrading & Deprecation」指南已在两语言 getting-started 发布,legacy 协议帧在一个小版本内继续解析,当前版本通过 `getDiagnostics().protocol` 暴露。
545
559
 
546
560
  ## 更长期候选
547
561
 
@@ -550,6 +564,7 @@ DataBus 生命周期审计还固定了 initial `transport.start()` 被 `stop()`
550
564
  3. **发布去重**:设计并实现可选、有界的 message-ID 窗口,覆盖本地分发、BroadcastChannel、WebSocket 与 replay,默认行为保持不变;
551
565
  4. **适配层与协议对齐**:统一 React/Vue 生命周期和类型契约,补充二进制帧与恢复语义文档,并增加自定义 transport 兼容夹具;
552
566
  5. **运维验证**:扩展浏览器和打包消费测试,增加去重/恢复/replay 清理回归基准,Push CI 继续作为发版门禁。
567
+ 6. **TypeScript 7 工具链迁移**:阻塞在上游而非本仓库——截至 2026-09-22,`typescript-eslint` 最新发布仍为 8.70.1,其 peer 范围是 `typescript >=4.8.4 <6.1.0`,装上 TypeScript 7 会先让 lint 门禁失败。等 typescript-eslint 放宽该上限后再在独立分支迁移(TS 7 仍提供 `tsc` 可执行入口,`pnpm typecheck` 本身无需改动)。
553
568
 
554
569
  ## 发版检查清单
555
570
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cross-tab-worker-databus",
3
- "version": "0.20.93",
3
+ "version": "0.20.95",
4
4
  "description": "Framework-agnostic cross-tab data bus with Dedicated/Shared Worker clustering and Centrifuge support.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -126,9 +126,10 @@
126
126
  "@eslint/js": "^10.0.1",
127
127
  "@playwright/test": "^1.63.0",
128
128
  "@testing-library/react": "^16.3.3",
129
- "@types/node": "^26.6.1",
129
+ "@types/node": "^26.6.2",
130
130
  "@types/react": "^19.3.0",
131
131
  "@vitest/coverage-v8": "^5.0.1",
132
+ "centrifuge": "^5.7.4",
132
133
  "esbuild": "^0.28.2",
133
134
  "eslint": "^10.11.0",
134
135
  "fake-indexeddb": "^6.2.5",