One result, three layers
The lineage of a shared experiment
How one QHGK thermal-conductivity result travels: the map derives ThermalConductivity[transport_model=qhgk] through typed edges, a lineage record pins the run that produced the value, and each layer has a URL. The graph below is the map's own export (python -m omai.mermaid), verbatim: 21 quantities, 37 edges.
1 · The derivation
Left to right: sources, the DFT chain, harmonic objects, scattering channels, transport. Indigo nodes are gauge-invariant observables, slate nodes are gauge-dependent scaffolding. The dashed amber edge is drawn illustratively: it shows what a learned shortcut would look like here, the generic non-authoritative surrogate pattern producing the same linewidth node while amortizing the third-order force constants away. No learned edge is declared on the map yet, so the tracer does not show it. Explore the same derivation live in the tracer.
Reproduce this exact graph anywhere markdown renders: python -m omai.mermaid "ThermalConductivity[transport_model=qhgk]" (source in the appendix). With the learned edge active, Φ₃ and its producing edge are bypassed at inference: the third-order wall, stated as graph topology.
2 · The lineage record
The map stores the claim; the lineage record pins how the number was made and where the bulk bytes live. This is the gallery example docs/examples/a-si-kappa-qhgk.json, rendered the way the playground's Lineage tab reads it. Raw artifacts never enter the store: the record carries pointers, and the bytes stay with their provider.
3 · The share surfaces
Same experiment, one URL per layer, one audience per URL. Public links carry the claim and its receipts; the provider link carries the bulk artifacts and re-execution, behind the provider's own access control.
| Surface | Link | Audience |
|---|---|---|
| Experiment permalink values + provenance quotes + lineage version |
experiment/#ref=paper:qhgk-2019-isaeva | public |
| Coverage on the map lights exactly the evidence-bearing quantities |
map/#experiment=paper:qhgk-2019-isaeva | public |
| The run at its provider spec, stages, artifacts, re-execution |
app.materialscodegraph.com/runs/a-si-qhgk | provider account |
The pattern generalizes: contribute values under one source.ref and the two public links exist; keep the bulk at any provider and the record's mirror points at it. Unpublished work stays on the gated layer until its owner promotes the values.
Appendix: the verbatim Mermaid export
flowchart LR HeatCapacity["HeatCapacity"]:::observable ThermalConductivity_transport_model_qhgk["ThermalConductivity[transport_model=qhgk]"]:::hidden Frequency["Frequency"]:::observable GroupVelocity["GroupVelocity"]:::hidden Linewidth_channel_total["Linewidth[channel=total]"]:::hidden Temperature["Temperature"]:::observable DynamicalMatrix["DynamicalMatrix"]:::observable Eigenvectors["Eigenvectors"]:::hidden Linewidth_channel_anharmonic_3ph["Linewidth[channel=anharmonic_3ph]"]:::hidden Linewidth_channel_isotope["Linewidth[channel=isotope]"]:::hidden Linewidth_channel_boundary["Linewidth[channel=boundary]"]:::hidden BareDynamicalMatrix["BareDynamicalMatrix"]:::observable BornCharges["BornCharges"]:::observable DielectricTensor["DielectricTensor"]:::observable ForceConstants_order_3["ForceConstants[order=3]"]:::observable IsotopeAbundances["IsotopeAbundances"]:::observable ForceConstants_order_2["ForceConstants[order=2]"]:::observable Potential["Potential"]:::observable Forces["Forces"]:::observable Structure["Structure"]:::observable TotalEnergy["TotalEnergy"]:::observable HeatCapacity -- "compute kappa transport model qhgk" --> ThermalConductivity_transport_model_qhgk Frequency -- "compute kappa transport model qhgk" --> ThermalConductivity_transport_model_qhgk GroupVelocity -- "compute kappa transport model qhgk" --> ThermalConductivity_transport_model_qhgk Linewidth_channel_total -- "compute kappa transport model qhgk" --> ThermalConductivity_transport_model_qhgk Temperature -- "compute kappa transport model qhgk" --> ThermalConductivity_transport_model_qhgk Frequency -- "compute heat capacity" --> HeatCapacity Temperature -- "compute heat capacity" --> HeatCapacity DynamicalMatrix -- "compute dispersion" --> Frequency DynamicalMatrix -- "compute group velocity" --> GroupVelocity Frequency -- "compute group velocity" --> GroupVelocity Eigenvectors -- "compute group velocity" --> GroupVelocity Linewidth_channel_anharmonic_3ph -- "sum linewidths" --> Linewidth_channel_total Linewidth_channel_isotope -- "sum linewidths" --> Linewidth_channel_total Linewidth_channel_boundary -- "sum linewidths" --> Linewidth_channel_total BareDynamicalMatrix -- "identity dm" --> DynamicalMatrix BareDynamicalMatrix -- "apply nac correction" --> DynamicalMatrix BornCharges -- "apply nac correction" --> DynamicalMatrix DielectricTensor -- "apply nac correction" --> DynamicalMatrix DynamicalMatrix -- "compute dispersion" --> Eigenvectors Frequency -- "compute linewidth channel anharmonic 3ph" --> Linewidth_channel_anharmonic_3ph Eigenvectors -- "compute linewidth channel anharmonic 3ph" --> Linewidth_channel_anharmonic_3ph ForceConstants_order_3 -- "compute linewidth channel anharmonic 3ph" --> Linewidth_channel_anharmonic_3ph Temperature -- "compute linewidth channel anharmonic 3ph" --> Linewidth_channel_anharmonic_3ph Frequency -- "compute isotope scattering" --> Linewidth_channel_isotope Eigenvectors -- "compute isotope scattering" --> Linewidth_channel_isotope IsotopeAbundances -- "compute isotope scattering" --> Linewidth_channel_isotope Frequency -- "compute boundary scattering" --> Linewidth_channel_boundary GroupVelocity -- "compute boundary scattering" --> Linewidth_channel_boundary ForceConstants_order_2 -- "compute dynamical matrix" --> BareDynamicalMatrix Potential -- "compute force constants order 3" --> ForceConstants_order_3 Potential -- "compute force constants order 2" --> ForceConstants_order_2 Forces -- "compute fc2 finite displacement" --> ForceConstants_order_2 Structure -- "compute fc2 finite displacement" --> ForceConstants_order_2 TotalEnergy -- "compute forces hf" --> Forces Structure -- "compute forces hf" --> Forces Structure -- "solve ground state" --> TotalEnergy Potential -- "solve ground state" --> TotalEnergy classDef observable fill:#eef2ff,stroke:#4f46e5,color:#312e81; classDef hidden fill:#f4f6fa,stroke:#7c89a0,color:#3d4149; classDef parameter fill:#f6f7f9,stroke:#94a3b8,color:#475569;
The DAG regenerates with python -m omai.mermaid; the lineage example is docs/examples/a-si-kappa-qhgk.json; the learned-shortcut layer is omai/operator/learned.py. Evidence stays its owner's: raw artifacts never enter the store (GOVERNANCE.md, Data ownership and fairness).