Skip to content

"Agent Half-Dead" Cluster Breakthrough Entry Point + 48-Hour Active Surface A–N Classification Master Ledger (2026-10-29 | 『代理半死不活』簇攻坚入口 + 48小时活跃面 A–N 归类总账(2026-10-29~31) #5297

Open

Description

@ranxianglei

(ai: sglang-gpu0/qwen3.8-27b)

这个 issue 是什么

两件事合一个入口:

  1. 记录:最近 48 小时(2026-10-29 ~ 10-31)全仓库活跃面按 #3916 状态板(分类沿用 #3913 总账)的 A–N 体例做的一次快照归类,方便后续对账。
  2. 攻坚顺序声明:第一个下手的是「代理半死不活」簇(watchdog 误杀健康进程 / 崩溃重启后静默直连不压缩 / DNS 切换后 wedge 只能重启 / 起不来时端口被死占)。成员清单与机制拆解见本 issue 的后续评论。

为什么选它:该类 p1 密度最高(28 条活跃里 14 条 p1),全部是可用性缺陷("可用性永远大于性能"),且有多个已合并修复但症状族未闭环(watchdog 误杀三兄弟、twin-collision、死端口)。

48h 总览数字

A–N 归类快照(活跃数 / 其中新issue / p1)

类 主题 活跃 新issue p1 热点
E 存储层 72 11 30 DIGEST DRIFT 风暴(#4392/#5106)、驱动缺失即崩(#5046)、冷载阻塞事件循环 #5138、OOM #5084、重启丢会话 #4942
C 压缩引擎行为 57 22 22 compress 拒批要重试(#5200/#5185)、爆满压不动(#5206)、刚下的指令被折掉(#5109/#5173)、重启误折别格(#5196)、丢 thoughtSignature 下轮必 400(#5252)
N 服务端杂项 63 14 2 wire 卫生(ref/tag 泄漏 #5256/#5192/#5235)、多实例判定(#5075)、工具集翻转告警(#4790)
K 启动器·自更新·CI 34 13 8 master CI 大红灯(#5195)、zombie runs 饿死队列 8h(#5186)、merge-guard 反复误报 behind(#5282)、定时全测红×4
B 折叠预算与资格判定 24 4 5 DashScope 输入长度 400 不被识别(#4263 c=38)、preflight/headroom 口径打架(#5172)、有效窗口被硬垫砍半(#5230)
D 超时重试与降级 28 11 14 watchdog 杀健康进程(#4994/#5152)、首字节 stall 静默卡 12min(#5164)、WSL DNS wedge(#5221/#5222)、重启后 handshake 永不匹配→静默直连(#5226)、EPERM 启动(#5154)
F dsh 车道 25 12 10 tool call 变纯文本(#5235→#1366 家族)、裸 ACP ref 泄漏(#5256)、/__bili/upstreams 404 回归(#5145)
L Web UI与文档 24 5 4 面板 SVG same-origin(p1,#4962)、DSH Desktop 面板 Failed to fetch(#5201)、MITM vhost 302 劫持(#5024)
I 其他宿主车道 15 3 6 codex 缓存大 miss(#5124)/272K 回落(#5243)/临时分隔符端点(#5139);hermes plain-http 不走代理(#5116);zcode 侧车隔离(#4965)
J 配置面静默失效 8 4 0 promptCache.routing 被无视(#5102/+dup)、billing.prices:null 抛异常(#5041)、窗口静默砍半(#5230)
G fork与会话继承 6 2 2 claude-code 同型子代理共用一条压缩车道互串内容(p1 回归 #5095);fork adoption 201 但 0 折叠块(#5122)
H pi 车道 6 2 1 render-tag 后缀泄漏(#5192)、重复守卫中止合法长轮询(#5225)
A 前缀缓存接缝 3 3 1 codex cache 大规模 miss(#5124)
M 跨车道功能提案 散见 — — delta lane(#3248)、visibilityMarkers(#1708)、host contract v2(#5241 待讨论)

归类方法:labels(scope/*+宿主)+标题关键词启发式,少数多标签条目会双重命中(如 #5178 实为 wire 卫生、被 "envelope" 字面带进 E);逐条精确归属以 #3913 总账为准。

用户口吻的七大抱怨簇(排序即热度)

  1. 数据库不可靠(E,DIGEST DRIFT/崩溃/OOM/重启丢失/事件循环阻塞)
  2. 压缩引擎不听话(C,拒批重试/压不动/折错格/丢签名)
  3. 代理半死不活(D,误杀/静默直连/wedge/起不来)← 本次第一刀
  4. 压缩标记泄漏进模型可见文本(tool call 纯文化、裸 ref、tag 后缀,dsh/pi/OpenAI 线)
  5. 子代理/fork 串台(claude-code 共用车道、fork 继承 0 块)
  6. Codex 专属(缓存 miss、窗口回落、端点选错)
  7. CI/过程噪音(机器人自产:大红灯、zombie、merge-guard 误报、本地测试污染会话目录)

标签说明

  • p1:簇内为可用性缺陷(可用性大于性能原则),跟最重成员的级别对齐
  • track:入口型跟踪 issue,机制拆解与进展在本 issue 评论区更新
  • scope/wiring:主战场在进程生命周期接线(watchdog/spawner/handshake/启动路径)
  • 不打宿主标签:成员跨 dsh/pi/codex 等多车道(总账规则:跨车道不打)

Activity

  1. ranxianglei commented on Oct 31, 2026

    @ranxianglei
    OwnerAuthor

    (ai: sglang-gpu0/qwen3.8-27b)

    第一刀:「代理半死不活」簇全拆解(按机制分四子簇)

    总判断:该簇在 10-29~30 已经过一轮集中修复——「杀健康进程/死端口占坑」族大部分已合 master;当前开放核心 4 项,其中 2 项卡在等 owner 拍板,2 项有 PR 在途。另发现一个系统性缺口:「静默直连」有四个独立触发源、没有统一出口。以下 file:line 均对当前 master 源码核实。

    A. 误死/杀健康进程(基本闭环)

    症状 状态
    parent watchdog 误杀健康 proxy 后 spawner 永久放弃(#4994) closed;修复合入:#5085(kill 前要求连续确认)+ #5153(活性窗口按自身事件循环延迟加宽),10-29 均 merged
    watchdog 用自己事件循环上的旧心跳读数,一次同步卡顿自杀(#5152) closed;同上两个 PR
    spawn 超时误杀健康 child closed;#5010(adopt proven-healthy child)merged
    crash-on-startup 只留死端口 closed;#5097(launcher 尾采样)merged
    wedged proxy 永久占口不自杀(#4762) closed;#4784(self-exit)merged

    残留:#5004(PR,14 评论,twin-collision:端口持有者是静默 twin 时应先于 persistence init 退出)仍 open、评审停滞——本簇最大在途 PR;同族 #4977(恢复竞态→全体直连撞 1M 上限)仍 open。

    B. 静默直连不压缩(核心痛点;主症状已随 v0.1.209 发,残留待确认)

    用户观感 = 「没有任何提示,压缩消失,上游超限 400,随后被迫换血丢上下文」。触发源至少四个、各自独立:

    1. respawn gave up 后不再重试 → dsh-native never reconnects after respawn gave up (healthy proxy listening) → unattributed over-window body refused locally (422) → session unrecoverable | [dsh-native] respawn 放弃后客户端永不重连(代理已健康监听)→ 未归属超窗 body 被本地 422 拒绝、会话不可恢复 #4755 + dsh lane: BUSY-drop → EADDRINUSE detour → adopt-twin race is silently lost ~half the time, and a one-shot bootstrap failure then becomes permanent #4811 的修复已随 v0.1.209 发布(commit 6483bbfc2 / c11d65d9e:give-up 后恢复驱动不再被 toolsReady 残留自我清除);
    2. 崩溃重启窗口 handshake 永不匹配(instance-file/registry 状态目录不一致)→ Bug: Within the crash-restart window, the proxy starts up successfully but the handshake never matches — model traffic s | Bug: 崩溃重启窗口内 proxy 拉起成功但 handshake 永不匹配,模型流量静默直连(不压缩)且不再重试 #5226 主症状同样被 v0.1.209 覆盖,现 waiting-feedback:等报告人在 0.1.209 复测;残留 facet 归 [Bug][Codex] Temporary separator selected as compression endpoint, causing acp_status to silently fail to report ~180K t | [Bug][Codex] 临时分隔符被选作压缩端点,导致 acp_status 静默漏报约 18 万 token 可压缩历史 #5139;
    3. 旧实例占端口 → bootstrap 连续失败 → 长期直连 → [Bug] Plugin bootstrap spawns a new instance while the old one still holds the port and drops proxying (goes direct): la | [Bug] 插件 bootstrap 在旧实例仍占端口时新起实例并放弃代理(goes direct):大会话随即以未压缩历史撞上游上限(400 Range of input length / 413) #4125(GitHub 状态仍 open;线程内 10-24 评论称修复 PR [PR] merge: tier-2 consolidation train — 15 PRs + repair of #4525's sidScope compile break #4551 已合并并「补关」,与实际状态不符,需核实是否残留复现);
    4. 隧道准入卡 unresolvable → 见 C-1。

    系统性缺口(建议先设计、不动代码):上述四个触发各自有自己的日志行和各自的恢复路径,没有统一的「我现在正在直连/未压缩」可观测状态机,用户侧提示也各说各话。建议对齐面板 banner + /__bili/status attribution(#3581 起的既有面)与 host contract v2 讨论(#5241),单开设计 issue 收敛,而不是再打第四根补丁。

    C. Wedge/挂住(两项都卡决策单,拍了板就有代码可合)

    1. Long-lived proxy wedges on local DNS after WSL network/VPN changes — tunnel admission stays unresolvable (502) until process restart #5221 WSL 网络/VPN 切换后本地 DNS 永久 wedge:src/tunnel-guard.ts:105-119 的 dnsResolveHost(node:dns/promises lookup,2s × 3 次跑满即判 unresolvable)→ 此后每个模型请求 502 tunnel_destination_denied,直到重启 bili 进程;实例注册表会重新收养同一个楔死进程,所以只重启 DSH 宿主无效。Phase 1 PR [PR] fix+docs: make the long-lived-proxy stale-DNS wedge diagnosable and document its remedies (#5224) #5263 已交(错误信息补绕行提示 + README en/zh);Phase 2 自动自检重启(复用 src/restart.ts performSelfRestart)等 A1/A2/A3 拍板,同一 PR 内补齐。
    2. [Bug] Stalled upstream before first response byte holds the client silently up to 12 min and burns host retries — first-byte watchdog is warn-only and deduped per origin #5164 上游首字节前 stall → bili 静默持有客户端最长 12 min:UPSTREAM_TIMEOUT_MS = 12*60*1000(src/fetch-util.ts:24,可经 network.upstreamTimeoutMs 覆盖);dsh 宿主 ~300s 总是先放弃,每次重试全额重付 input tokens,日志只有一条每-origin 终身一次的 warn。止血 PR [PR] fix: first-byte stall warn per (origin,session) with cooldown instead of once-per-origin-per-process (#5164) #5260(warn 改每 (origin,session) 60s 冷却 + 带实际秒数)在 CI;决策单 [PR] ci-fixes convergence: port the four remaining master-red lanes (win32 db path, teardown handles, #5155 settle, #4788 timer host) #5262 等拍板:A=fail-fast+可配置阈值(推荐,默认 120s)/ B=仅诊断 / C=维持现状。
    3. 关联未定位件:[Bug][Codex] Temporary separator selected as compression endpoint, causing acp_status to silently fail to report ~180K t | [Bug][Codex] 临时分隔符被选作压缩端点,导致 acp_status 静默漏报约 18 万 token 可压缩历史 #5139 mega 会话事件循环卡死 ~19min、卡住的 child 占端口导致所有重拉失败(B-2 的残留载体)。

    D. 起不来(Windows EPERM 家族:根因已钉死,修复未落地)

    邻接(双写者)

    建议下手顺序(待讨论,不代拍板)

    1. 先关两张决策单(成本最低、收益最高):[PR] ci-fixes convergence: port the four remaining master-red lanes (win32 db path, teardown handles, #5155 settle, #4788 timer host) #5262 选 A+120s 与否;Long-lived proxy wedges on local DNS after WSL network/VPN changes — tunnel admission stays unresolvable (502) until process restart #5221 Phase 2 的 A1/A2/A3 → 合计 ≤2 个 PR 可落
    2. [PR] fix(#4977): exit twin-collision before persistence init when the port holder is a silent same-build twin #5004 twin-collision 推完评审落地
    3. [PR] fix: rank the node runtime's Low integrity label first in win32 EPERM hints; add non-blocking startup self-check (#5155) #5160 rebase 落后落后 master 后合并(补 Windows EPERM 提示盲区)
    4. [Bug][Codex] Temporary separator selected as compression endpoint, causing acp_status to silently fail to report ~180K t | [Bug][Codex] 临时分隔符被选作压缩端点,导致 acp_status 静默漏报约 18 万 token 可压缩历史 #5139/Bug: Within the crash-restart window, the proxy starts up successfully but the handshake never matches — model traffic s | Bug: 崩溃重启窗口内 proxy 拉起成功但 handshake 永不匹配,模型流量静默直连(不压缩)且不再重试 #5226 残留深挖(等报告人 0.1.209 复测结论)
    5. 「静默直连统一出口」设计 issue(先讨论方向,不先写码)
  2. changed the title [-]『代理半死不活』簇攻坚入口 + 48小时活跃面 A–N 归类总账(2026-10-29~31)[/-] [+]"Agent Half-Dead" Cluster Breakthrough Entry Point + 48-Hour Active Surface A–N Classification Master Ledger (2026-10-29 | 『代理半死不活』簇攻坚入口 + 48小时活跃面 A–N 归类总账(2026-10-29~31)[/+] on Oct 31, 2026
  3. ranxianglei commented on Oct 31, 2026

    @ranxianglei
    OwnerAuthor

    🤖 Powered by ework · qwen3.8-27b

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

    查重: 不重复 —— 本单是 owner 开的簇攻坚入口;按 "half-dead / cluster / A–N ledger / track" 检索 open+closed,无同范围跟踪条目,D 簇各成员(#4994/#5152/#5164/#5221/#5222/#5139/#5154/#4125…)均为独立工作单,本单只做入口+顺序。

    标签: bug + p1 + track + scope/wiring(可用性缺陷簇、p1 密度最高、入口型跟踪、主战场在进程生命周期接线)——已按 OP 的标签说明校正:去掉误挂的 dsh(成员跨 dsh/pi/codex 多车道,总账规则跨车道不打)、p3→p1(跟最重成员对齐)。

    接单后对 GitHub 实况核了一遍(截至 10-31 ~08:00Z),floor 1 快照之后已有 5 处状态变化:

    项 快照时 现在(GitHub 核实)
    #5004 twin-collision(攻击序 2「推完评审落地」) open、评审停滞 已 merged(10-31 06:07Z)→ 攻击序第 2 项完成
    #5263 WSL DNS Phase 1(诊断+文档) 已交待 CI 已 merged(10-31 07:19Z);且 07:57Z 刚出现 #5326 设计单(真·不重启自愈:fresh-resolver over admission AND egress)+ #5327 PR(wedge 告警上面板,即 Phase 2 的可观测半)——另一会话正在推进,我不抢线
    #5294 第二写者放行启动(邻接双写者) 今天新开 已 merged(10-31 03:36Z);#5213 降级语义 bundle 也在 00:17Z 合入 → 邻接双写者线整体闭环,「共享本地盘 index.db = 受支持拓扑」已是 master 现状
    #5226 handshake 永不匹配 waiting-feedback 已 closed
    #5231 失败压缩回执(同窗口 p1,非本簇但同批) — 已 merged(05:26Z),follow-up 测试钉 #5310 也已在 07:59Z 合入

    仍开放的决策单(等 owner 拍板,我不代拍):

    1. 首字节 stall fail-fast(止血 PR [PR] fix: first-byte stall warn per (origin,session) with cooldown instead of once-per-origin-per-process (#5164) #5260 CI 已 30 项 0 失败/仅剩 4 pending):A/B/C + 默认值,推荐 A+A-1(默认 120s),拍板后我在 [PR] fix: first-byte stall warn per (origin,session) with cooldown instead of once-per-origin-per-process (#5164) #5260 之上叠加第二个 PR;
    2. WSL DNS Phase 2:原 A1/A2/A3(自检重启)已被 [PR] no-engine refusal: one line — requires Node.js 22+ #5326 的设计方向(fresh-resolver 自愈,不重启)部分重构——建议拍板时把两张单并着看,[PR] no-engine refusal: one line — requires Node.js 22+ #5326 若成立则重启方案降级为兜底。

    本会话开工的非决策依赖项(按「无决策依赖先修」纪律,不等上面两项):

    进展会持续在本线程更新。

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