From 7f8fdd8e868fb5fad71eacdf0c4fd0a97fe9c6ee Mon Sep 17 00:00:00 2001 From: t Date: Mon, 17 Aug 2026 23:27:46 -0600 Subject: jobs: only settle may close; e2e proof harness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close_all no longer joins pump threads from the owner thread: job:close() joins the pump, and a pump parked in an owner-posted tool batch needs the owner back in the loop, so a synchronous close at turn_end could deadlock. close_all now cancels everything, closes only already-settled jobs, and defers the rest to their own settle; jobs.active() ignores closing children so the next turn can resume the id. e2e/ reconstructs the end-to-end proof against the real binary in print mode: a scripted fixture protocol plays primary and children, and the suite asserts the product surface from process output and JSONL bytes on disk — parallel batch with unknown-agent error, lane identity, tool inheritance minus subagents.*, resume with manifest re-identification, workflow diamond, sandbox fan-out with an ephemeral structured worker, catalog round-trip, child-store isolation from the session picker. mise run e2e; check stays independent. --- e2e/fixture.lua | 363 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 363 insertions(+) create mode 100644 e2e/fixture.lua (limited to 'e2e/fixture.lua') diff --git a/e2e/fixture.lua b/e2e/fixture.lua new file mode 100644 index 0000000..a2926ff --- /dev/null +++ b/e2e/fixture.lua @@ -0,0 +1,363 @@ +-- The e2e fixture extension: one scripted provider protocol plus the handful of +-- tools a child may call. Loaded by e2e/run.lua into a throwaway config layer, +-- never by a real session. +-- +-- The protocol interprets a prompt as a tiny script, so one fixture plays every +-- role the scenarios need — primary and child alike. The first LINE of the most +-- recent plain user prompt is the script; everything after it is data (a +-- workflow step's prompt arrives with its dependency sections appended, and +-- those must not be parsed). The script is split on ";;" into one step per +-- round, a round being one assistant message already in the conversation, and a +-- step may hold several "&&"-joined commands. +-- +-- say answer with +-- tool call a tool (repeat with && for one batch) +-- results answer with every tool result in the last user message +-- find "found " / "missing " over the history +-- tag