Skip to content

fix(o98): 收尾不再虚报成功;--print 未完成时非 0 退出并写明「未完成:」 - #94

Merged
QiaolongLi1201 merged 3 commits into
mainfrom
fix/o98-no-false-success
Oct 11, 2026
Merged

QiaolongLi1201 merged 3 commits into
mainfrom
fix/o98-no-false-success

Conversation

@QiaolongLi1201

Copy link
Copy Markdown
Collaborator

O98:收尾时虚报成功

背景:O14 自举 O90 run2 收尾说「All checks are green」,但没跑 format:check,npm run check 实际失败;kimi-k3 r2 一个文件没改就 exit 0。

改动

  • 新增 src/cli/run-completion.ts:从 agent 事件流记录本次 run 实际跑过的检查(format / lint / typecheck / test / check)及是否通过、是否写过文件;检测收尾里没有依据的「通过」声明;给出完成判定。
  • src/cli/oneshot.ts(text 模式,即 moss -p 默认):判定为未完成时,退出码非 0,stdout 最后一行为 未完成:<原因>;卡在:<步骤>(英文界面为 Incomplete: …; stuck at: …)。
  • src/cli/exit-codes.ts:新增 ExitCode.INCOMPLETE = 9。已有错误(max turns / budget 等)沿用原退出码,只补「未完成」行。
  • json / stream-json 输出和 TUI 行为不变;没改 src/safety,没放宽任何已有断言。

判定规则(最小可靠方案:检测 + 标注 + 非 0):

  1. 收尾声称「all checks green / npm run check 通过 / prettier、lint、typecheck、tests 通过 / 所有检查都通过」,但对应检查本次没跑过或最后一次失败 → 未完成。npm run check 等价于 format+lint+typecheck;只跑 lint+typecheck 不能声称 all green。
  2. 请求需要改文件(修复/实现/fix/implement…,纯提问除外),但本次没有任何成功的写文件工具或写类 exec → 未完成。

O99 对接接口(src/cli/run-completion.ts)

type VerificationCheck = 'format' | 'lint' | 'typecheck' | 'test' | 'check';
createRunCompletionTracker(): RunCompletionTracker
noteRunCompletionEvent(tracker, event: MossAgentEvent): void   // 每个事件都喂
findUnverifiedCheckClaims(text, tracker): VerificationCheck[]
requestExpectsFileChanges(request): boolean
assessRunCompletion({ tracker, finalText, request?, runError?, errorExitCode?, zh? }): RunCompletionVerdict
//   RunCompletionVerdict = { status: 'complete'|'incomplete', reasons, stuckAt?, unverifiedClaims, exitCode }
formatIncompleteLine(verdict, { zh? }): string                  // complete 时返回 ''
ExitCode.INCOMPLETE = 9

O99 的进度收尾直接用 verdict.status / verdict.exitCode / formatIncompleteLine,tracker.lastStep / lastFailedStep 可用作「卡在哪一步」。进度本身不能当成功信号。

测试

  • test/run-completion-o98.spec.mjs:单元(声明 vs 真实运行、失败的 check 不算、否定句不算、零改动编辑任务)+ 集成(runOneShot text 模式复现 O14 run2 与 kimi r2:退出码非 0、最后一行 未完成:;诚实回答仍为 0)。
  • 回退验证:把 oneshot.ts 临时还原到 main 后该测试变红(false "all green" must not exit 0 (got undefined)),恢复后变绿。
  • npm run check 通过;Node 22.16 下全量 node scripts/run-package-tests.mjs:350 个文件全过。

不合并,请 QA 复审、UX 验收。

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

QiaolongLi1201 added a commit that referenced this pull request Oct 11, 2026
Roadmap v1.1: fork's 11 draft PRs all concluded; upstream campaign PRs
#76-#92 merged (O13/O43/O57-58/O66-67/O70/O83/O85-88/O90/O97); npm first
release @rdk-moss/agent@0.26.1 live (rolling policy supersedes P4 gate,
remaining obligations folded into P2/P3); in-flight O94 (#93), O98 (#94),
SDK draft #68. AGENTS.md package name fixed to @rdk-moss/agent.
- new src/cli/run-completion.ts: track checks actually run + file writes,
  detect unverified success claims, assess completion, format 未完成 line
- oneshot text mode: incomplete runs exit non-zero (ExitCode.INCOMPLETE=9 or
  existing error code) and end stdout with 未完成:…;卡在:…
- test/run-completion-o98.spec.mjs
- add src/cli/run-outcome.ts: resolveRunOutcome + formatOutcomeLine
  status completed | incomplete | unverified (false check claims)
- oneshot -p path uses run-outcome for exitCode + last line
- tracker stays in run-completion; O99 imports from run-outcome
- tests cover unverified vs incomplete line prefixes
Rebase already on 58c9e3d. Close QA/UX gaps on #94:

- formatOutcomeLine always emits a conclusion (完成 / 未完成 / 未验证 /
  验证失败 / 被拦); drop 未核实 wording
- status: completed | incomplete | verify_failed | blocked | unverified
  (soft unverified = exit 0; VERIFY_CMD / Stop = non-zero)
- VERIFY_CMD always recorded on tracker; continue once then re-verify;
  timeout/spawn not swallowed
- headless Stop hook blocked → non-zero + 被拦 line
- TUI shows outcome under the done stamp
- tests cover A–E plus completed / blocked / TUI line
@QiaolongLi1201
QiaolongLi1201 force-pushed the fix/o98-no-false-success branch from afa8531 to 665c9ee Compare October 11, 2026 17:26
@QiaolongLi1201
QiaolongLi1201 merged commit adf2d98 into main Oct 11, 2026
8 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant