Skip to content

kernel authorization request: release v0.1.211 bundles kernel 0.0.176 (#5415 abort-absorb nudge debt) #5428

Open

Description

@ranxianglei

🤖 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.json 0.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。理由:kernel 改动单点、经独立通读判定逻辑正确(单次中断字节级不变、二次起才排水、防抖闸门完备);两层测试齐全(kernel 套件 1521/1521 + host nudge/abort 23/23,tsc clean);风险集中在「高频中断会话的提醒节奏」这一行为面,已有明确披露 + 回归钉。

八问(决策用)

  1. 是什么问题: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。
  2. 什么原因导致:Kernel Boundary 规则 3 规定 kernel 一律 human-only review——硬边界,非可协商项。
  3. 影响范围与严重程度:A:仅高频中断(≥2 次吸收)会话的压缩提醒节奏——此类会话此前几乎不触发提醒、积压几十万 token 才压一次;单次中断会话零变化;属行为变更但非可用性缺陷。B:无行为影响,只是延迟该修复发布。
  4. 怎么修的(A):host 记账(absorbedDebt/absorbCount)+ kernel 第 2 次起才付欠账进增长台阶并加 backlog-drain 兜底;压缩成功随基线清零。
  5. 回归风险:A:单次中断路径字节级不变(In pi, Esc triggers compression injection. | pi中esc会触发压缩注入 #5293 钉死);无欠账/无中断会话决策字节不变;高危模式(fail-fast 变吞错、阈值漂移、输出格式变)逐项过——均无,唯一语义变化是「≥2 次中断会话更早排水」且已披露。B:零回归(不发布)。
  6. 是否破坏缓存:nudge 决策不影响前缀缓存字节,不破坏缓存(A/B 同)。
  7. 是否改设计方向:否,沿用 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 哲学,只补「欠账」维度。
  8. 是否引入新配置:否,无新 env/config/默认值;absorbedDebt/absorbCount 是 NudgeState 内部字段。

停手等待 owner 在 A/B 中拍板。


Mirrored from ework issue #5430

Activity

  1. Louie0806 commented on Nov 1, 2026

    @Louie0806
    Contributor

    (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 c78ecb4b5 has 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:

    tree tests/golden-storage-render.test.ts tests/storage-engine-proofs.test.ts
    7578e8184 (#5415's parent) 5 / 0 12 / 0
    c78ecb4b5 (master, after #5415) 1 / 4 8 / 4

    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:

    state-key divergence: nudge=75d1956dd2bc409a (golden 1875424e64e16bc5)
    sections: {"state":"6a3fe0d7d15b45c1",...} vs golden {"state":"8d09f6115ebffb9d",...}
    

    #5415's 9-file diff touches kernel/src/types.ts (+14: nudge.absorbedDebt?, nudge.absorbCount?), src/session.ts (+17), and both lockfiles — but contains no tests/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 with BILI_MESSAGE_TIMESTAMPS=0 it produces 5 pass / 0 fail. Cause: the suite always runs under the CI preload chain, and tests/preload-test-env.mjs:53 pins BILI_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 #5402 and 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.

  2. ranxianglei commented on Nov 1, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (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 已发布

    对本 issue 各项声明的独立复核(全部通过)

    1. kernel diff 相符:窗口内唯一 kernel 源码变更即 In 0.1.210, sessions with frequent interruptions barely trigger compression reminders — tokens accumulate to 330k before | 中断频繁的会话在 0.1.210 里压缩提醒几乎不触发,积到 33 万 token 才压一次 #5415——kernel/src/compress.ts +44/-2(issue 写 "+46/-5",实为 44 增 2 删、合计 46 行变更,措辞小出入)、kernel/src/types.ts +14、新回归测试 +198、版本 0.0.175→0.0.176。
    2. 声明齐全:PR [PR] Session compression reminders no longer starve under frequent interruptions: absorption debt is paid in steps starting f | 中断频繁的会话压缩提醒不再饿死:吸收欠账从第 2 次中断起付台阶(#5415) #5416 正文带 kernel-change: 声明,kernel 提交 c91ef1a81 message 亦带声明——Kernel Boundary 规则 1 满足。
    3. 机制通读复核:decideNudge 仅在 absorbCount>=2 时把 absorbedDebt 计入增长台阶并启用 backlog-drain 兜底;单次中断/无欠账会话 payableDebt=0 && backlogDrainReady=false,决策字节不变(In pi, Esc triggers compression injection. | pi中esc会触发压缩注入 #5293 钉死);压缩成功时欠账与计数随基线清零;两个新字段是 NudgeState 可选字段(旧持久化状态兼容),无配置面。与 issue 描述一致。

    对楼上 heads-up(@Louie0806)的确认与补充

    一个值得记录的过程事实(非缺陷追责)

    正常 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 线程即可,本条不重复展开。

    八问

    1. 是什么问题: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 无权自批——一次授权申请。现已由 owner 人工合并裁决为 A 并执行完毕。
    2. 什么原因导致:Kernel Boundary 规则 3(kernel 一律 human-only review)是设计内硬边界,非缺陷;中途的正常发布路径卡住则因 fallback-PR 合并后 publish sha 上的 CI 运行被并发推送取消、gate 判红(该类问题已由 [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 修掉)。
    3. 影响范围与严重程度:行为面仅高频中断(≥2 次吸收)会话的压缩提醒节奏(已披露+回归钉);单次中断会话零变化。可用性面曾有 ~40 分钟发布空窗(09:47–10:25Z),已解除,无数据影响。
    4. 怎么修的:host 记账(absorbedDebt/absorbCount)+ kernel 第 2 次起把欠账计入增长台阶并加 backlog-drain 兜底,压缩成功随基线清零;发布卡点由 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 机制)完成。
    5. 回归风险:单次中断路径字节级不变(In pi, Esc triggers compression injection. | pi中esc会触发压缩注入 #5293 钉死);无欠账/无中断会话决策字节不变;golden 漂移只涉测试面不涉产品行为;发布树与批准树产品代码逐字节一致。高危模式(fail-fast 变吞错、阈值漂移、输出格式变)逐项过——均无。
    6. 是否破坏缓存:否,nudge 决策不触碰前缀缓存字节。
    7. 是否改设计方向:否,沿用 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 哲学,只补「欠账」维度。
    8. 是否引入新配置:否。absorbedDebt/absorbCount 为 NudgeState 内部可选字段(旧状态兼容);raw_publish/skip_ci_gate 是 CI 闸阀,非用户配置。

    收工判定

    A/B 决策已闭环(owner 选 A,v0.1.211 含 kernel 0.0.176 已在 npm 上线)。本条等 owner 验收后关闭(agent 不关单)。遗留一件小事:建议合并 #5434(golden regen hermeticity 根因修复,已核零冲突)。

  3. added 3 commits that reference this issue on Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions