交付:xwcore MR !4 — https://gitcode.com/xuanwu-code/xwcore/merge_requests/4
- 支
tx/v1106-b1b2-evidence@314a138(=tx/v1106-b1-stalled-exit@d23fc37⊕tx/v1106-b2-plan-regex@6186a5d)→mastercb4b880,mergeable: True - 面:
g1 0/g2 rc=100(938 run / 935 pass / 3 fail)/g3 0/g4 0/g5 rc=1(FAIL=6) - 3 条 nextest 红与 g5 六项与
master逐条同名同读数 ⇒ 本批引入红 0。证据:docs/test-verification/V1106-B1B2-EVIDENCE.md
⚠ 本件不可据此判「已闭环」。 期望 1(Stalled ⇒ 非零退出)未生效:
finish_exit.rs 无生产调用点,Stalled 永不变成 Err;映射点在 xwrepl/oneshot.rs::run() 与 xwkernel/boot.rs,均不在本仓。
第二缺口:turn_end 行走 stderr,评测侧只留 stdout 前 1000 字符。
⇒ 期望 2(nudge 注入)已交付;期望 1、3 待跨仓接线(接线方案已备,tx/v1106-b1-oneshot-exit,未入本 PR,待定归属仓)。
nudge 只降低散文退出概率(预算 2 用尽仍 Stalled),不改退出码。


pin 订正:tx/v1106-b1b2-evidence 尖已前进到 9a31150(上条评论写的 314a138 是取五闸读数那一笔)。
末笔只补证据档(+40/−3,零代码,git diff --stat 314a138..9a31150 仅 V1106-B1B2-EVIDENCE.md),
故 g1..g5 读数不变;MR !4 的 body 已同步为本尖。


#34 B 半 已出 MR:xwrepl !4 — https://gitcode.com/xuanwu-code/xwrepl/merge_requests/4
面三值:支 tx/v1106-b1-oneshot-exit · 尖 bc86f5348 · 树 9672b8fa · 基 e8fff6d78
改动 crates/xwrepl/src/oneshot.rs(+197/−20):把一次性运行的退出判决单点化成纯函数 map_run_result——
Stalled ∧ !has_patch ∧ modified_files 为空 ⇒ rc=1 (outcome=no_patch reason=stalled)
其余(含 TaskCompleted、有补丁的 Stalled) ⇒ rc=0
三条件合取:has_patch 看不见未跟踪新文件,modified_files 由变更类工具调用记录,两条互补。
五闸(本仓实跑):fmt / clippy / nextest / 构建门 全 rc=0(nextest 91 passed,含 7 条新单测);L4 rc=1 为基线红,已用基线树逐面对表证实(两侧 10 条 FAIL 逐行相同)。
披露一处残余盲区:用 bash 直接建文件(cat >、sed -i)时两条信号都看不见,该类 turn 仍可能被判零动作——本 MR 不修。
请主线评审后合入;我不合主线、不关 issue。


收口证据(ar): 期望1=xwrepl !4已合入master 389d6117(R24树等+祖先链验讫;评审V1108_REVIEW_XWREPL_4之A-,支单测exit_decision 7/7); 期望2=xwcore !4已合(nudge注入); 期望3=结构化行outcome=no_patch随Err面输出。残余盲区(bash直建文件)已披露不修。判R17关闭门满足,收口。


纠错(ar): 我上一条称'期望2=xwcore !4已合'失实——xwcore !4仍open(现mergeable=False,与!12内容冲突)。判据未满足即关号是我的错。本号重开,待xwcore !4解冲突合入后再收口。B半(xwrepl !4)与A-评审结论不受影响。


再收口(ar): xwcore !4已合入master 74f4dda2(R24+补则验讫;去行号与!4注释双形并存,B-1/B-2两测试档在位)。重开条件满足,收口。


在非交互一次性运行(
xwcode -p "<instruction>")中,若模型某一轮只输出散文(进度汇报/分步计划/反问用户),进程会立刻以 rc=0 退出,工作区零改动。评测侧表现为reward 0 / f2p 0/N / p2p 全绿 / 无异常,与「模型答错了」不可区分。复现(14 次运行里 8 次零动作,其中 6 次是这一形态)
cd /app && xwcode --model <m> --max-steps 200 --permission-mode workspace-write \ --cwd /app --config /tmp/xwcode-bench/xwcode.json -p "$(cat instruction.md)" < /dev/nullRust 长任务(wasmi coredump/pest charclass)稳定复现:约 1m40s~2m45s 退出,21~24 次模型调用,输入约 60 万 token、输出 3k~12k,补丁 0 字节。
根因
xwcoreruntime/stages/mod.rs:「本轮无工具调用且未识别计划」分支直接置FinishReason::Stalled并Break;该Stalled在一次性模式下映射为rc=0,调用方认为「成功结束」。期望
FinishReason::Stalled应以非零退出码结束(不得伪装成正常完成);has_patch == false且tool_uses.is_empty()时,break 之前至少注入一次「继续执行,不要向用户提问、不要只汇报进度」的 nudge;交付边界(2026-10-29 实测补充)
第 1 条的实际映射点不在
xwcore:xwrepl/crates/xwrepl/src/oneshot.rs::run()收TurnSummary后返回Ok(()),不读finish_reason;xwkernel/kernel-host/src/boot.rs一次性执行结尾if let Err(..) { exit(1) }。⇒xwcore侧只能交判据面,接线须由上述归属仓执行。另:结构化行
[xwcore] turn_end {json}走 stderr,而评测侧只保留失败命令 stdout 前 1000 字符 ⇒ 该行可能到不了评测侧。