Filed from discussion #1560. New in v0.10.4, no tracking issue.
Symptom
error: agent_config agent=Codex CLI op=hook_preflight
Two things changed at once in v0.10.4:
op=hook_preflight is a new failure. On 0.10.3 the same run failed with op=mcp_install plus op=legacy_hook_cleanup — a different pair.
- The
Codex CLI: section header stopped printing in the output.
Suspect
PR #1443 (0cf0ccb5, "reconcile normalized Codex hooks", @astandrik) merged into v0.10.4 and is the only change in that area. It reconciles an owned inline hook assignment into the canonical block instead of ignoring it and re-adding alongside, and it refuses genuinely ambiguous TOML without modifying the file.
That refusal path is the obvious candidate: a config the previous code would have rewritten may now be classified as ambiguous and declined. If so the behaviour is arguably correct — we stopped silently mangling a file — but the reporting is not, because "ambiguous, refusing to touch it" and "failed to write" are indistinguishable in the current message.
Not yet bisected. Worth doing that before assuming, since the vanished section header suggests the flow diverges earlier than the write.
Related
@astandrik — no criticism implied, your PR fixed a real and nasty bug (a duplicated install breaking Codex permanently). This is just the next layer showing through, and if the new behaviour is a deliberate refusal then the fix is to say so rather than to revert.
Filed from discussion #1560. New in v0.10.4, no tracking issue.
Symptom
Two things changed at once in v0.10.4:
op=hook_preflightis a new failure. On 0.10.3 the same run failed withop=mcp_installplusop=legacy_hook_cleanup— a different pair.Codex CLI:section header stopped printing in the output.Suspect
PR #1443 (
0cf0ccb5, "reconcile normalized Codex hooks", @astandrik) merged into v0.10.4 and is the only change in that area. It reconciles an owned inline hook assignment into the canonical block instead of ignoring it and re-adding alongside, and it refuses genuinely ambiguous TOML without modifying the file.That refusal path is the obvious candidate: a config the previous code would have rewritten may now be classified as ambiguous and declined. If so the behaviour is arguably correct — we stopped silently mangling a file — but the reporting is not, because "ambiguous, refusing to touch it" and "failed to write" are indistinguishable in the current message.
Not yet bisected. Worth doing that before assuming, since the vanished section header suggests the flow diverges earlier than the write.
Related
-1problem as the YAML and JSON ones.@astandrik — no criticism implied, your PR fixed a real and nasty bug (a duplicated install breaking Codex permanently). This is just the next layer showing through, and if the new behaviour is a deliberate refusal then the fix is to say so rather than to revert.