v0.4.0: oo-appserver read — the last turns of a thread, read without loading it; the release gate learns ephemeral threads #7
Loading…
Reference in a new issue
No description provided.
Delete branch "oss-oo/appserver-read"
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?
v0.4.0 —
oo-appserver read, and a release gate that knows ephemeral threadsThe read counterpart of
sendand the first building block of design C (docs/FAMILY-TOOLS-DESIGN.md, PR #6 — Z's yes on steer 40, 2026-10-28 01:01: build after the measurement points,readfirst).Measured before the build (read-only on the station's shared server,
read-measure-20261028-0105/in the evidence folder):thread/read {threadId}(metadata, 1 ms),thread/turns/list(2 ms) andthread/items/list(2 ms) on an UNLOADED 227 KB thread leavethread/loaded/listunchanged — none of them loads the thread, so a read never takes the thread store's writer lock, never locks the app out, never needs a heal. The metadata read is size-independent: 4 ms on the unloaded 719 MB thread. Shapes: Turn{id, rootTurnId, status, startedAt (s), completedAt (s), durationMs, error, items, itemsView}newest first (sortDirection: ascanditemsView: fullaccepted); items/list entries{item, turnId, startedAtMs, completedAtMs}with every item type; the summary view of turns/list carries the messages only.What ships
libexec/appserver_read.py:thread/read(statusnotLoaded/idle/active/systemError,ephemeral, preview, model, updated),thread/turns/list {limit}(newest N, printed oldest first,morewhen a next cursor exists),--items→thread/items/listper turn, pages followed up to 1000 items / 6 pages and stopped on an empty page or a repeated cursor (items_moresays so — a stuck server never turns a read into a hammer), commands / tool calls / web searches as a one-line gist, areasoningitem only as its size (--fulladds the raw items),--max-chars(2000). An ephemeral thread is read from its metadata alone. Text output reads like the conversation;--jsonis one object (the row's fields plusturns[]). Receipt rowkind: readper attempt (never the turns). Exit 0 read · 1 refused (unknown-thread,rpc-error,transport,bad-reply) · 2 usage · 4 door-closed (a read does not open the door) · 5 timeout (OO_APPSERVER_READ_S, 20 s). A read never calls resume/start/steer/fork (a test leg asserts it); a reply of the wrong shape reads as empty, anything that still raises ends in a classed receipt, never a traceback.appserver_send.py) reads each loaded thread's state withthread/readinstead ofthread/resume: the app's ephemeral threads (new empty chats) stay loaded after the app closes and answer neitherthread/resumenorthread/turns/list— one of them keptoo-appserver releaserefusing on the station on 2026-10-28 (heal-skipped · active-turn:01a17fa1…:error, found by the neighbour session). Idle ephemeral threads pass, an active one still counts as busy;thread/resumeonly on a server withoutthread/read(-32601).oo-appserver read, installer, CI step, VERSION 0.4.0; README: the read section, the gate text, known gaps (the plugin runs since v0.3.0 through the bridge; six thread tools), how the bundled tools' catalogue AND calls travel over the pipe and when a bridge receipt row appears, the ack-unknown advice now points atread, Parts table, backend contract.tests/fake_appserver.pylearnsthread/read(incl. ephemeral ids and a server without it),thread/items/listwith paging and two stuck-server shapes, item views and sort direction, scripted turn contents, hang and garbage knobs;tests/test_read.py23 legs,tests/test_send.py103 legs (three new gate legs).Live (read-only, 2026-10-28 01:10)
On the station: the unloaded 227 KB test thread (
notLoaded, 45 ms; with--items8 items incl. webSearch, 48 ms) and Luna's loaded app chat (idle, last 2 turns, 46 ms) —thread/loaded/listunchanged afterwards. Outputs inread-measure-20261028-0105/live-read-*.txt.Review
Fresh read-only subagent on
2f8bfe5(suites run, 30 adversarial reply shapes against the fake): 2 should-fix (reply shapes that escaped as a traceback without a receipt; items pages silently truncated), 5 low, 6 nits — all folded in649892btogether with the gate fix. Re-check of that delta (same reviewer, 7active_turninput shapes, 6 paging shapes): the gate change clean; one should-fix — the paging loop did not terminate on an empty page with a cursor (75k calls in 8 s on the fake) — plus two lows and a nit, all folded ine5d9fa3. Final confirmation ofe5d9fa3: "Nothing newly wrong found in the delta. Verdict: mergeable as is" (all six paging shapes terminate withitems_more, suites 23/23 and 103/103 run by the reviewer).0454145on top is a README wording fix (five → six thread tools). CI green on every commit (runs 28, 30, 31, 32). Review texts:v040-review/in the evidence folder.🤖 Generated with Claude Code
oo-appserver read— the last turns of a thread, read without loading it (design C, building block 1)v0.4.0:to v0.4.0:oo-appserver read— the last turns of a thread, read without loading it (design C, building block 1)oo-appserver read— the last turns of a thread, read without loading it; the release gate learns ephemeral threads