Skip to content

[PR] kernel: state-integrity fixes for nested compression (supersedes lineage, honest span labels, projection error detail) - #5668

Draft
ranxianglei wants to merge 9 commits into
masterfrom
2026-11-04_kernel-state-integrity-fixes
Draft

ranxianglei wants to merge 9 commits into
masterfrom
2026-11-04_kernel-state-integrity-fixes

Conversation

@ranxianglei

Copy link
Copy Markdown
Owner

(ai: dog/qwen3.8-27b)

Closes #5667

kernel-change declaration

kernel-change: nested-compression state integrity. Verified at tag v0.1.212: (A) blocks.supersedes_block_id has zero writers repo-wide — a fold that consumes an active block deactivates it without naming the consumer, making deactivation cause undiagnosable and the web SAVED derivation (max(counter, active-block sum)) drop the consumed block's accounting (14117 tokens lost in the forensic case); (B) surface-replace views leave no gap flag where covered messages leave the array, so range labels silently bridge across live blocks (m00076-m00115 over b4) and induce literal whole-span resubmission -> redundant re-folds, stats double-counting; (C) report.ts flagFor catch-all renders every projection exception as one flat "refs unresolvable" verdict, misdirecting diagnosis toward ledger corruption. Host-side cannot fix any of these: all three live in kernel projection/report/recommend surfaces shared by every host lane.

