Repository navigation
[PR] fix: name every skipped DSH fork-adoption entry gate instead of returning silently (#4215) - #4223
[PR] fix: name every skipped DSH fork-adoption entry gate instead of returning silently (#4215)#4223ranxianglei wants to merge 2 commits into
Conversation
…ning silently (#4215) C10a of the #3011 family checklist (#3025): the #4215 incident showed a seeded fork child (isSeeded + correct parentSession) with ZERO adoption trace in the whole log - eight silent early returns made "not a fork" vs "a fork we could not see" unanswerable after the fact. - forkChildOf() becomes exported forkChildVerdict(): names all eight shapes (initiator-threw/-missing, session-missing, sid-missing, header-missing, not-seeded, parent-missing, parent-is-self) - a seeded candidate blocked at an entry gate (tools-ready / body-parse / side-shaped / proxy-base) logs once per session naming the gate - malformed seeded lineage (isSeeded without a usable parentSession) logs a warn once per session - ambient-blind shapes (fork status undeterminable) log ONE info notice per process, flagging whether scoped #4082 attribution was active - the C10b identity-route split named in the log - plain non-fork traffic stays completely silent Log-only change: no judgment, ordering, or wire behavior changes. Regression suite: tests/issue4215-fork-gate-diagnostics.test.ts (verdict matrix + both directions of every gate, #3617 discipline). Identity-route widening (C10b) needs an owner decision and is NOT part of this change.
📦 Built Package ArtifactBranch: Option A — Install this exact build (recommended)npm install -g [email protected]This exact version is immutable and reproducible. The rolling Option B — Download artifact
tar xzf billion-context-pr4223.tgz
npm install -g packageInstall instructions are refreshed on each push. |
(ai: vllm-qwen/qwen3.8-27b) 查重: 不重复。 按失败签名(fork adoption / entry gate / #4215)检索 open+closed issue 与 PR:相关项为 #3011(canonical)、#3025(家族清单,服务端 completion window——不同机制)、#3024(409 SNAPSHOT_UNAVAILABLE 永久放弃——不同机制),均与本 PR 范围(entry-gate 命名诊断,C10a)不重叠。证据实例 #4215 已关闭。 标签: bug + dsh + scope/wiring + p2(dsh 车道协议接线的静默早退使 fork 收养失败事后不可诊断;影响面限于 fork 流、有绕行 → p2; 审核方式:未复用 PR 描述结论,独立通读全量 diff(原单 commit 八问:
验证证据:
顺手修掉的小问题(独立 commit):新测试文件重复导入 非阻塞观察:PR 正文只有 References 没有 Fixes/Closes 关键字——合理:C10a 只是 #3011 家族清单一项,C10b 与残余车道未完,关任何一个都过早;记录在此备查。 结论:可合——方向正确(根因是判定层缺证据面,修复正落在那里,不是症状拦截),回归干净,测试有牙。等 CI test shards 转绿后即可由你合并(合并是 human-only):#4223 |
(ai: vllm-qwen/qwen3.8-27b) CI 跟进:初跑最后一个 shard 失败签名(job 与本 PR 无关的证据链:
已知家族:与 #3665(closed,Flaky Windows CI:event-loop drain 取消)同签名——那次是 处置:已触发 failed-job rerun(HTTP 201)→ 新 runner 上该 shard 通过,整个 run 21 success / 1 skipped(条件跳过)/ 0 failure。 结论维持上一条:可合,合并是 human-only:#4223 |
What & why
C10a of the #3011 family checklist (#3025) — evidence instance: #4215.
#4215 showed a seeded fork child (
isSeeded: true+ correctparentSession) whose entire incident log contains ZERO adoption trace. The DSH native adoption entry had eight silent early returns (initiator threw/missing, no session, empty sid, no header, not-seeded, no parentSession, parent==self — plus the four pre-adopt gates), so after the fact there was no way to answer "was this not a fork, or a fork we failed to see?". This change makes the entry name itself on skip.Changes (log-only)
forkChildOf()becomes exportedforkChildVerdict(): same judgment, every shape named (initiator-threw/-missing,session-missing,sid-missing,header-missing,not-seeded,parent-missing,parent-is-self).isSeededwithout a usableparentSession) logs a warn once per session.No judgment, ordering, wire, or config changes. New lines appear only in the host log (
bili.log,[dsh-client]origin); nothing reaches any client or model.Not included (needs owner decision)
C10b — widening fork detection beyond ambient
currentInitiator()(explicit branch identity carried by the host, or scoped-sid lookup once the host can expose header metadata by id). Options are on the table in the #3011 thread; until then the blind-spot line tells you exactly when detection was blind.Residual:
pi.ts maybeAdoptForkChild(:1359) and:370) carry similar silent gates but different detection shapes — tracked under the #3011 family, out of scope here.opencode-v2.ts httpRequestHook(Tests
tests/issue4215-fork-gate-diagnostics.test.ts: verdict matrix (15 cases) + both directions of every gate (Test Blind Spot Retrospective: Reinforcing Negative Assertion Discipline, Tightening Fake Upstream Strictness, Thin Inst | 测试盲区复盘:补反向断言纪律、假上游严格化、薄安装冒烟、形态矩阵与生命周期覆盖 #3617): fires-when-should, throttles, plain/subagent traffic emits zero lines, a deferred side-shaped request still lets the following main request reach the adopter.Ships no user-visible behavior change by design: it turns an unanswerable post-mortem into a one-line answer.
References #3011 (canonical issue), evidence instance #4215.