fix(codex): require explicit final source delivery#105365
Conversation
db3348f to
7d54c41
Compare
|
Codex review: needs real behavior proof before merge. Reviewed July 12, 2026, 11:41 PM ET / July 13, 2026, 03:41 UTC. Summary PR surface: Source +159, Tests +343. Total +502 across 24 files. Reproducibility: yes. at source level: the canonical issue records a successful current-source progress send without Review metrics: 2 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Choose one canonical completion contract; if the explicit control is retained, make Do we have a high-confidence way to reproduce the issue? Yes at source level: the canonical issue records a successful current-source progress send without Is this the best way to solve the issue? No, not as currently authored: an optional marker plus legacy terminal fallback is only a prompt-assisted mitigation, not a durable explicit-completion contract. The best fix must either require the marker or select the narrower prompt-only policy explicitly. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 156f4c89ed03. Label changesLabel justifications:
Evidence reviewedPR surface: Source +159, Tests +343. Total +502 across 24 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (7 earlier review cycles)
|
7d54c41 to
3c34fe3
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
35fcd9d to
1c18b9e
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Distinguish progress from terminal source delivery across Codex telemetry, payload suppression, terminal failure routing, and stranded-reply recovery. Preserve legacy behavior when explicit markers are absent.
1c18b9e to
53ffd14
Compare
|
Maintainer follow-up pushed:
Validation on the new head: codex app-server suites (157/157), delivery-evidence + plugin-SDK surface report (10/10), plus the full focused matrix and |
Omitted final on a confirmed message-tool-only source reply keeps main's terminate-on-delivery semantics and records a completed marker; only explicit final=false defers termination. Project the Codex-only final schema property in place on attempt-fresh tools instead of adding a public plugin-SDK clone export, resolving the SDK surface budget failure.
4e0f0af to
e7b4035
Compare
What Problem This Solves
In Codex
message_tool_onlyruns, a confirmed progress acknowledgement was classified as a completed source reply. The turn could end early, or a later model/tool failure could be suppressed, leaving the user with only the progress message. The durable behavior needs an explicit completion signal without advertising that signal to ordinary message-tool consumers that do not implement it.Implementation
final: booleanonly in the Codex projectedmessageschema whensourceReplyDeliveryMode === "message_tool_only"; automatic delivery and ordinary runtimes do not see it.final: trueand delivery to the current source conversation is confirmed.final:falsetakes precedence over legacy tool-owned termination; legacy callers without the new field remain compatible.finalbefore provider dispatch and message idempotency calculation. Schema projection clones preserve WeakMap-backed tool ownership metadata.final:false, and only the completed source reply usesfinal:true.Evidence
node scripts/run-vitest.mjs src/auto-reply/reply/followup-runner.test.ts src/auto-reply/reply/agent-runner.misc.runreplyagent.test.ts -- --reporter=dot— 224/224 passed.pnpm check:test-types— passed for core, extensions, and root test projects..agents/skills/autoreview/scripts/autoreview --mode uncommitted --stream-engine-output— clean; no accepted/actionable findings, overall confidence 0.86.Relationship to open work
#105290 established the right runtime direction, but its review correctly found that it advertised
finalin the shared message schema where no other runtime implements it. This is a fresh current-mainsuccessor with that scope repaired and with progress-versus-completion telemetry propagated through recovery paths.#100156 remains the prompt-only alternative. This PR is intentionally independent: maintainers can choose this explicit-final contract, or choose the prompt-only contract instead.
This PR does not depend on #104632. They are complementary: #104632 reconciles one ambiguous timed-out send with the same idempotency key, while this PR decides whether a confirmed source delivery is progress or the terminal reply.