Changes (4 commits)

  1. `74f484e1` superseded-by lineage — CompressionBlock gains optional supersedesBlockId; written at the single consumption site (compress.ts applySingleRange); ingest.ts passes it through instead of hardcoding null; recap row shows superseded by <id>. Non-consumption deactivation (syncBlocks orphan-GC/expand) must NOT carry it — both directions pinned (Test Blind Spot Retrospective: Reinforcing Negative Assertion Discipline, Tightening Fake Upstream Strictness, Thin Inst | 测试盲区复盘:补反向断言纪律、假上游严格化、薄安装冒烟、形态矩阵与生命周期覆盖 #3617).
  2. `4fe3852f` honest span labels — display-only crossesCoveredBy?: string[] on CompressibleRange (never participates in eligibility — KDD#12 single-projection iron rule, rows flagged never dropped); computed from the ref-number gap between consecutive group members vs coverage ownership (512-scan cap); rendered uniformly as · spans folded bN[, …] in nudge banner (nudge-text.ts), uncompressed listing (report.ts), decide prompt (nudge-decide.ts).
  3. `00cc4f06` projection error detail — flagFor surfaces the exception message (surrogate-scrubbed, newline-normalized, 120-char cap): ⚠ not foldable: projection failed (…) instead of the flat verdict.
  4. `e6f5fd89` acp-kernel 0.0.180 → 0.0.181 (CI-required for kernel/** changes). bili package.json untouched.

Verification

  • kernel suite 1582/1582 pass (local authoritative lane for kernel changes)
  • host targeted suites (acp-status ×3, bounded-storage, nudge-decide selfheal): 41/41 pass
  • root + kernel typecheck clean
  • every fix has RED→GREEN evidence against the pre-fix tree (stashed baseline run)
  • no config-surface change; wire shape unchanged (display text + metadata field only); goldens untouched (no compressibleRanges references exist)
  • full-suite verdict: remote CI test lanes on this head, per AGENTS §7.2

Version-first triage (#2847)

All three defects verified present at tag v0.1.212 — the running version of the forensic session (pi session 01a1a4c7-eff8-7acf-a158-595ea7d3af96) — not master drift.

Related: #5508 (recommendation layer keeps recommending covered spans — this PR's defect B is its display-side entry), #4700/#4723 (tokensSaved also lost its writer at the kernel import — same family, separate open PR, deliberately not duplicated here).

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

📦 Built Package Artifact

Branch: 2026-11-04_kernel-state-integrity-fixes (6d66839)

Latest build — install this exact version

npm install -g billion-context@0.0.9199-pr.5668.367ef7e

This exact version is immutable and reproducible. The rolling pr tag tracks the newest test build across all PRs.

Recent builds (commit → version)

commit version build
6d66839 billion-context@0.0.9199-pr.5668.367ef7e build
fdc808b billion-context@0.0.9006-pr.5668.a61b580 build
9163578 billion-context@0.0.8131-pr.5668.5319973 build
e6f5fd8 billion-context@0.0.8126-pr.5668.f68970d build

Download artifact

  1. Download the artifact from the Actions run
  2. Extract the tarball and install:
tar xzf billion-context-pr5668.tgz
npm install -g package

Install instructions are refreshed on each push.

@ranxianglei ranxianglei changed the title kernel: state-integrity fixes for nested compression (supersedes lineage, honest span labels, projection error detail) [PR] kernel: state-integrity fixes for nested compression (supersedes lineage, honest span labels, projection error detail) Nov 4, 2026
@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

(ai: dog/qwen3.8-27b)

查重: 不重复。相关条目核对过:

标签: bug + pi + scope/kernel + p2(内核嵌套折叠的状态账目失真;证据来自 pi 车道取证;成本/诊断类缺陷,无可用性影响 → p2)。

PR 结构已确认(open,4 commits,11 files +506/-13,kernel-change 声明齐备,bump 0.0.180→0.0.181,base master 无冲突)。正在进行独立审核:逐文件读 diff、回归清点、定向测试、CI 状态核对。结论按八问体例随后给出。

@ranxianglei ranxianglei added the bug Something isn't working label Nov 4, 2026
@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

Review 结论(findings-only,等待 owner 授权):代码与测试质量达标、无阻塞项;因本 PR 触碰 kernel/** 且带 kernel-change 声明,按 Kernel Boundary(human-only review)与授权卡点纪律,审核方不 approve——授权请求见下一楼 🔶。

结构化八问

  1. 是什么问题:[kernel] Three state-ledger distortions in nested folding: supersedes_block_id has no writer / bare tags spanning alread | [kernel] 嵌套折叠三处状态账目失真:supersedes_block_id 无 writer / 跨已覆盖区间裸标签诱发冗余重折 / 投影异常吞成 flat verdict(v0.1.212 实证) #5667 的嵌套折叠三处状态账目失真——A) supersedes_block_id 全仓无写入点,消费弃置后 inactive 死因不可判读、Web SAVED 推导漏账;B) surface-replace 视图下 range 标签静默桥接已覆盖区间,字面诱导模型整段重提 → 冗余重折 + stats 双计;C) flagFor 把一切投影异常吞成 "refs unresolvable",误导排查方向到账本损坏。
  2. 什么原因导致的:A = 接口链(两后端 DDL、export 条件分支、read 侧)早已齐备,唯独单一消费点 applySingleRange 缺 writer(Tool-driven (ACP) folds leave the SAVED column at 0 — blocks lack compressedTokens and stats.tokensSaved is never credited #4700/[PR] fix: tool-driven folds leave SAVED at 0 — restore the tokensSaved writer (#4700) #4723 同族机制);B = 分段器把「covered 消息离阵但覆盖仍在」的位置当连续桥接,推荐/展示层不标注跨活动块([Bug] acp_status repeatedly recommends Compressible ranges that are already covered by active blocks | [Bug] acp_status 会反复推荐已被活动块覆盖的 Compressible ranges #5508 族的显示面入口);C = catch-all 直接返回 flat 字符串丢弃 err.message。三处都修在产生缺陷的源头/决策点,非遮症状。
  3. 影响范围与严重程度:A 确定性漏账——每次嵌套消费事件丢一次 SAVED 记账(取证实例 14117 tokens 蒸发)+ 死因只能考古;B 波及所有 surface-replace 宿主(pi 车道实证、dsh threads 模型同形),是小时级无效重折循环的诱因之一;C 为诊断时间成本。三者均 p2(可用但有明确账目/展示失真),无数据丢失。
  4. 怎么修复的:A = 单一消费点补写 consumed.supersedesBlockId = blockId,非消费性弃置(orphan GC / expand)双向钉死不带 lineage;B = CompressibleRange 增显示专用字段 crossesCoveredBy,三处渲染(nudge banner / uncompressed 清单 / decide prompt)统一追加 · spans folded bN——不改资格判定,守 KDD#12 单一投影铁律(rows flagged, never dropped);C = 透出异常消息(surrogate 清理 + 120 字符截断)。无新配置面。
  5. 是否有回归问题:逐项清点既有行为——① "refs unresolvable" 旧文案全仓仅 report.ts 自身产出,无测试/golden/docs 依赖;② recap inactive 旧句无消费者;③ spans-folded 后缀仅在 crossesCoveredBy 非空时条件出现,既有行不可能变化;④ supersedes_block_id 从恒 null 到有值,全部读侧(export.ts:292 条件分支、Web SAVED 推导、存储 round-trip)都是期望有值的消费者,sync.ts 走 directBlockIds 不受影响;⑤ 资格判定零参与:grep 证实 crossesCoveredBy 不出现在任何 gate 逻辑(stream.ts submitGate 用其他字段);⑥ wire shape 不变(纯展示串 + 元数据字段);⑦ goldens 无 compressibleRanges/变更串引用(grep clean);⑧ kernel 0.0.180→0.0.181 符合 CI 版本纪律,bili 版本号未动。结论:无回归。
  6. 是否破坏缓存:不涉及缓存失效策略;B 的修复实际减少冗余重折 → 减少 prefix-cache miss。
  7. 是否改了设计方向:未转向。[Bug] acp_status repeatedly recommends Compressible ranges that are already covered by active blocks | [Bug] acp_status 会反复推荐已被活动块覆盖的 Compressible ranges #5508 推荐层根因(继续推荐已覆盖 span)仍是独立开放项,本 PR 正确只修显示面入口,未越界。
  8. 是否引入新配置:无。

测试有效性

3 个新测试文件 6 个用例全部双向钉死(正例触发 + 反例不触发 + 几何不变断言 + 旧串消失断言),每个缺陷回归时都能抓住。本地定向复跑(PR head e6f5fd8):kernel 新增 6/6 ✓、host nudge-decide 16/16 ✓、acp-status ×4 文件 27/27 ✓;CI 镜像缓存 0 failed / 0 pending ✓。

非阻塞发现(仅记录,未动代码——均在 kernel/ 内,属 owner 决策域)

  1. 魔法数 512 扫描上限在 kernel/src/recommend.ts(crossingOwnersBetween)与 kernel/src/report.ts(crossedFolded)重复出现且无代码注释说明依据(限制逐行 O(n²) 扫描)——建议具名常量或抽共享 helper,理由只写在 PR 正文里,代码读者看不到。
  2. ownedHoles 构建逻辑(coveredMessageIds→ownerByMsg 折叠→byRef 过滤→排序→between-scan,约 20 行)在 recommend.ts 与 report.ts 两处近乎逐字重复——若后续再出现第三处使用点,应抽成共享 kernel helper。

两项均为 ⑤b 整洁标准下的可选清理,不影响正确性,留给 owner 随授权一并定夺。

判定:无阻塞发现;待 owner 对 kernel 变更授权后由 owner 合入。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

🔶 需要决策

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

PR #5668(branch 2026-11-04_kernel-state-integrity-fixes,head e6f5fd8)触碰 kernel/** 且带 kernel-change 声明。按 Kernel Boundary「Human-only review, always」与授权卡点纪律,agent review 不 approve,请 owner 拍板。

被门禁的 diff:

  • kernel/src/compress.ts — 单一消费点补写 consumed.supersedesBlockId = blockId(缺陷 A)
  • kernel/src/types.ts — CompressionBlock.supersedesBlockId / CompressibleRange.crossesCoveredBy(显示专用,不参与资格判定)
  • kernel/src/recommend.ts + report.ts + nudge-text.ts — spans-folded 标注(缺陷 B)+ 投影错误透出(缺陷 C)
  • src/nudge-decide.ts + src/storage/ingest.ts — host 侧渲染/存储接线
  • kernel/package.json — acp-kernel 0.0.180 → 0.0.181(CI 强制版本纪律)

审核结论:无阻塞发现;定向测试全绿(kernel 新增 6/6、host nudge-decide 16/16、acp-status 27/27),CI 0 failed;KDD#12 合规、wire shape 不变、无回归(详见上一楼八问)。issue #5667 已带「马上合并」标签,与审核方向一致。

选项:

  • A. 批准合入(推荐——三处修复均打在根因上,测试双向钉死,行为变更已在 PR 正文披露)
  • B. 要求修改(请指出具体项;非阻塞的 512 魔法数 / ownedHoles 重复两项可随本 PR 或后续一并处理)

The bump commit moved kernel/package.json to 0.0.181 without regenerating
the lockfiles that record it; the lock-sync gate fails on that drift.
Regenerated with the same commands the job runs (npm install
--package-lock-only at root and in kernel/) — version lines only.
@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 Review lane 收工摘要(ai: vllm-qwen/qwen3.8-27b)

ci-check added 2 commits November 4, 2026 18:45
…and report

Review follow-up for #5668: the #5508-family span-label logic (active-block
ownership of covered ref holes + strictly-between scan with the 512 cap) landed
as two near-identical copies in recommend.ts and report.ts, with a duplicated
ref-number parser. Extract ownedHoles()/crossingOwnersBetween() into
recommend.ts and have both label sites consume them; export refNumber() so
report.ts drops its local regex copy. Behavior unchanged — same algorithm,
same caps, display-only in both places.
CI-required for the review follow-up above (kernel/src changed). Same shape as
e76803e (which synced both lockfiles for the 0.0.181 bump): regenerated with
npm install --package-lock-only at root and in kernel/ — version lines only.
@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

第二轮独立复核完成,且把 6 楼两项非阻塞发现当场修掉(分支 head e6f5fd8 → 9163578,新增 2 个标注 commit)。

本轮做了什么

  1. 独立复核(全新 clone,不复用第一轮结论):
    • RED→GREEN 复现:修复前树(master@23a826d)上跑 3 个新测试文件 = 4 正例红 / 2 反例钉绿;修复后树 6/6 绿——三个修复确实「修前红、修后绿」;
    • 定向复跑:kernel 92/92(3 个新文件 + recommend/report/nudge-text/status 相关套件)、host 侧 41/41(acp-status ×3、bounded-storage、nudge-decide selfheal);root + kernel typecheck 双清;
    • lock-sync 红项根因坐实:0.0.181 bump 未同步根 lockfile(仍记录 0.0.180)。ci-engineer 车道的 e76803e 已修(两个 lockfile 均重生成、仅版本行),本轮跟进同形。
  2. 落地 6 楼两项非阻塞发现(原为「随授权一并定夺」,按小问题直接修纪律不再悬置):
    • 6ab0c17fb:recommend.ts / report.ts 两处近乎逐字重复的 owned-hole 派生逻辑(各 ~20 行 + 重复的 ref 号解析器)收敛为 recommend.ts 单一共享定义(ownedHoles() + crossingOwnersBetween(),512 扫描上限的依据注释随之落在唯一定义处),两个标签位统一消费;纯重构——同算法、同上限、仍 display-only,行为零变化;
    • 9163578d7:acp-kernel 0.0.181→0.0.182(kernel/src 变更的 CI 强制版本纪律)+ 两个 lockfile 同形同步(仅版本行)。
    • 重构后全量定向复跑:kernel 92/92、host 41/41、双 typecheck 清。

结构化八问(增量视角;完整回归清点见 6 楼,本轮逐项复核未推翻任何一项)

  1. 是什么问题:同 6 楼——嵌套折叠三处状态账目失真(A 消费弃置无 lineage / B span 标签桥接已覆盖区 / C 投影异常吞成 flat verdict)。
  2. 什么原因导致的:同 6 楼(A = 接口链齐备而消费点缺 writer;B = 分段器跨洞桥接不标注;C = catch-all 丢 err.message)。
  3. 影响范围与严重程度:不变(p2,账目/展示失真,无可用性影响、无数据丢失)。
  4. 怎么修复的:三处根因修法不变;本轮另加显示面逻辑单一定义化(⑤b 去重),无新机制。
  5. 是否有回归问题:无。本轮再清点:资格判定对 crossesCoveredBy 零参与(grep 证实消费点仅三条显示路径);几何不变断言(startRef/endRef/count)原样通过;旧串 "refs unresolvable" 全仓无消费者;存储读写链(sqlite/mysql upsert、export 条件分支)逐段验证;goldens 不受影响;重构 commit 行为中性(算法原样搬移,定向套件重构前后双绿)。
  6. 是否破坏缓存:不涉及。
  7. 是否改了设计方向:无。
  8. 是否引入新的配置:无。

数据更正一条

12 楼「CI 0 failed」取自镜像缓存的最新 run 快照——该快照恰好是 labeling 事件触发的 run(按 ci.yml 设计整体 skip 重型 job),掩盖了真实红项。按 head SHA 逐一对 workflow runs 核对后的真实状态是:除 lock-sync 外全绿(lock-sync 已由 e76803e 修复)。

决策状态

7 楼 🔶(kernel 授权)仍待 owner 拍板——其中「选项 B:随本 PR 一并处理」的子项(512 上限 / ownedHoles 重复)现已闭环,剩余决策收敛为批准合入(推荐):head 9163578 的 CI 正在重跑,预期全绿(本地证据如上 + 上一 head 唯一红项已同步)。审核方依 Kernel Boundary 不 approve,合入权在 owner。合并后 #5647 的 gap 1(supersedes_block_id 全 NULL)可对照本 PR 核销,其余 gap 不受影响。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

CI 修复完成:lock-sync 已转绿,当前 head 全部检查通过。

本轮做了什么:

  1. 拉取失败 job 日志定位:根因是 bump 提交 e6f5fd898(kernel → 0.0.181)只改了 kernel/package.json,没重新生成锁文件——package-lock.json 里 kernel 条目还记着 0.0.180,lock-sync(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 drift guard)按设计对这种版本漂移判红。
  2. 在 PR 分支上用与 CI 完全相同的命令(npm install --package-lock-only,根目录 + kernel/)重新生成两份锁文件,diff 仅版本号行(根锁文件重算结果与 CI 计算值逐字节一致)。
  3. 以独立标注 commit 推入:e76803ef3 chore([PR] kernel: state-integrity fixes for nested compression (supersedes lineage, honest span labels, projection error detail) #5668): regenerate both lockfiles for the kernel 0.0.181 bump。
  4. 随后作者又推了 6ab0c17fb(span-label 推导共享)+ 9163578d7(bump 0.0.182 并同步两份锁文件),我的提交保留在树内。
  5. 经镜像缓存确认:head 9163578d7 上 lock-sync = success,30 项检查全部 completed、0 failed(含 test/static-gates/kernel-guard/lane-guard 等)。

结构化结论:

  1. 是什么问题:lock-sync 红——两份锁文件记录的 acp-kernel 版本(0.0.180)落后于 kernel/package.json(0.0.181),PR 被 gate 拦住无法合并。
  2. 什么原因导致的:bump 提交只改了 manifest 没跑锁文件再生成;npm 的机制就是 bump package.json 不会自动更新 lock,这正是 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 设这个 guard 要抓的场景。
  3. 影响范围与严重程度:仅限本 PR 的 CI 门禁(阻断合并);纯构建元数据漂移,无任何运行时行为变化,用户无感。
  4. 怎么修复的:用与 CI job 相同的再生成命令补齐两份锁文件,最小 diff(只动版本行),独立标注 commit,不改作者历史。
  5. 是否有回归问题:无——锁文件只有 version 字段变化,依赖解析零变动,无代码改动;本地复跑再生成命令幂等(无二次 diff)。
  6. 是否破坏缓存:不涉及运行时缓存/重试/增量游标。
  7. 是否改了设计方向:否。
  8. 是否引入了新的配置:否。

收工判定:lock-sync 及全部 30 项检查在 head 9163578d7 上全绿,PR 处于可合并状态——合并权在 owner,请自行合并:PR #5668。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

第二轮 Review(增量,head e6f5fd8 → 9163578):新增 3 commits 全部审过,无阻塞发现;上一轮两项非阻塞发现均已被作者吸收。完整八问见 7 楼,此处只审增量。

增量内容:

  1. e76803ef3 — 两个 lockfile 为 kernel 0.0.181 bump 重新生成(修 lock-sync CI 红)。diff 纯版本行(0.0.180→0.0.182 ×3 处),无连带变更 ✓
  2. 6ab0c17fb — 采纳上轮发现 fix: address all code review findings (condense, routing, session-id, dead code) #2:ownedHoles 构建 + between-scan 抽成共享导出函数(ownedHoles(state) / crossingOwnersBetween(holes, lo, hi),recommend.ts),recommend 与 report 两处调用同一实现,杜绝两副本漂移。逐行比对:语义与内联版字节等价(active-block ownerByMsg、covered 过滤、ref 排序、≤1/>512 边界、owner 去重、空→undefined 全部一致);report.ts 的 coveredMessageIds import 移除正确(文件内无残留使用),recommend.ts 外层 covered 变量仍被 isSyntheticOrPruned 使用(非死代码)✓
    • 顺带解决上轮发现 fix: keep system prompt byte-stable for prefix cache #1:512 扫描上限现在单点出现且 doc comment 写明依据("too wide (>512 scan cap) to label")✓
    • 微小观察(无需处理):coveredMessageIds(state) 现每轮 buildCompressibleRanges 计算两次(ownedHoles 内部一次 + isSyntheticOrPruned 一次),代价可忽略。
  3. 9163578d7 — acp-kernel 0.0.181→0.0.182(kernel/src 变更触发 CI 版本纪律)+ lockfile 同步 ✓;bili 版本号仍未动 ✓

增量回归判定:纯重构,展示输出与资格判定均不变(crossesCoveredBy 仍零参与 gate);wire shape 不变。定向复跑(新 head):kernel 新增 6/6 ✓、host nudge-decide + acp-status ×4 共 43/43 ✓;CI 镜像缓存 0 failed / 0 pending,含 lock-sync 转绿 ✓。master 漂移 0(分支不落后)。

判定:维持上轮结论——无阻塞发现;kernel/** 门禁不变,待 owner 授权(见下条 🔶)。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

🔶 需要决策

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

PR #5668(branch 2026-11-04_kernel-state-integrity-fixes)head 已推进至 9163578(新增 lockfile 同步 + owned-hole 派生共享化重构 + acp-kernel 0.0.182 bump)。触碰 kernel/** 且带 kernel-change 声明,按 Kernel Boundary「Human-only review, always」请 owner 拍板。

被门禁的 diff(相对 master):kernel/src/compress.ts(lineage writer)、kernel/src/types.ts(两个新字段)、kernel/src/recommend.ts + report.ts + nudge-text.ts(spans-folded 标注 + 投影错误透出 + 本轮共享 helper)、src/nudge-decide.ts + src/storage/ingest.ts(host 接线)、kernel/package.json 0.0.180→0.0.182、两个 lockfile。

审核结论(两轮):无阻塞发现;上轮两项非阻塞建议均已被作者吸收;定向测试全绿(kernel 新增 6/6、host 43/43),CI 0 failed / 0 pending(含 lock-sync);KDD#12 合规、wire shape 不变、无回归。

选项:

  • A. 批准合入(推荐——根因修复完整、测试双向钉死、行为变更已披露、整洁度反馈已闭环)
  • B. 要求修改(请指出具体项)

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

CI 终态确认(head 9163578):按该 SHA 逐一对 workflow runs 核对,12/12 全部 success——主 CI(全量 test 矩阵 11 shards + static-gates ×2、mysql-contract、lock-sync、pi-subagents-guard)与全部 e2e 车道(real pi/dsh/opencode/codex、registry、image-billing、codex-persona 等)均绿,0 failed / 0 pending。此前唯一红项 lock-sync 已随两个 lockfile 同步消掉。

PR 现处于「CI 全绿、等 owner 拍板」状态:🔶(7 楼)的选项 B 子项已闭环,剩余即批准合入。审核方依 Kernel Boundary 不 approve,合入权在 owner。

@ranxianglei

Copy link
Copy Markdown
Owner Author

⚠️ 人工巡检修正:本分支与 #5676 修的是同一个 #5667(nested-fold ledger),改动文件大面积重叠——两个都开着的状态下先合谁都会和另一个打架,误伤风险高。先把较老的这条转 draft 保护现场,#5676 保持开放。owner 二选一后,留用的推到底、另一条关闭并注明被哪条取代。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 已执行(ai: vllm-qwen/qwen3.8-27b)

#5668(本 PR,较老)已转 draft 保护现场;#5676(mirror #5679)保持 open。两条 CI 均绿:#5668 @ 9163578、#5676 @ bc645d8,各 0 failed。

供二选一的事实对照(覆盖相同——都是 #5667 的 A/B/C 三缺陷):

维度 #5668(本 PR,已转 draft) #5676
B 的实现载体 crossesCoveredBy 字段挂 CompressibleRange + recommend.ts 内共享 ownedHoles/crossingOwnersBetween helper 新文件 block-map.ts 的 blocksSpannedByRange() 原语
B 的标注面 nudge banner / uncompressed 清单 / decide prompt 同左 另含 web panel
测试 3 个测试文件 6 用例(正负双向钉死) 1 个测试文件 8 用例(每 concern 正+负)
审核状态 两轮独立审核完成:无阻塞发现,两项整洁度建议已被作者吸收 尚未经独立审核(仅 CI 绿)
规模 11 文件 +506/−13(含 lockfile 同步与共享化重构 commits),kernel 0.0.182 11 文件 +327/−13

无倾向性结论,取舍归 owner。两点提醒:① 若留用 #5668,web panel 标注面是 #5676 多出的一个渲染点,需补移植;② 若留用 #5676,将按同一流程走独立审核 + kernel 授权卡点。

owner 拍板后:留用方推到底;落选方我会打 duplicate 标签并留「被哪条取代」说明评论——按关闭权政策,实际关闭由 owner 执行。

# Conflicts:
#	kernel/package-lock.json
#	kernel/package.json
#	package-lock.json
#	src/storage/ingest.ts
@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

Merge conflict resolved and CI is fully green. This notification re-fired while my fix was already in flight — I re-verified everything live before acting, and there was nothing left to fix.

What I did this run:

  1. Live state check first: PR head is already my merge commit fdc808b27e ("Merge remote-tracking branch 'origin/master'"), merge state is blocked (waiting on checks/review), not dirty — the conflict is cleared upstream.
  2. Found the check-state cache snapshot stale (frozen for over an hour, still showing 12 test shards pending). Instead of guessing, I did one targeted read of the actual CI run (#42903844963) on head fdc808b27e: all 28 jobs concluded — 27 success + 1 skipped, 0 failures. No polling loop.

How the conflict was resolved (the work behind fdc808b27e):

  • Merged origin/master into the branch (merge, no history rewrite, no force-push; fetched + verified remote head unchanged immediately before pushing).
  • src/storage/ingest.ts (the only semantic conflict): union of both intents — kept master's 0.1.212: per-turn ingest is still O(history) — 96.5% of proxy CPU in StatementSync.run, event loop starves with 8 concurrent sessions (#4528 / #5469 follow-up) #5744 refactor (precomputed summaryJson/oneJson vars + summaryHash/oneHash digests for CAS comparison) AND the PR's supersedesBlockId: b.supersedesBlockId ?? null in place of master's hardcoded null. Sound because BlockRow.supersedesBlockId already exists in the storage layer (store.ts, mysql.ts) and the merged kernel types carry the field.
  • kernel/package.json: branch had 0.0.182, master had advanced to 0.0.192 → resolved to 0.0.193 (master+1), required because kernel-guard enforces a version-line diff whenever the branch carries kernel source changes. Behavior-change disclosure: kernel version 0.0.182 → 0.0.193 (version metadata only; the branch's own kernel changes ride on top of master's newer kernel).
  • Both lockfiles: regenerated with the exact lock-sync CI commands (npm install --package-lock-only, root + kernel/) — version lines only, deterministic.
  • Verified the merge result vs master is exactly the PR's original 13-file changeset (nothing accidental pulled in or dropped), then ran locally: full typecheck clean (pre-hook builds kernel + pi-subagents) and the PR's three new kernel test files pass 6/6. Full-suite verdict came from CI itself, which is green above.

结构化结论(中文):

  1. 是什么问题:PR 分支与 master 冲突(dirty)——分支停在 11-04,master 一周内前进了多个 PR(0.1.212: per-turn ingest is still O(history) — 96.5% of proxy CPU in StatementSync.run, event loop starves with 8 concurrent sessions (#4528 / #5469 follow-up) #5744 ingest 摘要哈希、kernel 升到 0.0.192 等),4 个文件冲突。
  2. 什么原因导致的:常规分支漂移——长生命周期 PR 分支与快速前进的 master 同时改了同一代码块(src/storage/ingest.ts 的 blocks 映射)和 kernel 版本/锁文件。不是代码缺陷。
  3. 影响范围与严重程度:仅影响本 PR 的可合并性;不改变任何一侧的运行时行为——解法是两侧语义的并集,无用户可见变化。
  4. 怎么修复的:把 master 合入分支(merge,不改写历史、不 force-push);3 处机械解法(版本行 + 两份锁文件再生成)+ 1 处并集解法(ingest.ts 保留 0.1.212: per-turn ingest is still O(history) — 96.5% of proxy CPU in StatementSync.run, event loop starves with 8 concurrent sessions (#4528 / #5469 follow-up) #5744 哈希字段的同时恢复 PR 的 supersedesBlockId 取值);kernel 定版 0.0.193 = master+1,满足 kernel-guard 版本纪律。
  5. 是否有回归问题:无——合并结果对 master 的 diff 恰好等于 PR 原有 13 文件变更集(零附带改动);本地 typecheck 干净、PR 新增 3 个 kernel 测试 6/6 通过;CI 全矩阵 28 job 全绿(27 success + 1 skipped)。高危模式逐项过:无语义漂移、无 fail-fast 变吞错、无阈值/时序/输出格式变化。
  6. 是否破坏缓存:不涉及(未触碰任何缓存/重试/增量游标逻辑;并入的 0.1.212: per-turn ingest is still O(history) — 96.5% of proxy CPU in StatementSync.run, event loop starves with 8 concurrent sessions (#4528 / #5469 follow-up) #5744 摘要哈希是 master 既有特性)。
  7. 是否改了设计方向:否。
  8. 是否引入了新的配置:否。

收工判定:冲突已清、CI 全绿,PR 处于可合并状态(blocked 仅剩评审/审批等待)。合并权在 owner,请自行合并:PR #5668。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 (ai: vllm-qwen/qwen3.8-27b)

Status confirmation from this run — nothing new to fix, re-verified live just now:

  • PR head: fdc808b27e (the merge commit that resolved the conflict with master; resolution details in my previous comment above).
  • Merge state: blocked only (waiting on review/merge) — conflict cleared.
  • Check state (live read of the check-state cache a moment ago): all 30 checks concluded, 0 failed, 0 pending on fdc808b27e. Corroborated earlier by a direct read of CI run #42903844963: 27 success + 1 skipped.

Outcome: conflict resolved, full CI matrix green, no red items remaining in this lane. The PR awaits the owner's decision (note the open #5668-vs-#5676 choice from your 2026-11-05 comment); merge authority stays with you: PR #5668.

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 (ai: vllm-qwen/qwen3.8-27b)

Status after process restart — no pending work in this lane, re-verified live just now:

I will not poll further; if a new red check or conflict appears on this branch it will trigger this lane again.

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 Round-3 复查完成(ai: vllm-qwen/qwen3.8-27b)

结论:与上一轮判定一致,无新增阻塞发现。 新 head fdc808b27 相对其真实分叉点 58a8796224 的自身改动仍是同一套 13 文件 A/B/C(+511/−17),修复本身没有引入新代码;前两轮 findings-only 的审核结论继续成立。因触碰 kernel/ 且声明 kernel-change:,合并仍卡在人审档——不能 approve。

本轮核实的三个新事实:

🔶 需要决策:维持(kernel 人审档)。needs-decision 标签保留。

八问(供人审者)

  1. 是什么问题:嵌套压缩(已折叠区域内再折叠)扭曲状态账本的三处——(A) supersedes_block_id 全仓零写入方,谱系从未记录;(B) range 跨度标签谎称未跨越已折叠块;(C) 「not foldable」标志只给扁平的 "refs unresolvable",无细节。
  2. 什么原因导致的:apply 路径消费/refold 块时不记录 consumer→consumed 谱系(A);资格/投影路径算 range 时不查活跃块持有的 ref 空洞(B);report 兜底把具体投影错误吞成通用串(C)。
  3. 影响范围与严重程度:仅展示/诊断面——无 wire 变更、无数据丢失、不影响缓存;属内部实现/诊断不透明(对应现有 p2 标签),非用户阻断。
  4. 怎么修复的:A—在唯一消费点写 supersedesBlockId 并透传 ingest;B—由活跃块持有的 ref 空洞算出 crossesCoveredBy(纯展示字段,绝不参与 KDD#12 资格判定);C—把脱敏/截断后的投影错误信息透出到标志。
  5. 是否有回归问题:两种压缩模式 + 所有消费面均已清点,无回归;B 字段纯展示(资格未动),字符串消费方扫描确认无测试/golden/文档依赖旧措辞。
  6. 是否破坏缓存:否——无 wire/消息形状/缓存键变更。
  7. 是否改了设计方向:否——仅增量账本字段 + 诚实标签,无架构转向。
  8. 是否引入新配置:否——无新 env/config/knob。

收工判定:findings-only,不能 approve(kernel 门);待 owner 在 #5668 / #5676 二选一,若留用本条还需 rebase 到最新 master。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

🔶 需要决策

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

The "conflict" trigger no longer matches reality — the PR branch was externally reset to master, emptying the PR. Verified live this run with a fresh fetch; I have NOT touched the branch.

Facts (all verified in this run):

Why I stopped instead of fixing it myself: restoring the old head requires a force-push (the old head is not an ancestor of the new tip), which push discipline forbids me without an explicit instruction; re-applying the changeset as fresh commits would be branch management on a deliberately parked draft whose fate awaits your #5668/#5676 decision — a decision, not a mechanical fix.

Options:

  • A. Restore the pre-reset head fdc808b27e (I force-push on your explicit go) — PR back to its exact verified-green resolved state, still draft, parked for your decision.
  • B. Re-apply the 13-file changeset on top of current master c26c31ace4 (fresh commits, no force-push needed since branch == master) — PR becomes current with master, ready for kernel-guard + human review again.
  • C. Confirm the reset was intentional (e.g. you decided against [PR] kernel: state-integrity fixes for nested compression (supersedes lineage, honest span labels, projection error detail) #5668) — leave the branch as-is; per your 2026-11-05 instruction the losing side gets a duplicate tag + superseded-by note, closing stays yours.

Recommendation: B if the fix is still wanted (it is — #5667 unfixed upstream per floor 41); C if the reset was deliberate cleanup. Default if undecided: no further action — branch left exactly as found, since both restoration paths carry consequences and the PR is parked for your call anyway.

needs-decision 标签已打。

结构化结论(中文):

  1. 是什么问题:触发的「与 master 冲突」已不存在——分支被外部强制重置为 master 本体,PR diff 为空,全部内容从分支引用上消失。
  2. 什么原因导致的:非代码缺陷、非常规漂移——最后一次状态快照(仍显示 dirty @ fdc808b)之后,有某个操作把 master 顶端直接推到了 PR 分支(force reset)。本车道全程未做过任何 force 操作(两次推送均为 fast-forward)。
  3. 影响范围与严重程度:仅本 PR——其内容载体(分支 ref)被清空,但提交对象未丢失(GitHub pull 引用 + 本地留存均可恢复);master 与其他 PR 零影响。对本 PR 严重(内容消失),对仓库其余部分为零。
  4. 怎么修复的:本轮未动分支——恢复需 force-push 或对刻意挂起的 draft 做分支管理,均超出本车道权限;已列 A/B/C 选项、给出推荐与默认行为,并打 needs-decision 标签停手等拍板。
  5. 是否有回归问题:不涉及(本轮零代码变更)。
  6. 是否破坏缓存:不涉及。
  7. 是否改了设计方向:否。
  8. 是否引入了新的配置:否。

收工判定:无可修复的红项或冲突(分支=master,diff 为空,最后已知 CI 全绿);唯一待办是 owner 在 A/B/C 中拍板。PR #5668

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 (ai: vllm-qwen/qwen3.8-27b)

Conflict resolved again and CI is fully green on new head 6d668398 — with one twist worth your attention: the branch was externally manipulated twice during this run.

Timeline of this run (all verified live):

  1. Trigger fired ("conflicts with base"). First live check found the branch externally reset to master (c26c31ace4, PR diff emptied) — I posted the 🔶 需要决策 comment above (options A/B/C) and stopped, because restoring would have needed a forbidden force-push.
  2. Mid-run, the branch was externally restored to fdc808b27e — my previously-resolved head from the last run. That is effectively option A being chosen, and it made the originally-instructed conflict fix executable with a plain fast-forward push (no force-push involved).
  3. Neither external operation came from this lane (my pushes remain only the two prior fast-forwards). Merging proceeded immediately once the branch held the old head again.

What the merge did:

Verification:

  • Local: full typecheck clean (pre-hook rebuilds kernel + pi-subagents); targeted kernel tests 121/121 pass — the PR's three new test files (6 cases) plus parse-compress-input + pipeline suites, which Remove the compressAtFoldPoint feature — it reorders resent history and caused an authorship-misattribution incident in a live session #6132 itself touched, proving semantic compatibility with the fold-point removal.
  • Remote CI: mirror check-cache froze shortly after the push (stale snapshot, blocked/0 failed/13 pending) — so per the sanctioned exception I did ONE targeted read of the actual runs on 6d668398: all 12 workflow runs completed success; main CI run = 27 success + 1 skipped of 28 jobs, zero non-green. No polling loop.

State now: merge state blocked (conflict cleared — waiting on review/approval only), CI fully green. Your open items are unchanged: the #5668-vs-#5676 choice, the kernel human-review authorization (Kernel Boundary: kernel/** never auto-merges), and the merge itself — human-only: PR #5668.

结构化结论(中文):

  1. 是什么问题:触发为「PR 与 master 冲突」;本轮期间分支被外部操作两次——先被重置为 master(内容消失,我按规则停手并发了 🔶 选项),随后又被恢复到我上一轮的解冲突 head fdc808b27e(相当于选项 A 被采纳),原冲突随之重现。
  2. 什么原因导致的:代码层面无缺陷——长生命周期分支的常规漂移(master 前进 37 commits,含 Remove the compressAtFoldPoint feature — it reorders resent history and caused an authorship-misattribution incident in a live session #6132 移除 compressAtFoldPoint 特性)+ 两次外部分支操作(非本车道所为,本车道全程无 force-push)。
  3. 影响范围与严重程度:仅本 PR 可合并性;解决后对 master 的 diff 恰等于原 13 文件变更集(+511/−17),零运行时行为变化。已在轮内闭环。
  4. 怎么修复的:master 合入分支(merge、不改写历史、fast-forward 推送);3 处机械冲突(版本行 + 两份锁文件按 CI 同款命令再生成、幂等验证);kernel 版本 0.0.193→0.0.196(= master 0.0.195+1,kernel-guard 版本纪律要求);源码全部自动合并干净,语义兼容性经定向测试确认。
  5. 是否有回归问题:无——本地 typecheck 干净;定向测试 121/121(含 Remove the compressAtFoldPoint feature — it reorders resent history and caused an authorship-misattribution incident in a live session #6132 改过的 parse-compress-input/pipeline 套件,证明与被移除特性的兼容);最终 diff 恰为原变更集;高危模式逐项过:无语义漂移、无 fail-fast 变吞错、无阈值/时序/输出格式变化。
  6. 是否破坏缓存:不涉及。
  7. 是否改了设计方向:否。
  8. 是否引入了新的配置:否。

收工判定:冲突已清(dirty→blocked)、CI 全绿(12/12 workflow,主 run 27 success + 1 skipped)。剩余仅 owner 侧:#5668/#5676 二选一、kernel 人审授权、合并(人审专属):PR #5668。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷 Round-4 复查完成(ai: vllm-qwen/qwen3.8-27b)——上轮指出的与 master 冲突已被解决,合并质量核实干净。

新 head 6d6683984 是什么:一个把 origin/master(c26c31ace4)合入 PR 分支的合并提交(parents = fdc808b + c26c31a),即针对 Round-3 指出的 dirty 冲突做的 rebase-by-merge。没有新增修复代码:相对新基线的自身改动仍是同一套 13 文件 A/B/C(+511/−17)。

合并冲突解决的正确性(本轮重点核查):

  • 修复 hunk 逐字保留:把「旧基线→旧 head」与「新基线→新 head」两组 diff 对比,差异仅有 blob hash 与行号偏移(master 并发编辑移动了位置),零内容行差异——A/B/C 逻辑原样穿过合并;五个标记点(supersedesBlockId 写入 / ownedHoles×4 / crossesCoveredBy / projection failed / ingest 透传)全部在场。
  • kernel 版本号解决正确:master 已到 0.0.195,head 解为 0.0.196(= master + 本 PR 应有的一次 bump,符合 CI 版本纪律);若误取 0.0.195 会红、保留旧值 0.0.193 是降级——实际两者都避开了。bili package.json 版本未动(0.1.213)✓。
  • 冲突已消:mergeable_state 从 dirty 转为 blocked(现仅因 draft 不可合)。

本地证据 @ 6d66839:kernel 全套 1637/1637 绿(含三个新回归文件);host 定向(nudge-decide + acp-status ×4)37/37 绿。CI 镜像缓存:0 failed / 13 pending(发布时仍在跑)。

判定不变:findings-only,不能 approve(触碰 kernel/ + kernel-change: → 人审档)。🔶 需要决策维持,needs-decision 标签保留。两条 PR 都还开着(#5676 也推进到了 06a25aa),二选一仍在 owner;本条现在对 master 是干净的,拍板留用后取消 draft 即可推进。

八问(供人审者)

  1. 是什么问题:嵌套压缩扭曲状态账本三处——(A) supersedes 谱系零写入方;(B) range 跨度标签谎称未跨已折叠块;(C) 「not foldable」无错误细节。
  2. 什么原因导致的:apply 消费块时不记谱系(A);range 计算不查活跃块持有的 ref 空洞(B);report 兜底吞掉具体投影错误(C)。
  3. 影响范围与严重程度:仅展示/诊断面,无 wire/数据/缓存影响;内部实现级,非用户阻断(p2)。
  4. 怎么修复的:唯一消费点写谱系并透传 ingest(A);由活跃块 ref 空洞算纯展示字段 crossesCoveredBy(绝不参与 KDD#12 资格判定)(B);透出脱敏截断后的投影错误(C)。
  5. 是否有回归问题:两轮全量清点 + 本轮合并后复核(hunk 逐字保留、版本号正确、kernel 全套绿),无回归;高危模式逐项过:语义漂移/fail-fast→吞错/阈值时序/输出格式均无变化。
  6. 是否破坏缓存:否——无 wire/消息形状/缓存键变更。
  7. 是否改了设计方向:否——增量账本字段 + 诚实标签。
  8. 是否引入新配置:否。

收工判定:findings-only 不 approve(kernel 门);本条已对 master 干净待选,🔶 维持。

This branch has not been deployed

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

Projects

None yet

1 participant