Skip to content

package-lock.json version metadata lags package.json (bili 0.1.190 vs 0.1.191, kernel 0.0.112 vs 0.0.114) #2704

Closed

Description

@ranxianglei

来源: ranxianglei/billion-context#2698 分析 stripImages merge-race CI breakage 时发现(独立机制:release flow 的 lockfile 簿记,与 #2698 的测试竞态无共享机制)

What

master (6064a0e7) 上根 package-lock.json 的版本元数据落后于 package.json:

字段 实际 (package.json / kernel/package.json) lock 记录 (package-lock.json)
根 bili 版本 0.1.191 0.1.190 (version 与 packages[""].version)
acp-kernel (file:./kernel) 0.0.114 0.0.112 (packages.kernel.version)

漂移来源:release flow 只 bump package.json(以及 #2688 bump kernel/package.json),未重新生成 lock。§2 KDD #5 要求 "lock records the file link and stays committed",即 lock 应反映真实状态。

Impact

Suggested fix

  1. 在 master 上一次性重新生成 lock(npm install --package-lock-only 后仅提交版本行变更),单独小 PR;
  2. 考虑在 release workflow 里加一道 lock/package 同步校验(release commit 后 git diff --exit-code package-lock.json 或等价检查),防止再次漂移。

Activity

  1. ranxianglei commented on Oct 11, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

    [bot] 🏷 已处理并开 PR:https://github.com/ranxianglei/billion-context/pull/2711(分支 2026-10-11_sync-lock-version-metadata,已 rebase 到最新 master a24f6b672)。查重:open+closed 里搜 lock/version/drift/npm-ci 关键词,无重复。

    结构化八问

    1. 是什么问题:master 根 package-lock.json 的版本元数据落后于 package.json 文件——bili 0.1.191 vs lock 0.1.190(version 与 packages[""].version),acp-kernel 0.0.114 vs lock 0.0.112(packages.kernel.version)。pi-subagents 0.1.4 两边一致,不受影响。已在 origin/master 直接核对属实。
    2. 什么原因导致的:release flow 只 bump package.json(及 refactor(#2607): remove compress.stripImages — default media folding replaces it #2688 bump kernel/package.json),漏了重新生成 lock 这一步。§2 KDD feat: persistent + namespaced sessions, multi-tenant session isolation, stream robustness #5 要求 "lock records the file link and stays committed",但流程里没有任何机制保证 bump 后 lock 被同步——这是簿记缺口,不是某次手误。
    3. 影响范围与严重程度:当前低。全部 CI 走 npm ci,现版本 npm 容忍根级/file-link 版本漂移(master is typecheck-broken: image-request-budget test still uses removed compress.stripImages (#2688 x #2613 race) #2698 有 PR run 走到 tsc 的证据);本地 npm install 会自愈。潜在:更严格的 npm 或显式同步校验会让 npm ci 失败 → 一旦触发即全仓 CI 级故障;审计者会读到过期版本号。定性:特定条件下才出问题(npm 收紧 / 加同步检查时),现状仅为簿记不一致。
    4. 怎么修复的(同一机制的两面,合在一个 PR):
      • (a) 立即修:npm install --package-lock-only 重生成 lock,diff 恰好 3 个版本字段,无传递依赖变更、无重排;已验证幂等(二次再生成零 diff)。
      • (b) 防再发:ci.yml 加 lock-sync guard(挂进 test.needs),每次 push/PR 跑同样再生成 + git diff --exit-code,stale lock 直接红——机械执行 §4 rule 2("release commit changes ONLY version + lock if drifts")。
      • 放 ci.yml(pre-merge) 而非 release.yml(post-merge):只有 pre-merge 能在坏 commit 落地前挡住它。
      • 刻意 ungated(不像 version/kernel-guard 只在 pull_request 跑):master push 和 release 分支也要被拦,否则 release 分支 bump 仍能合并 stale lock。workflow 内注释记录了这一偏离。
    5. 是否回归问题:无。逐项过既有行为——lock 仅 3 行版本变化,无依赖/结构变动;ci.yml 只新增一个 job + test.needs 追加一项,未改任何既有 job/阈值/时序;docs 纯新增。唯一副作用:基于 pre-fix master 的在途 PR 会在新 gate 上短暂红到 rebase(cancel-in-progress 会自动重跑,无需额外操作)。
    6. 是否破坏缓存:不涉及。不触碰缓存/重试/增量游标/去重键。
    7. 是否改了设计方向:不涉及架构转向,只在现有 CI guard 族里加一个同构 drift guard(沿用 docs-sync 的 regen-and-diff 先例)。⚠️ 行为变更披露:新增一个 required CI gate——旧值=无此 gate,新值=stale lock 会被拦下;原因是机械执行 §4 rule 2 防再次漂移。若你不想上 gate,可单独砍掉 commit B(963cb0eed),lock 修复(commit A aeac5a87c)独立成立、不受影响。
    8. 是否引入新配置:不涉及。无新 env/config/默认值。

    验证:lock 幂等 + pass-path git diff --exit-code exit 0 + ci.yml YAML 解析通过,均本地定向确认;无 src 改动,故本地不跑全量,交 CI 在 rebase head 上把关。

    判定:可合(建议 human 合并;CI 绿后 merge 即可)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions