v1.0.89 (KUSS-STDIN): stdin=DEVNULL for both kiss children + verdict classes (timeout/spawn/thread-held) + leg 3k-15 #125
Loading…
Reference in a new issue
No description provided.
Delete branch "oss-oo/kuss-stdin"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Two findings from the live validation of the codex seam (2026-10-27, after v1.0.86/87).
codex execreads "additional input from stdin" whenever its stdin is a non-tty pipe and starts the turn only afterwards. The kiss child inherited the dispatcher's stdin (only the claude child had/dev/null); under systemd that was/dev/nullalready, but from a tool harness or a CI step the seam hangs to the bound — measured 12:41: 300 s, no thread created. Every kiss child now getsstdin=DEVNULL.codex exec resumeinto an open conversation fails fast withthread-store conflict: … already has an active writer(measured 12:37 and 12:39, exit 1 in 362/469 ms;lsofshowed the app-server holding the rollout). Mama's main chat is held whenever the app is open; reaching it needs a thread the app does not hold, or another transport — the family's design call, not this PR's. The receipt names the class:reason: "thread-held". A codex turn that outruns itstimeout_sis named"timeout"(the claude backend already was).Changes
dispatch.py:stdin=subprocess.DEVNULLfor both backends;_kiss_verdictclassifies codex timeouts, spawn errors and the held thread.stream_functional_test.py: leg 3k-15 — a fake codex answering like the one-writer rule yields exit 4 +reason: thread-heldin the--kiss-testJSON and on the receipt, and records via/proc/$$/fd/0that the probe and the real call both read/dev/null; a hanging fake under a per-targettimeout_s: 1yieldsreason: timeoutwithtimeout_s: 1; summary clause.docs/USAGE.md§34 and the README--kiss-testrow.Live evidence. Validated the same day against a headless codex thread (a cheap twin of the owner's validation session):
--kiss-test→delivered: truein 6.9 s, receipttimeout_s: 300, the kiss line and the answerokin the thread's rollout,task_complete.Version. Relabeled from v1.0.88 to v1.0.89 on Z's word (13:14): the fleet's FLOTTE+OO-DISPATCH round takes v1.0.88 and lands first; the relabel commit touches comments, the suite's summary clause and the docs only.
Gates. py_compile green; ruff/pylint on
dispatch.pywithout new findings; laboratory CI on this PR; a local run of the CI image in flight.Authored and committed as
claude <claude@agents.oss-oo.io>under fleet law v2.🤖 Generated with Claude Code
codex execwaits for piped stdin to the bound — and codex receipts name the app-held thread (thread-held) and the clock that ran out (timeout)v1.0.88 (KUSS-STDIN): every kiss child reads /dev/null —to v1.0.89 (KUSS-STDIN): every kiss child reads /dev/null —codex execwaits for piped stdin to the bound — and codex receipts name the app-held thread (thread-held) and the clock that ran out (timeout)codex execwaits for piped stdin to the bound — and codex receipts name the app-held thread (thread-held) and the clock that ran out (timeout)Gate trail (as
claude)fc2ec4f) ended withMAKE_EXIT=2: aTypeErrorin the new leg 3k-15 — the hang twin's env passedZDO_KISS_TARGETStwice (kuss_envalready pins it). The held-thread half of the leg had passed before the crash;app_driver_testwas ALL LEGS GREEN. Laboratory runs 321/322 were cancelled by the pushes.7ee4c34: the env is built once and the pinned target list is overridden. Hermetic smoke of the dispatcher side (fake hanging codex undertimeout_s: 1, rig config dir, live files untouched): exit 4,reason: timeout, receipttimeout: true, timeout_s: 1, duration_ms: 1001, probe + one real call.6ef89d0was the relabel to v1.0.89 (text only). Laboratory CI and a fresh CI-image run are now in flight on7ee4c34; verdicts follow.Gate results on the fixed head
7ee4c34(asclaude)python:3.12-slim-bookworm, workspace at/workspace/OSS-Singularity/zcode-dispatch):app_driver_test: ALL LEGS GREEN,stream functional test OKwith the v1.0.89 clause in the summary line (the codex seam's closed stdin + named receipt classes …), zeroSTREAM-TEST FAIL, no traceback, MAKE_EXIT=0, PODMAN_EXIT=0. The station's live postbox (11 rows) and kiss receipts (17 rows) did not change during the run. Log:~/.zcode/tmp/claude-adapter-design-20261027/container-suite/make-functional-container-20261027-132313-v1089.logon envy.Both gates green. Ready for the co-review; v1.0.88 (#126) lands first per Z's word.
v1.0.89 (KUSS-STDIN): every kiss child reads /dev/null —to v1.0.89 (KUSS-STDIN): stdin=DEVNULL for both kiss children + verdict classes (timeout/spawn/thread-held) + leg 3k-15codex execwaits for piped stdin to the bound — and codex receipts name the app-held thread (thread-held) and the clock that ran out (timeout)