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.

observable hidden (gauge-dependent) learned shortcut / amortized input

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.

ThermalConductivity[transport_model=qhgk] lineage fd750cf110e7…faf8f3 · node_uid 8932e3cbadef…f9567b
material
a-Si (4096-atom cell)
value
κ = 2.2 W/(m K)
conditions
T = room temperature
hyperparameters
potential = Tersoff · supercell = 4096 atoms · template = qhgk_kappa
execution
code = kaldo
artifacts
FORCE_CONSTANTS role: force_constants
mirror
app.materialscodegraph.com/runs/a-si-qhgk provider: materialscodegraph

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.

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).