The provenance graph

How every result's origin is recorded, badged, and made tamper-evident.

Every result in Dalea can answer two questions: where did this come from? and what was made from this? The provenance graph is the record behind those answers — the chain raw file → import → query → code → report, captured by the server at the moment each change is enforced, never reconstructed from what a person or an AI says they did.

Runs and nodes

The graph has two kinds of things in it:

  • A run is one recorded activity — an Import, a Data pull, a Code execution, a Document edit, an Export, an External run, a Data release, a Package export. Runs are recorded in the same transaction as the change itself, so a mutation without its provenance cannot exist.
  • A node is an immutable version of something — file version 3, document snapshot 12, one version of a data object — pinned by a content hash. The graph never points at "the file"; it points at the exact bytes a run read or wrote.

Edges only ever connect runs to nodes: a run read these versions and wrote those. Walking edges backward from an artefact is its origin; walking forward from a source is its impact — the retraction question, "what do we have to re-examine if this input was wrong?"

plate_reader.csv
v1
Imported rows
247 rows
Query result
hashed
pk-summary.png
v1
reference_ranges.csv
v2 · candidate source
coarse edge into Code execution — recorded because it was open in the session, not because it was observed feeding the output
Code execution · AI agent — on behalf of Dr Okafor

The cell sealed with its code, its pulls, and its outputs. The dashed edge is coarse: reference_ranges.csv was open in the session, so it is recorded as a candidate source — over-approximated on purpose.

Query resultpk-summary.png · v1verifiedexact
reference_ranges.csv · v2pk-summary.png · v1declaredcoarse
A typical trail. Click each run to see who performed it and how each edge is graded. The dashed edge is a deliberate over-approximation.

Who did it

Every run records its actor twice over: the kind of actor — human, AI agent, or service — and the accountable person. An AI-performed run always renders as "AI agent — on behalf of you": the machine executed it, a named human answers for it. The two are never collapsed, which is what makes the review gate on exports possible (more below).

Dalea refuses to pretend all evidence is equal. Every edge carries two axes:

AxisValueMeaning
QualityverifiedA server observed this directly.
declaredRecorded from a producer's own statement, not independently observed.
inferredDerived by the platform from surrounding evidence.
PrecisionexactThis exact input was observed feeding this output.
coarseOver-approximated: a candidate source, not a confirmed one. Rendered dashed and badged.

Coarse edges deliberately over-approximate — if a file was merely open in a code session, it is recorded as a possible source. That is the safe direction for a recall: an impact walk may flag an artefact that was not really affected, but it will not miss one that was.

The same honesty applies to AI work. What an assistant claims its lineage was is stored separately from what the server observed — the two are compared, not merged, so a hallucinated citation can never masquerade as evidence.

What survives deletion

Provenance endures deletion. When a record is removed, its trail remains and the node stays matchable by content hash — the badge simply reads deleted. An absent trail, on the other hand, is not evidence that nothing happened: capture begins when the first run touches an entity.

Can the record itself be trusted

A lineage record is only as good as its resistance to tampering, so the graph carries its own evidence in two layers:

  • Structural checks re-derive every hash, chain link, and plan reference from the raw records — do the records agree with themselves?
  • Tamper evidence: every workspace's history is committed into an append-only transparency log (the same construction Certificate Transparency uses) with signed checkpoints, and those checkpoints are anchored outside Dalea's own control.

Structural does not equal truth — a consistent record could still have been consistently rewritten before anchoring. That is why every verification verdict carries an honest anchored flag: when it is false, no external attestation covers the segment yet, and the verdict says so rather than overclaiming.

A concrete example

A plate reader exports plate_reader.csv for study DLA-7. Dr Okafor imports it — 247 rows land, each carrying an origin pointer to that exact file version. Later she asks the assistant for a PK summary plot; the sandbox pulls the rows (query plan and result hash recorded), the cell seals, and pk-summary.png appears. Opening the plot's provenance shows the full chain back to the CSV — every hop verified, the one speculative input marked coarse — and an impact walk from the CSV would find the plot if the instrument's calibration were ever questioned.

What's next