# Harness follow-ups

- `pi_idle.py`: Its `openai-codex` 1800 s TTL is an estimate; the ChatGPT
  backend publishes no TTL. Local data shows 90% cache hits after 20–30 min idle
  gaps (work item `idle-ttl-detection`,
  `evidence/openai-codex-observed-cache.md`). Revisit if OpenAI publishes a
  ChatGPT-backend TTL or observed hit rates at 20–30 min drop.
- `extractors/opencode.py`: native OpenCode denials provide OpenCode's generic reason,
  not Meridian's `HEADLESS_REJECT_REASON`, and an unavailable tool produces no attempted-call
  event to journal. Closing either gap requires an upstream custom-denial-reason/event seam
  or a Meridian hook that mediates calls instead of native policy; do not fabricate events.
- Codex spawns: under Codex's default (or an explicit `read-only`) sandbox, `meridian spawn done` /
  `rearm` fail because Meridian's state lock lives outside the sandbox. The child still finishes when its
  completion window accepts on silence, but cannot reject a premature completion. Fix by giving the
  completion signal a path Codex can write, or a non-filesystem channel.
