Contributor documentation

This guide is for people changing or maintaining auton. For installation, configuration and everyday use, start with the user documentation.

Roadmap

See ROADMAP.md for the current Auton product roadmap, including the TUI, multi-autond support, multi-target execution and dedicated website.

Development

AUTON_PACKAGE=autond python -m pip install '.[auth,oidc,redis]' -r requirements-auton.txt
python .github/scripts/check-test-collection.py --runner unittest tests
python -m unittest discover -s tests -v
AUTON_PACKAGE=autond python -m pip wheel --no-deps . -w dist/server
AUTON_PACKAGE=auton python -m pip wheel --no-deps . -w dist/client

The test suite includes real subprocesses and an HTTP client/server integration with authentication. CI runs Python 3.10, 3.11, 3.12 and 3.13 and builds the Docker image. Docker builds track the checkout’s code; dependencies and the base image are not fully locked, so builds are not yet bit-for-bit reproducible.

Application services and remote client

auton.classes.jobs.JobService owns admission, endpoint ACLs, job ownership, capacity, completed-result expiry and output cursors. It accepts explicit job values and an authenticated principal, plus injected endpoint/queue mappings, clock, lock and object factory. It does not import the HTTP module, CLI or DWho. The principal must come from a trusted authentication adapter; it is not a field accepted from a remote job payload. HTTP continues to use the existing routes, schemas, response fields and status codes.

Workers read JobObject.owner and get_payload(), recheck the endpoint ACL before execution, and release input data on completion. Submitted payloads are copied so later mutation of the request cannot change a queued command. Command timeouts, process-group cleanup, bounded output, retention defaults and legacy/explicit output cursors are unchanged.

The historical auton.classes.plugins.AutonEPTObject import, constructor and callback remain available. For older plugins, get_request() returns a detached compatibility snapshot exposing payload_params(), get_server_vars() (the HTTP_AUTH_USER value), get_headers() and query_params(). It is not a live HTTP request: socket access, request identity and arbitrary server variables are not retained. Headers/query values are copied when the old constructor receives a request; service-created jobs supply only execution payload and principal. New plugins should use owner and get_payload(). Input views are cleared when a worker completes a job, as the old request reference was.

JobModule retains its helper names, result builder and mutable limit/object attributes as compatibility delegates. Its HTTP handlers now call JobService directly; overriding a private helper no longer intercepts admission. Customize the service or its adapters instead. Direct calls to the old submission helper now also enforce admission policy. Each initialized module owns its lock. Environment names and output offsets must match the complete value, including rejecting a trailing newline.

Build verification

Auton 1.3.x supports Python 3.10–3.13. CI compares wheel bytes from two separate build directories with the same source, tool versions and SOURCE_DATE_EPOCH. This checks reproducibility within that environment; it does not claim identical artifacts across arbitrary operating systems or dependency versions.

Documentation rules

Keep user instructions and contributor material separate. The repository engineering requirements define the review and validation rules. Preserve user-facing compatibility, security and recovery guidance when moving internal explanations.

Shared terminal primitives

The curses client uses dwho.tui.put for bounded drawing and dwho.cli for terminal preflight and JSON output. Auton retains remote-text sanitization, navigation and execution preparation. Both optional renderers are checked for an interactive terminal before importing their implementation or loading credentials. Client services remain independent of DWho presentation and daemon modules; the installed-wheel check exercises this boundary outside the checkout.