Skip to content

kernel authorization request: package-lock churn in PR branches tripping the kernel human-gate (8 PRs) #4828

Closed

Description

@ranxianglei

来源: dog/ework-aio#6 分析「最近的 PR 几乎没有一个绿色的」时发现, owner 指示授权卡点必须走申请而不是自行补声明 (owner policy 2026-10-26)

现象

8 个 PR 的 kernel-guard 检查失败(人工门禁: 修改 kernel/ 需 owner 批准 + 显式声明):

#4823 #4808 #4802 #4800 #4799 #4794 #4790 #4785

实际被卡的内容

全部是 kernel/package-lock.json 的锁文件漂移 — 各 PR 自己的 commit 没有一个是主观要改 kernel 的, 是 agent 在测试准备阶段于 kernel/ 内跑了 install/build, 锁文件被重新生成带入 diff(抽样证据: #4825 root+kernel 两个锁文件同时变, 0 个 kernel commit)。

此前 ci-fail 车道对这类红的处理是直接往 PR 正文补 kernel-change: 声明(#4814/#4825 已被补) — 这绕过了 owner 批准环节, 已被 owner 否定为错误做法, 本 issue 是纠正后的正规申请。

请 owner 拍板(二选一)

  • A. 批准这批锁文件更新: 我在上述 PR 正文补声明并注明「经本 issue 批准」, 守卫转绿。
  • B. 要求回滚: 我在上述 PR 分支 git checkout origin/master -- kernel/ 清掉锁文件漂移再推, 守卫转绿。

(A/B 对代码语义无影响, 区别只是 kernel 锁文件是否随这批 PR 一起进 master)

后续防再犯

Activity

  1. ranxianglei commented on Oct 26, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm-qwen/qwen3.8-27b)

    查重: 不重复。检索 open/closed issue 与近期 PR,无同类「kernel 锁文件漂移授权申请」条目(#4814/#4825 是此前被否定的自行补声明,不是平行申请)。本 issue 是该根因的唯一正规申请。

    核查结果(逐 PR 拉了 diff、CI check-run 和 master 现状)

    1. 8 个 PR 的 kernel-guard 全部确认红,但内容分两类——「全部是锁文件漂移」对 7 个成立,#4823 不成立:

    2. B 方案按原文执行会换一种红,不可行。master 目前自身就不一致:kernel/package.json=0.0.165,但 kernel/package-lock.json 记 0.0.164、root 锁记 0.0.163(窗口提交 293ae65/de5e03659 只 bump 未重生成锁)。CI 的 lock-sync 门禁会重新生成两个锁文件并 fail on diff,且对 master push 同样生效——已验证 master HEAD 自己就挂在 lock-sync 上。所以把 7 个分支的锁回滚到 master 现状 → kernel-guard 转绿、lock-sync 转红(连 root 锁一起回滚也一样)。这 7 个 PR 今天能全绿只有两条路:A(保留重生成的锁 + 经本 issue 批准的声明),或等 #4814 合入 master 后把这 7 个分支 rebase 到新 master(锁提交变空操作,两个门禁都绿且不需要任何声明)。两条路先后顺序无所谓:谁先进 master,另一个的锁提交就变成空操作。

    3. #4814(ci-fixes 哨兵)现在只剩两件事:dfadc21b3 锁同步(就是上面那 4 行)+ 一个补声明后的重触发空提交(persist restamp 修复已在 master)。kernel-guard/lock-sync 已绿,10 个 test shard 还红(windows/ubuntu × node22/24),合入前需哨兵车道在 #4599 收敛。#4814 上的声明也是车道自补的,请随本 issue 一并追认或作废。

    建议

    选 A,批准范围钉死在那 4 行记录版本同步(root 0.0.163→0.0.165、kernel 0.0.164→0.0.165,与 #4814 dfadc21 字节一致):车道往 7 个 PR 补「经 #4828 批准」声明,守卫立即转绿,#4797(压缩死锁)、#4804(WS 413)、#4796(GC)等高优先级修复解卡。理由:B 在当前 master 状态下不可行(见上);#4814 合入后 master 永久一致(lock-sync 从此盯住 master push,同类窗口不会再开),这批 4 行进 master 是无害冗余。批准仅限这 4 行,不构成未来 kernel/ 改动的批量豁免。
    #4823 单列:车道补上缺失的 kernel 版本号 bump + 声明后,由你审真实 kernel diff(schema 收窄、解析器不动、其自述 kernel 测试 1480/1480),审过即批准——这是门禁的正常用途,不该和锁文件漂移混批。
    #4814 的 test shard 红归 #4599 哨兵收敛;若选 A,不必阻塞本决定。

    标签: bug + p1 + scope/ci + waiting-feedback(决策升级类按规挂 p1;领域是 CI 门禁;底层是流程缺陷导致 8 个在途 PR 红)。

    八问

    1. 是什么问题: agent 在测试准备时于 kernel/ 内 install/build,把 4 行记录版本同步带进 7 个无关 PR,触发 kernel 人工门禁;第 8 个([PR] The compress tool only teaches a single invocation format, to prevent the model from mixing up multiple formats. | compress 工具只教一种调用格式,防止模型把几种格式混着用 #4823)是真 kernel 变更缺声明和版本号 bump,被同一门禁正确拦住。
    2. 什么原因导致的: master 上 kernel/package.json(0.0.165)领先于两个锁文件的记录(0.0.164/0.0.163)——窗口提交只 bump 未重生成锁;此后任何分支在 kernel/ 内 install 都会确定性重写这 4 行。门禁本身工作正常,拦得对。
    3. 影响范围与严重程度: 8 个在途 PR 无法合并(含多个高优先级修复),属开发流程阻塞;用户侧零直接影响。
    4. 怎么修复的(待拍板后执行): A = 7 个 PR 补限域声明;[PR] The compress tool only teaches a single invocation format, to prevent the model from mixing up multiple formats. | compress 工具只教一种调用格式,防止模型把几种格式混着用 #4823 补 bump+声明后单独审;[PR] ci: converge master-CI fixes (persist restamp guard + lockfile version sync) (#4599) #4814 转绿后合入 master 关闭漂移源头;防再犯 = 车道铁律(遇 human-gate 一律开申请)+ lock-sync 对 master push 的既有强制。
    5. 是否有回归问题: A 只引入 4 行纯记录字段,与 [PR] ci: converge master-CI fixes (persist restamp guard + lockfile version sync) (#4599) #4814 字节一致,无代码语义变化;B 若强行执行会制造新的 lock-sync 红。
    6. 是否破坏缓存: 不涉及。
    7. 是否改了设计方向: 不涉及。
    8. 是否引入了新的配置: 不涉及。

    停手等拍板:A/B(及 #4823 单列处置)任一确认后我立即执行;在此之前不动任何 PR 正文、不推任何分支。

  2. ranxianglei commented on Oct 26, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm-qwen/qwen3.8-27b)

    补充:#4825 属同一锁文件漂移类(OP 把它当抽样证据,但没列入清单)。

    核对(对当前 head 5e1a15b):

    结论:A 的批准范围应按 8 个算(7 + #4825),仍钉死在那 4 行。

  3. ranxianglei commented on Oct 26, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm-qwen/qwen3.8-27b)

    更正我上一条评论(第 4 楼):#4825 已不需要 A/B 决策,请把它移出名单——批准范围维持 7 个。

    变化:冲突解决车道随后把新 master(#4807 ref-chokepoint 等,kernel 升到 0.0.166、锁文件重新生成)合入了 PR 分支(head 现在是 46eb24a76)。合入后我逐文件核对过:PR 对当前 master 的 kernel/ 与 package-lock.json diff 已经归零——那个 4 行版本同步在分支追上 master 后变成了空操作,正是你第 2 楼说的「rebase 到新 master 后锁提交变空操作」的绿路径。

    后果:

    #4825 侧的收尾只剩:CI 测试分片结果(继承红与否)+ 你在 #4825 关闭落选者 #4773。

  4. ranxianglei commented on Oct 26, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    (ai: vllm-qwen/qwen3.8-27b)

    新增一例,请并入本 issue 的 A/B 拍板范围:PR #1790(feat(contrib): Claude Code native recall plugin)。

    CI kernel-guard 红,失败原因与其余 7 个纯漂移 PR 完全一致:

    This PR modifies kernel/ but does not declare 'kernel-change: ' in its body.

    被卡内容(逐行核对,与 #4814 dfadc21 及那 7 个 PR 字节一致,零 kernel commit、零依赖变更):

    • kernel/package-lock.json:+2/-2,记录版本 0.0.164 → 0.0.165
    • root package-lock.json:acp-kernel 条目 0.0.163 → 0.0.165

    该 PR 本体是 contrib/claude-code-native-recall/ 下的独立 Python 插件(hooks + MCP + transcript JSONL),不改任何 bili/kernel 源码,也不改 kernel/package.json 清单——这 4 行是锁文件重新生成带入的记录版本同步,与那 7 个同机制。

    按「一次根因一个申请,不扇出」原则并入此处,不另开新 issue。你第 2/5 楼的可行性分析(master 自身不一致 → B 会把 kernel-guard 换成 lock-sync 红;A 钉死在这 4 行;或等 #4814 合入让 master 锁文件一致后 rebase 使该提交变空操作)对 #1790 同等适用。顺带:#1790 当前对 master 是 dirty(有冲突),rebase 这条绿路径对它本来就要走。

    请随 A/B 一并把 #1790 计入批准/回滚范围。我未动 #1790 正文、未推它的分支。

  5. added a commit that references this issue on Oct 26, 2026
  6. added a commit that references this issue on Oct 26, 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