Skip to content

v3.3.13 — 补 issue #451 的「半修」:水位三字段投影不全 + 前端从未消费

Choose a tag to compare

@Aik358 Aik358 released this 20 Oct 23:44
· 7 commits to main since this release

一句话

v3.3.11 声称「水位三字段已透出、面板可核对走没走代理压缩兜底」,实测发现两处都没做完。本版补齐。

缺陷形态(重启后实测发现)

① 后端:三个投影点里只有一个漏字段

handoff-state 有 3 个 waterLevel 构造点(rec 分支 / else 分支 / 全局 state 分支)。其中 else 分支(有 sessionId 但该会话尚无水位记录时走的那条)没有 meterViaProxy / estimatedTokens / realUsageTokens:

6751: } else {
6752:   const wi = await this.waterWindowForSession(sessionId)
6753:   water = {
6754:     ratio: 0, tokens: 0, window: ..., meter: '',
6755:     ...
6756:   }        ← 三字段不在这里

⇒ 调用方恰好走到这条分支就拿到 undefined,而另两个分支正常。典型的「半修」,故障难复现。现补齐(取值语义 = 未走兜底:false / 0 / 0)。

② 前端:这三个字段从未被消费

lib/client.js 对 meterViaProxy / estimatedTokens / realUsageTokens 的引用数为 0(对照:officialRatio 2 处、thresholdMode 3 处都有消费点)⇒ v3.3.11 的 CHANGELOG 那句「面板可核对」是空头支票。

现新增「代理压缩双数对照」行:显示「官方估算 X token / provider 实测 Y token」,i18n 三语(zh/en/ja)各 +1 键。

③ 为什么 3.3.11 的守卫没拦住

a30 套件 D6b 把计数写死为「记录 1 处 + 两条投影各 1 处 = 3」—— 而实际有 3 个构造点。正是这条过期判据让漏字段的分支保持绿色。现改为跟着实际构造点数走(waterCtorCount + 1),a30 从 82 → 83 断言。

对普通用户的影响:零

新行受 wl.meterViaProxy === true 门控 —— 未使用 billion-context 代理压缩的用户永远为 false,不渲染任何新节点,界面与 3.3.12 逐字节等价。

验证

  • 串行全量回归 PASS 439 / FAIL 0 / TIMEOUT 0(--jobs=1 --timeout=180000,618.7s,439/439 套件)。
  • 新增 tests/smoke/smoke-test-v3313-water-projection.mjs(29 断言):
    • A 组真跑 handoff-state 三分支(全局视图 / else 分支 / 带兜底状态),逐分支断言三键齐全与取值语义(含真值传播实测 900000 / 420000);
    • B 组断言前端真的消费(渲染锚点 + 门控 + 两数都被读取 + 三语齐备);
    • C 组负路径;D 组结构判据(三构造点全带三键);
    • E 组变异必红:删掉 else 分支三字段 → fail=1;去掉前端门控 → fail=2。
  • ★D 组首次实现对变异不敏感(硬编码读真实文件,注入路径未生效 → M1 变异仍绿)。已修为读可注入路径,M1 才真正变红 —— 这条本身就是「守卫没鉴别力」的实例。
  • 三把基线锁按实测重钉并附归因:r26 E3 72C0DA04…→F84BC89E…、iter5-skin 127db190…→9caf68af…、settings-archive-interval ec132f81…→6f21c2ad…。
  • tarball 三重校验:registry dist.shasum = 下载件 SHA1 = bc4e1de03aa164ff7e70ec06b68803a5113dba42;解包实测 246 文件、version=3.3.13、指纹行 dsh-028-water-proxy-pair、水卡新行与 i18n 均在包内、tests/ 与 docs/ 不在包内、凭据类文件 0。

仍在问题中 / 未验证

  • 真实链路仍未本机验证:本机未安装 billion-context 代理型插件,meterViaProxy 恒为 false。本批以「预置 state.waterLevelProxyCompat 后真跑 handoff-state」验证真值传播,未在真有该插件的机器上跑过。
  • paramSource 字段仍是「后端投影、前端未消费」—— 不属于 #451 的承诺范围(同批字段里多投影的一个),本次未改,留作后续清理。
  • 本轮回归中 smoke-test-issue207-processes 曾 1 次失败(EPERM: rename cont-seq.json.tmp,Windows 文件占用),单跑连跑 6 次全 PASS,判为并发夹具偶发;最终一轮 439/439 全绿。