appserver kiss backend: argv contract drift — the dispatcher calls send --socket … --thread … (stdin line), the transport implements send <thread> "<line>" --json; the backend has never delivered live #135
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Contract drift between the
appserverkiss backend and the transport it calls (found 2026-10-28 during the owner's "check skill + contract" round)Dispatcher (v1.0.94/v1.0.95,
kiss_appserver.py:148-155): requires asocketpath that exists on disk (socket-missingotherwise) and spawnsTransport (oo-appserver v0.5.1,
libexec/appserver_send.py:741-754, README "Backend contract"):positional
threadandline, no--socket, no--thread, no stdin line; the receipt comes only with--json. The shared server listens onws://127.0.0.1:8937— there is no control socket on disk any more (the~/.codex/app-server-control/app-server-control.sockof the config example does not exist), so a correctly configured target already dies at the pre-spawn check, and with any existing path the spawn dies at argparse (unrecognized arguments: --socket … --thread …, exit 2) → the backend maps it torefused exit-2. Consequence: theappserverbackend has never delivered live; today's fleet kisses to Mama/Luna still ride thecodexbackend (codex exec resume), which the app's held threads refuse asthread-held— exactly the gap the appserver backend was built to close (the owner's wake-up round for Mama needs it).Suggested fix (one contract, two repos — the README contract is the implemented one):
kiss_appserver.py: argv[bin, "send", thread, line, "--json", "--from", "oo-dispatch", "--min-interval", "0", "--wait", str(timeout_s)](line as an argument — it is a milestone, not a secret; or keep stdin only if oo-appserver grows a--stdinflag), drop thesocketfield/check (replace the liveness pre-check withGET http://127.0.0.1:8937/readyzor skip —sendnamesdoor-closed/held-by-appitself), map the transport'sclassas documented (delivered-headless/delivered-app-start→ delivered,delivered-app-steer→ steered,held-by-app,heal-skipped,door-closed,loading,ack-unknown,refused,timeout).bin+thread(nosocket); the suite's fake transport must mirror the real argv (it currently proves the wrong contract).--threadand--stdinparity flags (the Claude house would ship that in v0.5.2) — but--sockethas no meaning for a TCP server and should go either way.Evidence: both sources quoted above;
oo-appserver send --helpon the station;~/.zcode/tmp/claude-adapter-design-20261027/NACHTWACHE.md2026-10-28 16:2x. Related: #134 (claude-session accepted ≠ delivered), release v1.0.95, oo-appserver README "Backend contract (forappserverin oo-dispatch)".🤖 Generated with Claude Code