You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[R2][Regression] controller B graceful 的 cmd 正常退出观测缺口 #44
候选配置完整回归的 controller B graceful:child exit0、32字节及各阶段已通过,Job已归零,但驱动只记录close后cmd为0xC000013A,未记录wait_exit布尔和close前码。该probe未链接候选适配器,不能归因为候选核心,也不能由/Q下缺回显推断输入丢失。
Activity
JavaZeroo commentedon Oct 30, 2026
R1 #44 核对:controller B graceful 的观测端点与原始缺口
结论:原失败缺的是 close 前 cmd 退出码 与 native wait 结果两个端点;当前 harness 已在同一次运行内写出它们并加了反例门槛,
2026-10-26-controller-exit-observation的 4 次运行都有实数。但历史 red 未复现、无产品修复,本项保持 OPEN。1. 原失败记录里到底是哪个字段是空的
experiments/shell/results/2026-10-26-controller-exit/validation.json(提交 cc30eab,source_commit6b768b70…,:3)中 B graceful 用例:child_exit_codecmd_exit_code(close 之后)preclose_cmd_exit_code_observednullwait_exit_result_observednull这两个
*_observed键名全仓库只在该文件命中(对preclose_cmd_exit_code_observed/wait_exit_result_observed做全文 grep,结果仅此处),没有任何代码路径会写它们:它们是"未知"的人工标注,不是 harness 输出。所以原始 red 在 0xC000013A 之前没有任何同次观测,与 issue 正文“未记录 wait_exit 布尔和 close 前码”一致。2. 现在记录这条链的端点(当前 main,行号已按
origin/main核对)exit_input_bytesexperiments/shell/workflow_fixture_test.cpp:184→Session::send写完成回调experiments/conpty/session.hpp:150-164cmd_native_wait_result_before_exit_input/cmd_native_wait_error_before_exit_inputworkflow_fixture_test.cpp:180-181←Session::wait_exit(0,…):WaitForSingleObject返回值 +GetLastError,session.hpp:169-177cmd_wait_exit_result、cmd_native_wait_result、cmd_native_wait_error、cmd_exit_wait_msworkflow_fixture_test.cpp:185-188,输出 :209-211preclose_cmd_exit_code(未退出则为 null)workflow_fixture_test.cpp:189,在session.close()(:191)之前读取;:176-178 注释明确“close 后观测不得替代缺失的 close 前退出”cmd_exit_codeworkflow_fixture_test.cpp:205inner_job_active_after、cleanup_complete、forced_process_cancel、forced_reader_cancelsession.hpp:181-217→workflow_fixture_test.cpp:215-217反例门槛:
experiments/shell/workflow_checks.py:287-297要求cmd_wait_exit_result is True、cmd_native_wait_result == 0、cmd_native_wait_error == 0、preclose_cmd_exit_code为 int 且等于期望值;:280-282 把 null 原样保留为未知;experiments/shell/test_workflow.py:128-144用 11 个反例拒绝伪自然退出(含preclose_cmd_exit_code = 0xC000013A、cmd_native_wait_result = 258、exit_input_bytes= 4/True、强制取消标志)。3. 观测记录实际写出了什么
experiments/shell/results/2026-10-26-controller-exit-observation/validation.json(提交 981089e,base_commit65988f5f…,:4):cmd_native_wait_result_before_exit_input= 258(WAIT_TIMEOUT,即写 exit 前 cmd 仍存活)、cmd_wait_exit_result= true、cmd_native_wait_result= 0、preclose_cmd_exit_code= 0、exit_input_bytes= 5、cmd_exit_wait_ms= 0;可与红记录的 close 后 0xC000013A 同字段对照。native_wait_result_and_error_recorded: false(:52)——即这两个字段只出现在最终批。historical_root_cause_establishedfalse(:8)、historical_failure_reproducedfalse(:9)、product_fixfalse(:10)、closes_issuefalse(:11);observation_contract明示load_changed/prompt_wait_added/input_retried均 false、status_after_close_can_replace_preclosefalse(:17-20)、observer_may_perturb_schedulingtrue(:24)。4. issue 原文句子(保持开放的条件)
(正文“下一次有界定位与验收”第 4 条,原文:“修复后原case/自然退出、关闭取消和错误负例在最终同源码通过,保留32字节、原发送、回收和期限。若原批未复现,报告该批结果与未知,保持本项开放。”)
本次即按该条报告:端点已补齐、字段有实数,但原批未复现、根因仍 unknown,本项保持 OPEN。
边界
workflow_fixture_test.cpp(892155cc…)、workflow_checks.py(f186ff0f…)、test_workflow.py(f9358008…)、workflow_fixture.hpp(3327…)、text_client.cpp(aea8ed…) 与记录一致;experiments/conpty/session.hpp记录为 d909c999…、当前为 7b393471…(差异是 backend 注入,git diff 981089e origin/main显示wait_exit函数体未变)。*_observed字段的来源无法对到代码路径,只能确认它们被人工放在未知态;不排除原 run 还有未入库的原始输出。JavaZeroo commentedon Nov 1, 2026
R2 #44 批次 2(
diagnose/controller-exit-batch2):实测区分三种退出签名,缺口定位于 child→cmd 输入交接执行前固定:源码 c3e825e(harness 文件与当前 origin/main 3effd6d 逐字节一致,后者仅多一个 docs 文件);宿主 Windows 11 专业版 build 26200 / x64 / 系统 ConPTY;child=shell_text_client B(21)/A(22),cmd=
cmd.exe /D /Q /K "prompt TF_CONTROLLER$G";原五秒期限 5000ms 不变。样本上限:退出探针 2–4 次/机制、同源码压测固定 30 轮(90 用例)遇首个偏离即停、unittest 2 轮、oracle 反例 14 项;全程不加任何固定 sleep / 等待预算 / fresh-prompt 握手。实测
退出码分类学(最小探针
cancel_signature.cpp,仅用 origin/main 的session.hpp头文件,不改任何 harness/产品代码):exit\r+ wait_exit)close()时 cmd 仍活)cancel()=TerminateJobObject(91))→ 0xC000013A(STATUS_CONTROL_C_EXIT)是 ClosePseudoConsole 终止仍存活 cmd.exe 的确切签名:
forced_process_cancel=false证明是 ClosePseudoConsole 直接终止,而非 TerminateJobObject(92) 兜底;与自然退出 0、Job 终止 91 三者互不相同。同源码 controller 96 用例(unittest 2 轮 + 压测 30 轮)0 失败:
ebdddc51…=历史 red 的 capture_sha256)、inner_job_active_after 0、forced_process_cancel/forced_reader_cancel false。推断(现有证据支撑)
历史 red 的
cmd_exit_code=0xC000013A(且wait_exit_result_observed/preclose_cmd_exit_code_observed均 null)落在 close-alive 签名上:旧驱动send("exit\r")之后 cmd 未在 5s 内退出,close()的 ClosePseudoConsole 把仍存活的 cmd 以 0xC000013A 终止。这与 child exit0、32 字节、Job 归零不矛盾。真实缺口因此收窄为 child→cmd 输入交接:自然退出(child0 →exit\r→ cmd0)是绿路径,清理取消(cmd 在 close 时仍活 → 0xC000013A)是红路径。未知
为什么那一次
exit\r未达 cmd(child 已 join,字节应写入 input pipe)。本批 96 用例 + 此前观测记录的自然退出样本均未复现;可能是 child 退出前后 ConPTY 输入投递竞态或环境相关,观察者扰动限制(observer_may_perturb_scheduling)仍适用。无产品修复、无同类 red→green,本项保持 OPEN。结论:三种签名已实测区分,缺口从"close 后码未知"进一步收窄为"
exit\r输入交接偶发未达",待下一批或复现样本定位触发条件。原始 transport 与进程身份私有,仅公开以上白名单。