Glossary¶
The terms you'll see all over the docs and the lc command output, in
plain language.
ASTRA¶
Agentic Schema for Transparent Research Analysis.
The schema lightcone-cli is built around. ASTRA's job is to capture an
analysis's inputs, outputs, and methodological decisions in a single
file (astra.yaml); lightcone-cli's job is to execute that spec
reproducibly. ASTRA ships separately as the astra-tools package, and
its astra CLI handles the spec itself (validation, universe
management, evidence verification).
astra.yaml¶
Your project's spec file. The single source of truth — every input,
output, recipe, and decision is declared here. Sub-analyses can be
nested via analyses: references.
Recipe¶
A short shell command that produces an output. Lives inside an output's
recipe: block in astra.yaml. Outputs declare what they depend on,
and the recipe references those dependencies through placeholders:
outputs:
- id: fit
inputs: [points]
decisions: [outliers]
recipe:
command: python src/fit.py --points {inputs.points} --outliers {decisions.outliers} --output {output}
Decision¶
A methodological choice with multiple defensible options (e.g.
"standardize features?", "what outlier threshold?"). Decisions live
in the decisions: section of astra.yaml along with their default,
their options, and their rationale.
Universe¶
One specific selection of decision values. Universes live as YAML
files in universes/ (e.g. universes/baseline.yaml,
universes/robust.yaml). Each universe materializes its results
to its own directory: results/<universe>/<output_id>.<format>.
Sub-analysis¶
A nested ASTRA analysis with its own inputs, outputs, and decisions,
referenced from a parent's analyses: section. lc materializes a flat
analysis: an output id it cannot name a file from is refused, so a
nested spec is not buildable today.
Materialize¶
Making the outputs the spec declares: lc materialize runs each recipe
in dependency order and commits every result as it lands. Idempotent —
a second run remakes only what is stale, and a run with nothing to do
says so and touches nothing.
Manifest¶
The per-output sidecar JSON file, .<output_id>.manifest.json beside
the output itself, recording what produced the
output: the recipe, the decisions, definition_version,
env_version, data_version, input_versions, the git commit the
run started at, the engine version, what enforcement actually ran
(hermeticity), and — for containerized runs — the image. Written by
the run, read by lc status and lc materialize --check; kept in
plain git so a clone can classify a whole project without fetching any
data.
definition_version¶
A hash of an output's recipe and decision values — the fingerprint of
"what is this output?". When it drifts, the output is stale and the
next run remakes it.
env_version¶
A hash of the environment — the lock file's bytes, the pinned
interpreter, the install settings, and the image declaration if any.
Deliberately not part of an output's definition: when it drifts, the
output is behind, reported and left alone.
data_version¶
A content hash of an output's bytes (or of a declared input). For a
file it is a plain sha256 — the number sha256sum prints, and the one
the RO-Crate publishes; a directory-valued declared input is hashed
tree-wise and framed, so the two can never collide. This is what flows
downstream: a dependent is remade when an input's data_version
changed, and a rebuild that comes out byte-identical stops the cascade
right there.
input_versions¶
Inside a manifest, a map from each declared input to the
data_version it had when the output was made. Comparing it against
the present is how a change to an input cascades.
current / behind / stale¶
The three states an output can be in:
current— exactly what the spec asks for, made from these inputs, under this environment. Nothing to do.behind— still what the spec asks for; only the environment moved since it was made. Reported, left alone;--refreshremakes.stale— contradicts the project: the spec defines it differently, an input changed, or the output was edited by hand. Remade on the next run.
Direct mode / containerized mode¶
How recipes execute, derived from the project rather than configured.
Direct mode (the default): the project's .venv, under the OS sandbox.
Containerized mode: declaring [tool.lightcone.image] in
pyproject.toml switches the project over — recipes run inside a
content-addressed image built from that declaration.
Image¶
Containerized mode's execution world: a base (digest-pinned), optional
apt packages, and the pinned interpreter. Built by lc build and saved
into the repository as versioned content, so clones obtain the
exact bytes through git-annex with no registry involved. Execution pins
the image's content id, never a tag.
Runtime¶
The OCI tool that executes containers. Detected, never configured:
podman-hpc, then podman, then docker (skipped if its daemon is
down).
Sandbox¶
The isolation every recipe and every lc run command executes under —
Landlock on Linux, Seatbelt on macOS, the container boundary in
containerized mode. The project tree is read-only apart from the
directory the output being made lands in; undeclared tools don't
execute. Each
manifest's hermeticity field records what was actually enforced, and
a host with no mechanism says so rather than pretending.
git-annex¶
How the repository carries data: git holds history and small files,
git-annex holds the bytes of data/ and results/ behind ordinary
git commands. You never run git-annex yourself except to fetch bytes
on a clone (git annex get), and lc materialize even does that for
declared inputs it needs.
Run record¶
The commit message a materialized output is saved under — a
machine-readable record of the exact command that made it, in a format
datalad rerun can replay: it reconstructs the engine, the project
environment, and the sandbox, and remakes the output from its spec.
Your git log is the build log.
RO-Crate¶
The publication view. Declare a license under [project] in
pyproject.toml and every materialize maintains
ro-crate-metadata.json — a machine-readable description of the
project, its outputs, and the runs that produced them, following the
Provenance Run Crate profile. The repository is the crate; deposit is
git archive.
Prior insight¶
A piece of evidence from the literature that informs a decision.
Lives in the prior_insights: section of astra.yaml, with a claim
and verifiable evidence (DOI plus exact quote).
Finding¶
A conclusion drawn from the analysis (as opposed to a prior insight,
which comes into it). Findings live in the findings: section and
cite specific outputs as evidence — the bridge between materialized
results and the eventual paper.