AlgoJudge documentation0.1
Domain model

Runner

A registered evaluation worker, as the Server records it — self-registered, approved by hand, and almost entirely self-reported.

A Runner row is a registered evaluation worker. A Runner self-registers its key and an administrator approves it; nothing is evaluated before approval.

This page is the Server's record of a Runner. The machine itself is documented in Runner, and the contract it speaks in Protocol.

FieldMeaning
Namereported by the Runner. Not unique, and not an identifier
Productwhich Runner implementation this is
Version
PublicKeypublic half of the immutable key pair, as presented at registration
Fingerprintstable digest of the public key; unique, and what an administrator approves
StatePendingApproval, Approved, Revoked
ProblemTypesthe problem types this Runner can evaluate, as discriminators
Externalwhether this Runner sends submissions outside the installation
Tagsfree labels an operator sets, e.g. gpu, slow
Addresswhere the Server saw the connection come from
Machinehost facts the panel shows and the Server never interprets. Opaque jsonb
RegisteredAt, ApprovedAt, RevokedAt, LastSeenAt
CompletedJobshow many jobs this Runner has carried to a verdict
Fileswhat the Runner uploaded about itself — runner.log, lscpu.txt

The key is immutable, so there is no rotation

It is generated once at the Runner's first start. A leaked key is revoked, the Runner's configuration is rolled, and it registers again as a new identity.

Almost everything here is self-reported

The two exceptions are Tags, which an operator sets, and Address, which the Server reads from the connection. A machine is a bad witness to how it is reached, and a Runner behind a proxy that reported its own address would record the proxy.

Address is correct only when forwarded headers are configured. Without that, every Runner behind a proxy records the proxy.

Matching work to a worker

ProblemTypes is a column because the Server matches jobs against it, and it matches by equality only. It never parses a discriminator, never compares versions, never decides that one type is like another. That is what keeps "adding a problem type is not a Server change" true while still letting the Server route work.

External lets the Server pair work with a worker on one comparison of two booleans: external problems go to external Runners and local problems do not, without the Server ever reading a problem type or knowing which service is on the other end. It also gives an administrator the fact at approval time, which is when it matters.

It is reported by the Runner and taken at its word. A Runner that lied about it would be a Runner an administrator approved — a trust decision made earlier, and by a person.

Tags and routing

Tags are free text an operator sets. An activity or a series names the tags whose Runners may judge its submissions, and the pairing rule — the two lists must share at least one entry, with an empty list on either side read as default — is stated once, in Tags and routing.

Authentication

A Runner is not a user and holds no cookie. It authenticates with its own token: it presents a fingerprint, receives a single-use challenge that expires, signs it, and receives a token with a lifetime.

The Runner is then authorized against the job it holds, not against being a Runner. Without that, any approved Runner could fetch every test package in the installation.

On this page