# ORCHID phase registry (binary systems): schema

Registry version 0.1.0, release v2026.10. Generated by `tools/build_phase_registry.py` in the orchid-project.org repository
(deterministic; `--check` verifies the files). Licence: CC BY 4.0 (facts and citations; cite ORCHID and the sources
named in `cite_as`).

**Status.** Version 0 of the registry. Structure types are assigned only when the stored evidence supports an assignment under the stated tier rules (tiers A, B) or when the
assessment's crystallographic table states exactly one consistent structure (tier C, assessor-stated); everything else is
a review candidate. Paper labels come from the machine-extracted literature values (Version 1, machine-extracted).

## Files

| file | content |
|---|---|
| `registry.json` | compact index of every phase: `{dataset, registry_version, inputs, counts, cite_as, record_format: "compact", detail, phases[]}`; each row is a compact entry (below), without `tdb_definition` text or reference details |
| `systems/<SYS>.json` | full records of one binary system: `{system, release, phases[], structure_types{}, cite_as}`; `phases[]` are full phase entries (below, with `models[].tdb_definition`, `stability`, `references`) |
| `structure_types.json` | system-independent structure types, each with its sources |
| `registry.jsonld`, `context.jsonld` | the phases as a schema.org `DefinedTermSet` of `DefinedTerm`s (`citation`, `isBasedOn`; `additionalProperty`: one `PropertyValue` `orchid:tdbPhaseDefinition` per model with the verbatim statements) |
| `registry.csv` | one flat row per phase (`references_first5`: first five reference DOIs, `;`-joined; `tdb_first_model`, `tdb_phase_line`, `tdb_constituent_line`: file and verbatim PHASE / CONSTITUENT statements of the first model, models sorted by file and phase name) |
| `registry.parquet` | the CSV columns as a typed Parquet table (when built with pyarrow) |
| `structure_types.csv`, `structure_types.parquet` | one row per structure type: `id, prototype, prototype_spellings (;), strukturbericht, pearson, space_group_number, space_group_symbol, stoichiometry, verification, registry_phases, n_sources, source_citations (" \| "), source_dois (;)` |
| `parquet.json` | row counts, CSV SHA-256 and content SHA-256 (canonical JSON rows) of the Parquet tables |
| `pages/<SYS>.html`, `pages/<SYS>.md`, `pages/index.*` | static, JavaScript-free page per binary system (written by `tools/build_static_pages.py`): names, structure, stability, verbatim PHASE/CONSTITUENT statements, example DOIs, DefinedTerm JSON-LD |
| `review_queue.json` | phases with candidates but no assigned structure (`status: needs_review`) |
| `CONFLICTS.md` | same name -> different structures, name vs DFT, MP vs OQMD, model compositions, polymorph families |
| `index.json` | website search index (column arrays) |

Every file stays below 45 MB: the full records are split by system, and `registry.json` is the index over them.
To get all full records, read `registry.json` and then each distinct `detail` file (1 file per system).

## TDB provenance

`tdb_provenance.json`, `tdb_provenance.schema.json`, and `TDB_PROVENANCE.md` describe the generation method and
potential of registered TDB artifacts (initially the four Cu-Zr example models). Join `models[].sha256` to
`tdb_provenance.json` records by `sha256`. The `phaseforge` and `phaseforge_plus` tags distinguish the MLIP-only
and fitted workflows; `potential` identifies the model and checkpoint. Missing matches mean unknown provenance.
These metadata do not add review-only models to the phase registry or change thermodynamic values.
They are generated separately by `tools/build_tdb_provenance.py` from reviewed example sidecars.

## Compact entry (`registry.json`)

`{id, system, elements, preferred_name, status, structure, names[], tdb_names[], stoichiometry, counts, detail}`.
`structure` is `null` or `{structure_type, basis, tier, confidence, prototype, strukturbericht, pearson, space_group}`
(the full entry adds `label`, `caveats`, `dft`, `source`). `names` are the `name` strings of the full entry's `names`.
`counts`: `{models, models_with_tdb_definition, candidates, calculated_diagrams, stable_in_diagrams, literature_values,
literature_accepted_values, literature_papers, references_listed, total_papers}`. `detail`: the per-system file
(relative to `phases/`) holding the full entry with the same `id`.

