Skip to content

Ingest

Ingest is the verb: the CLI pushes a local run to a dash instance. It is not a third repo, not a PyPI package, and not a dash process named ingest/.

Piece Where
This page source of truth for the HTTP + JSON shape
Sender argos.client.Client in argospy (argos run --dash)
Receiver dash POST /api/runs* (no separate ingest service)

Browser list APIs (GET /api/runs pagination) are not ingest. See Architecture.

sequenceDiagram
  participant CLI as argos CLI
  participant Dash as dash
  CLI->>Dash: POST /api/runs
  Dash-->>CLI: sid plus browse url
  loop while running
    CLI->>Dash: POST /api/runs/sid/events
  end
  CLI->>Dash: POST /api/runs/sid/finish
  CLI->>Dash: POST /api/runs/sid/files

All four calls send Authorization: Bearer <ARGOS_TOKEN> and X-Argos-Ingest: 1. Breaking field changes increment the header and the dash GET /report-view/manifest.json ingest field together.

Who ran it

source.actor is required: the person who started the run (login). runner remains the machine hostname.

Origin source.kind actor
Acahti / Woodpecker acahti ACAHTI_USER, then CI_COMMIT_AUTHOR
Local CLI cli ARGOS_ACTOR, then USER / LOGNAME, then getpass.getuser()

Do not prefer git commit author over the person who triggered or reran the pipeline.

source also carries pipeline provenance when kind is acahti: repo, sha, ref, pipeline, job, step, url, note.

Endpoints

Base URL is ARGOS_DASH_URL with no trailing slash.

POST /api/runs

Creates a run. Body includes stamp, slug, mode, env, duration, queries, packs, source, runner, cases, status.

Response includes sid (12-char public id) and url ({ARGOS_DASH_URL}/runs/{sid}). The CLI prints:

argos <sid>
dash {url}

POST /api/runs/{sid}/events

Body: { "events": [ ... ] }. Each event is one public JSON object from the local events.jsonl line (no result object).

POST /api/runs/{sid}/finish

Body: { "report": { ... }, "status": "pass" | "fail" }. report is report.json.

POST /api/runs/{sid}/files

Body: { "path": "relative/path", "text": "..." }. Text files from the run dir (skip events.jsonl, skip binaries, skip large files).

argos push <out-dir> --dash replays create → events → finish → files for a finished directory.

Not ingest

Public GET /report-view/* is not ingest. It has no Bearer token. The CLI uses it only to build local report.html. Shape and cache rules: Architecture.

flowchart LR
  cli["argos CLI"]
  dash["dash"]
  cache["~/.argos/report-view"]
  html["out/report.html"]
  cli -->|"GET /report-view/manifest.json"| dash
  cli -->|"GET viewer.js css"| dash
  dash --> cache --> html