Repository navigation
v0.13.0
The browser-substrate ADR-0129 integration (the kernel owns every process), with the synchronous-child ownership
below. Each feature is additive and announced by a marker a host checks before it relies on it, so an engine without
it is never asked; none changes the lowered text, so the prepared format stays tabnode-prepared-7. Cut as 0.13.0, a
minor release, for the new public run options and exports.
- The engine as a client of the kernel's store, its citations naming ADR-0006 on this line.
- A run's fd 0 can be a reader over the host kernel's own pipe (
RunOptions.stdinReader; markerRUN_STDIN_READER). - A process's signal listeners are its dispositions, told to its registry (
ProcessRegistry.disposition; marker
RUN_SIGNAL_DISPOSITIONS); a listener's name reaches the disposition words only as a signal's own name. - Behaviour change for a host whose registry sets
ProcessRegistry.kernel: a host-run child'skill()now goes
through the kernel registry (the kernel delivers it), where 0.12.0 ended the run itself. A kernel refusal (EPERM)
is thrown out ofChildProcess.kill(), and SIGSTOP and SIGCONT are delivered as SIGTERM (no stop is modelled
yet). A host that does not setkernelis unchanged. - A run handed its own tree gets that tree's shell at routing, and
run()readsRunOptions.filesystemasrunNode
does (markerRUN_LINE_FILESYSTEM);tokenOfPidtakes the caller's pid namespace. - A run's initial environment is published with its identity, for the process table's
/proc/<pid>/environ. - A TCP server or Unix-socket listener passed over IPC is a duplicate of its socket, as SCM_RIGHTS duplicates a
descriptor: before, it crossed as the sender's own instance, so the sender's close ended the receiver's listener.
Either member accepts, in turn, and the socket listens until its last member closes; a bound, not-yet-listening
socket (cluster's shared handle) keeps its bound name in the copy. A connection reaching a socket no member serves
yet waits in the socket's accept queue, owned by no run until a member accepts it; the last listener's close
resets what is queued (ECONNRESET), as Linux does. For a Pipe, the binder's close takes the socket's path with its
node, as libuv and Linux do, and a passed copy accepts only by descriptor; a socket in the abstract namespace has
no node, so its name passes at a close to a member still open. - Let a trusted synchronous child host explicitly own all children of the current
run, including image scripts and Node programs the engine can resolve. Use the
existing admitted host process/wait path before Worker fallback; preserve
other embeddings' classification, precise refusals and raw Worker restriction.
Honor explicit host image-handoff/end evidence before synthesizing a local
launch failure; an admitted child still reaps its actual kernel end.
The paired page retires its original descriptor release lease separately
from an image's own close/end, including when Node receives a second channel.
Source only; paired host integration, release and application qualification
remain separate (substrate Articles 1/5/6/8/9).