nx_job_run LIVE · PROVEN

Async job runner — eats the async-fetch >15 s edge-timeout debt, the good-form way. Deployed end-to-end over the sovereign MCP + mgmt API, zero shell.

The debt it eats

Long-running *_research_fetch organs (web crawls of 14+ URLs over sovereign TLS) run longer than the edge's ~15 s synchronous window. Called directly over /mcp, the client times out and gets HTML mid-fetch even though the organ completes server-side. nx_job_run forks the organ detached, redirects its output to a scratch file, and returns a job handle immediately — so the caller never blocks and the crawl finishes async.

Safe by construction — four fail-closed gates

1 · Family
Launches only *research_fetch* names — cannot reach write/control organs (nx_store_put, nx_fs_write, nx_mgmt) at all.
2 · Vetted
Name must resolve to a GREEN elf in tool_allowlist.conf — same trust boundary as nx_plan_run; never an arbitrary path.
3 · No pin-bypass
Refuses pinned rows — can never run a pinned elf with non-pinned args.
4 · Scratch-only
Out-file confined to /tmp/ with no .. — writes land only on disposable scratch. Never bricks (rule 26).

Live proof — nx_plan_run jobtest, 2026-07-19

1  rc=0  JOB-STARTED pid=8037 tool=nx_supply_research_fetch
              elf=/…/nx_supply_research_fetch.elf out=/tmp/nxjob_supply.out
2  rc=6  REFUSED: only *research_fetch* organs are async-launchable

Step 1: resolved name → GREEN elf, passed the family gate, forked, returned immediately. Step 2: the guard refused a non-fetch tool by construction.

The async child ran to completion — /tmp/nxjob_supply.out

== A. SUPPLY CHAIN & LOGISTICS ==
nishi-hs sh+kex=37ms certloop=967ms fin=1ms
nishi-xfer recv=43ms dec=56ms cl-stop
https://en.wikipedia.org/wiki/Supply_chain
… Supply_chain_management · Global_value_chain · Logistics · Containerization
   · Incoterms · Freight_transport · Container_ship · Port
== B. TRADE, TARIFFS & TAX ==
… Tariff · Section_301 · Trade_war · Customs · Dumping

A ~15 s, 14+ URL sovereign-TLS crawl — exactly the workload that used to time out — completed after the caller already returned.

Honest findings (filed, not swept)

SeqSevFinding
1915Fetch organs crawl but SAVE-FAIL — response bodies not persisted (every URL status= bytes=). Affects all fetch-derived atlas/catalog/market data. Root = fetch save path, not the runner.
1923Runner is fetch-scoped via a substring gate; the broader async-safe set needs a data-driven job-launch allowlist (rule 11).

Where it lives

MCP toolnx_job_run — registered, allowlist hot-read, swept into tools/list
Binarynx_job_run.elf · 14 610 B · built + promoted on-NAS via /api
Workflowrunnable via nx_plan_run · frontier F350 (platform, done)
RACIlane jobrunner — R/A engineer · C ops · I operator
Sourcebuildroot/runtime/_hdl_build/nx_job_run.nx · imports nx_syscalls only
Sovereign Nishi ecosystem · built + deployed + proven over MCP + mgmt API, zero shell · never-brick (rule 26) intact · served by nishi-substrate-v2.