- Codex CLI sessions are now captured (PR #305): the Stop hook parses Codex rollout JSONL (
response_item/messageuser/assistant records) through the same cursor / per-fire cap / dedup path as Claude transcripts, skipping Codex-injected first-turn blocks (<recommended_plugins>,# AGENTS.md instructions for …,<environment_context>) and everything that is not conversation (developer-role hook context, reasoning, function calls, event duplicates). Previously every Codex fire was a silentskip=empty-delta-filtered. Fixture + S29/S30 pin the wire bodies; verified end-to-end on a real rollout. - Hooks tolerate the server's per-IP rate limit (PR #307): every hook API call retries a 429 once after one second (
UM_API_RETRY_429,UM_API_RETRY_429_SLEEP); session-start caches a healthy write probe for 10 minutes (UM_PROBE_CACHE_MIN,~/.um/state/probe-ok) so a burst of session restores makes one fewer call per session; session-end logs a 429 aserror=http-429instead ofserver-too-old. Root cause: eight sessions restored inside one minute ≈ 40 calls into a burst of 10 (60 rpm / burst 10 per IP). - Test hygiene (PR #306):
reaction-gate-eval.test.mjspins the 400-day ledger retention its frozen frame presupposes — its 2026-08-10 fixtures had crossed the 30-day default prune, turning CI red on unchanged code.
Deploy notes: hooks-only release — no server behaviour change (the image is rebuilt for version coherence; install.sh --upgrade and the CLI refresh keep the three surfaces in step). Consumer machines: claude plugin marketplace update universal-memory + reinstall; a Codex host must also refresh its cached plugin copy. Post-deploy proof-of-life: a codex exec run logs stop posted http=200 n=<k> in ~/.um/hook.log for its project instead of skip=empty-delta-filtered; two session starts within 10 minutes log probe cached writes=enabled on the second.
Artifact verification: ghcr.io/goldenwo/universal-memory-server:1.22.0 built and pushed for amd64 + arm64 by release.yml run 34483723016 (both legs green). No server code changed since v1.21.1 (verified amd64 + arm64 there); this image differs only in its version fields. Hooks: every hooks/*.test.sh + hooks/lib/*.test.sh suite green on Windows git-bash and ubuntu CI; the Codex capture path verified end-to-end on a real rollout. arm64: deployed to the Pi (aarch64) by install.sh --upgrade 1.22.0 — pre-flight passed, container swapped, /health 200 with all 610 memories intact, CLI 1.22.0, rollback kept as um-rollback:previous. Post-deploy proof-of-life on the shipped hooks: two codex exec runs logged stop posted http=200 n=2 project=claude-harness-toolkit (first) and probe cached writes=enabled (second); initialize over MCP reports 1.22.0 and a notification still gets 202.