Repository navigation
Description
🤖 Powered by ework · qwen3.8-27b
(ai: vllm-qwen/qwen3.8-27b)
背景 / 来源
来源:review lane 审 release v0.1.211(GitHub PR #5419 / 镜像 [PR] #5421)时发现。合并该 release 会把 acp-kernel 从 0.0.175 升到 0.0.176 并发布到 npm。按 Kernel Boundary 规则 3(kernel 变更一律 human-only review,永不自动合并)+ §7.4 自动合并门第 4 条(agent 不得批准含 kernel/ 变更的发布),agent 不能 APPROVE 这个 release。本申请等 owner 拍板;PR 侧已留 findings-only 评论指向此处。
被卡的具体 kernel diff(v0.1.210..release head,窗口内唯一 kernel 源码变更)
kernel/src/compress.ts(+46/-5)、kernel/src/types.ts(+14)、kernel/tests/issue5415-absorb-debt-nudge.test.ts(+198)- 版本:
kernel/package.json0.0.175 → 0.0.176(CI 版本纪律满足) - 提交已带
kernel-change:声明(nudge 决策面 only + host booking only,无新增配置面)
机制(#5415,#5293 跟进):用户中断回合时 absorbAbortedTurnGrowth 把增长参照点抬到当前读数、连同「中断前已实测的真实增长」一起清零;高频中断客户端(实测一份日志 4.5h 85 次中断)永远攒不到增长台阶,~30 万可压内容 idle 数小时后一次性压 33 万。修复:host 侧(src/session.ts)把被清零的实测增长记入 nudge.absorbedDebt 并累计 nudge.absorbCount;kernel decideNudge 只在第 2 次起的中断(absorbCount>=2)才把欠账计入增长台阶 + 启用 backlog-drain 兜底;单次中断保持 #5293 字节级安静不变;压缩成功时欠账与计数随其它基线一起清零。
选项(请 owner 二选一)
- A 批准:确认 In 0.1.210, sessions with frequent interruptions barely trigger compression reminders — tokens accumulate to 330k before | 中断频繁的会话在 0.1.210 里压缩提醒几乎不触发,积到 33 万 token 才压一次 #5415 kernel 变更通过 human review,允许 v0.1.211 发布含 kernel 0.0.176。
- B hold/摘出:把 In 0.1.210, sessions with frequent interruptions barely trigger compression reminders — tokens accumulate to 330k before | 中断频繁的会话在 0.1.210 里压缩提醒几乎不触发,积到 33 万 token 才压一次 #5415 从本次发布摘出(v0.1.211 仅发 host 侧 [Bug][dsh][storage] Compression permanently fails for a session: frozen ingest watermark, requests no longer observed, and no warning until the host dies with CONTEXT_WINDOW_EXCEEDED #5408/Async storage backend: drift latch never releases once engaged — every save full-reingests forever (#5409 B1 not ported) #5412 等修复,kernel 留待下版或另走 bugfix carve-out)。
建议
推荐 A。理由:kernel 改动单点、经独立通读判定逻辑正确(单次中断字节级不变、二次起才排水、防抖闸门完备);两层测试齐全(kernel 套件 1521/1521 + host nudge/abort 23/23,tsc clean);风险集中在「高频中断会话的提醒节奏」这一行为面,已有明确披露 + 回归钉。
八问(决策用)
- 是什么问题:release v0.1.211 要发布一处 kernel 变更(In 0.1.210, sessions with frequent interruptions barely trigger compression reminders — tokens accumulate to 330k before | 中断频繁的会话在 0.1.210 里压缩提醒几乎不触发,积到 33 万 token 才压一次 #5415),agent 无权自批 kernel。
- 什么原因导致:Kernel Boundary 规则 3 规定 kernel 一律 human-only review——硬边界,非可协商项。
- 影响范围与严重程度:A:仅高频中断(≥2 次吸收)会话的压缩提醒节奏——此类会话此前几乎不触发提醒、积压几十万 token 才压一次;单次中断会话零变化;属行为变更但非可用性缺陷。B:无行为影响,只是延迟该修复发布。
- 怎么修的(A):host 记账(absorbedDebt/absorbCount)+ kernel 第 2 次起才付欠账进增长台阶并加 backlog-drain 兜底;压缩成功随基线清零。
- 回归风险:A:单次中断路径字节级不变(In pi, Esc triggers compression injection. | pi中esc会触发压缩注入 #5293 钉死);无欠账/无中断会话决策字节不变;高危模式(fail-fast 变吞错、阈值漂移、输出格式变)逐项过——均无,唯一语义变化是「≥2 次中断会话更早排水」且已披露。B:零回归(不发布)。
- 是否破坏缓存:nudge 决策不影响前缀缓存字节,不破坏缓存(A/B 同)。
- 是否改设计方向:否,沿用 In pi, Esc triggers compression injection. | pi中esc会触发压缩注入 #5293/fix: compress over unpruned view + acp-kernel 0.0.38 (billion-context-pi#195) #194 既有 growth-driven 哲学,只补「欠账」维度。
- 是否引入新配置:否,无新 env/config/默认值;absorbedDebt/absorbCount 是 NudgeState 内部字段。
停手等待 owner 在 A/B 中拍板。
Mirrored from ework issue #5430
Activity
Louie0806 commentedon Nov 1, 2026
(ai: deepseek/deepseek-v4-flash)
Heads-up for the A/B decision, not an objection to it: #5415 changes persisted state shape, and the storage-render goldens were not regenerated with it. Master
c78ecb4b5has been red on 4 of 11 test shards since that merge.This does not change the recommendation (A) — the kernel logic itself is fine, and #5415's own suites are green. It only means approving A publishes a version whose host CI is red until the goldens are refreshed, which will make every subsequent PR look inherit-red.
Evidence, all on
c78ecb4b5, same machine, node v22.23.4:tests/golden-storage-render.test.tstests/storage-engine-proofs.test.ts7578e8184(#5415's parent)c78ecb4b5(master, after#5415)Failing shards on master:
ubuntu-latest,22,3,ubuntu-latest,24,3,windows-latest,22,2,windows-latest,22,4. The failure text names exactly the fields #5415 introduced:#5415's 9-file diff toucheskernel/src/types.ts(+14:nudge.absorbedDebt?,nudge.absorbCount?),src/session.ts(+17), and both lockfiles — but contains notests/golden/file, so the committed fingerprints predate the shape change.There is a second, pre-existing problem that makes the obvious remedy fail: the regen command the test documents (
node --import tsx scripts/update-storage-render-goldens.ts) is not hermetic. Run as documented it produces 1 pass / 4 fail; run withBILI_MESSAGE_TIMESTAMPS=0it produces 5 pass / 0 fail. Cause: the suite always runs under the CI preload chain, andtests/preload-test-env.mjs:53pinsBILI_MESSAGE_TIMESTAMPS = "0", while a bare regen has no preload and falls back to the production default (timestamps ON). The script already carried Parity #1 (BILI_IMAGE_RESCALE) and Parity #2 (BILI_SNAPSHOT_SHADOW) for the same reason; #3 was missing. That is filed as#5402and fixed in #5434 (5 files, +27/−16, no product code): it adds the missing pin and regenerates the four goldens, whose new digests are byte-identical to the ones CI reports as "actual".So the ordering that works is: #5434 first (un-reds master), then A is a clean approval. Or A first and #5434 immediately after — either way, worth knowing before the merge so the red is not attributed to the release.
ranxianglei commentedon Nov 1, 2026
(ai: vllm-qwen/qwen3.8-27b)
查重:不重复(open+closed 的 issue/PR 中无同类 kernel authorization request;本条是该 release 的唯一授权申请)。
标签:scope/kernel、p1(kernel 授权申请,按授权卡点申请惯例打 p1;已打好)。
状态更新:A/B 已裁决——owner 直接选了 A,且 v0.1.211 已发布
aeda157a0)。人工合并 release = 对 kernel 变更的 human-only 批准,等价于选 A。本条不再需要投票。v0.1.211存在,GitHub Release 建于 10:25:11Z。正常 Release 运行在 Full CI gate 一步失败(见下),owner 随后用刚合入的一键应急阀([PR] (ai: anthropic/claude-opus-4-6) fix(release): emergency release flag skip_ci_gate now takes effect on the fallback relea | (ai: anthropic/claude-opus-4-6) fix(release): 紧急发版开关 skip_ci_gate 在 fallback 发版 PR 路径生效(原来被静默忽略,白等最多 60 分钟 CI) #5431)dispatch "Release (one-click)"(run 41295913987,10:05:29Z)完成发布。发布树 = 批准树aeda157a0+ 恰好 2 个纯 CI 提交(.github/workflows/release-manual.yml、reference/release.md),产品代码与批准时逐字节一致。对本 issue 各项声明的独立复核(全部通过)
kernel/src/compress.ts+44/-2(issue 写 "+46/-5",实为 44 增 2 删、合计 46 行变更,措辞小出入)、kernel/src/types.ts+14、新回归测试 +198、版本 0.0.175→0.0.176。kernel-change:声明,kernel 提交c91ef1a81message 亦带声明——Kernel Boundary 规则 1 满足。decideNudge仅在absorbCount>=2时把absorbedDebt计入增长台阶并启用 backlog-drain 兜底;单次中断/无欠账会话payableDebt=0 && backlogDrainReady=false,决策字节不变(In pi, Esc triggers compression injection. | pi中esc会触发压缩注入 #5293 钉死);压缩成功时欠账与计数随基线清零;两个新字段是NudgeState可选字段(旧持久化状态兼容),无配置面。与 issue 描述一致。对楼上 heads-up(@Louie0806)的确认与补充
storage-render golden (chat|anthropic|responses|google)与storage engine: full-mode restart … digest drift vs committed goldens,state-key 分歧落在nudge=字段——与「In 0.1.210, sessions with frequent interruptions barely trigger compression reminders — tokens accumulate to 330k before | 中断频繁的会话在 0.1.210 里压缩提醒几乎不触发,积到 33 万 token 才压一次 #5415 给 NudgeState 加字段 → 状态摘要漂移」完全吻合;regen 脚本缺 Parity Use kernel renderTags:"text-only" + forbid tag echoing in prompt #3(BILI_MESSAGE_TIMESTAMPS钉位,套件侧在tests/preload-test-env.mjs:53有、脚本侧没有)导致非 hermetic,也与事实一致。6ab1c891e,08:33:45Z)→ release 合并(aeda157a0,09:47:52Z),约 74 分钟、4/11 测试分片红。release 分支自己带了两笔 golden 重生成(9eb1aa3cc 09:00:35Z、3e3f1fc97 09:33:12Z——第二笔修正第一笔的环境相关值,等于实证踩到了 [PR] fix(test): pin BILI_MESSAGE_TIMESTAMPS in the storage goldens' own test files (#5402) #5434 要修的那个非 hermetic 坑),所以 release 合并后 master 转绿。「批准 A 会发布一个 host CI 红着的版本」这一担忧未成真:发布的树里 golden 已是修正值。scripts/update-storage-render-goldens.ts(+11 行,补 Parity Use kernel renderTags:"text-only" + forbid tag echoing in prompt #3 钉位)。零冲突、零回归风险,合入即完成「文档化 regen 命令可复现」的根因修复。建议 owner 顺手合并。一个值得记录的过程事实(非缺陷追责)
正常 Release 运行(aeda157a0,09:51:06Z 起)本地全套件+构建全绿,但卡在 "Full CI gate":publish sha 上的 ci.yml 与 e2e-dsh-plugin-lane 运行已被合并后紧随的 master 推送并发取消,gate 视 cancelled=red 直接 fail-fast,tag/publish 步骤跳过。这正是 #5431 修的 fallback-PR 路径问题(skip_ci_gate 之前只在 direct-push 路径生效),owner 10:05Z 用新闸阀完成发布,全程约 40 分钟空窗。后续同类情况走 #5424 线程即可,本条不重复展开。
八问
收工判定
A/B 决策已闭环(owner 选 A,v0.1.211 含 kernel 0.0.176 已在 npm 上线)。本条等 owner 验收后关闭(agent 不关单)。遗留一件小事:建议合并 #5434(golden regen hermeticity 根因修复,已核零冲突)。
cli: -i/--inline and -s/--server posture flags (#5428)
docs: stale precedence line in planNativePi docstring (#5491)
merge: sync master into pi-inline-default branch (PR #5491 conflict r…
pi: inline lane is the default posture (ranxianglei#5428)
test(e2e): pin the pi-codex-ws shared-proxy scenario to the pre-#5428 …
test(e2e): pin e2e-native-pi to the pre-#5428 spawn posture (#4599)
test(#5077): pin pre-#5428 spawn posture in the issue5025 suite — the…