Repository navigation
Description
环境
- billion-context
master,c26c31ace。这几个工具来自 Request two capabilities: compressed block "retirement" and summary "external rewrite". | 请求两个能力:压缩块「退役」与摘要「外部重写」 #5765 / PR [PR] feat: compress-block retirement (acp_retire/acp_restore) + external summary rewrite (acp_rewrite) + export ledger #5774,合进来是在0.1.213之后,所以目前发布的latest里还没有。 compress.blockOps.enabled: true(默认关,所以只影响主动打开的会话)。- 在 Windows 11、Node 22 上进程内复现:工具调用走
executeProxyTool,下一轮视图走内核的processTurn,插件通道走stripKernelSummaries。不经过客户端、不经过上游、不联网。
概要
一个块的摘要靠两种载体之一送到模型面前:创建这个块的那次 compress 调用的参数,或者内核渲染的 acp_summary_<blockId> 锚点。自 #4311 起,只要创建它的那次调用还看得见,锚点就不渲染,这时调用参数是唯一的载体。
acp_rewrite 和 acp_retire 只动锚点这一侧:
acp_rewrite替换block.summary。调用参数里还是旧文字,锚点又不渲染,所以下一次请求带的是旧摘要,新摘要哪儿都没有。回执却写着b1 summary replaced (123 → 116 chars)。acp_retire设置block.retired,停掉的是一个本来就没在渲染的锚点。旧摘要留在调用参数里。回执写着~116 summary chars leave the resident view。
两种情况下存下来的状态都是对的:块里有新摘要和 retired 标记,原文没动,什么都没丢。问题出在回执说的和模型之后几轮实际读到的对不上。等这次 compress 往返本身不在历史里了,改动才会显出来(见下面的对照组)。
提 issue 而不是直接提 PR,是因为最直接的修法要改一条已经发出去的工具调用的字节,这是缓存上的取舍,该由你们定。
位置
在 c26c31ace 上:
kernel/src/prune.ts:182–:193收集视图里看得见的 compress 调用 id;:277对compressCallId在这个集合里的块跳过锚点(There are two copies of the summary sent to the model: the block's acp_summary rendering and the compress call parameter | 发给模型的摘要有两份:块的 acp_summary 渲染 + compress 调用参数各存一份 — 组合快照时,调用在场就不要再渲染 #4311)。:272对已退场的块跳过锚点。两条分支都不碰调用参数。kernel/src/block-ops.ts:113–:115的rewriteBlockSummary只在块上写previousSummary、summary和rewrittenAt,别的都不动。src/server.ts:2768的stripKernelSummaries(插件通道)只要载体那一对在,就把锚点去掉(普通调用 id 在:2784,plugin_*id 走它上面一点的区间配对)。它不看retired,也不看rewrittenAt。- 回执:
src/acp-block-ops.ts:73(retire)和:107/:114(rewrite)只根据存下来的块生成。 - 和回执说法一致的工具说明:
kernel/src/compress-tools.ts:390("stops injecting those blocks' summaries every turn")和:391。 tests/issue5765-acp-block-ops.test.ts覆盖了分发、回执和导出台账,但操作之后没有再跑一轮,所以这种状态没有被测到。
复现
在一份检出里存成 tests/repro-blockops-carrier.mts,然后运行:
node --import ./tests/preload-test-env.mjs --import tsx tests/repro-blockops-carrier.mts
每个用例先把 m00001–m00004 折进块 b1,摘要以 OLD-END 结尾;再用以 NEW-END 结尾的摘要调 acp_rewrite;最后调 acp_retire。每一步之后对同一份历史跑一次 processTurn,打印发出去的视图里旧摘要和新摘要各在哪些消息里。proxy 是内核视图原样;plugin 是同一个视图过了 stripKernelSummaries 之后。
tests/repro-blockops-carrier.mts
// What does the next request carry after acp_rewrite / acp_retire?
// Run from a checkout: node --import ./tests/preload-test-env.mjs --import tsx tests/repro-blockops-carrier.mts
import * as K from "acp-kernel";
import { executeProxyTool } from "../src/loop/core.ts";
import { stripKernelSummaries } from "../src/server.ts";
const OLD = "OLD-SUMMARY the summary the model wrote in its compress call, long enough to pass the minimum summary length check. OLD-END";
const NEW = "NEW-SUMMARY the replacement text passed to acp_rewrite, also long enough to pass the minimum summary length. NEW-END";
const text = (id: string, role: string, body: string): any => ({ id, role, contentType: "text", text: body });
function setup(): any {
const messages: any[] = [];
for (let i = 1; i <= 12; i++) messages.push(text(`raw_${i}`, i % 2 ? "user" : "assistant", `word${i} `.repeat(i <= 4 ? 2500 : 600)));
const session: any = {
id: "repro-" + Math.random().toString(36).slice(2, 8),
meta: {},
metadata: {},
stats: { requests: 0, tokensSaved: 0, inputTokens: 0, cachedTokens: 0, outputTokens: 0, cacheSamples: 0, lastInputTokens: 0, compressCreditTokens: 0, contextTokens: 0, retrieveCalls: 0, retrieveHits: 0, retrieveMisses: 0, storedBytes: 0, storeBytesSaved: 0, rangeRestores: 0 },
state: K.createInitialState(),
createdAt: Date.now(),
lastSeen: Date.now(),
blockContents: new Map(),
inFlight: 0,
persisted: false,
pendingRetrievals: [],
};
session.state.messageRefs = K.assignRefs(messages, { existing: K.emptyRefMap(), nextIndex: 0 }).map;
const config: any = K.defaultConfig(200000);
config.blockOps = { enabled: true };
return { core: K.createCore(), config, messages, session, log: () => {} };
}
// One processTurn = what the kernel hands the adapter for the next request.
// "proxy" is that view as is; "plugin" is the same view after stripKernelSummaries.
function view(stage: string, ctx: any, history: any[]): void {
const turn = ctx.core.processTurn({ messages: history, state: ctx.session.state, config: ctx.config, tokenCount: 30000, tokenCountSource: "usage", renderTags: "text-only" });
ctx.session.state = turn.state;
for (const [lane, msgs] of [["proxy ", turn.messages], ["plugin", stripKernelSummaries(turn.messages, turn.state)]] as const) {
const carriers = (needle: string): string =>
msgs
.filter((m: any) => (m.text ?? "").includes(needle))
.map((m: any) => (String(m.id).startsWith("acp_summary_") ? "anchor" : m.contentType === "tool-call" ? "compress-call-args" : m.contentType === "tool-result" ? "compress-receipt" : m.contentType))
.join("+") || "nowhere";
console.log(` ${stage.padEnd(18)} ${lane} old summary: ${carriers("OLD-END").padEnd(35)} new summary: ${carriers("NEW-END")}`);
}
}
const cases: Array<[form: "array" | "line", execCallId: string, pairInHistory: boolean]> = [
["array", "call_abc", true],
["line", "call_abc", true],
["array", "plugin_fold_1", true],
["line", "plugin_fold_1", true],
["array", "call_abc", false],
];
for (const [form, execCallId, pairInHistory] of cases) {
const ctx = setup();
const args = form === "array" ? { content: [{ startId: "m00001", endId: "m00004", summary: OLD }] } : { content: `m00001–m00004 setup\n${OLD}` };
const receipt = executeProxyTool("compress", args, ctx, execCallId);
// plugin_* ids are minted by the plugin tool API; the client's own pair carries a different id.
const wireId = execCallId.startsWith("plugin_") ? "toolu_client_1" : execCallId;
const pair = pairInHistory
? [
{ id: "raw_c", role: "assistant", contentType: "tool-call", toolCallId: wireId, toolName: "compress", text: JSON.stringify(args) },
{ id: "raw_r", role: "tool", contentType: "tool-result", toolCallId: wireId, toolName: "compress", text: receipt.text },
]
: [];
const history = [...ctx.messages, ...pair, text("raw_13", "assistant", "ok"), text("raw_14", "user", "go on")];
console.log(`\n== content=${form} form, block.compressCallId=${execCallId}, compress pair in history=${pairInHistory}`);
view("after compress", ctx, history);
console.log(" " + executeProxyTool("acp_rewrite", { blockId: "b1", summary: NEW }, ctx).text.split("\n")[0]);
view("after acp_rewrite", ctx, history);
console.log(" " + executeProxyTool("acp_retire", { blockId: "b1" }, ctx).text.split("\n")[0]);
view("after acp_retire", ctx, history);
}输出:
== content=array form, block.compressCallId=call_abc, compress pair in history=true
after compress proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after compress plugin old summary: compress-call-args+compress-receipt new summary: nowhere
[acp_rewrite: b1 summary replaced (123 → 116 chars); previous summary kept for rollback; decompress originals are unchanged]
after acp_rewrite proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after acp_rewrite plugin old summary: compress-call-args+compress-receipt new summary: nowhere
[acp_retire: b1 retired; ~116 summary chars leave the resident view; acp_restore({ blockId }) puts one back and decompress/search_context still work on retired blocks]
after acp_retire proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after acp_retire plugin old summary: compress-call-args+compress-receipt new summary: nowhere
== content=line form, block.compressCallId=call_abc, compress pair in history=true
after compress proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after compress plugin old summary: compress-call-args+compress-receipt new summary: nowhere
[acp_rewrite: b1 summary replaced (123 → 116 chars); previous summary kept for rollback; decompress originals are unchanged]
after acp_rewrite proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after acp_rewrite plugin old summary: compress-call-args+compress-receipt new summary: nowhere
[acp_retire: b1 retired; ~116 summary chars leave the resident view; acp_restore({ blockId }) puts one back and decompress/search_context still work on retired blocks]
after acp_retire proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after acp_retire plugin old summary: compress-call-args+compress-receipt new summary: nowhere
== content=array form, block.compressCallId=plugin_fold_1, compress pair in history=true
after compress proxy old summary: anchor+compress-call-args+compress-receipt new summary: nowhere
after compress plugin old summary: compress-call-args+compress-receipt new summary: nowhere
[acp_rewrite: b1 summary replaced (123 → 116 chars); previous summary kept for rollback; decompress originals are unchanged]
after acp_rewrite proxy old summary: compress-call-args+compress-receipt new summary: anchor
after acp_rewrite plugin old summary: compress-call-args+compress-receipt new summary: nowhere
[acp_retire: b1 retired; ~116 summary chars leave the resident view; acp_restore({ blockId }) puts one back and decompress/search_context still work on retired blocks]
after acp_retire proxy old summary: compress-call-args+compress-receipt new summary: nowhere
after acp_retire plugin old summary: compress-call-args+compress-receipt new summary: nowhere
== content=line form, block.compressCallId=plugin_fold_1, compress pair in history=true
after compress proxy old summary: anchor new summary: nowhere
after compress plugin old summary: anchor new summary: nowhere
[acp_rewrite: b1 summary replaced (123 → 116 chars); previous summary kept for rollback; decompress originals are unchanged]
after acp_rewrite proxy old summary: nowhere new summary: anchor
after acp_rewrite plugin old summary: nowhere new summary: anchor
[acp_retire: b1 retired; ~116 summary chars leave the resident view; acp_restore({ blockId }) puts one back and decompress/search_context still work on retired blocks]
after acp_retire proxy old summary: nowhere new summary: nowhere
after acp_retire plugin old summary: nowhere new summary: nowhere
== content=array form, block.compressCallId=call_abc, compress pair in history=false
after compress proxy old summary: anchor new summary: nowhere
after compress plugin old summary: anchor new summary: nowhere
[acp_rewrite: b1 summary replaced (123 → 116 chars); previous summary kept for rollback; decompress originals are unchanged]
after acp_rewrite proxy old summary: nowhere new summary: anchor
after acp_rewrite plugin old summary: nowhere new summary: anchor
[acp_retire: b1 retired; ~116 summary chars leave the resident view; acp_restore({ blockId }) puts one back and decompress/search_context still work on retired blocks]
after acp_retire proxy old summary: nowhere new summary: nowhere
after acp_retire plugin old summary: nowhere new summary: nowhere
compress 那一对在历史里的四个用例,读出来是这样:
content 写法 |
block.compressCallId |
acp_rewrite 之后 |
acp_retire 之后 |
|---|---|---|---|
| array | call_abc |
只有旧文字,两条通道都是 | 旧文字还在,两条通道都是 |
| line | call_abc |
只有旧文字,两条通道都是 | 旧文字还在,两条通道都是 |
| array | plugin_fold_1 |
proxy:旧的(调用参数)和新的(锚点)并排;plugin:只有旧的 | 旧文字还在,两条通道都是 |
| line | plugin_fold_1 |
只有新文字 | 没了 |
只有最后一行和回执说的一致。在那个组合里,那一对压根不在发出去的视图里,锚点从一开始就是载体;那一对是在哪一步被去掉的,我没有追。第五个用例(那一对不在历史里)是对照组:锚点是载体,两个工具都按说的生效。
compress 的回执是第二处存着旧文字的地方(输出里的 compress-receipt),所以只缩短调用参数还去不掉它。
可选方案
A. 块被改写或退场之后,不再把创建它的调用当载体。 对带 rewrittenAt 的块,即使调用看得见也渲染锚点,同时把那次调用参数里的摘要(以及回执里的回显)缩成一个短占位符。对已退场的块,同样缩成占位符,什么都不渲染。插件通道的 stripKernelSummaries 也要加同样的条件。这样两个工具在下一次请求就能做到说明里说的。代价是:之前一条工具调用的字节会变一次,发生在操作的那一轮,从那条调用往后的已缓存前缀会失效。只渲染锚点、不缩调用参数的话,会得到第 3 行那种「新旧并排」的状态,比哪种都难看。
B. 行为不变,让回执把实情说出来。 创建这个块的调用还看得见时,回执说明存下来的摘要已经改了,但模型看到的那份是 compress 调用自己的参数,要等那次往返离开历史才会消失。这种状态下 retire 的回执不报释放了多少字符。compress-tools.ts:385–:391 的工具说明加同样的提醒。线上字节不变。执行器目前不知道调用是否看得见,所以要么在会话上记下上一次视图里的 compress 调用 id,要么只要设了 compressCallId 就用保守的措辞。
你们选哪种,我都可以来写 PR,并附一个测试:在上面四种组合里,每次操作之后都跑一轮。
相关
- Request two capabilities: compressed block "retirement" and summary "external rewrite". | 请求两个能力:压缩块「退役」与摘要「外部重写」 #5765 / PR [PR] feat: compress-block retirement (acp_retire/acp_restore) + external summary rewrite (acp_rewrite) + export ledger #5774 引入了这三个工具。PR 里说 retire 会让视图总量「正好减少摘要的大小」("by exactly the summary size");锚点是载体时确实如此。
- There are two copies of the summary sent to the model: the block's acp_summary rendering and the compress call parameter | 发给模型的摘要有两份:块的 acp_summary 渲染 + compress 调用参数各存一份 — 组合快照时,调用在场就不要再渲染 #4311 引入了「创建块的那次调用看得见时跳过锚点」。这个 issue 就是这两者叠在一起的结果。
- plugin mode: in-place acp_summary never stripped when the client's own compress pair rides inbound — double summary carrier on every post-fold turn #1567 是
stripKernelSummaries里plugin_*载体的规则。
没覆盖到的
- 没有经过真实客户端,也没跑完整的 HTTP 请求;复现只到内核和
stripKernelSummaries返回的消息列表为止。某个客户端会落在四种组合的哪一种,取决于它会不会重发 compress 往返、用的是哪个 id,这一点我没有逐个客户端去查。 - 输出里没有
acp_restore:调用看得见时,它前后都没有锚点,没什么可展示的。 - PR [PR] feat: compress-block retirement (acp_retire/acp_restore) + external summary rewrite (acp_rewrite) + export ledger #5774 说用量计量和 tier 提示会跳过已退场的摘要。文字其实还在调用参数里的已退场块,这些数字会不会少算,我没有查。
- 没在 Linux/macOS 上跑;这里没有平台相关的东西。
Activity
[-][Bug][blockOps] acp_rewrite / acp_retire report success, but the next request still carries the old summary while the originating compress call is in history[/-][+][Bug][blockOps] acp_rewrite / acp_retire 的回执说成功了,但只要创建这个块的 compress 调用还在历史里,下一次请求带的仍是旧摘要[/+][-][Bug][blockOps] acp_rewrite / acp_retire 的回执说成功了,但只要创建这个块的 compress 调用还在历史里,下一次请求带的仍是旧摘要[/-][+][Bug][blockOps] The receipts for acp_rewrite / acp_retire report success, but as long as the compress call that created | [Bug][blockOps] acp_rewrite / acp_retire 的回执说成功了,但只要创建这个块的 compress 调用还在历史里,下一次请求带的仍是旧摘要[/+]ranxianglei commentedon Nov 12, 2026
该issue已按根因归类纳入 [kernel-compression] 根因汇总 #6265,由汇总单统一跟踪处理;本单不再单独跟进,故关闭。如认为归类有误或问题仍未解决,请直接回复,会重新打开。
ranxianglei commentedon Nov 12, 2026
状态更正(自动化脚本误操作): 本单此前被「纳入根因聚合」流程误关闭, 现重新打开。机器人工作已停, 本单由根因聚合线程统一跟踪, 根因修复落地后请手动关闭或在本单回复「close」。
[automated: re-open after bot-stop-only policy]
ranxianglei commentedon Nov 12, 2026
重新打开:此前被归类聚合脚本误关。按 owner 口径,纳入根因聚合的 issue 只停机器人、不关闭,由根因聚合线程统一跟踪,根因修复落地后统一关闭。
(reopened: absorbed issues must not be closed, only bot work stopped — owner policy 2026-11-12)
ranxianglei commentedon Nov 12, 2026
(更正)此前按"清理"口径误关闭;按 owner 口径纠正:被根因聚合纳入的 issue 只停机器人、不关闭。本 issue 重新打开,机器人工作已停。
ranxianglei commentedon Nov 12, 2026
查重:不重复。 全仓 open issue/PR 与全文检索均无针对「block-ops 回执成功、但下一轮请求仍带旧摘要」这一 carrier 缺口的条目。#5765/#5774(引入三个工具)、#4311(originating call 可见时跳 anchor)、#1567(plugin_* 载规)是本 bug 的组成部件,不是重复项。
收到停手指示。 本 issue 此前被归类聚合脚本误关、现已重开;按你的口径「纳入根因聚合的 issue 只停机器人、不关 issue 本身」,我已停手:不实现、不开 PR、不改本 issue 的标题/标签/状态,根因修复与统一关闭交给聚合线程。
我已独立复现确认(非仅采信报告)。 检出
c26c31ace、构建 kernel、原样跑报告里的tests/repro-blockops-carrier.mts,输出与报告逐行一致。机制坐实:kernel/src/prune.ts:272(retired 跳 anchor)与:277(There are two copies of the summary sent to the model: the block's acp_summary rendering and the compress call parameter | 发给模型的摘要有两份:块的 acp_summary 渲染 + compress 调用参数各存一份 — 组合快照时,调用在场就不要再渲染 #4311:originating call 可见时跳 anchor)都只动 anchor 侧,不碰 call 参数;kernel/src/block-ops.ts:113-115(rewrite 只写previousSummary/summary/rewrittenAt)、:59(retire 只置retired)同样不碰 call 参数;src/server.ts:2782-2784(plugin 车道stripKernelSummaries)只要 carrier pair 在场就剥 anchor,不看retired/rewrittenAt。于是当 originating compress call 仍可见且 id 命中
compressCallId时:anchor 被抑制、唯一载体是 call 参数里的旧摘要 →acp_rewrite的新文本无处可去、acp_retire实际没释放任何字节,但回执照报「replaced / ~N chars leave the resident view」。我的独立判断(供聚合线程/owner 参考,我不实现):
倾向 Option A(让工具真正生效),理由:
acp_rewrite/acp_retire是模型显式发起的操作,若效果要等 compress 交流滚出历史才出现,等于工具在这段窗口内是坏的,「诚实标注」补救不了功能缺口。block.summary/retired,B 只是给不一致贴诚实标签、模型仍读旧文本。A 的硬约束(我补充,报告未展开): 改 call 参数字节触碰 #1039(tool-call 参数=用户意图、逐字节)。可行前提是把它做成每轮出站视图变换(call 可见期间每轮都重打 stub,call 滚出后由 anchor 单独承载),绝不持久改写存储/客户端历史;plugin 模式下 anchor 被抑制、tool call 本身就是唯一载体,且 agent 每轮重发它自己的历史(原始参数),所以必须每轮 inbound→outbound 重施加、stub 幂等可逆(
acp_restore/二次 rewrite 不得叠加)。plugin 车道stripKernelSummaries要镜像同一条件。若 owner 认为 call 参数属于「不可改写的历史」(模型自己写下的摘要草稿),则 Option B(回执+工具描述加 caveat、不动 wire)也站得住——代价是工具在 call 可见窗口内功能上失效。「call 参数是 live 载体还是不可变历史」的定性,正是 A/B 的分水岭,交 owner/聚合线程拍板。
8 问(中文,供审核):
acp_rewrite/acp_retire回执报成功,但只要创建该块的 compress 调用还在历史里,下一轮请求带的仍是旧摘要(rewrite 的新文本甚至无处出现)。acp_summary_<id>anchor);There are two copies of the summary sent to the model: the block's acp_summary rendering and the compress call parameter | 发给模型的摘要有两份:块的 acp_summary 渲染 + compress 调用参数各存一份 — 组合快照时,调用在场就不要再渲染 #4311 在 originating call 可见时抑制 anchor,而 block-ops 只改 anchor 侧、不碰 call 参数——carrier 模型不一致。compress.blockOps.enabled: true(默认关,opt-in)的会话;触发条件=originating call 仍可见且 id 命中。影响=改写/退役在 call 滚出前对模型不可见 + 回执误导;属「opt-in 功能在特定窗口失效」,非常态、非数据丢失(存储态正确、原文不动)。stripKernelSummaries镜像同条件;均做成每轮出站视图变换、幂等可逆、不持久改写历史。收束: 我按你的指示停手——不实现、不开 PR、不动本 issue 的标题/标签/状态。bug 已独立复现坐实;A/B 的定性(call 参数是 live 载体还是历史)是真正待决点,交 owner/聚合线程拍板,我倾向 A(带上述 #1039 硬约束)。报告者已表示「whichever you pick」可出 PR,修复边界清晰、可直接被聚合线程接手。
ranxianglei commentedon Nov 12, 2026
无归类异议,接受关闭,不要求重开。
根因确在 kernel 载体模型(
prune.tsanchor 抑制 +block-ops.ts只改 anchor 侧),归入 [kernel-compression] 根因汇总 #6265 合理。仅补一句给 #6265 的交接提示(非异议,#6311 保持关闭即可):
src/server.tsstripKernelSummaries(plugin 车道须镜像同一条件)与src/acp-block-ops.ts回执也须一并处理,否则 plugin 车道 / 回执仍不一致。完整复现(已独立跑通、与报告逐行一致)与 A/B 分析在本单 bot 评论,供 #6265 接手时参考。
ranxianglei commentedon Nov 12, 2026
[bot] 🏷 收尾确认:已按你的归类将本单纳入 [kernel-compression] 根因汇总 #6265,我无异议、不要求重开,保持关闭即可。
给 #6265 接手的交接提示已在上条评论给出,要点:
src/server.tsstripKernelSummaries(plugin 车道须镜像同一条件)与src/acp-block-ops.ts回执须一并处理;完整复现(已独立跑通、与报告逐行一致)与 A/B 分析在本单 bot 评论。本单无新增动作。
ranxianglei commentedon Nov 12, 2026
[bot] 🏷 本单被再次调度唤醒。核查活体状态:自上一条回复(16:16)后无新评论、无 owner 新决策、未重开——无新增输入需处理。
一点状态观察:镜像侧 #6311 当前
state仍为open(closed_at=null)。若你已在 GitHub 侧关闭,这是同步延迟;若尚未实际关闭,本单还会被调度反复唤醒。我这边维持待命、无新增动作:归类无异议、接受关闭;给 #6265 的交接提示(host 侧
src/server.ts/src/acp-block-ops.ts须一并处理 + A/B 定性 + #1039 每轮出站变换约束)已在上两条评论给出。除非有新输入或你明确要求实现(Option A/B),我不再重复回复。ranxianglei commentedon Nov 12, 2026
[bot] 🏷 收到状态更正:此前 15:36 的关闭是「纳入根因聚合」流程的误操作,现已正确重开,明白。
确认理解:
src/server.tsstripKernelSummaries +src/acp-block-ops.ts回执须一并处理)已在本单 bot 评论中,供 [Root Cause] kernel-compression (auto-maintained, do not manually disable) | [根因] kernel-compression(自动维护,勿手动关闭) #6265 接手时参考。无新增动作,保持待命。
ranxianglei commentedon Nov 12, 2026
[bot] 🏷 收到重开与口径澄清:纳入根因聚合的 issue 只停机器人、不关闭,由 #6265 统一跟踪、根因修复落地后统一关闭。明白——本单保持 open,我不做任何实现 / PR / 新 issue,维持待命。
(进程说明:刚才卡住 32 分钟被强制重启;重启前我处于待命状态、无进行中工作,故无成果丢失、无阻塞。)
给 #6265 的交接提示(host 侧
src/server.tsstripKernelSummaries +src/acp-block-ops.ts回执须一并处理 + A/B 定性 + #1039 每轮出站变换约束)已在本单 bot 评论中,供接手参考。无新增动作,保持待命。