robots
Robot-kind repo extras — robot card
GET /v1/robots/{owner}/{repo}/card
Get a robot card
The structured robot description (DOF, actuators, mass, limits, MJCF pointer) of a robot-kind repo. 404 until a card is set; 409 problem if the repo kind is not robot.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
owner | path | Handle | Repo owner handle (username or org slug). |
repo | path | Slug | Repo slug. |
Responses
PUT /v1/robots/{owner}/{repo}/card
Set a robot card
Full replace of the robot card on a robot-kind repo. mjcf_path is the repo-relative path of the MJCF file (upload it via the files endpoints first). 409 problem if the repo kind is not robot. Since M17a the hub checks what it stores: a mjcf_path that is not a file of this repo, an MJCF that does not parse, referenced assets or includes missing from the repo, interface.joint_order names that are not 1-DoF joints of the MJCF, and an interface.base that contradicts the model's free joint are each a 422 whose errors[] carry the same code (as type) that validateRobot reports — rejected with the reason, never repaired.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
owner | path | Handle | Repo owner handle (username or org slug). |
repo | path | Slug | Repo slug. |
Request body
| Field | Type | Description |
|---|---|---|
dof | integer | |
actuators | array of Actuator | |
mass_kg | number | null | |
limits | map of JointLimits | null | |
mjcf_path | FilePath | null | |
description_md | string | null | |
interface | EmbodimentInterface | null | Omit or null to store a card without one. When |
validation | RobotValidationRecord | null | UI2: the report |
thumbnail_paths | RobotThumbnailPaths | null | UIV2-thumbs: both paths must already be files of this repo, with a |
Responses
| Status | Description | Body |
|---|---|---|
200 | Stored robot card. | RobotCard |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
422 | Request failed validation. | Problem |
POST /v1/robots/{owner}/{repo}/validate
Validate a robot card against the repo's MJCF, without writing
The report an agent iterates against before putRobotCard: is mjcf_path a file of this repo, does it parse, is every asset it references (and every <include>) in the repo, is every interface.joint_order name a 1-DoF joint of the model, does interface.base agree with the presence of a free joint. card is the candidate (the body of a putRobotCard you have not sent yet); omit it, or send null, to validate the stored card. Nothing is written, and the answer is 200 whether or not the card is good — ok and each check's status say which. A candidate the RobotCardPut schema itself refuses comes back as card.schema failures in the same report rather than as a 422. The checks are static (hardened XML parsing only; the server never runs MuJoCo): lucen robot validate adds the dynamic ones on the user's machine and reports in the same shape. Every fail here is a 422 from putRobotCard, with the same code as the error's type. A repo the caller cannot see is 404, never 403; 409 if the repo kind is not robot; 404 when card is omitted and no card is stored.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
owner | path | Handle | Repo owner handle (username or org slug). |
repo | path | Slug | Repo slug. |
Request body
| Field | Type | Description |
|---|---|---|
card | RobotCardPut | null |
Responses
| Status | Description | Body |
|---|---|---|
200 | The validation report (for a good card and a bad one alike). | RobotValidationReport |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
422 | Request failed validation. | Problem |
503 | A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace). | Problem |
GET /v1/robot-checks
List hosted robot checks
Checks the caller can see — ones they created, or on a robot repo they can write — newest first. A lucen robot worker polls this with status=queued&executor=worker. No check is public. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
robot_repo | query | string |
|
status | query | JobStatus | |
executor | query | RobotCheckJobExecutor | |
limit | query | integer | Page size. |
cursor | query | string | Opaque cursor from the previous page's |
Responses
| Status | Description | Body |
|---|---|---|
200 | A page of checks. | RobotCheckJobPage |
401 | Missing or invalid credentials. | Problem |
422 | Request failed validation. | Problem |
POST /v1/robot-checks
Queue a hosted check of a robot repo's model
The hub never runs MuJoCo, so a robot someone dropped into the browser is checked by a job: it pulls the repo, runs the CLI's own lucen robot init on entry with exactly the answers given here (no defaults are filled in: control_hz and action always, base for a URDF), then lucen robot validate, and uploads the draft card, the converted MJCF when entry is a URDF, and the report. Nothing is written to the repo until a person calls publishRobotCheck.
The repo must be a robot repo the caller can write (an invisible one is 404, a visible one you cannot write 403, the wrong kind 409), and entry must be one of its files (422). The file list is snapshotted now (path, sha256, size): the job checks exactly those bytes, and publishing refuses once any of them changed. executor omitted means the hub's hosted executor (modal) when this deployment has one, else worker — a lucen robot worker the owner runs; modal on a deployment without it is 503 and nothing is recorded. A check is unpriced CPU (priced: false), and each account (L0: a user, across all their keys and sessions) may create ROBOT_CHECK_DAILY_QUOTA of them a day (429 with Retry-After and X-Robot-Check-Quota-*). (R1)
Hosted execution (L0, K2). The hosted executor runs for owners in the deployment's HOSTED_OWNERS (default lucen; * = everyone) and, for every other account, inside its monthly hosted allowance (HOSTED_ALLOWANCE_USD, HardwareTierList.hosting.allowance): an omitted executor means modal while the check's reservation fits the allowance, else worker; an explicit modal that does not fit is 403 (forbidden.hosted_allowance, naming what is left and when it resets), and with the allowance at 0 it is L0's 403 (forbidden.hosted_owner). A hosted check is billed at the robot_check function's CPU host from claim to finish (cost_usd, one ledger row).
A model check (K2, kind: model). The same job, for a policy: model.repo is a model repo the caller can write (the private draft), robot_repo the robot it is checked against (read access; omitted, the job only READS the policy — its stamp, graph widths, an import's revision, size and parameter count — so a robot can be suggested from the stamp, listRepos?interface_fingerprint=, before anything is checked or copied), and entry either an ONNX in the draft or a checkpoint directory (lucen_manifest.json + policy/, or a LeRobot config.json + model.safetensors) — or, instead of entry, model.hf_repo (org/name[@revision]): the job fetches that public LeRobot policy from Hugging Face over HTTPS (size-capped, revision and licence recorded). The job reads the policy's stamped contract and checks it against the robot's interface (intake.embodiment: match, mismatch with the differing fields, unstamped); for an unstamped policy it derives the contract from the interface — the one lucen model stamp implementation — asking only for what the robot cannot know (model.obs and model.control_class; a blocking needs_you when missing). The report's codes: manifest.stamped, onnx.shapes, contract.joint_order, contract.action, contract.observation, contract.rate, embodiment.fingerprint (plus source.hf for an import), each with a one-sentence message and data.verdict (match, mismatch, stamped, derived). Publish (publishRobotCheck) links the (stamped) files into the draft — or into repo, created for the caller — sets the model's meta (robot, control class, embodiment fingerprint) and, with smoke, queues the smoke sim gate as the publisher.
Request body
| Field | Type | Description |
|---|---|---|
kind | RobotCheckKind | |
robot_repo | string |
|
model | ModelCheckRequest | null | Required for |
entry | FilePath | null | A robot check: the model file (required). A model check: the ONNX or checkpoint directory in |
base | string | null | Required when |
control_hz | number | null | The rate policies run at on the REAL robot ( |
action | RobotCheckJobAction | null | Required for a robot check. |
options | RobotCheckJobOptions | null | |
executor | RobotCheckJobExecutor | null | Null or absent — |
drop | RobotCheckJobDrop | null |
Responses
| Status | Description | Body |
|---|---|---|
201 | Check queued. | RobotCheckJob |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
422 | Request failed validation. | Problem |
429 | This account's daily check quota is spent. | Problem |
503 | A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace). | Problem |
GET /v1/robot-checks/{check_id}
Get a hosted robot check
Status, the tail of the job's log, and once it finished: the report (engine: mujoco, the CLI's shape and codes), the draft (the model's facts, needs_you with severities, the card the hub read back from the uploaded robot_card.json), the artifacts with presigned 1-hour downloads, and whether it can be published (publish_blockers). Visible to its creator and to anyone who can write the robot repo; anything else is 404. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
check_id | path | Id | Hosted robot check id ( |
Responses
| Status | Description | Body |
|---|---|---|
200 | The check. | RobotCheckJob |
401 | Missing or invalid credentials. | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
POST /v1/robot-checks/{check_id}/claim
Claim a queued check (robot check worker protocol)
Compare-and-set queued → running, exactly like claimRollout: one caller wins, everyone else gets 409 naming the holder. Records the claiming credential — presignRobotCheckArtifacts and reportRobotCheck are 409 from any other. The response is the check with sources: the snapshot's files with presigned 1-hour GETs of exactly the bytes that were snapshotted, so the job needs no access to the repo at all — it never reads it through the repo's routes and can never write to it. No lease: a dead worker leaves the check running until someone cancels it. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
check_id | path | Id | Hosted robot check id ( |
Request body
| Field | Type | Description |
|---|---|---|
worker | string | A name for the worker, recorded as |
Responses
| Status | Description | Body |
|---|---|---|
200 | Claimed; the check with its sources. | RobotCheckJob |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
422 | Request failed validation. | Problem |
POST /v1/robot-checks/{check_id}/artifacts
Presign uploads for a running check's artifacts
One presigned PUT per artifact under robot-checks/{check_id}/files/ (outside the content-addressed blobs/ prefix). name is the repo path the artifact would take if the check is published, and only four kinds are accepted: robot_card.json, the MJCF converted from a URDF entry (the entry with an .xml suffix), meshes under meshes/, and the two stills thumbnail.png / thumbnail-dark.png (UIV2-thumbs; publish sets thumbnail_paths only when both were reported). Only a running check may presign, and only the credential that claimed it (409 otherwise); URLs live 1 h. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
check_id | path | Id | Hosted robot check id ( |
Request body
| Field | Type | Description |
|---|---|---|
files | array of RobotCheckJobArtifactRequest |
Responses
| Status | Description | Body |
|---|---|---|
200 | One presigned PUT per requested artifact. | RobotCheckJobArtifactsResponse |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
422 | Request failed validation. | Problem |
POST /v1/robot-checks/{check_id}/report
Report progress or the result of a claimed check
The worker's one write path after claimRobotCheck: the check must be running and the caller the credential that claimed it (409 otherwise). log_chunk (≤ 256 KiB) is stored under robot-checks/{id}/logs/ and appended to the row's log tail. The terminal succeeded report carries the report (the CLI's, engine: mujoco), the draft summary and the artifacts it uploaded; the hub then hashes every artifact itself and reads robot_card.json back (≤ 1 MiB, a JSON object), so what a person later publishes is pinned to the bytes that were checked. succeeded means the job produced a verdict — a model that fails to compile is a succeeded check whose report fails; failed means the job itself broke. A named artifact that was never uploaded, or is not one of the three accepted kinds, is 422. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
check_id | path | Id | Hosted robot check id ( |
Request body
| Field | Type | Description |
|---|---|---|
status | RobotCheckJobReportStatus | null | |
log_chunk | string | null | Output since the last report, ≤ 256 KiB of UTF-8. |
error | string | null | Why the job broke; expected with |
report | RobotValidationReport | null | The verdict, |
draft | RobotCheckJobDraftIn | null | |
artifacts | array of RobotCheckJobArtifactRef | The artifacts uploaded through |
engine | object | null |
|
intake | ModelIntake | null | A model check's findings (K2) — required with |
Responses
| Status | Description | Body |
|---|---|---|
200 | Recorded; the check as it now stands. | RobotCheckJob |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
413 | A log chunk is over its size limit. | Problem |
422 | Request failed validation. | Problem |
POST /v1/robot-checks/{check_id}/publish
Publish a check's draft card into the robot repo, as the caller
What only a person (or a key acting for them) does, never the job: link the check's artifacts into the robot repo and store the drafted card with the job's report as its validation record, under the caller's principal — write on the robot repo is required (403 otherwise; 404 if the check or the repo is invisible), and the key that claimed the check is 403 even with write: a worker proposes, a person publishes. The hub copies each artifact into content-addressed storage and hashes the copy; a digest that differs from the one it recorded at the terminal report is 409, so the bytes linked are the bytes that were checked. The card then goes through putRobotCard's own static checks and is refused with their reasons (422, nothing linked). 409 also when the check is not succeeded, was already published, its report failed, its draft lists a blocking needs_you item, or a snapshotted file of the repo changed since the check was queued — any edit means a new check. visibility in the body is applied to the repo last (the drop creates it private), audited as a repo.update. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
check_id | path | Id | Hosted robot check id ( |
Request body
| Field | Type | Description |
|---|---|---|
visibility | Visibility | null | |
repo | string | null | A model check only (K2): publish into this model repo instead of the draft — created for the caller when it does not exist (the caller must be able to create under that owner), |
smoke | boolean | A model check only (K2): after publishing, queue the |
Responses
| Status | Description | Body |
|---|---|---|
200 | Published; the check with | RobotCheckJob |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
422 | Request failed validation. | Problem |
503 | A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace). | Problem |
POST /v1/robot-checks/{check_id}/cancel
Cancel a hosted robot check
A queued or running check becomes canceled in this request; a modal check's call is terminated first (502 if Modal refuses, and nothing changes). A worker check's worker learns on its next report (409). A terminal check is 409. (R1)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
check_id | path | Id | Hosted robot check id ( |
Responses
| Status | Description | Body |
|---|---|---|
202 | Canceled; the check as it now stands. | RobotCheckJob |
401 | Missing or invalid credentials. | Problem |
403 | Authenticated but not allowed (visibility, membership or scope). | Problem |
404 | Resource not found (or hidden from the caller). | Problem |
409 | State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...). | Problem |
502 | Modal refused to terminate the call; nothing changed. | Problem |
Schemas (37)
The schemas these operations reach before any other tag’s do. A type that links elsewhere is rendered on that tag’s page.
RobotCardPut
| Field | Type | Description |
|---|---|---|
dof | integer | |
actuators | array of Actuator | |
mass_kg | number | null | |
limits | map of JointLimits | null | |
mjcf_path | FilePath | null | |
description_md | string | null | |
interface | EmbodimentInterface | null | Omit or null to store a card without one. When |
validation | RobotValidationRecord | null | UI2: the report |
thumbnail_paths | RobotThumbnailPaths | null | UIV2-thumbs: both paths must already be files of this repo, with a |
RobotValidateRequest
What to validate. card is a candidate RobotCardPut; null or absent means the card already stored on the repo.
| Field | Type | Description |
|---|---|---|
card | RobotCardPut | null |
RobotValidationReport
| Field | Type | Description |
|---|---|---|
ok | boolean | True when no check failed. |
grade | string | The worst status among the checks that ran. |
source | string | |
engine | string |
|
mjcf_path | string | null | |
interface_fingerprint | string | null | What the card's |
model | RobotModelSummary | null | |
checks | array of RobotValidationCheck |
JobStatus
Job lifecycle: queued → running → one of succeeded | failed | canceled (terminal).
RobotCheckJobExecutor
Where a hosted robot check runs (R1). worker — it waits queued for a lucen robot worker the owner runs. modal — on a deployment that names a deployed Modal app (MODAL_APP_NAME), the hub spawns the app's robot_check function (the CPU rollout image) after the commit; the container claims and reports like any worker, with a key minted for the check (K2). modal is billed at the function's CPU host from claim to finish; worker is unpriced.
RobotCheckJobPage
| Field | Type | Description |
|---|---|---|
items | array of RobotCheckJob | |
next_cursor | string | null |
RobotCheckJobCreate
| Field | Type | Description |
|---|---|---|
kind | RobotCheckKind | |
robot_repo | string |
|
model | ModelCheckRequest | null | Required for |
entry | FilePath | null | A robot check: the model file (required). A model check: the ONNX or checkpoint directory in |
base | string | null | Required when |
control_hz | number | null | The rate policies run at on the REAL robot ( |
action | RobotCheckJobAction | null | Required for a robot check. |
options | RobotCheckJobOptions | null | |
executor | RobotCheckJobExecutor | null | Null or absent — |
drop | RobotCheckJobDrop | null |
RobotCheckJob
| Field | Type | Description |
|---|---|---|
id | Id | |
kind | RobotCheckKind | |
status | JobStatus | |
robot_repo | RepoRef | null | The robot — null for a model check that only reads (K2). |
model_repo | RepoRef | null | A model check's draft repo (K2); publishing writes there unless |
model | ModelCheckRequest | null | A model check's request, as given. |
intake | ModelIntake | null | |
entry | FilePath | |
base | string | null | |
control_hz | number | null | Null for a model check. |
action | RobotCheckJobAction | null | Null for a model check. |
options | RobotCheckJobOptions | null | |
executor | RobotCheckJobExecutor | |
created_by | UserPublic | null | |
created_at | string (date-time) | |
started_at | string (date-time) | null (date-time) | |
finished_at | string (date-time) | null (date-time) | |
claimed_by | string | null | |
claimed_at | string (date-time) | null (date-time) | |
heartbeat_at | string (date-time) | null (date-time) | |
modal_call_id | string | null | |
dispatched_at | string (date-time) | null (date-time) | |
error | string | null | |
sources_count | integer | Files in the snapshot. |
sources_bytes | integer | Their total size. |
drop | RobotCheckJobDrop | null | |
sources | array of RobotCheckJobSource | null | The snapshot, with presigned GETs — on the claim response only. |
log_tail | string | null | The last ≤ 64 KiB of the job's log. |
report | RobotValidationReport | null | |
draft | RobotCheckJobDraft | null | |
engine | object | null | |
artifacts | array of RobotCheckJobArtifactOut | |
publish_blockers | array of string | Why Publish would be refused right now, one sentence each; empty means it would go through (the hub's static checks still run). |
published | RobotCheckJobPublished | null | |
priced | boolean | True for a |
cost_usd | number | null | What a finished |
RobotCheckJobClaim
| Field | Type | Description |
|---|---|---|
worker | string | A name for the worker, recorded as |
RobotCheckJobArtifactsRequest
| Field | Type | Description |
|---|---|---|
files | array of RobotCheckJobArtifactRequest |
RobotCheckJobArtifactsResponse
| Field | Type | Description |
|---|---|---|
uploads | array of RobotCheckJobArtifactUpload |
RobotCheckJobReport
One progress or terminal report from a robot check worker. Every field is optional.
| Field | Type | Description |
|---|---|---|
status | RobotCheckJobReportStatus | null | |
log_chunk | string | null | Output since the last report, ≤ 256 KiB of UTF-8. |
error | string | null | Why the job broke; expected with |
report | RobotValidationReport | null | The verdict, |
draft | RobotCheckJobDraftIn | null | |
artifacts | array of RobotCheckJobArtifactRef | The artifacts uploaded through |
engine | object | null |
|
intake | ModelIntake | null | A model check's findings (K2) — required with |
RobotCheckJobPublish
How to publish. visibility is applied to the repo in the same request (the drop creates it private); null or absent keeps it as it is.
| Field | Type | Description |
|---|---|---|
visibility | Visibility | null | |
repo | string | null | A model check only (K2): publish into this model repo instead of the draft — created for the caller when it does not exist (the caller must be able to create under that owner), |
smoke | boolean | A model check only (K2): after publishing, queue the |
RobotModelSummary
What the validator read out of the MJCF (null fields when it could not).
| Field | Type | Description |
|---|---|---|
model | string | null | |
base | string | null | |
joints | array of string | Named 1-DoF (hinge / slide) joints, in document order. |
files | array of string | Repo paths the model needs — the MJCF, its includes and its assets. |
keyframes | array of string |
RobotCheckKind
What a check is about (K2). robot — a robot repo's model (R1); model — a policy in a model repo, checked against a robot.
ModelCheckRequest
The model-check half of a check (K2, kind: model).
| Field | Type | Description |
|---|---|---|
repo | string |
|
hf_repo | string | null | Import instead of upload: a public Hugging Face LeRobot policy ( |
control_class | ControlClass | null | For a policy whose manifest does not say: the layer to stamp (default |
obs | ModelCheckObs | null |
RobotCheckJobAction
What one action vector means — lucen robot init --action.
RobotCheckJobOptions
The optional lucen robot init flags, one field per flag; an absent or null field is a flag not passed. Nothing is defaulted here — init writes what it writes without the flag (a needs_you entry, or a value derived from the model).
| Field | Type | Description |
|---|---|---|
action_scale | number | null |
|
action_clip | number | null |
|
kp | number | null |
|
kd | number | null |
|
armature | number | null |
|
friction_loss | number | null |
|
proprioception | array of string | null |
|
command | string | null |
|
default_pose | map of number | null |
|
discard_visual | boolean |
|
RobotCheckJobDrop
What the browser read out of the dropped zip and what its upload moved — the client's own account, stored with the check so the page can print it again. The hub never sees the zip and checks none of this; the snapshot (sources_count, sources_bytes) is the hub's own view.
| Field | Type | Description |
|---|---|---|
filename | string | |
zip_bytes | integer | |
files | integer | Entries kept (after the refused ones). |
unpacked_bytes | integer | |
entry_candidates | array of FilePath | |
refused | array of RobotCheckJobRefusedPath | |
uploaded_files | integer | |
uploaded_bytes | integer | |
deduped_files | integer | Files the hub already held ( |
deduped_bytes | integer |
RepoRef
Lightweight repo pointer used inside jobs.
| Field | Type | Description |
|---|---|---|
id | Id | |
full_name | string |
ModelIntake
What a model check found (K2): the policy, its contract against the robot, and — for an import — its source.
| Field | Type | Description |
|---|---|---|
policy_path | string | null | The ONNX path or checkpoint directory publishing writes. |
policy_format | string | null |
|
policy_type | string | null |
|
embodiment | string |
|
stamped_by_check | boolean | The policy was unstamped and this check derived its contract from the interface. |
differing | array of ModelIntakeDifference | |
control_class | ControlClass | null | |
embodiment_fingerprint | string | null | The fingerprint the (stamped) manifest records. |
robot_fingerprint | string | null | The robot's |
summary | string | null | The contract in one line (joints, observation, action, rate, chunk). |
manifest | object | null | The policy's manifest as read (or as the check derived it). |
graph | object | null | An ONNX's graph widths, |
params | integer | null | Parameter count, from the weights' safetensors header. |
source | ModelIntakeSource | null |
RobotCheckJobSource
One file of the repo as it was when the check was queued.
RobotCheckJobDraft
The draft as the page shows it: the worker's summary of the model, and — read by the hub from the uploaded robot_card.json — the card that Publish would store and its needs_you.
| Field | Type | Description |
|---|---|---|
source | string | null | |
mjcf_path | string | null | |
model | object | null | |
derived | array of string | |
conversion | object | null | |
card | object | null |
|
needs_you | array of RobotCheckJobNeed | |
blocking | integer | How many |
RobotCheckJobArtifactOut
RobotCheckJobPublished
| Field | Type | Description |
|---|---|---|
at | string (date-time) | |
by | UserPublic | null | |
interface_fingerprint | string | null | |
visibility | Visibility | |
files | array of RobotCheckJobPublishedFile | |
smoke_rollout_id | string | null | The |
smoke_error | string | null | Why that gate could not be queued (the publish still stands). |
RobotCheckJobArtifactRequest
| Field | Type | Description |
|---|---|---|
name | FilePath | |
size | integer | Bytes (≤ 256 MiB; a single PUT). |
content_type | string |
|
RobotCheckJobArtifactUpload
| Field | Type | Description |
|---|---|---|
name | string | |
key | StorageKey | |
url | string (uri) | Presigned PUT; send exactly |
expires_at | string (date-time) |
RobotCheckJobReportStatus
The only transitions a worker may make — running → succeeded | failed.
RobotCheckJobDraftIn
What lucen robot init said about the model, as the worker reports it.
| Field | Type | Description |
|---|---|---|
source | string | |
mjcf_path | string | null | |
model | object | null |
|
derived | array of string | |
conversion | object | null | For a URDF — the MJCF written, what the conversion dropped, meshes copied. |
RobotCheckJobArtifactRef
| Field | Type | Description |
|---|---|---|
path | FilePath |
ModelCheckObs
What only the person knows about an unstamped ONNX — the observation blocks it consumes, in order (lucen model stamp --obs). Everything robot-side is derived from the robot's interface.
| Field | Type | Description |
|---|---|---|
blocks | array of string | |
scales | object | null | |
cycle_time_s | number | null | |
profile | string | null | |
task | object | null |
RobotCheckJobRefusedPath
| Field | Type | Description |
|---|---|---|
path | string | |
reason | string |
ModelIntakeDifference
| Field | Type | Description |
|---|---|---|
field | string | |
policy | any | What the policy's contract says. |
robot | any | What the robot's interface derives. |
ModelIntakeSource
Where an imported policy came from (an HF import).
| Field | Type | Description |
|---|---|---|
hf_repo | string | null | |
revision | string | null | The commit the import read (resolved from a branch or tag). |
license | string | null | |
files | array of string | |
bytes | integer | |
skipped | array of string | Files of the source repo left out, with why. |
RobotCheckJobNeed
One open question lucen robot init left in the draft (needs_you), verbatim.
| Field | Type | Description |
|---|---|---|
field | string | |
severity | string |
|
why | string | |
names | array of string | |
suggestion | string | null |
RobotCheckJobPublishedFile
StorageKey
Object storage key (internal, content-addressed for blobs). Not a URL; presign endpoints turn keys into URLs.