Skip to content

v0.5.13

Choose a tag to compare

@github-actions github-actions released this 11 Oct 12:22
v0.5.13
b2225ef

codex-peer v0.5.13

This release changes how a message to an interactive Codex session is acknowledged and handed to native Codex. It requires Sessionbus v0.5.9 or newer (daemon and hub) and still pins the Sessionbus Go SDK v0.5.9. Native Codex is installed separately and is not pinned.

scripts/install-codex.sh installs the latest stable release by default, so it now installs v0.5.13. Upgrading from v0.5.12 needs no daemon, hub or lane-row change.

Visible to senders: a message to an interactive Codex session is now answered with written. It used to be answered with injected. written means the peer holds the message; it is not proof that native Codex has taken it.

Changes since v0.5.12

  • The receipt is sent on arrival. The peer's broker acknowledges a message with written as soon as it holds it. Before, it answered only after native Codex had acknowledged the message, and every native failure reached the sender as rejected with no receipt.
  • Messages are handed over in arrival order. The broker steers the turn in progress, or starts a turn when the thread is idle.
  • A refused steer is kept. When native refuses a steer as an invalid request (the turn had just ended, a compaction or review was running, or a human interrupt ended the turn), the message stays queued and is handed over again on the next message or change of the thread's turn state. Before, it was lost.
  • An uncertain hand-off is dropped and counted, never repeated. A steer or turn start that was sent to native and failed in any other way, or whose outcome is unknown, is removed. When the broker shuts down it writes one line per kind to its standard error: the native method, the outcome class and a count. The lines carry no message content and no native error text.
  • Bounds. The queue is in memory only: 64 messages or 1 MiB per thread and 16 MiB per broker. Beyond that a message is answered rejected with reason Sessionbus unsent input limit reached. The queue ends with the thread's bus presence.
  • Versions:
    • RELEASE_VERSION is 0.5.13;
    • the Codex plugin source version (codex/marketplace/codex/.codex-plugin/plugin.json) is 0.5.13-codex.0;
    • packaged archives carry 0.5.13-codex.g<revision>, as before.
  • Lanes are unchanged. No installer, dependency, protocol or workflow change.

Evidence

Observed once each, by a reviewer who did not write the change, on one Linux host with native Codex 0.162.1:

  • Idle session: the message was answered written; the session woke without typed input and replied.
  • Busy session: a message sent while a foreground sleep 120 was still running was answered written; the reply came in the same turn, before the command ended.
  • Turn boundary: a message sent while /compact was running was answered written; after the compaction ended, a new turn started with that message and replied. Nothing was typed or resent.
  • Regression: one lane run was collected, acknowledged and closed, and the native quit ended the session.

That run used a build of commit 2c47b61. This release differs from that commit only in RELEASE_VERSION, the plugin source version, the two tests that expect them, and this file.

Not captured: the wire answer with which native refused the steer during the compaction. That such a refusal is a non-acceptance was read in the native Codex source at 0.159.3 and 0.162.1; it was not observed on the wire.

Limits

  • A turn start that native did not submit is still dropped. Native reports that case with the same error as an internal failure, so it is treated as an unknown outcome and counted, not kept.
  • A kept message is silent. Its sender has written and sees nothing more until the message is handed over. Messages still queued when the thread's bus presence ends are discarded without a line.
  • A message that native has already accepted is native's. What native does with an accepted steer when the user then interrupts the turn is unchanged and was not tested.
  • Native is not pinned. The refusal code, thread status values and turn notifications this release relies on were read in the native Codex source at 0.159.3 and 0.162.1. A later native version can change them. written does not guarantee that native takes the message or that the model reacts to it.
  • Linux only. Nothing in this release was exercised live on macOS.
  • One earlier event stays unexplained. On v0.5.12 one busy-session message was answered rejected with no receipt. Its cause and what became of it were not traced, and this release does not explain it.