## Phase entry (full, `systems/<SYS>.json`)

| field | meaning |
|---|---|
| `id` | `phase:<sorted lower-case elements>:<slug>`; the SGTE-corpus canonical id convention (token order folded, liquid synonyms, `#n` instance and non-distinguishing HT/LT tags dropped), so corpus ids carry over |
| `system`, `elements` | chemical system (upper-case elements joined by `-`) |
| `preferred_name` | the TDB phase name used by most assessments, counting independent PHASEs only (a DIS_PART disordered part, e.g. A2_BCC of B2_BCC, only when the phase has no independent model) |
| `status` | `assigned` (structure below), `needs_review` (no structure; `candidates` listed), `unresolved_no_candidates` |
| `structure` | `{structure_type, basis, tier, confidence, label, prototype, strukturbericht, pearson, space_group, caveats[], dft?}` or `null`. `basis`: `standard_name` (tier A: the TDB name encodes one structure and the model stoichiometry / sublattices and DFT do not contradict it), `dft_unique_match` (tier B, label "DFT-supported": a stoichiometric compound matching exactly one on-hull entry in both Materials Project and OQMD with the same space group, one structure type for that space group and stoichiometry, and no other phase of the system at that composition), `assessment_declared` (tier C, confidence `assessor-stated`: tiers A and B do not assign it, the Hallstedt 2025 crystallographic table (mmc2) rows for this TDB phase name whose listed compound has exactly this system's elements all give one structure type with Pearson symbol and space group, nothing in tiers A/B contradicts it (name structure token, DFT ground state, model stoichiometry/sublattices, order/disorder), and every model's fixed composition or two-sublattice site ratio equals the listed compound; `source` cites mmc2 with its rows), `liquid`, `gas`. Phases whose mmc2 rows disagree stay `needs_review` (`sgte_mmc2_rows_disagree`) |
| `candidates` | for unassigned phases: `{source, structure_type, prototype, strukturbericht, pearson, space_group, detail, material_id?, count?}`; `source` is `name_token`, `sgte_mmc2` (Hallstedt 2025 crystallographic table row for that name), `tdb_comment` (the compiler's comment above the PHASE line), `dft_mp` / `dft_oqmd` (on-hull entries at the composition or within the calculated homogeneity range), `dft_space_group_and_stoichiometry`, `literature_printed` (Pearson / prototype printed beside a label mapped to the phase) |
| `review_reasons` | why no structure was assigned (`off_stoichiometric_model`, `polymorph_family`, `no_on_hull_entry_in_*`, `mp_oqmd_space_groups_differ`, `dft_space_group_*_matches_n_structure_types`, `order_disorder_ambiguity`, `stoichiometry_contradicts_*`, `name_suggests_*_but_dft_space_group_*`, `unrecognised_name_tokens`, `no_structure_token`, ...) |
| `names` | every name: `{name, namespace, label, ...}`; namespaces `tdb` (`tdb:<file>:<NAME>`), `corpus` (`corpus:<canonical id>` and its older aliases), `system_alias` (`system_alias:<id>`: the conventional name of the phase in its system from tools/phase_aliases.json, with the handbook composition range and basis), `paper` (`paper:<doi>:<label>`, or `paper:sha256-<prefix>:<label>` for papers without DOI; `basis` says how the label was linked), `mp` / `oqmd` (only for assigned phases whose DFT entry was matched) |
| `models` | `{tdb, path, sha256, phase_name, type_code, sublattices[{site_ratio, constituents}], stoichiometric, composition, disordered_part?, disordered_part_of?, tdb_comment_structure?, tdb_definition}` |
| `models[].tdb_definition` | the model as written in the TDB (bundled, licence-confirmed files only). `verbatim`: `{phase, constituent, type_definitions[]}`, each `{line_start, line_end, text}` with the exact statement from its first character to the terminating `!` (only line breaks normalised to LF; bytes decoded as UTF-8, Latin-1 fallback, see `provenance.decoded_as`); `type_definitions` are every TYPE_DEFINITION whose code is in the phase's type code (`%` SEQ, magnetic `GES AMEND_PHASE_DESCRIPTION ... MAGNETIC`, `DIS_PART`, ...), each with `type_code` and `amends` (`@` = every phase with that code). `parsed`: `{phase_name, type_code, type_codes[], n_sublattices, site_ratios[], constituents[[...]] (spelling and `%` major-constituent markers as printed), major_constituents[[...]], magnetic {type_code, afm_factor, structure_fraction, line} or null, disordered_part, ordered_partner}`. `parameters`: counts only, never expressions: `{total, by_kind {G, L, TC, BM, BMAG, BMAGN, THETA, ...as spelled}, L_by_order, interaction_orders[] (orders of parameters with an interacting sublattice, any kind; a missing order counts as 0), endmember_G}`. `provenance`: `{path, sha256, decoded_as, website_url (https://orchid-project.org/data/<path>, when the site copy has the same SHA-256), github_url (orchid-calphad/orchid-pipeline blob, when that repository holds the same git blob)}`. Statement boundaries follow open-tdb `scripts/validate_tdb.py` (each span is checked to reduce to its statement); parameter keys follow `check_subsystem_compat.py` / `audit_tdb_models.py`. TDB text is never executed |
| `stoichiometry` | mole fractions when every model of the phase is stoichiometric and they agree |
| `stability` | per calculated diagram (pycalphad, SGTE TDB): `{tdb, tdb_sha256, diagram, status, stable, T_min_K, T_max_K, x_element, x_min, x_max, stable_at_top_of_range, calc_T_range_K?}` (calculated range 300-2500 K unless `calc_T_range_K` says otherwise); `x` is the mole fraction of `x_element` of the phase itself (boundary, invariant and single-phase grid points; 0.01 grid); `stable: false` = not stable anywhere in the calculated range |
| `literature` | `{values, accepted_values, papers}`: literature values whose phase list contains this phase |
| `corpus` | `{in_sgte_corpus, phase_mappings, mapping_basis, printed_labels}` from the SGTE-corpus phase-mapping records |
| `references`, `total_papers` | up to 10 example references, deterministic: assessments first, then papers with most values, ties by DOI: `{doi, citation, roles[], labels[], values, tdb_files?}`. Roles: `assessment that models this phase` (source of a TDB declaring it), `reports values for this phase`, `cited as the source of values for this phase`. Only DOIs present in ORCHID records |

## Structure type

`{id, prototype, prototype_spellings[], strukturbericht, pearson, space_group{number, symbol}, stoichiometry, sources[],
verification, registry_phases}`. Rows come from the Hallstedt 2025 crystallographic table (mmc2; CC BY 4.0) and a
small built-in table of standard types (Villars & Calvert; AFLOW prototype library). `verification` says which: rows
not confirmed by mmc2 carry `%TODO verify`. `st:liquid` and `st:gas` are definitions.

## Counts (this build)

```
{
 "systems": 1241,
 "phases": 10430,
 "names": 43269,
 "names_by_namespace": {
  "corpus": 10916,
  "mp": 677,
  "oqmd": 677,
  "paper": 8368,
  "system_alias": 75,
  "tdb": 22556
 },
 "structure_types": 1563,
 "structure_types_used": 711,
 "assigned_tier_A_standard_name": 6205,
 "assigned_tier_A_interstitial_compound": 23,
 "assigned_tier_B_dft_unique_match": 154,
 "assigned_tier_C_assessment_declared": 1247,
 "assigned_tier_C_tdb_comment_structure": 1,
 "liquid": 1304,
 "gas": 231,
 "no_prototype": 1265,
 "status": {
  "assigned": 9165,
  "needs_review": 1236,
  "unresolved_no_candidates": 29
 },
 "review_queue": 1236,
 "review_reasons": {
  "assessment_declared_blocked_by": 199,
  "assessment_declared_compound_differs_from_model_composition": 37,
  "assessment_declared_compound_differs_from_site_ratios": 20,
  "assessment_declared_conflicts_with_dft": 2,
  "assessment_declared_order_disorder_ambiguity": 2,
  "dft_space_group_140_matches_3_structure_types": 1,
  "dft_space_group_141_matches_3_structure_types": 1,
  "dft_space_group_14_matches_0_structure_types": 1,
  "dft_space_group_14_matches_2_structure_types": 1,
  "dft_space_group_15_matches_0_structure_types": 1,
  "dft_space_group_164_matches_2_structure_types": 1,
  "dft_space_group_194_matches_2_structure_types": 1,
  "dft_space_group_198_matches_2_structure_types": 1,
  "dft_space_group_216_matches_2_structure_types": 1,
  "dft_space_group_227_matches_0_structure_types": 1,
  "dft_space_group_55_matches_0_structure_types": 1,
  "dft_space_group_58_matches_0_structure_types": 1,
  "dft_space_group_58_matches_3_structure_types": 1,
  "dft_space_group_61_matches_3_structure_types": 1,
  "dft_space_group_62_matches_0_structure_types": 1,
  "dft_space_group_62_matches_2_structure_types": 2,
  "dft_space_group_62_matches_5_structure_types": 1,
  "dft_space_group_62_matches_6_structure_types": 1,
  "dft_space_group_63_matches_4_structure_types": 1,
  "dft_space_group_63_matches_5_structure_types": 1,
  "dft_space_group_63_matches_6_structure_types": 2,
  "dft_space_group_64_matches_2_structure_types": 1,
  "dft_space_group_74_matches_2_structure_types": 3,
  "lattice_word_FCC_contradicts_B1": 2,
  "lattice_word_HCP_contradicts_D024": 2,
  "models_disagree_on_composition": 69,
  "mp_oqmd_space_groups_differ": 15,
  "name_has_descriptive_tokens": 251,
  "name_suggests_B18_but_dft_space_group_63": 1,
  "name_suggests_B27_but_dft_space_group_63": 1,
  "name_suggests_B2_but_dft_space_group_62": 1,
  "name_suggests_B2_but_dft_space_group_63": 1,
  "name_suggests_B33_but_dft_space_group_166": 1,
  "name_suggests_C15_but_dft_space_group_194": 3,
  "name_suggests_C34_but_dft_space_group_28": 1,
  "name_suggests_C36_but_dft_space_group_166": 1,
  "name_suggests_C54_but_dft_space_group_63": 1,
  "name_suggests_D0_22_but_dft_space_group_225": 1,
  "name_suggests_L1_2_but_dft_space_group_194": 1,
  "no_bundled_tdb_model": 3,
  "no_on_hull_entry_in_both": 269,
  "no_on_hull_entry_in_mp": 37,
  "no_on_hull_entry_in_oqmd": 3,
  "no_structure_token": 1021,
  "off_stoichiometric_model": 153,
  "order_disorder_ambiguity": 78,
  "polymorph_family": 180,
  "several_structure_tokens": 1,
  "sgte_mmc2_row_disagrees_with_dft": 37,
  "sgte_mmc2_row_disagrees_with_name": 35,
  "sgte_mmc2_row_incomplete": 338,
  "sgte_mmc2_rows_disagree": 113,
  "site_ratios_contradict_A_f": 1,
  "site_ratios_contradict_B1": 1,
  "site_ratios_contradict_B32": 1,
  "site_ratios_contradict_B8_2": 5,
  "site_ratios_contradict_B_b": 3,
  "site_ratios_contradict_C11_a": 8,
  "site_ratios_contradict_C15_b": 2,
  "site_ratios_contradict_C19": 1,
  "site_ratios_contradict_C32": 1,
  "site_ratios_contradict_D1_a": 1,
  "site_ratios_contradict_D1_g": 3,
  "site_ratios_contradict_D8_3": 1,
  "site_ratios_contradict_D8_5": 1,
  "site_ratios_contradict_D8_8": 1,
  "site_ratios_contradict_D8_i": 1,
  "site_ratios_contradict_H1_1": 1,
  "stoichiometry_contradicts_A15": 13,
  "stoichiometry_contradicts_B2": 7,
  "stoichiometry_contradicts_B27": 2,
  "stoichiometry_contradicts_B31": 1,
  "stoichiometry_contradicts_B32": 2,
  "stoichiometry_contradicts_B8_1": 3,
  "stoichiometry_contradicts_B8_2": 7,
  "stoichiometry_contradicts_C1": 1,
  "stoichiometry_contradicts_C14": 6,
  "stoichiometry_contradicts_C15": 3,
  "stoichiometry_contradicts_C15_b": 7,
  "stoichiometry_contradicts_C16": 7,
  "stoichiometry_contradicts_C18": 3,
  "stoichiometry_contradicts_C32": 23,
  "stoichiometry_contradicts_C36": 6,
  "stoichiometry_contradicts_C37": 5,
  "stoichiometry_contradicts_C38": 5,
  "stoichiometry_contradicts_C49": 2,
  "stoichiometry_contradicts_C_b": 3,
  "stoichiometry_contradicts_C_c": 5,
  "stoichiometry_contradicts_D0_18": 1,
  "stoichiometry_contradicts_D0_19": 3,
  "stoichiometry_contradicts_D0_22": 2,
  "stoichiometry_contradicts_D0_23": 1,
  "stoichiometry_contradicts_D0_24": 1,
  "stoichiometry_contradicts_D0_3": 3,
  "stoichiometry_contradicts_D1_3": 11,
  "stoichiometry_contradicts_D1_g": 3,
  "stoichiometry_contradicts_D2_3": 3,
  "stoichiometry_contradicts_D2_b": 2,
  "stoichiometry_contradicts_D2_d": 2,
  "stoichiometry_contradicts_D5_13": 1,
  "stoichiometry_contradicts_D5_3": 4,
  "stoichiometry_contradicts_D7_b": 1,
  "stoichiometry_contradicts_D8_10": 3,
  "stoichiometry_contradicts_D8_11": 1,
  "stoichiometry_contradicts_D8_2": 2,
  "stoichiometry_contradicts_D8_3": 5,
  "stoichiometry_contradicts_D8_5": 10,
  "stoichiometry_contradicts_D8_a": 3,
  "stoichiometry_contradicts_D8_b": 3,
  "stoichiometry_contradicts_D8_f": 1,
  "stoichiometry_contradicts_D8_i": 2,
  "stoichiometry_contradicts_L1_0": 2,
  "stoichiometry_contradicts_L1_2": 4,
  "structure_token_is_also_a_formula": 3,
  "tdb_comment_names_own_prototype_Cu2P7_not_Ni7Zr2 (CuP-11Hin.tdb)": 1,
  "unary_composition": 32,
  "unrecognised_name_tokens": 79
 },
 "conflicts": {
  "name_dft_disagreement": 13,
  "polymorph_families": 242,
  "model_composition_disagreement": 69,
  "same_name_different_structures": 112,
  "mp_oqmd_disagreement": 80,
  "assessment_declared_blocked": 711,
  "merged_orphan_ids": 66,
  "tdb_comment_contradicts_assignment": 2
 },
 "tdb_models": 22556,
 "phases_with_models": 10427,
 "corpus_only_phases": 69,
 "corpus_phase_mappings_linked": 3209,
 "phases_with_literature_values": 4974,
 "literature_phase_mentions_linked": 70685,
 "literature_phase_mentions_unlinked": 26992,
 "phases_with_references": 9903,
 "references_listed": 25038,
 "distinct_reference_dois": 3070,
 "phases_with_stability": 8549,
 "tdb_definitions": {
  "models_with_definition": 22556,
  "phases_with_definitions": 10427,
  "constituent_statements": 22556,
  "type_definition_references": 31598,
  "distinct_type_definition_statements": 8392,
  "magnetic_models": 8722,
  "ordered_with_disordered_part": 289,
  "parameters_counted": 75290,
  "parameters_not_matched_to_a_declared_phase": 217,
  "files_with_type_codes_without_definition": {
   "A": 4,
   "B": 4
  },
  "with_website_url": 22556,
  "with_github_url": 22556
 }
}
```
