Login
Documentation
Login

Node. A repository with OCX's hook installed, on the host that runs its work, named by the repository's server-code. Its repository is made new or cloned over HTTP: a copy, or a clone made from a file, keeps the original's server-code, and two repositories that share one would both act on the same runs. A node writes its reports as its node user, a Fossil user of its own, and OCX's status lists the runners and limits it offers.

A node learns of an artifact only when the artifact reaches its repository. On the repository's server, that is as soon as it arrives. A node on any other host, such as a build host with its own clone, learns of a run only when it syncs its clone; how often it syncs is its own choice. Its reports reach the server the next time it syncs. Fossil tells the node of each arrival through its after-receive hook, run from Fossil's backoffice. A write made on the repository itself starts no backoffice, so OCX's tools run it after writing. So a run written with OCX's run tool on the node is acted on at once. The hook is only a signal: the repository is the truth. When a node starts, and whenever it may have missed a signal, it reads its repository for runs that name it and have no ended, answers lost for each whose program is not running, and starts any that never started.

Tools. OCX's tools write these artifacts, and perform runs by hand, for people and programs, as a convenience, never a requirement: the artifacts are the standard. Anyone may write the same artifacts by other means, such as a verdict with fossil tag add or a run as a forum post, and they count exactly the same. The tools:

The command line and the web page offer every tool but attach, which needs a shell; programs reach the tools through MCP or the command line. Each tool checks its input before anything happens, and naming a field it does not know is refused. Every tool takes dry_run, which checks everything and writes nothing, and every tool answers in one shape: {"tool", "dry_run", "log", "result", "stopped"}. result is the hash of what it wrote, and stopped says why it did not, naming the field at fault.

Versions. Every OCX message carries "ocx": 1. Version 1 may gain new keys and stay version 1, and a key never changes its meaning or its name. An unknown key in limits may be a limit the node cannot enforce, so the node answers the run ended, refused. An unknown key anywhere else is ignored: the message is acted on as if the key were not there. A node also refuses a run whose runner it does not offer, and ignores a message whose kind it does not know. A change that breaks these rules makes version 2, and a version 1 node ignores version 2 messages.