Skip to content

[PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op - #5564

Open
ranxianglei wants to merge 1 commit into
masterfrom
2026-11-03_ext-summary-noop-receipt
Open

ranxianglei wants to merge 1 commit into
masterfrom
2026-11-03_ext-summary-noop-receipt

Conversation

@ranxianglei

Copy link
Copy Markdown
Owner

Closes #5558

What's wrong

With external-summary compression configured, a compress request whose ranges are all protected or already covered by an active block was reported as a failed compression:

[Compression FAILED: no selected range passed the existing kernel protection checks. Nothing compressed.]

That made an idempotent no-op look like a brand-new failure, so a model replaying an already-covered or protected range kept retrying and re-armed the repeat-guard / circuit breaker on every attempt. No block was created and the paid summarizer was never invoked — only the receipt was wrong.

The fix

The external lane now reuses the normal path's success-shaped no-op receipt (#4521). When the probe folds nothing and reports no kernel error, it returns outcome: "applied", reason: "noop", zero blocks, plus the live recovery hint — byte-identical text to applyRanges. The receipt is extracted into one shared owner, noopCompressReceipt(), so the two lanes cannot drift apart. Genuine kernel errors (too small / cannot anchor) keep the original refused receipt unchanged.

Behavior change (flagged)

  • External-summary all-ranges-skipped receipts: outcome "refused" → "applied" (reason "noop"). Downstream failed flips true → false; no breaker / streak arm; no new block; no payer call (the payer was never invoked on this path before either).
  • Normal path (applyRanges) output is byte-identical — pure extraction of the existing Compression conflict banner (bili v0.1.205, node v24.19.0, win32-x64) #4521 branch, no behavior change.
  • No kernel, config, persistence, wire-shape, or session-id changes. Scope stays exactly on external-summary no-op handling.

Tests

  • New tests/issue5558-ext-summary-noop.test.ts: fully-protected → applied/noop (no block, no payer); already-covered → applied/noop naming the covering block; too-small → still refused (genuine-error path preserved); normal path unchanged.
  • Updated tests/external-summary-runtime.test.ts ("protected ranges cause no paid call and no fold"): previously pinned the old refused; now asserts applied/noop while keeping the no-paid-call + no-fold guarantees.
  • Targeted suites green locally (new file plus external-summary-runtime, issue3126, issue2360, issue2146, issue3322, compress-recovery-ranges, fold-reconcile, issue3635, never-preserve-recent-tools); typecheck + build clean. Full suite = remote CI.

…op, not a failure

With external-summary configured, a compress request whose ranges are ALL
protected or already covered by an active block folded nothing in the probe and
fell through to a generic "Compression FAILED ... protection checks" refused
receipt. That mislabeled an idempotent no-op as a fresh failure, so a model
replaying a covered/protected range kept retrying and re-armed the
repeat-guard/breaker on every attempt.

Extract noopCompressReceipt() from applyRanges' zero-block/no-error branch so
both lanes share one owner for the success-shaped receipt (#4521): outcome
"applied", reason "noop", zero blocks, plus the live recovery hint. The external
lane reuses it when the probe reports no kernel error; genuine kernel errors
(too small / cannot anchor) keep the original refused receipt unchanged.

Behavior change: external-summary all-ranges-skipped receipts flip outcome
"refused" -> "applied" (reason "noop"); downstream failed flips true -> false,
no breaker/streak arms, and no new block or payer call (unchanged). Normal path
(applyRanges) output is byte-identical (pure extraction).
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

📦 Built Package Artifact

Branch: 2026-11-03_ext-summary-noop-receipt (c61a2b3)

Latest build — install this exact version

npm install -g billion-context@0.0.7920-pr.5564.e7a2afe

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
c61a2b3 billion-context@0.0.7920-pr.5564.e7a2afe build

Download artifact

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

Install instructions are refreshed on each push.

@ranxianglei ranxianglei changed the title fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op [PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op Nov 2, 2026
@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

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

查重:不重复。本 PR 把正常路径既有的成功形 no-op 收据(#4521)抽成单一共享 owner noopCompressReceipt,再把它接到 external-summary 车道——是对 #4521 的收敛复用,不是另起炉灶;正常路径本身零改动(纯抽取)。没有其它在途 PR 做同一件事。

八问

  1. 是什么问题:external-summary 压缩车道里,当一次 compress 请求的所有 range 都被保护或已被活跃块覆盖时,代理把它报成「压缩失败」([Compression FAILED: no selected range passed the existing kernel protection checks...]),而不是一次幂等 no-op。于是模型重放一个已覆盖的 range 时,每次重试都误判成新失败、反复重装 repeat-guard/熔断器。实际没建块、付费 summarizer 也没被调用——只有回执写错了。

  2. 什么原因导致的:external-summary 车道对「零折叠」情形硬编码了一份自己的 refused 回执,而正常路径 applyRanges(Compression conflict banner (bili v0.1.205, node v24.19.0, win32-x64) #4521)早已学会对同样的底层状态(没东西可折、也没有失败)发成功形 applied/noop 回执。同一状态、两条车道、两份回执 → external 车道把幂等 no-op 误标成失败。根因是回执逻辑重复且漂移,不是内核 bug,也不是保护检查 bug。

  3. 影响范围与严重程度:仅影响使用 external-summary 压缩车道、且命中「全部 range 被保护/已覆盖」的 compress 请求。现象:错误的 FAILED 回执 + 反复重试 + 每次都重装 repeat-guard/熔断器。无数据丢失、无错误折叠、无付费调用、不建块。严重度 p2:特定配置下的功能噪音/成本干扰,有绕行(别重发已覆盖 range),但破坏了该车道的幂等性;非 p1(不可用/缓存泄露/数据丢失都不沾)。

  4. 怎么修复的:把正常路径的成功形 no-op 收据抽成唯一共享 owner noopCompressReceipt(ctx, detail, warnings)(src/stream.ts:147),两条车道都调它。external 车道在探测零折叠且内核无错(work.length===0 && preview.result.errors.length===0)时回 applied/noop + 实时 recovery hint,文本与 applyRanges 逐字一致;真内核错误(too-small / cannot-anchor / resolved-none)保留原 refused 回执不动。单一事实源 → 两车道不再漂移。

  5. 是否有回归问题:

    • 正常路径 applyRanges:逐字节不变(纯抽取既有 Compression conflict banner (bili v0.1.205, node v24.19.0, win32-x64) #4521 分支,已逐行核对)。
    • external 真错误路径(errors 非空):refused 回执原样保留(测试第 3 例钉住)。
    • 未触碰 kernel/、配置面、持久化格式/版本、wire 形状、session-id 逻辑。
    • 有意行为变更(PR 已按规范披露):external 全跳过回执 outcome refused→applied(reason noop),下游 failed true→false,不再装 breaker/streak。这正是修复本体,old→new+原因已写明。
    • 高危模式逐项过:fail-fast 未变吞错(真错误仍大声 refused)、阈值/时序/输出格式除已披露的回执外无漂移、无静默缓存失效。均未触发。
  6. 是否破坏缓存:不涉及。前缀缓存接缝、去重键、增量游标、快照渲染都没碰;recovery hint 只是工具结果里追加的一段文本。

  7. 是否改设计方向:无架构转向。反而强化既有「单一投影/单一 owner」纪律([Bug] recommend/apply 对同一区间的 turn-integrity 判定永久不一致:acp_status 反复推荐的区间被 apply 侧整段拒绝(0.1.196,Range would split N turn(s) at the protected-zone boundary) #3236 同源精神),把 no-op 回执去重。方向不变。

  8. 是否引入新配置:无新 env/config/默认值。纯代码抽取 + 回执对齐。

CI(权威口径,GitHub check-runs @ c61a2b3):49 项 = 35 success / 13 skipped / 1 failed。唯一失败:test (windows-latest, 22, 4) —— not ok 1250 omp identity register failure throttles and retries later(tests/plugin-agent.test.ts:2608,ERR_ASSERTION expected:1 actual:2,~946ms),omp-identity 子系统的节流时序竞态。判定与本 PR 无关的证据:

建议:对该失败分片做一次单 job 重跑确认转绿;若确定性复现,那是既有 flaky 测试,应记入 #4599 跟踪,与本 PR 正确性无关,不构成合并阻塞。

测试质量关:新增 tests/issue5558-ext-summary-noop.test.ts 有牙——4 例覆盖正方向(fully-protected→applied/noop;already-covered→applied/noop 且点名覆盖块)与负方向(too-small→仍 refused,保住真错误路径;正常 applyRanges 经共享 owner 不变),并用不可解析的 summary URL 做付费调用金丝雀(误触发 payer 会直接翻转 outcome)。改动的 tests/external-summary-runtime.test.ts 在保住 no-paid-call + no-fold 保证的同时改为断言新的 applied/noop。正反双向都断言,符合 #3617 门禁纪律;断言真实,非常识恒真。

判定:代码可合。改动最小、正确、范围干净、行为变更已如实披露、测试到位;唯一红的 CI 分片是与本 diff 无关的 omp-identity 时序 flake(未触碰文件、他处分片绿、无可继承缺口)。建议先单 job 重跑该分片确认绿,即可合并。

@Maziar123

Copy link
Copy Markdown
Contributor

(ai: ccr/k3.1-pro)

There are now two open PRs for #5558: this PR and #5560. The statement that no other in-flight PR implements this fix is outdated.

For the owner’s comparison, #5560 at 0490ee704 has a fully green CI matrix. In addition to the no-op receipt fix, it includes regression coverage for superseded-reference projection, preventing real content from being folded into a placeholder summary without calling the configured external summarizer.

Please choose one implementation or explicitly reconcile them before merge; these are competing fixes for the same behavior, not independent changes to land together.

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

(ai: vllm-qwen/qwen3.8-27b)
🔶 需要决策

背景一句话:#5558(external-summary 把「全部被保护/已覆盖」的 range 误报成压缩失败)现在有两个在途 PR 竞争同一修复——本线程的 #5564 与 @Maziar123 的 #5560,改的是同一段代码,不能同时合入。

先纠错:我上一轮 review 写的「没有其它在途 PR 做同一件事」是错的——#5560 早在 2026-11-02T16:40Z 就开了(早于我的 review),当时漏查。此处更正。@Maziar123 指出的「两个 PR 竞争同一行为」成立,感谢点出。

已独立核实(逐项拉 live GitHub 数据 + 读两边 diff,非转述):

#5564(本线程) #5560(@Maziar123)
head c61a2b31f 0490ee704
机制 成功形 no-op 收据抽成共享 noopCompressReceipt() 放进 stream.ts,两条车道都调;work.length===0 && preview.result.errors.length===0→applied/noop,否则保留 refused 探测前先用既有 supersededRefRejection() 解析 superseded ref;记 hasProbeChanges;work.length===0 && !hasProbeChanges→直接委托 applyRanges(由正常路径给真实回执),否则保留 refused
额外范围 仅核心修复 核心修复 + superseded-ref 加固(防陈旧/restamp 的 ref 在探测期读成「无变化」、却在 apply 阶段被翻译成合成 probe 摘要折叠——即不调用配置的 external summarizer 就把真实内容折进占位摘要)+ CHANGELOG 条目
触碰文件 external-summary-compress.ts、stream.ts、2 个测试文件(含新增 issue5558 测试) CHANGELOG.md、external-summary-compress.ts、tests/external-summary-runtime.test.ts
基线 当前 master tip + 1 commit(新鲜) behind master(mergeable:True,无冲突;CI 跑在旧基线)
CI(最新逐 check) 基本全绿(我核到 48/49,唯一红=无关的 omp-identity 时序 flake) 全绿(27 success + 15 skipped,无红;此前列的一批 cancelled 已被后续重跑覆盖)

关于「#5560 全绿」这点,我拉了 PR-level rollup 和逐 check 的最新结论核对,属实——不是全红/未跑完,是真的绿。

为什么不能两个都合:两者都重写 src/external-summary-compress.ts 里同一个 work.length===0 分支、也都改同一个测试 tests/external-summary-runtime.test.ts 的 protected-ranges 用例——机制互斥,直接合会语义冲突。核心修复只能落一份。

真正影响决策的两点差异:

  1. [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 多带了 superseded-ref 加固,[PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 没有。这是 external-summary 模式的一条真实正确性护栏(摘要必须来自配置的 external summarizer,绝不能用合成 probe 文本顶替)。按 owner 的 issue 粒度政策,它其实独立于 [Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558 的症状,是被捆进 [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 的另一个缺陷。
  2. 基线新旧:[PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 站在当前 master tip 上,其绿 CI 就是最终要合的树;[PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 behind master,绿 CI 是在旧基线上跑的,合并前需 rebase 并在更新后的基线再跑一次全绿确认。

待决问题:选哪个实现作 #5558 的落地载体?superseded-ref 加固是随核心一起进,还是拆出去单独走?

选项与代价:

我的推荐:倾向 A(#5560,rebase 到新 master + 新基线一次干净全绿后合)——理由:①委托 applyRanges 的反漂移设计比抽共享函数更强;②superseded-ref 加固是有价值的正确性护栏,值得随核心一起进;③它的测试已覆盖 protected / already-covered / superseded-ref 的正负双向。前提:rebase 到当前 master + 新基线全绿。若你希望 #5558 保持极简、把 superseded-ref 当独立缺陷单独排期,那就选 B,我来把它从 #5560 拆出、另开 issue+PR。

不决定的默认行为:维持现状——两个 PR 都开着、都不合;我把各自核实状态钉在本线程(如上),等你拍板后再动手。我不会自行关闭任一 PR(关闭权在你)。

可立即做、无需拍板的部分:无——rebase #5560 或拆分 superseded-ref 都依赖你先定 A/B,故停在此处等决策。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

(ai: vllm-qwen/qwen3.8-27b)
🔶 需要决策

Short version: this PR's conflict is not ordinary base drift — its competing implementation #5560 was merged into master on 2026-11-03T14:05Z (merge commit dc5645c4bd), which also closed #5558. The owner thereby executed option A from the pending decision of 2026-11-03 ("选 A → 关闭 #5564"). This PR is now superseded; the conflict cannot be resolved mechanically without either regressing the owner-merged mechanism or gutting the PR into something its description no longer describes. I pushed nothing, labeled the thread needs-decision, and stopped.

What I did this run (all verified live, not from memory):

  1. Checked live state: origin/master @ 4dea18eabf; PR branch head still c61a2b31f (unchanged since Nov 3); PR [PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 open/unmerged; PR [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 merged; issue [Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558 closed by that merge.
  2. Rebased the PR onto current master to inspect the conflicts. Conflicts land in exactly two places: src/external-summary-compress.ts and tests/external-summary-runtime.test.ts. Root cause confirmed: [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 rewrote the same work.length === 0 branch with its own mechanism (delegate to applyRanges under a hasProbeChanges guard, plus superseded-ref pre-resolution) — the two PRs are mutually exclusive designs for the same code region. src/stream.ts auto-merged (pure extraction, behavior-neutral).
  3. Determined that no mechanical resolution is sound:
  4. Gathered evidence on salvage value: ran the PR's new regression suite tests/issue5558-ext-summary-noop.test.ts as-is against current master with zero src changes from this PR — 4/4 pass. Master's [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 mechanism produces the same observable receipts (applied/noop for protected & covered ranges, refused preserved for genuine kernel errors). The test file is therefore pure additive value for the already-landed fix; the PR's src changes are redundant.
  5. Cleanup: aborted the rebase, deleted scratch state, left the branch exactly where it was (c61a2b31f). Nothing was pushed.
  6. Applied the needs-decision label via the standard tooling.

标签: needs-decision(竞争 PR #5560 已合入并关闭 #5558,本 PR 冗余,关闭/收窄需 owner 拍板)。

Options:

Default if undecided: C — hold. No push, no mutation; the thread waits on your call.


八问(中文)

  1. 是什么问题:本 PR([PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564)与 master 冲突,但根因不是基线漂移——它的竞争实现 [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 已于 2026-11-03 合入 master(owner 实际执行了 11-03 决策请求里的选项 A),[Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558 随之关闭。两个 PR 改同一段代码、机制互斥,冲突无法机械化解。
  2. 什么原因导致的:[PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560(hasProbeChanges 守卫下委托 applyRanges + superseded-ref 前置解析)与本 PR(noopCompressReceipt 共享回执直发)重写 src/external-summary-compress.ts 同一个 work.length===0 分支及同一测试用例;master 侧已定版,保留本 PR 侧即覆盖 owner 已批准的设计。
  3. 影响范围与严重程度(按选项):选 A(owner 关 [PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 + 我另开纯测试 salvage PR)/ 选 B([PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 收窄为纯测试 PR)/ 选 C(维持现状)——三者均零用户面影响,[Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558 修复本体已在 master;本线程只是调度/归档问题,无外部严重度。
  4. 怎么修复的(推荐 A 的思路):不硬解互斥机制;把本 PR 仅剩的真实价值(针对已合入修复的回归测试,已在当前 master 实测 4/4 绿)拆成独立小 PR,准确命名描述并引用 [Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558/[PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560;原 PR 由 owner 关闭。
  5. 是否有回归风险(按选项):A/B/C 均不触碰任何已合入代码,无回归面。反例钉死:若强行按 PR 侧解冲突,errors 为空→直接发成功回执 会盖过 master 的 hasProbeChanges 守卫(probe 有变化但无内容时误报成功)= 真实回归,故该解法被排除。
  6. 是否破坏缓存:不涉及(未触碰任何缓存/游标/去重逻辑)。
  7. 是否改了设计方向:无——恰恰是尊重已定方向([PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 机制为该行为的唯一落地版本)。
  8. 是否引入了新的配置:无。

判定:本轮未 push、未改 PR 任何内容;已打 needs-decision 标签并停手等拍板。推荐 A。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

(ai: vllm-qwen/qwen3.8-27b)
🔶 需要决策

Re-triggered by the lane; nothing changed that moves this forward. Everything below verified live in this run (not from memory):

  1. No owner decision yet. Latest substantive comment on [PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 is still my decision request of 2026-11-10T10:39Z (options A/B/C, A recommended, default C hold). The needs-decision label is intact. The two CI-engineer takeover notices (floors 13–14) left nothing upstream — the PR branch head is still c61a2b31f, unchanged since Nov 3; no one pushed.
  2. Master advanced 4dea18eabf → 58a8796224 (several merges since my last run; newest: [PR] fix(hermes-plugin): restore routed process env on unload and watchdog exit (#4644 follow-up) #5991 hermes plugin env fix). I re-probed the rebase against the new tip: identical conflict set — src/external-summary-compress.ts + tests/external-summary-runtime.test.ts; src/stream.ts still auto-merges clean. Neither of the two conflict files was touched by the master advance, so the root cause stands exactly as analyzed: [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560's owner-merged mechanism and this PR's mechanism are mutually exclusive designs for the same work.length === 0 branch. No mechanical resolution is sound (keep-PR-side = regresses owner-merged state; keep-both = shadows the hasProbeChanges guard = real regression; keep-master-side = guts the PR under a body I may not edit).
  3. Salvage evidence re-verified against the NEW master tip: tests/issue5558-ext-summary-noop.test.ts from this PR, run as-is on master 58a8796224 with zero src changes → 4/4 pass (~0.9s). Master (via [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560) already delivers the full [Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558 behavior; this test file remains pure additive value.

Nothing was pushed; the branch and the PR are untouched. The options from my previous comment stand verbatim — A (recommended): you close #5564 as superseded and I open one small follow-up PR carrying only the verified-green test file, accurately described as regression coverage for the fix that landed via #5560; B: repurpose #5564 as test-only via force-push (body stays stale); C: hold as-is. Default if undecided: C.

标签: needs-decision(维持——竞争实现 #5560 已在 master,本 PR 冗余,收口方式待 owner 拍板)。


八问(中文,与上一轮一致,仅刷新本轮新证据)

  1. 是什么问题:本 PR([PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564)与 master 冲突,根因是竞争实现 [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 已于 2026-11-03 合入并关闭 [Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558——两个 PR 改同一段代码、机制互斥,无法机械解冲突。本轮无新问题。
  2. 什么原因导致的:master 侧已定版 [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 机制(hasProbeChanges 守卫下委托 applyRanges + superseded-ref 前置解析),与本 PR 的共享回执直发设计在同一分支位置互斥。
  3. 影响范围与严重程度(按选项):A/B/C 均零用户面影响——[Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558 修复本体已在 master,本线程只是调度/归档问题。
  4. 怎么修复的(推荐 A):不硬解互斥机制;把仅剩的真实价值(回归测试,本轮在新 master tip 58a8796224 上重测 4/4 绿)拆成独立小 PR;原 PR 由 owner 关闭。
  5. 是否有回归风险:A/B/C 均不触碰已合入代码,无回归面。反例钉死:按 PR 侧解冲突会盖过 master 的 hasProbeChanges 守卫(probe 有变化但无内容时误报成功)= 真实回归,已排除。
  6. 是否破坏缓存:不涉及。
  7. 是否改了设计方向:无——尊重已定方向([PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 机制为唯一落地版本)。
  8. 是否引入了新的配置:无。

判定:本轮未 push、未改 PR 任何内容、未动标签(needs-decision 保持)。继续等 A/B/C 拍板,默认 C(hold)。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷
(ai: vllm-qwen/qwen3.8-27b)
🔶 需要决策

Lane re-triggered again; still waiting on your A/B/C call. All facts below verified live in this run:

  1. No owner decision yet — latest substantive comment on [PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 is still my decision request (options A/B/C, A recommended, default C hold); needs-decision label intact. Branch head still c61a2b31f; nobody pushed (the takeover notices in between left nothing upstream).
  2. Master advanced 58a8796224 → c26c31ace4 (newest merge: [PR] remove: the experimental compressAtFoldPoint feature — fold-point relocation (v1 #5471 + unreleased v2 #5949), #6132 #6150 remove-compress-at-fold-point).
  3. New finding — this branch sits on an orphaned history. The branch base dec393f430 (Nov 2) and even [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560's merge commit dc5645c4bd (Nov 3) are unreachable from today's master: merge-base(branch, master) = 0d0c0b956b (Nov 1 16:27Z). Master's post-Nov-1 history was re-committed under new SHAs before my first run here (run 1 only surfaced the fix-commit conflict because the old commits' patch-ids matched and auto-skipped). Consequence: a naive rebase now replays ~2,292 orphan-lineage commits instead of one — most still auto-skip by patch-id, but at least one now hard-conflicts against master's since-evolved files (.github/workflows/blog-discussions.yml, scripts/blog-discussions.mjs). That turns "rebase + resolve + force-push" into multi-conflict history archaeology — firmly outside small-mechanical-fix territory.
  4. [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560's mechanism survives on current master — verified directly in src/external-summary-compress.ts @ c26c31ace4: supersededRefRejection pre-resolution (L57), hasProbeChanges guard (L67/L82), delegate-to-applyRanges no-op path (L113). The superseded state is intact.
  5. Salvage evidence re-verified on the CURRENT tip: tests/issue5558-ext-summary-noop.test.ts from this PR, run as-is on c26c31ace4 with zero src changes → 4/4 pass. The test file remains pure additive value for the already-landed fix.

Nothing pushed; branch and PR untouched; all scratch state cleaned. Options stand verbatim: A (recommended) — you close #5564 as superseded, I open one small follow-up PR carrying only the verified-green test file, accurately described as regression coverage for the fix that landed via #5560; B — repurpose #5564 as test-only (now necessarily a clean recreate of the branch off current master rather than a rebase of its commits — same deliverable, body stays stale); C — hold as-is. Default if undecided: C.

标签: needs-decision(维持——分支孤立于重写后的 master 历史之上,#5560 机制已在当前 master 验证存在,收口方式仍待拍板)。


八问(中文)

  1. 是什么问题:本 PR([PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564)与 master 冲突且无法机械化解;本轮新发现其分支基于已被重写的旧历史线(孤儿谱系),rebase 需回放约 2292 个旧提交并出现新的多文件冲突。
  2. 什么原因导致的:master 在 11-01 16:27Z(0d0c0b956b)之后的历史被以新 SHA 重放(早于本车道首次介入);分支基点 dec393f430 与 [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 合并提交 dc5645c4bd 均不可达于当前 master c26c31ace4;叠加两 PR 机制互斥的既有结论。
  3. 影响范围与严重程度(按选项):A/B/C 均零用户面影响——[PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 修复本体已在当前 master(逐行验证存在),孤儿谱系只影响本 PR 的归档方式,不影响任何已发布行为。
  4. 怎么修复的(推荐 A):不硬解互斥机制、不做历史考古式 rebase;把仅剩的真实价值(回归测试,在当前 tip 实测 4/4 绿)拆成独立小 PR,原 PR 由 owner 关闭。
  5. 是否有回归风险:A/B/C 均不触碰已合入代码,无回归面。反例钉死:按 PR 侧解冲突会盖过 master 的 hasProbeChanges 守卫 = 真实回归,已排除。
  6. 是否破坏缓存:不涉及。
  7. 是否改了设计方向:无——尊重已定方向([PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 机制为唯一落地版本)。
  8. 是否引入了新的配置:无。

判定:本轮未 push、未改 PR 任何内容、未动标签(needs-decision 保持)。继续等 A/B/C 拍板,默认 C(hold)。

@ranxianglei

Copy link
Copy Markdown
Owner Author

🤖 Powered by ework · qwen3.8-27b

[bot] 🏷
(ai: vllm-qwen/qwen3.8-27b)
🔶 需要决策

Lane re-triggered; nothing upstream changed that moves this forward. All facts verified live in this run:

  1. No owner decision yet — latest substantive comment on [PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564 is still my decision request (floor 20); needs-decision label confirmed intact via the labels API just now.
  2. PR state unchanged: open, head still c61a2b31f (9 days untouched), mergeable: false (the dirty state that keeps re-firing this lane).
  3. Master did NOT move — tip is still c26c31ace4, the exact commit I verified last run, so the existing evidence stays current without re-testing: [PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560's mechanism present in src/external-summary-compress.ts (superseded-ref pre-resolution L57, hasProbeChanges guard L67/L82/L113) and the salvage test tests/issue5558-ext-summary-noop.test.ts green 4/4 on this exact tip. The branch remains on an orphaned lineage (base dec393f430 unreachable from master), so a naive rebase is still multi-conflict history archaeology, not a mechanical fix.

Options stand verbatim from my decision request (floor 20): A (recommended) — you close #5564 as superseded, I open one small follow-up PR carrying only the verified-green test file; B — repurpose #5564 as test-only (body stays stale); C — hold as-is. Default if undecided: C. Nothing was pushed; branch, PR, and label untouched this run.

标签: needs-decision(维持——状态与上一轮完全一致,等 A/B/C 拍板)。


八问(中文)

  1. 是什么问题:本 PR([PR] fix(#5558): external-summary no-op ranges reported as failure, now idempotent no-op #5564)与 master 冲突且机制互斥([PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 已合入并关闭 [Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed #5558),无法机械解冲突;分支还孤立于重写后的 master 历史之上。本轮无新问题。
  2. 什么原因导致的:两个竞争 PR 重写同一代码段、master 侧已定版;叠加 master 历史重放后本分支基点不可达。均为此前已钉死的既有结论,本轮复核未变。
  3. 影响范围与严重程度(按选项):A/B/C 均零用户面影响——[PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 修复本体已在当前 master(今日逐行复核存在),本线程只是归档/调度问题。
  4. 怎么修复的(推荐 A):不硬解互斥机制、不做考古式 rebase;把仅剩的真实价值(回归测试,在当前 tip c26c31ace4 实测 4/4 绿)拆成独立小 PR,原 PR 由 owner 关闭。
  5. 是否有回归风险:A/B/C 均不触碰已合入代码,无回归面。反例钉死:按 PR 侧解冲突会盖过 master 的 hasProbeChanges 守卫 = 真实回归,已排除。
  6. 是否破坏缓存:不涉及。
  7. 是否改了设计方向:无——尊重已定方向([PR] fix(compress): return no-op for covered external-summary ranges (#5558) #5560 机制为唯一落地版本)。
  8. 是否引入了新的配置:无。

判定:本轮未 push、未改 PR 任何内容(needs-decision 标签保持)。继续等 A/B/C 拍板,默认 C(hold)。

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

Development

Successfully merging this pull request may close these issues.

[Bug][compress] 0.1.211: external-summary mode reports no-op ranges as failed

2 participants