@@ -183,11 +183,21 @@ comes first. The cross-check is a narrowing of the ungraceful-death window
183183(provably dead sessions: pidfile present, process gone), not its closure —
184184OHS-T04/OHS-R07 say exactly this, and no death tombstone is attempted: the
185185kill that removes the registry entry leaves nothing behind to prove death
186- with, and fabricating evidence is the one thing this design never does. A Codex
187- binary whose delivery-critical schema projection does not match an admitted
188- fingerprint produces no Codex observed state at all: provider launch is refused
189- before the control channel starts. Fingerprint admission and live behavioral
190- evidence remain separate.
186+ with, and fabricating evidence is the one thing this design never does.
187+
188+ Each controlled Codex startup generates the installed app-server schema. st2
189+ checks the required methods, response fields, blocking flags, and data shapes
190+ that native delivery uses. A compatible patch or minor release starts without
191+ a source change. A missing required element or a changed critical shape stops
192+ before the app-server starts. The wrapper sends one idempotent rejection report
193+ to the agent's declared supervisor. The version string is diagnostic data, not
194+ an admission proxy.
195+
196+ Additive item kinds and server-request methods do not stop startup. A listed
197+ element is reviewed and safe to ignore. An unlisted element creates an
198+ ` UnknownProtocol ` delivery hold. The next safe thread status releases the hold.
199+ This fail-closed runtime rule keeps the agent present and prevents a silent
200+ delivery into a new hold that st2 does not understand.
191201
192202## Codex producer (OHS-R05)
193203
@@ -205,6 +215,7 @@ complement of steerable, a delivery predicate (decision 0001's boundary).
205215| ` Held { ConflictingTurn } ` | ` active ` | ` none ` | ` none ` | ` conflictingTurn ` — two turns believed live is maximally active |
206216| ` Held { Review } ` | ` active ` | ` none ` | ` none ` | ` review ` — review's enter and exit are model-emitted items inside a running turn; nothing awaits a human |
207217| ` Held { Compaction } ` | ` active ` | ` none ` | ` none ` | ` compaction ` |
218+ | ` Held { UnknownProtocol } ` | ` active ` | ` none ` | ` none ` | ` unknownProtocol ` — an additive protocol element blocks delivery until a safe thread status arrives |
208219| ` Held { WaitingOnApproval } ` | ` active ` | ` human ` | ` permission ` | ` waitingOnApproval ` |
209220| ` Held { WaitingOnUserInput } ` | ` active ` | ` human ` | ` question ` | ` waitingOnUserInput ` |
210221| ` Held { NotLoaded } ` | * withhold* | — | — | thread not loaded proves nothing about work |
0 commit comments