## Summary
- restore the existing `codex.tool_result` behavior and remove the added
`codex.inference` event
- emit `codex.tool_call` timing events only for direct tool calls
- snapshot the execution-start marker once when emitting
`codex.tool_call` so a concurrent dispatch start cannot produce
internally inconsistent timing fields
## Why
This keeps the stacked change focused on direct tool-call timing without
expanding result or inference telemetry. The timing-marker fix addresses
repeated reads of the marker during event emission, which could
otherwise observe different states if dispatch begins concurrently.
## Validation
- `just fmt`
- `git diff --check HEAD~3..HEAD`
- `just test -p codex-core
tool_call_timing_guard_ignores_code_mode_source`
- `just test -p codex-app-server
app_server_emits_structured_tool_call_timing_event`
- `just test -p codex-otel
otel_export_routing_policy_routes_tool_result_log_and_trace_events`
I also attempted `just test -p codex-core -p codex-otel -p
codex-app-server`; that broader run was not completed after multiple
app-server tests timed out.